.net - 如何覆盖 ASP.NET Web 应用程序当前区域性的货币格式?

标签 .net asp.net internationalization formatting cultureinfo

en-ZA 地区的货币小数点和千位分隔符分别是','和' ',但常用的分隔符是'.'对于十进制,加上我的用户想要','作为千位分隔符。我希望全局设置这些,这样我只需要为所有货币字段使用 {0:C} 格式字符串,而无需任何显式 FormatToString 调用。

我希望能够在不更改 Web 服务器上的区域性设置的情况下执行此操作,因为我还需要将货币的小数位设置为零,因为在报告 R100k 及以上的估计时不需要美分等. 我不想随意将整个文化设置为零个位置,只为这个应用程序设置一个。

在评论他对 this question 的回答时, Jon Skeet 建议克隆当前的文化和设置并更改所需的设置。我这样做如下:

void Application_Start(object sender, EventArgs e)
{
    var newCulture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
    newCulture.NumberFormat.CurrencyDecimalSeparator = ".";
    newCulture.NumberFormat.CurrencyGroupSeparator = ",";
}

但是,如何为应用程序从此时开始处理的所有请求激活新文化?有没有其他方法可以实现我想做的事情?

最佳答案

您可以使用 Application_BeginRequest 事件为每个请求设置文化。内部事件:

var newCulture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
newCulture.NumberFormat.CurrencyDecimalSeparator = ".";
newCulture.NumberFormat.CurrencyGroupSeparator = ",";

System.Threading.Thread.CurrentThread.CurrentCulture = newCulture;
System.Threading.Thread.CurrentThread.CurrentUICulture = newCulture;

关于.net - 如何覆盖 ASP.NET Web 应用程序当前区域性的货币格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9521720/

相关文章:

c# - 如何在基于 WPF Prism 的应用程序中使用 .NET 4 SplashScreen?

c# - : SqlCommand. Parameters[string] 或 .Parameters[int] 哪个更快?

c# - 我可以重复使用对象实例来避免使用 protobuf-net 进行分配吗?

asp.net - 如果使用uniqueidentifier作为主键,可扩展性是否会出现问题?

mysql - 如何在带有连接的复杂选择中获取由mysql中的公共(public)列合并的多行

python - 如何覆盖 Sphinx 插入的英文标签

c# - 属性或索引器不能分配给 “--” 它是只读的 C# List<Tuple<string, bool>>

c# - Gridview BoundField 编辑文本框启用多行

c# - 使用正则表达式从字符串中提取 json 数据

php - 没有页面刷新的多语言更改?