0

我有两种方法正在尝试使用 globalize 编写。一个用于格式化数字,一个用于格式化货币。

function currencyFormatter(value, locale, fieldDefinition) {
    var formatter = Globalize('en').currencyFormatter( 'INR' )
    return formatter( value )
}

function numberFormatter(value, locale, fieldDefinition){
    var formatter = Globalize('en').numberFormatter()
    return formatter( value )
}

当我将“en”语言环境与“INR”货币代码用于 currencyFormatter 或“en”用于 numberFormatter 时,我希望看到类似₹12,34,567.89但我在这两种情况下得到的都是₹1,234,567.89(减去货币符号为数字)。我查看了我的 node_modules 文件夹 cldr-data/main/en-IN/numbers.json 并发现了这个:

"percentFormats-numberSystem-latn": {
          "standard": "#,##,##0%"
        },
        "currencyFormats-numberSystem-latn": {
          "currencySpacing": {
            "beforeCurrency": {
              "currencyMatch": "[:^S:]",
              "surroundingMatch": "[:digit:]",
              "insertBetween": " "
            },
            "afterCurrency": {
              "currencyMatch": "[:^S:]",
              "surroundingMatch": "[:digit:]",
              "insertBetween": " "
            }
          },
          "standard": "¤ #,##,##0.00",
          "accounting": "¤#,##0.00;(¤#,##0.00)",

我还访问了 CLDR 网站并找到了我认为是格式文件(en-IN.xml)的内容,并发现了这个:

<rulesetGrouping type="OrdinalRules">
            <ruleset type="digits-ordinal">
                <rbnfrule value="-x">−→→;</rbnfrule>
                <rbnfrule value="0">=#,##0=$(ordinal,one{st}two{nd}few{rd}other{th})$;</rbnfrule>
            </ruleset>
        </rulesetGrouping>

这两者都支持我们得到的结果是正确的,而我们对预期结果的假设是错误的。但是,如果您在互联网上查看,有许多知名网站说我们的假设是正确的,结果是不正确的。

这让我处于不知道该做什么的状态。谁是对的?你能帮我们回答这个问题吗?

此外,如果出于某种原因我们想要更改默认格式,有没有办法“覆盖”默认格式?

4

1 回答 1

0

您应该使用en-IN印度所说的英语,即Globalize('en-IN').

于 2017-12-15T11:21:57.417 回答