.NET 3.5 中的 CultureInfo 类支持哪些文化?

Posted

技术标签:

【中文标题】.NET 3.5 中的 CultureInfo 类支持哪些文化?【英文标题】:What cultures are supported by the CultureInfo class in .NET 3.5? 【发布时间】:2011-01-17 22:51:44 【问题描述】:

我需要一个 .NET 3.5 支持的文化列表,无论使用什么操作系统。 这似乎很难获得,虽然我不知道为什么!

编辑:啊,我不知道它依赖于操作系统,这可以解释缺乏文档。关于 Mac/Linux 操作系统也支持什么的任何想法?

谢谢:)

【问题讨论】:

出于好奇,您为什么需要这份清单? 只是为了弄清楚我们必须为哪些语言创建自定义文化以及我们可以“开箱即用”使用什么。例如,最近有人问我是否支持威尔士语。 不要忘记 CultureInfo 提供的基本上只是几个字符串(三种语言的名称、ISO 代码、货币名称)以及日期和数字格式。后者在大多数情况下不需要专门的文化,因为它们对于大多数相关文化都是相同的(即大多数欧洲国家具有相同的数字格式)。所以问题是,你需要威尔士文化,还是只需要威尔士语翻译?顺便说一句,虽然这不能解决您的一般问题,但 cy-GB 在 CultureInfo 中作为特定文化可用。寻求威尔士支持的人可能会... ... 安装了威尔士语支持的计算机,或者至少来自相关地区。如前所述,很遗憾不能再提供 Culture Explorer 2.0... 我在 Waybach Machine 找到了 Culture Explorer 2.0 的所有荣耀! 【参考方案1】:

不幸的是,它依赖于操作系统。检查here 以获得每个操作系统的默认语言支持。

注意,CultureInfo documentation 警告:

Windows 版本或服务包可以更改可用的文化。

在 ASP.NET 中,与操作系统相比,重要的是浏览器。它可以通过Accept-Language(第 14.4 节)请求标头告诉您用户喜欢哪种语言。如果您将应用程序的globalization 配置设置为 enableClientBasedCulture="true",ASP.NET 将尝试自动将 UICulture 和 Culture 设置为浏览器提供的值。或者,您可以通过检查 Request.UserLanguages 属性手动设置文化:

How to: Set the Culture and UI Culture for ASP.NET Web Page Globalization Rick Strahl shows manual detection and setting

很遗憾,无法从操作系统或浏览器生成详尽的可能语言列表。最接近的是IANA Language Subtag Registry。这是RFC 4646 中描述的语言注册表 - 定义 .NET 的 CultureInfo 标记的文档。

请记住,Request.UserLanguages 中的语言标签不保证有效。你会想要检查它们。 HTTP 1.1 对language tags 使用了较旧的建议,并且没有什么可以阻止某人在语言标头中发送乱码。

【讨论】:

如果它是一个 ASP.NET 应用程序,我想你的意思是它基于托管该站点的服务器的操作系统? 在 ASP.NET 中,浏览器提供首选语言。我将使用相关资源更新我的答案。【参考方案2】:

National Language Support (NLS) API Reference 列出区域设置信息并允许您选择操作系统。

Microsoft Locale Builder 是一个为 Windows Vista 及更高版本创建自定义语言环境的工具。

获取操作系统支持的文化列表,包括自定义文化。

C# 示例,

System.Globalization.CultureInfo[] cultures = System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures);

【讨论】:

【参考方案3】:

可以创建自定义文化,但默认类支持您运行的操作系统提供的那些文化。有文化参考supported by default on MSDN

【讨论】:

如果它是一个 ASP.NET 应用程序,我想你的意思是它基于托管该站点的服务器的操作系统? @Fiona '害怕这样 - 客户端可能会连接到服务器不理解的文化(也许是“en-scouse”)【参考方案4】:

我刚刚使用 Culture Explorer 2.0 进行了检查,仅 Windows 的文化和已安装的文化以及 .NET Framework 文化(至少在我的系统上仅包含仅包含语言的文化)之间存在区别。 CultureInfo 类(以及 RegionInfo、NumberFormatInfo 等)都支持所有这些。

我也在 Mono(在 Linux 上)上运行它,它大致相同,缺少 .NET Framework 文化和仅限 Windows 的文化,但存在特定和中性文化。 RegionInfo.CurrencyNativeName 似乎没有在我的 Mono 版本中实现,所以在选择任何文化时它都会崩溃。

不幸的是,Culture Explorer 2.0 目前无法从任何地方获得(在 gotdotnet.com 上),我前段时间下载了它。这是处理此类事情的便捷工具。您可能很幸运能在某些档案中找到一个。

【讨论】:

microsoft.com/middleeast/arabicdev/DevTools/VSdotNET/samples/… @erikkallen:这是该工具的第一个版本。它没有所有类别,仅支持 .NET Invariant 国家/地区、特定语言文化。我不知道 Culture Explorer 2.0 的许可证 - 也许我可以稍后将其上传到 CodePlex。 我在Waybach Machine找到了Culture Explorer 2.0的所有荣耀!

以上是关于.NET 3.5 中的 CultureInfo 类支持哪些文化?的主要内容,如果未能解决你的问题,请参考以下文章

.Net 中当前 CultureInfo 的距离单位

如何从 .NET 中的 CultureInfo 获取 ISO 3166 国家代码

如何在 .NET 3.5 中从 .NET 4 功能实现 Barrier 类

.NET 中 CultureInfo 的 CurrentCulture 和 CurrentUICulture 属性有啥区别?

.net 3.5 中的反序列化对象

在 CultureInfo 中获取当前语言