// -------------------------------------------------------------------------------------------------------------------- // // This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. // // // Language Utilities // // -------------------------------------------------------------------------------------------------------------------- namespace HandBrake.ApplicationServices.Utilities { using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; /// /// Language Utilities /// public class LanguageUtilities { /// /// The language map. /// private static IDictionary languageMap; /// /// Map languages and their iso639_2 value into a IDictionary /// /// A Dictionary containing the language and iso code public static IDictionary MapLanguages() { if (languageMap != null) { return languageMap; } languageMap = new Dictionary { { "(Any)", "und" }, { "Afar", "aar" }, { "Abkhazian", "abk" }, { "Afrikaans", "afr" }, { "Akan", "aka" }, { "Albanian", "sqi" }, { "Amharic", "amh" }, { "Arabic", "ara" }, { "Aragonese", "arg" }, { "Armenian", "hye" }, { "Assamese", "asm" }, { "Avaric", "ava" }, { "Avestan", "ave" }, { "Aymara", "aym" }, { "Azerbaijani", "aze" }, { "Bashkir", "bak" }, { "Bambara", "bam" }, { "Basque", "eus" }, { "Belarusian", "bel" }, { "Bengali", "ben" }, { "Bihari", "bih" }, { "Bislama", "bis" }, { "Bosnian", "bos" }, { "Breton", "bre" }, { "Bulgarian", "bul" }, { "Burmese", "mya" }, { "Catalan", "cat" }, { "Chamorro", "cha" }, { "Chechen", "che" }, { "Chinese", "zho" }, { "Church Slavic", "chu" }, { "Chuvash", "chv" }, { "Cornish", "cor" }, { "Corsican", "cos" }, { "Cree", "cre" }, { "Czech", "ces" }, { "Dansk", "dan" }, { "Divehi", "div" }, { "Nederlands", "nld" }, { "Dzongkha", "dzo" }, { "English", "eng" }, { "Esperanto", "epo" }, { "Estonian", "est" }, { "Ewe", "ewe" }, { "Faroese", "fao" }, { "Fijian", "fij" }, { "Suomi", "fin" }, { "Francais", "fra" }, { "Western Frisian", "fry" }, { "Fulah", "ful" }, { "Georgian", "kat" }, { "Deutsch", "deu" }, { "Gaelic (Scots)", "gla" }, { "Irish", "gle" }, { "Galician", "glg" }, { "Manx", "glv" }, { "Greek, Modern", "ell" }, { "Guarani", "grn" }, { "Gujarati", "guj" }, { "Haitian", "hat" }, { "Hausa", "hau" }, { "Hebrew", "heb" }, { "Herero", "her" }, { "Hindi", "hin" }, { "Hiri Motu", "hmo" }, { "Magyar", "hun" }, { "Igbo", "ibo" }, { "Islenska", "isl" }, { "Ido", "ido" }, { "Sichuan Yi", "iii" }, { "Inuktitut", "iku" }, { "Interlingue", "ile" }, { "Interlingua", "ina" }, { "Indonesian", "ind" }, { "Inupiaq", "ipk" }, { "Italiano", "ita" }, { "Javanese", "jav" }, { "Japanese", "jpn" }, { "Kalaallisut", "kal" }, { "Kannada", "kan" }, { "Kashmiri", "kas" }, { "Kanuri", "kau" }, { "Kazakh", "kaz" }, { "Central Khmer", "khm" }, { "Kikuyu", "kik" }, { "Kinyarwanda", "kin" }, { "Kirghiz", "kir" }, { "Komi", "kom" }, { "Kongo", "kon" }, { "Korean", "kor" }, { "Kuanyama", "kua" }, { "Kurdish", "kur" }, { "Lao", "lao" }, { "Latin", "lat" }, { "Latvian", "lav" }, { "Limburgan", "lim" }, { "Lingala", "lin" }, { "Lithuanian", "lit" }, { "Luxembourgish", "ltz" }, { "Luba-Katanga", "lub" }, { "Ganda", "lug" }, { "Macedonian", "mkd" }, { "Marshallese", "mah" }, { "Malayalam", "mal" }, { "Maori", "mri" }, { "Marathi", "mar" }, { "Malay", "msa" }, { "Malagasy", "mlg" }, { "Maltese", "mlt" }, { "Moldavian", "mol" }, { "Mongolian", "mon" }, { "Nauru", "nau" }, { "Navajo", "nav" }, { "Ndebele, South", "nbl" }, { "Ndebele, North", "nde" }, { "Ndonga", "ndo" }, { "Nepali", "nep" }, { "Norwegian Nynorsk", "nno" }, { "Norwegian Bokmål", "nob" }, { "Norsk", "nor" }, { "Chichewa; Nyanja", "nya" }, { "Occitan", "oci" }, { "Ojibwa", "oji" }, { "Oriya", "ori" }, { "Oromo", "orm" }, { "Ossetian", "oss" }, { "Panjabi", "pan" }, { "Persian", "fas" }, { "Pali", "pli" }, { "Polish", "pol" }, { "Portuguese", "por" }, { "Pushto", "pus" }, { "Quechua", "que" }, { "Romansh", "roh" }, { "Romanian", "ron" }, { "Rundi", "run" }, { "Russian", "rus" }, { "Sango", "sag" }, { "Sanskrit", "san" }, { "Serbian", "srp" }, { "Hrvatski", "hrv" }, { "Sinhala", "sin" }, { "Slovak", "slk" }, { "Slovenian", "slv" }, { "Northern Sami", "sme" }, { "Samoan", "smo" }, { "Shona", "sna" }, { "Sindhi", "snd" }, { "Somali", "som" }, { "Sotho Southern", "sot" }, { "Espanol", "spa" }, { "Sardinian", "srd" }, { "Swati", "ssw" }, { "Sundanese", "sun" }, { "Swahili", "swa" }, { "Svenska", "swe" }, { "Tahitian", "tah" }, { "Tamil", "tam" }, { "Tatar", "tat" }, { "Telugu", "tel" }, { "Tajik", "tgk" }, { "Tagalog", "tgl" }, { "Thai", "tha" }, { "Tibetan", "bod" }, { "Tigrinya", "tir" }, { "Tonga", "ton" }, { "Tswana", "tsn" }, { "Tsonga", "tso" }, { "Turkmen", "tuk" }, { "Turkish", "tur" }, { "Twi", "twi" }, { "Uighur", "uig" }, { "Ukrainian", "ukr" }, { "Urdu", "urd" }, { "Uzbek", "uzb" }, { "Venda", "ven" }, { "Vietnamese", "vie" }, { "Volapük", "vol" }, { "Welsh", "cym" }, { "Walloon", "wln" }, { "Wolof", "wol" }, { "Xhosa", "xho" }, { "Yiddish", "yid" }, { "Yoruba", "yor" }, { "Zhuang", "zha" }, { "Zulu", "zul" } }; return languageMap; } /// /// The get language codes. /// /// /// The user languages. /// /// /// The . /// public static List GetLanguageCodes(IEnumerable userLanguages) { // Translate to Iso Codes List iso6392Codes = new List(); foreach (var item in userLanguages) { string isoCode; if (MapLanguages().TryGetValue(item, out isoCode)) { iso6392Codes.Add(isoCode); } } return iso6392Codes; } /// /// The get language names. /// /// /// The language codes. /// /// /// The . /// public static List GetLanguageNames(IList languageCodes) { // Translate to Iso Codes List names = new List(); foreach (var item in languageCodes) { KeyValuePair name = MapLanguages().FirstOrDefault(v => v.Value == item); // Slightly inefficient but small set anyway so not a big issue. names.Add(name.Key); } return names; } /// /// The get iso codes. /// /// /// The . /// public static List GetIsoCodes() { return MapLanguages().Values.ToList(); } /// /// The get language code. /// /// /// The language. /// /// /// The . /// public static string GetLanguageCode(string language) { if (string.IsNullOrEmpty(language)) { return null; } string isoCode; if (MapLanguages().TryGetValue(language, out isoCode)) { return isoCode; } return null; } } }