C# 系统/全球化命名空间中是否有一组常量或枚举包含有效的文化名称?
我正在寻找一些东西,这样我就不必输入“en-GB”等。
是的,有,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();
请注意“文化类型”枚举(来自 MSDN 链接)。我想最有用的是NeutralCultures和SpecificCultures。
- 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 附带的文化。
不,没有。可用文化列表是特定于系统的——您甚至可以使用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,
...
}
This is analogous to the KnownColor
enumeration: it's not possible to create an enumeration for all possible colors, but it can make sense to have an enumeration for frequently used ones.
I wouldn't expect Microsoft to provide an equivalent KnownCulture
enumeration out of the box, as it's rather sensitive (why is my culture not included?).