12

我正在开发一个 .net 4.5 应用程序,该应用程序需要多语言支持多文化等。

以下是国家/语言的示例列表

  • 俄罗斯 / 俄语
  • 比利时 / 法国
  • 比利时/荷兰

对于上述所有内容,可以根据上述文化名称创建一个 CultureInfo 对象

  • RU-RU
  • FR-BE
  • nl-BE

当用户进入站点时,我将 Thread.CurrentThread.CurrentCulture 和 Thread.CurrentThread.CurrentUICulture 设置为使用上述名称创建的文化,例如。

Thread.CurrentThread.CurrentCulture = new CultureInfo("nl-BE", false)
Thread.CurrentThread.CurrentUICulture = new CultureInfo("nl-BE", false)

以上所有名称都是有效的文化名称。

不,但是我需要添加另一个文化名称,即俄罗斯的英语语言。但问题是代码 en-RU 无效,所以当我创建时,new CultureInfo("en-RU", false)我得到一个 CultureNotFoundException,因为 en-RU 无效。

有了这种文化,我想要俄罗斯的数字、日期等格式,但我希望网站上的语言是英语。是否可以根据国家(俄罗斯)的行为为无效的文化名称创建自定义 CultureInfo 对象?

4

3 回答 3

8

是否可以为无效的文化名称创建自定义 CultureInfo 对象

是的。

利用CultureAndRegionInfoBuilder帮助创建自定义CultureInfo. (注意。一旦您有了创建文化的代码,可以将执行此操作的设置保存到 XML,然后从资源中加载,例如,从资源中加载,这在运行时需要更少的代码。)

可以在 CodeProject 中找到如何执行此操作的示例项目以及可下载的代码。这篇文章的一个重要说明是,即使这个类位于System.Globalization命名空间中,默认情况下它也不可用,引用:

我们将从引用程序集开始sysglobl.dll并为命名空间添加一条using语句System.Globalization

于 2012-10-16T14:33:38.977 回答
6

您可能必须混合和混合和匹配 - 有一个用于英语文本的文化对象,但有一个用于数字格式的 ru-Ru(俄语)文化对象。

或者更好地创造一种将两者结合起来的定制文化

在 ASP.NET 中创建自定义文化

于 2012-10-16T14:30:40.037 回答
0

你应该使用CultureInfo.InvariantCulture属性

不变的文化是文化不敏感的;它与英语相关,但与任何国家/地区无关。您可以在对 CultureInfo 实例化方法的调用中使用空字符串 ("") 按名称指定不变区域性。CultureInfo.InvariantCulture 还检索不变区域性的一个实例。它几乎可以用在 System.Globalization 命名空间中需要文化的任何方法中。CompareInfo、DateTimeFormat 和 NumberFormat 等属性返回的对象也反映了字符串比较和不变区域性的格式约定。

CultureInfo.InvariantCulture 属性

这是另一个选项自定义全球应用程序文化

于 2012-10-16T14:32:33.260 回答