Список кодов стран - С#

У меня есть строка, которую мне нужно проверить, если это код страны. Культура немецкая. Есть ли какой-либо метод, который я могу вызвать, чтобы получить список кодов стран в немецкой культуре без необходимости вводить все коды 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
}

Ответ 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/ - стандартная многоязычная база данных включает список стран и другие локализуемые данные.