Standard country-language codes are comprised of two arguments separated by a dash, for example fr-CA is French Canadian.
The first argument is a valid ISO Language Code. These codes are the lower-case two-letter codes as defined by ISO-639. You can find a full list of these codes at a number of sites, such as: http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt.
The second argument to both constructors is a valid ISO Country Code. These codes are the upper-case two-letter codes as defined by ISO-3166. You can find a full list of these codes at a number of sites, such as: http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html
Here is a list generated by the .Net framework (code at the bottom), although Microsoft does not seem to follow the two letter convention for langauges (don't ask me why, I just work here - although if you know send me an email):
"Afghanistan - Dari", "prs-AF" "Afghanistan - Pashto", "ps-AF" "Albania - Albanian", "sq-AL" "Algeria - Arabic", "ar-DZ" "Algeria - Tamazight (Latin)", "tzm-DZ" "Argentina - Spanish", "es-AR" "Armenia - Armenian", "hy-AM" "Australia - English", "en-AU" "Austria - German", "de-AT" "Azerbaijan - Azeri (Cyrillic)", "az-AZ" "Azerbaijan - Azeri (Latin)", "az-AZ" "Bahrain - Arabic", "ar-BH" "Bangladesh - Bengali", "bn-BD" "Belarus - Belarusian", "be-BY" "Belgium - Dutch", "nl-BE" "Belgium - French", "fr-BE" "Belize - English", "en-BZ" "Bolivarian Republic of Venezuela - Spanish", "es-VE" "Bolivia - Quechua", "quz-BO" "Bolivia - Spanish", "es-BO" "Bosnia and Herzegovina - Bosnian (Cyrillic)", "bs-BA" "Bosnia and Herzegovina - Bosnian (Latin)", "bs-BA" "Bosnia and Herzegovina - Croatian", "hr-BA" "Bosnia and Herzegovina - Serbian (Cyrillic)", "sr-BA" "Bosnia and Herzegovina - Serbian (Latin)", "sr-BA" "Brazil - Portuguese", "pt-BR" "Brunei Darussalam - Malay", "ms-BN" "Bulgaria - Bulgarian", "bg-BG" "Cambodia - Khmer", "km-KH" "Canada - English", "en-CA" "Canada - French", "fr-CA" "Canada - Inuktitut (Latin)", "iu-CA" "Canada - Inuktitut (Syllabics)", "iu-CA" "Canada - Mohawk", "moh-CA" "Caribbean - English", "en-029" "Chile - Mapudungun", "arn-CL" "Chile - Spanish", "es-CL" "Colombia - Spanish", "es-CO" "Costa Rica - Spanish", "es-CR" "Croatia - Croatian", "hr-HR" "Czech Republic - Czech", "cs-CZ" "Denmark - Danish", "da-DK" "Dominican Republic - Spanish", "es-DO" "Ecuador - Quechua", "quz-EC" "Ecuador - Spanish", "es-EC" "Egypt - Arabic", "ar-EG" "El Salvador - Spanish", "es-SV" "Estonia - Estonian", "et-EE" "Ethiopia - Amharic", "am-ET" "Faroe Islands - Faroese", "fo-FO" "Finland - Finnish", "fi-FI" "Finland - Sami (Inari)", "smn-FI" "Finland - Sami (Northern)", "se-FI" "Finland - Sami (Skolt)", "sms-FI" "Finland - Swedish", "sv-FI" "France - Alsatian", "gsw-FR" "France - Breton", "br-FR" "France - Corsican", "co-FR" "France - French", "fr-FR" "France - Occitan", "oc-FR" "Georgia - Georgian", "ka-GE" "Germany - German", "de-DE" "Germany - Lower Sorbian", "dsb-DE" "Germany - Upper Sorbian", "hsb-DE" "Greece - Greek", "el-GR" "Greenland - Greenlandic", "kl-GL" "Guatemala - K'iche", "qut-GT" "Guatemala - Spanish", "es-GT" "Honduras - Spanish", "es-HN" "Hong Kong S.A.R. - Chinese (Traditional) Legacy", "zh-HK" "Hungary - Hungarian", "hu-HU" "Iceland - Icelandic", "is-IS" "India - Assamese", "as-IN" "India - Bengali", "bn-IN" "India - English", "en-IN" "India - Gujarati", "gu-IN" "India - Hindi", "hi-IN" "India - Kannada", "kn-IN" "India - Konkani", "kok-IN" "India - Malayalam", "ml-IN" "India - Marathi", "mr-IN" "India - Oriya", "or-IN" "India - Punjabi", "pa-IN" "India - Sanskrit", "sa-IN" "India - Tamil", "ta-IN" "India - Telugu", "te-IN" "Indonesia - Indonesian", "id-ID" "Iran - Persian", "fa-IR" "Iraq - Arabic", "ar-IQ" "Ireland - English", "en-IE" "Ireland - Irish", "ga-IE" "Islamic Republic of Pakistan - Urdu", "ur-PK" "Israel - Hebrew", "he-IL" "Italy - Italian", "it-IT" "Jamaica - English", "en-JM" "Japan - Japanese", "ja-JP" "Jordan - Arabic", "ar-JO" "Kazakhstan - Kazakh", "kk-KZ" "Kenya - Kiswahili", "sw-KE" "Korea - Korean", "ko-KR" "Kuwait - Arabic", "ar-KW" "Kyrgyzstan - Kyrgyz", "ky-KG" "Lao P.D.R. - Lao", "lo-LA" "Latvia - Latvian", "lv-LV" "Lebanon - Arabic", "ar-LB" "Libya - Arabic", "ar-LY" "Liechtenstein - German", "de-LI" "Lithuania - Lithuanian", "lt-LT" "Luxembourg - French", "fr-LU" "Luxembourg - German", "de-LU" "Luxembourg - Luxembourgish", "lb-LU" "Macao S.A.R. - Chinese (Traditional) Legacy", "zh-MO" "Macedonia (FYROM) - Macedonian (FYROM)", "mk-MK" "Malaysia - English", "en-MY" "Malaysia - Malay", "ms-MY" "Maldives - Divehi", "dv-MV" "Malta - Maltese", "mt-MT" "Mexico - Spanish", "es-MX" "Mongolia - Mongolian (Cyrillic)", "mn-MN" "Montenegro - Serbian (Cyrillic)", "sr-ME" "Montenegro - Serbian (Latin)", "sr-ME" "Morocco - Arabic", "ar-MA" "Nepal - Nepali", "ne-NP" "Netherlands - Dutch", "nl-NL" "Netherlands - Frisian", "fy-NL" "New Zealand - English", "en-NZ" "New Zealand - Maori", "mi-NZ" "Nicaragua - Spanish", "es-NI" "Nigeria - Hausa (Latin)", "ha-NG" "Nigeria - Igbo", "ig-NG" "Nigeria - Yoruba", "yo-NG" "Norway - Norwegian (Bokmal)", "nb-NO" "Norway - Norwegian (Nynorsk)", "nn-NO" "Norway - Sami (Lule)", "smj-NO" "Norway - Sami (Northern)", "se-NO" "Norway - Sami (Southern)", "sma-NO" "Oman - Arabic", "ar-OM" "Panama - Spanish", "es-PA" "Paraguay - Spanish", "es-PY" "People's Republic of China - Chinese (Simplified) Legacy", "zh-CN" "People's Republic of China - Mongolian (Traditional Mongolian)", "mn-CN" "People's Republic of China - Tibetan", "bo-CN" "People's Republic of China - Uyghur", "ug-CN" "People's Republic of China - Yi", "ii-CN" "Peru - Quechua", "quz-PE" "Peru - Spanish", "es-PE" "Philippines - Filipino", "fil-PH" "Poland - Polish", "pl-PL" "Portugal - Portuguese", "pt-PT" "Principality of Monaco - French", "fr-MC" "Puerto Rico - Spanish", "es-PR" "Qatar - Arabic", "ar-QA" "Republic of the Philippines - English", "en-PH" "Romania - Romanian", "ro-RO" "Russia - Bashkir", "ba-RU" "Russia - Russian", "ru-RU" "Russia - Tatar", "tt-RU" "Russia - Yakut", "sah-RU" "Rwanda - Kinyarwanda", "rw-RW" "Saudi Arabia - Arabic", "ar-SA" "Senegal - Wolof", "wo-SN" "Serbia - Serbian (Cyrillic)", "sr-RS" "Serbia - Serbian (Latin)", "sr-RS" "Serbia and Montenegro (Former) - Serbian (Cyrillic)", "sr-CS" "Serbia and Montenegro (Former) - Serbian (Latin)", "sr-CS" "Singapore - Chinese (Simplified) Legacy", "zh-SG" "Singapore - English", "en-SG" "Slovakia - Slovak", "sk-SK" "Slovenia - Slovenian", "sl-SI" "South Africa - Afrikaans", "af-ZA" "South Africa - English", "en-ZA" "South Africa - isiXhosa", "xh-ZA" "South Africa - isiZulu", "zu-ZA" "South Africa - Sesotho sa Leboa", "nso-ZA" "South Africa - Setswana", "tn-ZA" "Spain - Basque", "eu-ES" "Spain - Catalan", "ca-ES" "Spain - Galician", "gl-ES" "Spain - Spanish", "es-ES" "Sri Lanka - Sinhala", "si-LK" "Sweden - Sami (Lule)", "smj-SE" "Sweden - Sami (Northern)", "se-SE" "Sweden - Sami (Southern)", "sma-SE" "Sweden - Swedish", "sv-SE" "Switzerland - French", "fr-CH" "Switzerland - German", "de-CH" "Switzerland - Italian", "it-CH" "Switzerland - Romansh", "rm-CH" "Syria - Arabic", "ar-SY" "Syria - Syriac", "syr-SY" "Taiwan - Chinese (Traditional) Legacy", "zh-TW" "Tajikistan - Tajik (Cyrillic)", "tg-TJ" "Thailand - Thai", "th-TH" "Trinidad and Tobago - English", "en-TT" "Tunisia - Arabic", "ar-TN" "Turkey - Turkish", "tr-TR" "Turkmenistan - Turkmen", "tk-TM" "U.A.E. - Arabic", "ar-AE" "Ukraine - Ukrainian", "uk-UA" "United Kingdom - English", "en-GB" "United Kingdom - Scottish Gaelic", "gd-GB" "United Kingdom - Welsh", "cy-GB" "United States - English", "en-US" "United States - Spanish", "es-US" "Uruguay - Spanish", "es-UY" "Uzbekistan - Uzbek (Cyrillic)", "uz-UZ" "Uzbekistan - Uzbek (Latin)", "uz-UZ" "Vietnam - Vietnamese", "vi-VN" "Yemen - Arabic", "ar-YE" "Zimbabwe - English", "en-ZW"
public static void GenerateLanguageInfo() {
List<string> list = new List<string>();
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
foreach (CultureInfo culture in cultures) {
RegionInfo region = new RegionInfo(culture.LCID);
var text = string.Format("\"{0} - {1}\", \"{2}-{3}\"",
region.EnglishName, culture.Parent.EnglishName,
culture.Parent.TwoLetterISOLanguageName,
region.TwoLetterISORegionName);
list.Add(text);
}
list.Sort();
list.ForEach(Console.WriteLine);
}
}
Also check out http://www.w3.org/International/questions/qa-choosing-language-tags.