首页 > 解决方案 > 从 RegionInfo.TwoLetterISORegionName 获取 CultureInfo

问题描述

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

如果我写:

var culture = new CultureInfo("be");

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

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

标签: c#cultureinforegioninfo

解决方案


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


推荐阅读