/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
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 final Language AFRIKAANS = Language.create("af", "af", "afr");
public static final Language ALBANIAN = Language.create("sq", "sq", "alb");
public static final Language ARABIC = Language.create("ar", "ar", "ara");
public static final Language BALUCHI = Language.create("bal", "", "bal");
public static final Language BASQUE = Language.create("eu", "", "baq");
public static final Language BRAHUI = Language.create("", "", "");
public static final Language CATALAN = Language.create("ca", "ca", "cat");
public static final Language CLASSICAL_GREEK = Language.create("grc", "", "grc");
public static final Language DANISH = Language.create("da", "da", "dan");
public static final Language DUTCH = Language.create("nl", "ni", "dut");
public static final Language ENGLISH = Language.create("en", "en", "eng");
public static final Language ESPERANTO = Language.create("eo", "eo", "epo");
public static final Language FRENCH = Language.create("fr", "fr", "fre");
public static final Language FRISIAN = Language.create("fy", "fy", "fri");
public static final Language GALICIAN = Language.create("gl", "gl", "glg");
public static final Language GERMAN = Language.create("de", "de", "ger");
public static final Language GREEK = Language.create("el", "el", "gre");
public static final Language HAWAIIAN = Language.create("haw", "", "haw");
public static final Language HEBREW = Language.create("he", "he", "heb");
public static final Language HUNGARIAN = Language.create("hu", "hu", "hun");
public static final Language ICELANDIC = Language.create("is", "is", "ice");
public static final Language IRISH = Language.create("ga", "ga", "gle");
public static final Language ITALIAN = Language.create("it", "it", "ita");
public static final Language MALAGASY = Language.create("mg", "mg", "mlg");
public static final Language MALTESE = Language.create("mt", "mt", "mlt");
public static final Language NEAPOLITAN_ITALIAN = Language.create("nap", "", "nap");
public static final Language NORWEGIAN = Language.create("no", "no", "nor");
public static final Language PORTUGUESE = Language.create("pt", "pt", "por");
public static final Language PANJABI = Language.create("pa", "pa", "pan");
public static final Language PERSIAN = Language.create("fa", "fa", "per");
public static final Language PROVENCAL = Language.create("pro", "", "pro");
public static final Language PROVENCAL_OCCITAN = Language.create("oc", "oc", "oci");
public static final Language ROMANIAN = Language.create("ro", "ro", "rum");
public static final Language SCOTS = Language.create("sco", "", "sco");
public static final Language SCOTTISH_GAELIC = Language.create("gd", "gd", "gae");
public static final Language SHETLAND_ENGLISH = Language.create("", "", "");
public static final Language SPANISH = Language.create("es", "es", "spa");
public static final Language SWEDISH = Language.create("sv", "sv", "swe");
public static final Language TAGALOG = Language.create("tl", "tl", "tgl");
public static final Language TURKISH = Language.create("tr", "tr", "tur");
public static final Language URDU = Language.create("ur", "ur", "urd");
public static final Language WALLOON = Language.create("wa", "wa", "wln");
public static final Language WELSH = Language.create("cy", "cy", "wel");
public static final 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 = 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<String, Language> langMapIANA = new HashMap<String, Language>();
private static final Map<String, Language> langMapISO639_1 = new HashMap<String, Language>();
private static final Map<String, Language> langMapISO639_2 = new HashMap<String, Language>();
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 langMapIANA.get(lang);
}
return langMapISO639_2.get(lang);
}
public static Language getLanguageForIANA(String iana)
{
return langMapIANA.get(iana);
}
public static Language getLanguageForISO639_1(String iso)
{
return langMapISO639_1.get(iso);
}
public static Language getLanguageForISO639_2(String iso)
{
return 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;
}
}