全球化数字和货币:en-IN / INR格式未按预期工作

时间:2017-12-14 16:19:12

标签: javascript-globalize

我正在尝试使用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 )
}

当我使用带有'INR'货币代码的'en'区域设置为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>

这些都支持我们得到的结果是正确的,我们对我们期望的假设是错误的。但是,如果你在互联网上看,有很多信誉良好的网站说我们的假设是正确的,结果是不正确的。

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

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

1 个答案:

答案 0 :(得分:0)

您应该使用Globalize('en-IN')在印度使用英语,即{{1}}。