代码之家  ›  专栏  ›  技术社区  ›  J86

Ubuntu上部署的.NET核心应用程序的区域设置问题

  •  0
  • J86  · 技术社区  · 6 年前

    在C#我在做:

    @invoice.Amount.ToString("C")
    

    它将值格式化为基于系统文化的货币,并应显示如下内容 £107.50 $107.50 .

    我查了一下地点 en_US 所以我跑了 update-locale LANG=en_GB.utf8 我重启了一切(红隼,nginx和会话)。现在当我运行 locale 命令,我得到:

    LANG=en_GB.utf8
    LANGUAGE=
    LC_CTYPE="en_GB.utf8"
    LC_NUMERIC="en_GB.utf8"
    LC_TIME="en_GB.utf8"
    LC_COLLATE="en_GB.utf8"
    LC_MONETARY="en_GB.utf8"
    LC_MESSAGES="en_GB.utf8"
    LC_PAPER="en_GB.utf8"
    LC_NAME="en_GB.utf8"
    LC_ADDRESS="en_GB.utf8"
    LC_TELEPHONE="en_GB.utf8"
    LC_MEASUREMENT="en_GB.utf8"
    LC_IDENTIFICATION="en_GB.utf8"
    LC_ALL=
    

    不过,我还是明白了 而不是 107.50 . 我错过了什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   JosefZ    6 年前

    阅读 Standard Numeric Format Strings (附例) C# ):

    的某些重载支持标准数字格式字符串 ToString Int32.ToString(FormatSpecifier) Int32.ToString(FormatSpecifier, IFormatProvider) 方法

    所以呢 .ToString() 方法应接受第二个参数 IFormatProvider (即提供区域性特定格式信息的对象)除了 Currency ( "C" ) Format Specifier ,试试看

    • @invoice.Amount.ToString("C",CultureInfo.CurrentCulture)
    • @invoice.Amount.ToString("C",CultureInfo.CurrentUICulture)
    • @invoice.Amount.ToString("C",CultureInfo.GetCultureInfo('en-GB'))
    • @invoice.Amount.ToString("C",CultureInfo.CreateSpecificCulture('en-GB'))

    (可能需要 using System.Globalization

    我不能提供跑步服务 目前的例子。然而,我可以举例说明(一些) 静止的 试验的性质和方法 System.Globalization.CultureInfo class

    PS D:\PShell> 1234.578.ToString('C',[cultureinfo]::CurrentCulture)
    1 234,58 Kč
    
    PS D:\PShell> 1234.578.ToString('C',[cultureinfo]::CurrentUICulture)
    £1,234.58
    
    PS D:\PShell> 1234.578.ToString('C',[cultureinfo]::GetCultureInfo('en-US'))
    $1,234.58
    
    PS D:\PShell> 1234.578.ToString('C',[cultureinfo]::CreateSpecificCulture('de-DE'))
    1.234,58 €
    
    推荐文章