代码之家  ›  专栏  ›  技术社区  ›  petko_stankoski

正在从RegionInfo.TwoLetterISORegionName获取CultureInfo

  •  -1
  • petko_stankoski  · 技术社区  · 6 年前

    在数据库中,我已经用RegionInfo.TwoLetterISORegionName值存储了值。Atm I有比利时的“be”、“no”、“gb”、“en”等值。

    var culture = new CultureInfo("be");
    

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

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   xanatos    6 年前

    给定一个两个字母的地区名称,可以有多个区域性与该地区名称相关联(因为在一个国家可以说多种语言)。例如瑞士有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<> .