// --------------------------------------------------------------------------------------------------------------------
//
// 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.Interop.Utilities
{
using System.Collections.Generic;
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;
}
}
}