【问题标题】:Windows Server 2012 has incorrect decimal digits for currency on es-CL cultureWindows Server 2012 的 es-CL 区域性货币的十进制数字不正确
【发布时间】:2017-10-31 02:10:06
【问题描述】:

Windows Server 2012 似乎有几个关于 CultureInfo 的问题。文化 es-CL(即智利)中有关货币小数位数的信息不正确,它表示 2 位数字,但在智利,我们的货币不使用小数位数。

有人知道补丁或覆盖此设置的方法吗?修改 Windows 区域设置选项对我不起作用,因为我需要在 MVC 5 站点上使用它。

任何帮助,将不胜感激。

PS:我的开发机器从来没有遇到过这个问题(我用的是 Win7 到 10),所以我猜这个问题只存在于 Windows Server 2012 上

【问题讨论】:

  • 只是一个想法,你能选择另一种适合你的文化吗,或者这个怎​​么样;留在这个,让应用层正确地掩盖数字?
  • 它肯定正确地选择了其余的语言环境吗?
  • 我不是专家,但 en-US 和 es-ES 工作正常。我不能使用其他文化,因为 MVC 5 站点的最终用户是配置它的人。
  • 顺便说一句,我总是可以在 C# 中覆盖 CultureInfo 对象,尽管我不喜欢这个想法,因为它是操作系统问题。

标签: c# .net asp.net-mvc iis windows-server


【解决方案1】:

Gabriel 检查此配置并尝试一下。

https://i.stack.imgur.com/C0A4d.png

【讨论】:

  • 我试过了,它只适用于windows环境。由于 IIS 对网站使用原始设置,因此这不起作用。
【解决方案2】:

首先,让我告诉你这不是我需要的,但我会把它留在这里以防其他人需要补丁。

另一种方法是“修补”源代码,以覆盖货币中使用的小数位数(您可以覆盖所需的所有属性)。为此,您必须使用要覆盖的文化作为基础来创建特定文化:

culture = CultureInfo.CreateSpecificCulture("es-CL");
culture.NumberFormat.CurrencyDecimalDigits = 0;

然后将这个“文化”变量赋值给“当前线程”:

Thread.CurrentThread.CurrentCulture = culture;

最后,如果你像我一样使用MVC,你可以将此代码添加到“ActionFilterAttribute”中,以使所有调用都使用此设置:

public class LocalizationFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        CultureInfo culture = CultureInfo.CreateSpecificCulture("es-CL");
        culture.NumberFormat.CurrencyDecimalDigits = 0;
        Thread.CurrentThread.CurrentCulture = culture;
    }
}

不要忘记注册您的过滤器,在您的 Global.asax 中包含以下行:

GlobalFilters.Filters.Add(new LocalizationFilter());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多