/*
* LanguageCodes.java
*
* Version: $Revision: 3738 $
*
* Date: $Date: 2009-04-24 04:32:12 +0000 (Fri, 24 Apr 2009) $
*
* Copyright (c) 2002-2009, The DSpace Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* - Neither the name of the DSpace Foundation nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*/
package org.dspace.text.filter;
import java.util.HashMap;
import java.util.Map;
/**
* Define languages - both as IANA and ISO639-2 codes
*
* @author Graham Triggs
*/
public class Language
{
public final String IANA;
public final String ISO639_1;
public final String ISO639_2;
public static Language AFRIKAANS = Language.create("af", "af", "afr");
public static Language ALBANIAN = Language.create("sq", "sq", "alb");
public static Language ARABIC = Language.create("ar", "ar", "ara");
public static Language BALUCHI = Language.create("bal", "", "bal");
public static Language BASQUE = Language.create("eu", "", "baq");
public static Language BRAHUI = Language.create("", "", "");
public static Language CATALAN = Language.create("ca", "ca", "cat");
public static Language CLASSICAL_GREEK = Language.create("grc", "", "grc");
public static Language DANISH = Language.create("da", "da", "dan");
public static Language DUTCH = Language.create("nl", "ni", "dut");
public static Language ENGLISH = Language.create("en", "en", "eng");
public static Language ESPERANTO = Language.create("eo", "eo", "epo");
public static Language FRENCH = Language.create("fr", "fr", "fre");
public static Language FRISIAN = Language.create("fy", "fy", "fri");
public static Language GALICIAN = Language.create("gl", "gl", "glg");
public static Language GERMAN = Language.create("de", "de", "ger");
public static Language GREEK = Language.create("el", "el", "gre");
public static Language HAWAIIAN = Language.create("haw", "", "haw");
public static Language HEBREW = Language.create("he", "he", "heb");
public static Language HUNGARIAN = Language.create("hu", "hu", "hun");
public static Language ICELANDIC = Language.create("is", "is", "ice");
public static Language IRISH = Language.create("ga", "ga", "gle");
public static Language ITALIAN = Language.create("it", "it", "ita");
public static Language MALAGASY = Language.create("mg", "mg", "mlg");
public static Language MALTESE = Language.create("mt", "mt", "mlt");
public static Language NEAPOLITAN_ITALIAN = Language.create("nap", "", "nap");
public static Language NORWEGIAN = Language.create("no", "no", "nor");
public static Language PORTUGUESE = Language.create("pt", "pt", "por");
public static Language PANJABI = Language.create("pa", "pa", "pan");
public static Language PERSIAN = Language.create("fa", "fa", "per");
public static Language PROVENCAL = Language.create("pro", "", "pro");
public static Language PROVENCAL_OCCITAN = Language.create("oc", "oc", "oci");
public static Language ROMANIAN = Language.create("ro", "ro", "rum");
public static Language SCOTS = Language.create("sco", "", "sco");
public static Language SCOTTISH_GAELIC = Language.create("gd", "gd", "gae");
public static Language SHETLAND_ENGLISH = Language.create("", "", "");
public static Language SPANISH = Language.create("es", "es", "spa");
public static Language SWEDISH = Language.create("sv", "sv", "swe");
public static Language TAGALOG = Language.create("tl", "tl", "tgl");
public static Language TURKISH = Language.create("tr", "tr", "tur");
public static Language URDU = Language.create("ur", "ur", "urd");
public static Language WALLOON = Language.create("wa", "wa", "wln");
public static Language WELSH = Language.create("cy", "cy", "wel");
public static Language YIDDISH = Language.create("yi", "yi", "yid");
public static Language getLanguage(String lang)
{
return LanguageMaps.getLanguage(lang);
}
public static Language getLanguageForIANA(String iana)
{
return LanguageMaps.getLanguageForIANA(iana);
}
public static Language getLanguageForISO639_2(String iso)
{
return LanguageMaps.getLanguageForISO639_2(iso);
}
private static synchronized Language create(String iana, String iso639_1, String iso639_2)
{
Language lang = null;
lang = (lang != null ? lang : LanguageMaps.getLanguageForIANA(iana));
lang = (lang != null ? lang : LanguageMaps.getLanguageForISO639_1(iso639_1));
lang = (lang != null ? lang : LanguageMaps.getLanguageForISO639_2(iso639_2));
return (lang != null ? lang : new Language(iana, iso639_1, iso639_2));
}
private static class LanguageMaps
{
private static final Map langMapIANA = new HashMap();
private static final Map langMapISO639_1 = new HashMap();
private static final Map langMapISO639_2 = new HashMap();
static void add(Language l)
{
if (l.IANA != null && l.IANA.length() > 0 && !langMapIANA.containsKey(l.IANA))
langMapIANA.put(l.IANA, l);
if (l.ISO639_1 != null && l.ISO639_1.length() > 0 && !langMapISO639_1.containsKey(l.ISO639_1))
langMapISO639_1.put(l.ISO639_1, l);
if (l.ISO639_2 != null && l.ISO639_2.length() > 0 && !langMapISO639_2.containsKey(l.ISO639_2))
langMapISO639_2.put(l.ISO639_2, l);
}
public static Language getLanguage(String lang)
{
if (langMapIANA.containsKey(lang))
return (Language)langMapIANA.get(lang);
return (Language)langMapISO639_2.get(lang);
}
public static Language getLanguageForIANA(String iana)
{
return (Language)langMapIANA.get(iana);
}
public static Language getLanguageForISO639_1(String iso)
{
return (Language)langMapISO639_1.get(iso);
}
public static Language getLanguageForISO639_2(String iso)
{
return (Language)langMapISO639_2.get(iso);
}
}
private Language(String iana, String iso639_1, String iso639_2)
{
IANA = iana;
ISO639_1 = iso639_1;
ISO639_2 = iso639_2;
LanguageMaps.add(this);
}
private Language()
{
IANA = null;
ISO639_1 = null;
ISO639_2 = null;
}
}