我有一个web应用程序,其中我将CultureInfo on Thread.CurrentThread设置为ar-IL (阿拉伯语-以色列):
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-IL、he-US等)的自定义组合?
我知道创建和注册自定义区域设置(使用CultureAndRegionInfoBuilder)的可能性,但是要满足我计划支持的所有组合,需要付出太多的努力。
发布于 2015-09-08 14:42:12
是的,Windows 10能够为任何区域性名称提供一些合理的信息。
自己构建文化信息是一种选择--只要日历信息兼容,您就可以将来自中性("HE")文化的字符串与任何特定的数据(如"en-US")合并。CultureAndRegionInfoBuilder可以用于安全地组合信息,如MSDN示例中所示:
// 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中创建自定义文化在服务器上安装。
https://stackoverflow.com/questions/32460348
复制相似问题