我目前正在开发一个全球化的 ASP.NET 应用程序(需要用英语和法语工作)。
我的问题是,Windows 中的法国文化已被修改(数字和货币小数点分隔符已设置为“。”而不是“,”,这是默认值),我需要它具有默认值。长话短说,这会弄乱decimal.TryParse()
功能,我不想用代码修补它(问题是设置问题,所以我需要修复设置,而不是代码)。
所以我去了 Windows 控制面板,重置了文化默认值(数字/货币小数点分隔符从“。”回到“,”),并期望更改在我的 Web 应用程序中生效。不,没有工作。
好吧,也许它需要一个好旧iisreset
的才能生效。做到了,再次测试......不,同样的错误。
好吧好吧,这可能很深,所以为什么不重新启动机器。重新启动,重新测试,然后……不,……小数点分隔符仍然是“.”。
这令人沮丧……让我们看看一个简单的控制台应用程序会做什么。在控制台中,它就像一个魅力。它始终与 Windows 设置相同。
难道 ASP.NET 的文化定义是在安装时定义的,之后就无法更改?aspnet-regiis -i
只是为了确定并猜猜是什么?没用!
那么,谁能告诉我 ASP.NET 如何管理它的文化定义以及如何让它更新它们?
提前致谢!
更新(调试信息):
从我的计算机上的这个配置开始(只显示小数点分隔符,但我正在更改小数点和货币分隔符):
我在 ASP.NET 应用程序调试中得到了这个:
这在一个普通的控制台应用程序中:
然后我将 Windows 配置更改为:
这让我在 ASP.NET 调试中得到了这个(之后iisreset
,重新启动等):
以及控制台应用程序中的正确设置:
更新 2(注册表信息):
我的一位同事指出,本地化信息保存在一些注册表项下:
HKEY_USERS\.DEFAULT\Control Panel\International
HKEY_USERS\S-1-5-20\Control Panel\International
Wich 让我们认为,如果本地化是用户定义的,并且 IIS 使用 DefaultAppPool 用户运行,那么更改我的用户本地化设置不会有任何效果。
Windows 提供了为系统帐户和新用户刷新本地化设置的可能性:
检查这两个复选框似乎重置了一切,但 DefaultAppPool 设置。