package com.github.gtache.autosubtitle; import java.util.Locale; import java.util.Map; import java.util.Set; import static java.util.Objects.requireNonNull; /** * A list of languages //TODO add more or use Locale if possible? */ public enum Language { AR("arabic", "ar", "ara"), BE("belarusian", "be", "bel"), BG("bulgarian", "bg", "bul"), CS("czech", "cs", "cze"), DA("danish", "da", "dan"), DE("german", "de", "deu", "ger"), EL("greek", "el", "gre"), EN("english", "en", "eng"), ES("spanish", "es", "spa"), FA("persian", "fa", "per"), FI("finnish", "fi", "fin"), FR("french", "fr", "fra", "fre"), HE("hebrew", "he", "heb"), HR("croatian", "hr", "hrv"), ID("indonesian", "id", "ind"), IT("italian", "it", "ita", "gre"), JA("japanese", "ja", "jpn"), KO("korean", "ko", "kor"), LA("latin", "la", "lat"), LB("luxembourgish", "lb", "ltz"), LO("lao", "lo", "lao"), LT("lithuanian", "lt", "lit"), MT("maltese", "mt", "mlt"), MY("myanmar", "my", "mya"), NL("dutch", "nl", "nld"), NO("norwegian", "no", "nor"), PL("polish", "pl", "pol"), PT("portuguese", "pt", "por"), RO("romanian", "ro", "ron"), RU("russian", "ru", "rus"), SK("slovak", "sk", "slo"), SL("slovenian", "sl", "slv"), SV("swedish", "sv", "swe"), TH("thai", "th", "tha"), TR("turkish", "tr", "tur"), UK("ukrainian", "uk", "ukr"), VI("vietnamese", "vi", "vie"), ZH("chinese", "zh", "zho", "chi"), AUTO("auto", "auto", "auto"); private static final Map STRING_LANGUAGE_MAP; static { final Map map = new java.util.HashMap<>(); for (final var language : Language.values()) { map.put(language.name().toLowerCase(), language); map.put(language.iso2, language); map.put(language.iso3, language); language.aliases.forEach(s -> map.put(s, language)); } STRING_LANGUAGE_MAP = map; } private final String englishName; private final String iso2; private final String iso3; private final Set aliases; Language(final String englishName, final String iso2, final String iso3, final String... aliases) { this.englishName = requireNonNull(englishName); this.iso2 = requireNonNull(iso2); this.iso3 = requireNonNull(iso3); this.aliases = Set.of(aliases); } public String englishName() { return englishName; } public String iso2() { return iso2; } public String iso3() { return iso3; } public static Language getLanguage(final String name) { return STRING_LANGUAGE_MAP.get(name.toLowerCase()); } public static Language getDefault() { return STRING_LANGUAGE_MAP.getOrDefault(Locale.getDefault().getLanguage(), EN); } }