如何根据货币在intl.numberformat()函数中动态指定语言



如下所示,当使用错误的语言代码时,格式对于来自这些国家/地区的用户来说是不正确的。那么,我如何根据所使用的货币动态设置这个国家代码呢?在我的应用程序中,根据我从地理位置获得的国家代码到货币代码的映射,我已经知道了货币。有可能将货币代码映射到语言代码吗?

console.log(new Intl.NumberFormat('en-us', { style: 'currency', currency: 'EUR' }).format(49.99));
// Gives €49.99, Desired: 49,99 €
console.log(new Intl.NumberFormat('en-us', { style: 'currency', currency: 'NOK' }).format(49.99));
// Gives NOK 49.99, Desired: kr. 49.99 
console.log(new Intl.NumberFormat('en-us', { style: 'currency', currency: 'DKK' }).format(49.99));
// Gives DKK 49.99, Desired: 49.99 kr.

有可能将货币代码映射到语言代码吗?

不,这是不可能的。一种货币可以在任何数量的国家使用,在这些国家可以使用任何数量的语言。没有通用的货币到语言映射。(你可以自己想出一个,但很可能是错的(。

在我的应用程序中,我已经知道了基于从地理位置获得的国家代码到货币代码的货币。

您需要从该国家/地区代码或地理位置派生语言代码,并将其作为区域设置参数传递给Intl.NumberFormat构造函数。

语言由1ocale定义。对于丹麦来说,这是da-DK,所以

console.log(
new Intl.NumberFormat('da-DK', { style: 'currency', currency: 'DKK' })
.format(49.99) );

console.log(
new Intl.NumberFormat('no', { style: 'currency', currency: 'NOK' })
.format(49.99) );
console.log(
new Intl.NumberFormat('en', 
{ style: 'currency', currency: 'EUR', currencyDisplay: "name"} )
.format(49.99) );

您可以在数字上使用toLocalString原型:

function formatCurrency(number, locales, options = {}) {
return number.toLocaleString(locales, {
style: "currency", // Default options
...options,
});
}

最新更新