Получение CultureInfo из RegionInfo.TwoLetterISORegionName - PullRequest
0 голосов
/ 24 мая 2018

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

Если я пишу:

var culture = new CultureInfo("be");

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

Так что мне нужен способ получить CultureInfo из RegionInfo.TwoLetterISORegionName.

1 Ответ

0 голосов
/ 25 мая 2018

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

А теперь какой-нибудь код:

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<>.

...