Получение 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<>
,