从RegionInfo.TwoLetterISORegionName获取CultureInfo

时间:2018-05-24 10:05:56

标签: c# cultureinfo regioninfo

在db中,我已经存储了RegionInfo.TwoLetterISORegionName值的值。 Atm我有像'' be'比利时,' no',' gb',' en'等

如果我写:

var culture = new CultureInfo("be");

而不是比利时,我得到了白俄罗斯。

所以我需要一种从RegionInfo.TwoLetterISORegionName获取CultureInfo的方法。

1 个答案:

答案 0 :(得分:0)

给定一个双字母区域名称,可以将多种文化与该区域名称相关联(因为在一个国家/地区可以使用多种语言)。例如瑞士有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<>