文化信息名称的常量

28

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

我正在寻找这样的东西,以便我不必输入“en-GB”等内容。


1
http://msdn.microsoft.com/en-us/goglobal/bb896001.aspx - lc.
2个回答

21

有的,可以使用GetCultures方法:

System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.SpecificCultures)

这将返回一个 CultureInfo 对象数组,如果你想要字符串名称,可以使用类似以下的代码:

IEnumerable<CultureInfo> cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
string[] names = cultures.Select(c => c.Name).ToArray();
注意 "Culture Types" 枚举(从 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 提供的文化的自定义文化。

7
这并没有回答问题,因为它没有暴露const/readonly字段,也没有枚举,并且也不能防止OP硬编码“en-GB”。 - julealgon

13

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

因此,如果您需要这个功能,您需要创建自己的枚举或常量来表示您感兴趣的常见文化子集,例如:

public static class KnownCulture
{
    public readonly String EnglishUS = "en-US";
    public readonly String EnglishGB = "en-GB";
    ... etc ...
}
或者
public enum KnownLCID
{
    EnglishUS = 0x409,
    EnglishGB = 0x809,
    ...
}

这就像KnownColor枚举一样:不可能为所有可能的颜色创建一个枚举,但是为经常使用的颜色创建一个枚举可能是有意义的。

我不会期望微软提供一个默认的等效 KnownCulture 枚举,因为它相当敏感(为什么我的文化不被包括在内?)。


2
我不会期望微软在开箱即用的情况下提供等效的 KnownCulture 枚举,但是有 ISO 标准,Java Locale 遵循这些标准... - NimChimpsky

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