【问题标题】:Getting CultureInfo from RegionInfo.TwoLetterISORegionName从 RegionInfo.TwoLetterISORegionName 获取 CultureInfo
【发布时间】:2018-05-24 10:05:55
【问题描述】:

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

如果我写:

var culture = new CultureInfo("be");

我选择白俄罗斯而不是比利时。

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

【问题讨论】:

标签: c# cultureinfo regioninfo


【解决方案1】:

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

像这样使用它:

var rtoc = RegionToCultures();

然后:

var switzerlandCultures = rtoc["CH"];

foreach (CultureInfo culture in switzerlandCultures)
{
    Console.WriteLine(culture.EnglishName);
}

请注意,ILookup&lt;,&gt; 不会在与不存在的键一起使用时引发异常:rtoc["aaaaa"] 只会返回一个空的 IEnumerable&lt;&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多