Список кодов стран - С#
У меня есть строка, которую мне нужно проверить, если это код страны. Культура немецкая. Есть ли какой-либо метод, который я могу вызвать, чтобы получить список кодов стран в немецкой культуре без необходимости вводить все коды 274 (?) Самостоятельно?
Спасибо,
Тея.
Ответы
Ответ 1
Когда вы говорите "код страны", я предполагаю, что вы имеете в виду двухбуквенный код, как в ISO 3166. Затем вы можете использовать конструктор RegionInfo, чтобы проверить правильность кода.
string countryCode = "de";
try {
RegionInfo info = new RegionInfo(countryCode);
}
catch (ArgumentException argEx)
{
// The code was not a valid country code
}
Вы также можете, как вы заявляете в своем вопросе, проверить, является ли он действительным кодом страны для немецкого языка. Затем вы просто передаете определенное название культуры вместе с кодом страны.
string language = "de";
string countryCode = "de";
try {
RegionInfo info = new RegionInfo(string.Format("{0}-{1}", language, countryCode));
}
catch (ArgumentException argEx)
{
// The code was not a valid country code for the specified language
}
Ответ 2
Если вам нужны только страны/регионы, вы можете использовать класс RegionInfo:
http://msdn.microsoft.com/en-us/library/system.globalization.regioninfo.aspx
Ответ 3
Принятый ответ - неправильное использование конструктора ArgumentException
, созданного конструктором. Вы действительно не используете экземпляры RegionInfo
или ArgumentException
, что делает цель кода очень неясной.
Вместо этого получите список всех конкретных культур, затем выполните поиск по регионам этих культур, чтобы найти соответствие по вашему стандарту ISO 3166 alpha-2:
bool IsCountryCodeValid(string countryCode)
{
return CultureInfo
.GetCultures(CultureTypes.SpecificCultures)
.Select(culture => new RegionInfo(culture.LCID))
.Any(region => region.TwoLetterISORegionName == countryCode);
}
Или, в частности, для вашей проблемы:
bool IsValidGermanCountryCode(string countryCode)
{
return CultureInfo
.GetCultures(CultureTypes.SpecificCultures)
.Where(culture => culture.TwoLetterISOLanguageName == "de")
.Select(culture => new RegionInfo(culture.LCID))
.Any(region => region.TwoLetterISORegionName == countryCode);
}
Ответ 4
Будьте внимательны при использовании RegionInfo
для проверки действительного кода ISO. Он вернет регион, если код, который вы поставляете, является допустимым, и это поддерживаемый регион, но он не будет делать этого для всех допустимых кодов ISO 3166.
См. здесь для более полного объяснения: https://social.msdn.microsoft.com/Forums/en-US/c9a8bc14-d571-4702-91a6-1b80da239009/question-of-regioninfo-and-region-cy
RegionInfo
будет отлично работать для Европы, но есть несколько африканских стран, которые не проверяются этим методом (например, Уганда).
Ответ 5
http://cldr.unicode.org/ - стандартная многоязычная база данных включает список стран и другие локализуемые данные.