是否有内置的文化名称常量列表?

4
所以,我不能将默认语言设置为英语,例如:
CultureInfo MyCulture =  CultureInfo.ENGLISH;

或者

CultureInfo MyCulture =  CultureInfo.getCultureInfo(CulureInfo.Eng);

我需要引入一个字符串依赖,并使用在互联网上找到的列表(或创建自己的枚举):

CultureInfo MyCulture =  CultureInfo.getCultureInfo("en-AU");

那么是否已经有枚举或其他类型的列表包含所有可用的 CultureInfo


你有什么问题吗?在我看来,实际上并不需要内置列表,除非你希望给用户更改的选项。 - Sayse
什么问题?有没有内置的文化列表? - PiotrWolkowski
1
据我所知,目前还没有这样的枚举类,但如果您能创建这样一个类并在此处发布,那将非常友善。 - Matas Vaitkevicius
@NimChimpsky 你需要 CultureInfo.GetCultures(CultureTypes.SpecificCultures).Select(c=>c.Name) 吗?或者你可能需要其他类型的,比如 AllCulturesNeutralCultures - CodesInChaos
@CodesInChaos 不,我一会儿会回答自己的问题。 - NimChimpsky
显示剩余4条评论
1个回答

3
您可以使用System.Globalization类获取ISO语言和地区名称:
System.Globalization.CultureInfo[] cinfo = System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures & ~System.Globalization.CultureTypes.NeutralCultures);
System.Globalization.RegionInfo ri = null;
foreach (System.Globalization.CultureInfo cul in cinfo)
{   
    try
    {
        ri = new System.Globalization.RegionInfo(cul.Name);
        Console.WriteLine(cul.TwoLetterISOLanguageName+"-"+ri.TwoLetterISORegionName);
    }
    catch(ArgumentException)
    {
        continue;
    }
}

6
即使是在示例代码中,看到“catch all”也会让我感到不安(顺带一提,这样的代码被复制并粘贴到生产代码中的频率太高了)。请仅按照 MSDN 中所记录的捕获 ArgumentException - Christian.K
你为什么想要创建 RegionInfo 实例?你已经在 cul.Namecul.ToString() 中有了 [languagecode]-[CountryCode] 的格式,所以直接输出即可。注意:你明确去掉了没有国家代码部分的中性文化。 - Jeppe Stig Nielsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接