首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CultureInfo中使用语言和区域的自定义组合

在CultureInfo中使用语言和区域的自定义组合
EN

Stack Overflow用户
提问于 2015-09-08 14:25:30
回答 1查看 1.1K关注 0票数 2

我有一个web应用程序,其中我将CultureInfo on Thread.CurrentThread设置为ar-IL (阿拉伯语-以色列):

代码语言:javascript
复制
Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-IL")

问题是,在我的本地计算机(使用IIS 10的Windows 10)上,它工作得很好,也没有抛出任何异常。然而,在Azure (Windows 2012 R2和IIS8.5)上,它抛出CultureNotFoundException

文化不受支持。参数名称:名称'ar-IL‘是无效的区域性标识符。

我检查了CultureInfo的源代码,并意识到对nativeInitCultureData()的本机调用是罪魁祸首。在我的Windows10机器上,它返回true,但在Windows 2012上,它返回false

此外,检查SSCLI中的nlsinfo.cpp文件将显示以下注释:

//调用GetLocaleInfoEx,看看操作系统是否知道。//注意到GetLocaleInfoEx有变化: // * Vista失败了,必须降级// *Vista成功了,但是对于所有地区的中立者// * Win7都不成功。// *麦克有?

那么,如何处理无法被Windows识别的语言和区域(ar-ILhe-US等)的自定义组合?

我知道创建和注册自定义区域设置(使用CultureAndRegionInfoBuilder)的可能性,但是要满足我计划支持的所有组合,需要付出太多的努力。

EN

回答 1

Stack Overflow用户

发布于 2015-09-08 14:42:12

是的,Windows 10能够为任何区域性名称提供一些合理的信息。

自己构建文化信息是一种选择--只要日历信息兼容,您就可以将来自中性("HE")文化的字符串与任何特定的数据(如"en-US")合并。CultureAndRegionInfoBuilder可以用于安全地组合信息,如MSDN示例中所示:

代码语言:javascript
复制
  // Create a custom culture for ru-US.
  CultureAndRegionInfoBuilder car1 = new CultureAndRegionInfoBuilder("ru-US", 
                                         CultureAndRegionModifiers.None);
  car1.LoadDataFromCultureInfo(CultureInfo.CreateSpecificCulture("ru-RU"));
  car1.LoadDataFromRegionInfo(new RegionInfo("en-US"));

可以构建XML文件,定义需要支持的区域性,或者在运行时加载它们,甚至可以使用CultureAndRegionInfoBuilder.Register - 在ASP.NET中创建自定义文化在服务器上安装。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32460348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档