ASP.NET 刷新文化定义

Posted

技术标签:

【中文标题】ASP.NET 刷新文化定义【英文标题】:ASP.NET Refresh Culture Definition 【发布时间】:2012-10-29 01:54:30 【问题描述】:

我目前正在开发一个全球化的 ASP.NET 应用程序(需要使用英语和法语)。

我的问题是,Windows 中的法语文化已被修改(数字和货币小数点分隔符已设置为“。”而不是“,这是默认值),我需要它具有默认值。长话短说,这与 decimal.TryParse() 函数混淆了,我不想用代码修补它(问题是设置问题,所以我需要修复设置,而不是代码)。

所以我去了 Windows 控制面板,重置了文化默认值(数字/货币小数点分隔符从“.”返回到“,”),并希望更改在我的 Web 应用程序中生效。不,没用。

好吧,也许它需要一个很好的旧iisreset 才能生效。做到了,再次测试......不,同样的错误。

好的好的,这可能很深,所以为什么不重新启动机器。重新启动,重新测试,然后……不,……小数点分隔符仍然是“.”。

这令人沮丧……让我们看看一个简单的控制台应用程序会做什么。在控制台中,它就像一个魅力。它始终与 Windows 设置相同。

难道 ASP.NET 的区域性定义是在安装时定义的,之后就无法更改?尝试aspnet-regiis -i 只是为了确定并猜猜是什么?没用!

那么,谁能告诉我 ASP.NET 如何管理它的文化定义以及我如何让它更新它们?

提前致谢!

更新(调试信息):

从我的电脑上的这个配置开始(只显示小数点分隔符,但我正在更改小数点和货币分隔符):

我在 ASP.NET 应用程序调试中得到了这个:

这在一个普通的控制台应用程序中:

然后我将 Windows 配置更改为:

Wich 在 ASP.NET 调试中得到了这个(在iisreset、重启等之后):

以及控制台应用程序中的正确设置:

更新 2(注册表信息):

我的一位同事指出,本地化信息保存在某些注册表项下:

HKEY_USERS\.DEFAULT\Control Panel\International

HKEY_USERS\S-1-5-20\Control Panel\International

这让我们认为,如果本地化是用户定义的,并且 IIS 使用 DefaultAppPool 用户运行,那么更改我的用户本地化设置不会有任何效果。

Windows 提供了为系统帐户和新用户刷新本地化设置的可能性:

选中这两个复选框似乎重置了一切,但 DefaultAppPool 设置。

【问题讨论】:

顺便说一句,如果我不必格式化来解决这个问题,那就太好了! :P 是什么让您如此确定您遇到了小数(可能还有分组)分隔符的问题?你能发布一些堆栈跟踪吗? 嗯,我期待在控制台和 ASP.NET 应用程序中出现相同的行为... 显然,在 ASP 中还必须执行其他操作才能使更改生效?顺便说一句,这可以用日期和时间格式以及可能与文化相关的任何内容来复制...... 【参考方案1】:

基于注册表信息的第二次更新,我们采取了简单的方法:将默认本地化设置从默认复制到 DefaultAppPool 用户使用的设置。

所以:

    导出

    HKEY_USERS\.DEFAULT\Control Panel\International

    导出(用于备份 -> 重要!!,如果出现问题,您将需要它)

    HKEY_USERS\S-1-5-82-3006700770-424185619-1745488364-794895919-4004696415\Control Panel\International

    S-1-5-82-3006700770-424185619-1745488364-794895919-4004696415 是 DefaultAppPool 用户使用的密钥

    修改第一个导出的key路径和第二个一样

    导入修改后的注册表项

即使这确实解决了问题,可能会有更好的解决方案,我仍然愿意倾听。

【讨论】:

以上是关于ASP.NET 刷新文化定义的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net 日期时间文化问题

GET 和 POST 的 Asp.Net 文化不同

刷新 ASP.NET 角色提供程序

ASP.NET Core 请求本地化选项

asp.net mvc 在哪里设置默认文化?

购物车上使用的 ASP.NET 的文化问题