--- /dev/null
+diff --git a/win/C#/interop/LanguageCodes.cs b/win/C#/interop/LanguageCodes.cs
+new file mode 100644
+index 0000000..0d45cc1
+--- /dev/null
++++ b/win/C#/interop/LanguageCodes.cs
+@@ -0,0 +1,255 @@
++namespace HandBrake.Interop\r
++{\r
++ using System;\r
++ using System.Collections.Generic;\r
++ using System.Linq;\r
++ using System.Text;\r
++\r
++ /// <summary>\r
++ /// Contains utilities for converting language codes.\r
++ /// </summary>\r
++ public static class LanguageCodes\r
++ {\r
++ /// <summary>\r
++ /// The map of language codes to friendly names.\r
++ /// </summary>\r
++ private static Dictionary<string, string> languageMap;\r
++\r
++ /// <summary>\r
++ /// Gets the map of language codes to friendly names.\r
++ /// </summary>\r
++ private static Dictionary<string, string> LanguageMap\r
++ {\r
++ get\r
++ {\r
++ if (languageMap == null)\r
++ {\r
++ languageMap = new Dictionary<string, string>\r
++ {\r
++ {"und", "Unspecified"},\r
++ {"eng", "English"},\r
++ {"deu", "Deutsch"},\r
++ {"fra", "Français"},\r
++ {"spa", "Español"},\r
++ {"rus", "Russian"},\r
++ {"aar", "Afar"},\r
++ {"abk", "Abkhazian"},\r
++ {"afr", "Afrikaans"},\r
++ {"aka", "Akan"},\r
++ {"sqi", "Albanian"},\r
++ {"amh", "Amharic"},\r
++ {"ara", "Arabic"},\r
++ {"arg", "Aragonese"},\r
++ {"hye", "Armenian"},\r
++ {"asm", "Assamese"},\r
++ {"ava", "Avaric"},\r
++ {"ave", "Avestan"},\r
++ {"aym", "Aymara"},\r
++ {"aze", "Azerbaijani"},\r
++ {"bak", "Bashkir"},\r
++ {"bam", "Bambara"},\r
++ {"eus", "Basque"},\r
++ {"bel", "Belarusian"},\r
++ {"ben", "Bengali"},\r
++ {"bih", "Bihari"},\r
++ {"bis", "Bislama"},\r
++ {"bos", "Bosnian"},\r
++ {"bre", "Breton"},\r
++ {"bul", "Bulgarian"},\r
++ {"mya", "Burmese"},\r
++ {"cat", "Catalan"},\r
++ {"cha", "Chamorro"},\r
++ {"che", "Chechen"},\r
++ {"zho", "Chinese"},\r
++ {"chu", "Church Slavic"},\r
++ {"chv", "Chuvash"},\r
++ {"cor", "Cornish"},\r
++ {"cos", "Corsican"},\r
++ {"cre", "Cree"},\r
++ {"ces", "Czech"},\r
++ {"dan", "Dansk"},\r
++ {"div", "Divehi"},\r
++ {"nld", "Nederlands"},\r
++ {"dzo", "Dzongkha"},\r
++ {"epo", "Esperanto"},\r
++ {"est", "Estonian"},\r
++ {"ewe", "Ewe"},\r
++ {"fao", "Faroese"},\r
++ {"fij", "Fijian"},\r
++ {"fin", "Suomi"},\r
++ {"fry", "Western Frisian"},\r
++ {"ful", "Fulah"},\r
++ {"kat", "Georgian"},\r
++ {"gla", "Gaelic (Scots)"},\r
++ {"gle", "Irish"},\r
++ {"glg", "Galician"},\r
++ {"glv", "Manx"},\r
++ {"ell", "Greek Modern"},\r
++ {"grn", "Guarani"},\r
++ {"guj", "Gujarati"},\r
++ {"hat", "Haitian"},\r
++ {"hau", "Hausa"},\r
++ {"heb", "Hebrew"},\r
++ {"her", "Herero"},\r
++ {"hin", "Hindi"},\r
++ {"hmo", "Hiri Motu"},\r
++ {"hun", "Magyar"},\r
++ {"ibo", "Igbo"},\r
++ {"isl", "Islenska"},\r
++ {"ido", "Ido"},\r
++ {"iii", "Sichuan Yi"},\r
++ {"iku", "Inuktitut"},\r
++ {"ile", "Interlingue"},\r
++ {"ina", "Interlingua"},\r
++ {"ind", "Indonesian"},\r
++ {"ipk", "Inupiaq"},\r
++ {"ita", "Italiano"},\r
++ {"jav", "Javanese"},\r
++ {"jpn", "Japanese"},\r
++ {"kal", "Kalaallisut"},\r
++ {"kan", "Kannada"},\r
++ {"kas", "Kashmiri"},\r
++ {"kau", "Kanuri"},\r
++ {"kaz", "Kazakh"},\r
++ {"khm", "Central Khmer"},\r
++ {"kik", "Kikuyu"},\r
++ {"kin", "Kinyarwanda"},\r
++ {"kir", "Kirghiz"},\r
++ {"kom", "Komi"},\r
++ {"kon", "Kongo"},\r
++ {"kor", "Korean"},\r
++ {"kua", "Kuanyama"},\r
++ {"kur", "Kurdish"},\r
++ {"lao", "Lao"},\r
++ {"lat", "Latin"},\r
++ {"lav", "Latvian"},\r
++ {"lim", "Limburgan"},\r
++ {"lin", "Lingala"},\r
++ {"lit", "Lithuanian"},\r
++ {"ltz", "Luxembourgish"},\r
++ {"lub", "Luba-Katanga"},\r
++ {"lug", "Ganda"},\r
++ {"mkd", "Macedonian"},\r
++ {"mah", "Marshallese"},\r
++ {"mal", "Malayalam"},\r
++ {"mri", "Maori"},\r
++ {"mar", "Marathi"},\r
++ {"msa", "Malay"},\r
++ {"mlg", "Malagasy"},\r
++ {"mlt", "Maltese"},\r
++ {"mol", "Moldavian"},\r
++ {"mon", "Mongolian"},\r
++ {"nau", "Nauru"},\r
++ {"nav", "Navajo"},\r
++ {"nbl", "Ndebele, South"},\r
++ {"nde", "Ndebele, North"},\r
++ {"ndo", "Ndonga"},\r
++ {"nep", "Nepali"},\r
++ {"nno", "Norwegian Nynorsk"},\r
++ {"nob", "Norwegian Bokmål"},\r
++ {"nor", "Norsk"},\r
++ {"nya", "Chichewa; Nyanja"},\r
++ {"oci", "Occitan"},\r
++ {"oji", "Ojibwa"},\r
++ {"ori", "Oriya"},\r
++ {"orm", "Oromo"},\r
++ {"oss", "Ossetian"},\r
++ {"pan", "Panjabi"},\r
++ {"fas", "Persian"},\r
++ {"pli", "Pali"},\r
++ {"pol", "Polish"},\r
++ {"por", "Portugues"},\r
++ {"pus", "Pushto"},\r
++ {"que", "Quechua"},\r
++ {"roh", "Romansh"},\r
++ {"ron", "Romanian"},\r
++ {"run", "Rundi"},\r
++ {"sag", "Sango"},\r
++ {"san", "Sanskrit"},\r
++ {"srp", "Serbian"},\r
++ {"hrv", "Hrvatski"},\r
++ {"sin", "Sinhala"},\r
++ {"slk", "Slovak"},\r
++ {"slv", "Slovenian"},\r
++ {"sme", "Northern Sami"},\r
++ {"smo", "Samoan"},\r
++ {"sna", "Shona"},\r
++ {"snd", "Sindhi"},\r
++ {"som", "Somali"},\r
++ {"sot", "Sotho Southern"},\r
++ {"srd", "Sardinian"},\r
++ {"ssw", "Swati"},\r
++ {"sun", "Sundanese"},\r
++ {"swa", "Swahili"},\r
++ {"swe", "Svenska"},\r
++ {"tah", "Tahitian"},\r
++ {"tam", "Tamil"},\r
++ {"tat", "Tatar"},\r
++ {"tel", "Telugu"},\r
++ {"tgk", "Tajik"},\r
++ {"tgl", "Tagalog"},\r
++ {"tha", "Thai"},\r
++ {"bod", "Tibetan"},\r
++ {"tir", "Tigrinya"},\r
++ {"ton", "Tonga"},\r
++ {"tsn", "Tswana"},\r
++ {"tso", "Tsonga"},\r
++ {"tuk", "Turkmen"},\r
++ {"tur", "Turkish"},\r
++ {"twi", "Twi"},\r
++ {"uig", "Uighur"},\r
++ {"ukr", "Ukrainian"},\r
++ {"urd", "Urdu"},\r
++ {"uzb", "Uzbek"},\r
++ {"ven", "Venda"},\r
++ {"vie", "Vietnamese"},\r
++ {"vol", "Volapük"},\r
++ {"cym", "Welsh"},\r
++ {"wln", "Walloon"},\r
++ {"wol", "Wolof"},\r
++ {"xho", "Xhosa"},\r
++ {"yid", "Yiddish"},\r
++ {"yor", "Yoruba"},\r
++ {"zha", "Zhuang"},\r
++ {"zul", "Zulu"}\r
++ };\r
++ }\r
++\r
++ return languageMap;\r
++ }\r
++ }\r
++\r
++ /// <summary>\r
++ /// Gets a list of all languages.\r
++ /// </summary>\r
++ public static IList<Language> Languages\r
++ {\r
++ get\r
++ {\r
++ List<Language> languages = new List<Language>();\r
++\r
++ foreach (string languageCode in LanguageMap.Keys)\r
++ {\r
++ languages.Add(new Language(languageCode));\r
++ }\r
++\r
++ return languages;\r
++ }\r
++ }\r
++\r
++ /// <summary>\r
++ /// Gives the friendly name of the language with the given code.\r
++ /// </summary>\r
++ /// <param name="languageCode">The language code.</param>\r
++ /// <returns>The friendly name of the language.</returns>\r
++ public static string Decode(string languageCode)\r
++ {\r
++ if (LanguageMap.ContainsKey(languageCode))\r
++ {\r
++ return LanguageMap[languageCode];\r
++ }\r
++\r
++ return "Unknown";\r
++ }\r
++ }\r
++}\r