Получение CultureInfo из RegionInfo.TwoLetterISORegionName

В БД я уже сохранил значения со значениями RegionInfo.TwoLetterISORegionName. У меня есть такие значения, как "быть" для Бельгии, "нет", "gb", "en" и т. Д.

Если я напишу:

var culture = new CultureInfo("be");

вместо Бельгии я получаю Беларусь.

Поэтому мне нужен способ получить CultureInfo из RegionInfo.TwoLetterISORegionName.

1 ответ

Учитывая двухбуквенное название региона, существует несколько культур, которые могут быть связаны с этим названием региона (потому что в стране можно говорить на нескольких языках). Например, для Швейцарии существует 4 культуры: де, фр, ит, рм.

А теперь немного кода:

public static ILookup<string, CultureInfo> RegionToCultures()
{
    // All the local cultures
    CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);

    // We "group" the cultures by their TwoLetterISORegionName
    return cultures.ToLookup(x => new RegionInfo(x.LCID).TwoLetterISORegionName);
}

Код возвращает ILookup<string, CultureInfo> (считают, что это IDictionary<string, IEnumerable<CultureInfo>>).

Используйте это как:

var rtoc = RegionToCultures();

а потом:

var switzerlandCultures = rtoc["CH"];

foreach (CultureInfo culture in switzerlandCultures)
{
    Console.WriteLine(culture.EnglishName);
}

Обратите внимание, что ILookup<,> не выдает исключение, если используется с несуществующим ключом: rtoc["aaaaa"] просто вернет пустой IEnumerable<>,

Другие вопросы по тегам