CultureInfo名称的常量

Ann*_*e B 22 .net c# globalization

C#system/globalization命名空间中是否有一组包含有效文化名称的常量或枚举?

我正在寻找一些东西,所以我不必输入"en-GB"等.

McG*_*gle 24

是的,有,GetCultures:

System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.SpecificCultures)
Run Code Online (Sandbox Code Playgroud)

返回一个CultureInfo对象数组,所以如果你想要字符串名,你可以使用类似的东西:

IEnumerable<CultureInfo> cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
string[] names = cultures.Select(c => c.Name).ToArray();
Run Code Online (Sandbox Code Playgroud)

请注意"文化类型"枚举(来自MSDN链接).我想最有用的是NeutralCulturesSpecificCultures.

  • NeutralCultures 与语言相关但不是针对某个国家/地区的文化..NET Framework文化的名称由来自ISO 639-1的小写双字母代码组成.例如:"en"(英语)是一种中立文化.自定义文化可以具有任何用户指定的名称,而不仅仅是两个字母的代码.不变文化包含在CultureInfo.GetCultures方法返回的文化数组中,该方法指定此值.
  • SpecificCultures特定于国家/地区的文化.这些文化的名称遵循RFC 4646(Windows Vista和更高版本).格式为" - ",其中是从ISO 639-1派生的小写双字母代码,是源自ISO 3166的大写双字母代码.例如,英语(美国)的"en-US"是特定的文化.自定义文化可以具有任何用户指定的名称,而不仅仅是符合标准的名称.
  • InstalledWin32Cultures 安装在Windows操作系统中的所有文化.请注意,并非所有.NET Framework支持的文化都安装在操作系统中.
  • AllCultures .NET Framework 附带的所有文化,包括中性和特定文化,Windows操作系统中安装的文化以及用户创建的自定义文化.
  • UserCustomCulture用户创建的自定义文化.
  • ReplacementCultures 由用户创建的自定义文化,用于替换.NET Framework附带的文化.

  • 这并没有回答问题,因为它没有公开 `const`/`readonly` 字段,也没有枚举,也不会阻止 OP 硬编码“en-GB”。 (5认同)

Joe*_*Joe 9

不,没有.可用文化列表是特定于系统的 - 您甚至可以使用CultureAndRegionInfoBuilder注册新的自定义文化.

因此,如果你想要这个,你必须为你感兴趣的常见文化子集创建自己的枚举或常量,例如:

public static class KnownCulture
{
    public readonly String EnglishUS = "en-US";
    public readonly String EnglishGB = "en-GB";
    ... etc ...
}
Run Code Online (Sandbox Code Playgroud)

要么

public enum KnownLCID
{
    EnglishUS = 0x409,
    EnglishGB = 0x809,
    ...
}
Run Code Online (Sandbox Code Playgroud)

这类似于KnownColor枚举:不可能为所有可能的颜色创建枚举,但是对于经常使用的颜色进行枚举是有意义的.

我不希望微软提供KnownCulture开箱即用的等效枚举,因为它相当敏感(为什么我的文化不包括在内?).

  • “我不希望微软开箱即用地提供等效的KnownCulture枚举,”好吧,有iso标准,java语言环境遵循...... (2认同)