在 db 中,我已经使用 RegionInfo.TwoLetterISORegionName 值存储了值。Atm 我有比利时的“be”、“no”、“gb”、“en”等值。
如果我写:
var culture = new CultureInfo("be");
而不是比利时,我得到白俄罗斯。
所以我需要一种从 RegionInfo.TwoLetterISORegionName 获取 CultureInfo 的方法。
在 db 中,我已经使用 RegionInfo.TwoLetterISORegionName 值存储了值。Atm 我有比利时的“be”、“no”、“gb”、“en”等值。
如果我写:
var culture = new CultureInfo("be");
而不是比利时,我得到白俄罗斯。
所以我需要一种从 RegionInfo.TwoLetterISORegionName 获取 CultureInfo 的方法。
给定两个字母的地区名称,有多种文化可以与该地区名称相关联(因为在一个国家/地区可以说多种语言)。例如,瑞士有 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);
}
代码返回 a ILookup<string, CultureInfo>
(认为它是 a IDictionary<string, IEnumerable<CultureInfo>>
)。
像这样使用它:
var rtoc = RegionToCultures();
接着:
var switzerlandCultures = rtoc["CH"];
foreach (CultureInfo culture in switzerlandCultures)
{
Console.WriteLine(culture.EnglishName);
}
请注意,如果与不存在的键一起使用 aILookup<,>
不会引发异常:rtoc["aaaaa"]
只会返回一个 empty IEnumerable<>
。