我已经将.NET Core(v2.1)应用程序部署到了我的Ubuntu服务器(Ubuntu 18.04 LTS)上。应用程序的目标受众是英国人。
在C#中,我正在做
@invoice.Amount.ToString("C")
根据系统文化将值格式设置为一种货币,并且应该显示类似£107.50
之类的内容,而不是$107.50
。
我检查了语言环境,并且拥有en_US
,所以我运行了update-locale LANG=en_GB.utf8
,然后重新启动了所有内容(红est,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
而不是£107.50
。我想念什么?
答案 0 :(得分:1)
阅读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
)。
我目前无法提供正在运行的C#
示例。但是,我可以举例说明在PowerShell中System.Globalization.CultureInfo
class的(某些) static 属性和方法的使用:
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 €