我必须处理三种不同的货币:美元,UAH和欧元。为了使用Intl.NumberFormat
正确显示它们,我必须为每个使用不同的语言环境:
const _ = { style: "currency" };
// notice different locales
new Intl.NumberFormat("en", { ..._, currency: "USD" }).format(15); // $15.00
new Intl.NumberFormat("uk", { ..._, currency: "UAH" }).format(15); // 15,00 грн.
new Intl.NumberFormat("de", { ..._, currency: "EUR" }).format(15); // 15,00 €
因此,为了使其正常工作,我必须为每种货币带来不同的语言环境:
const currency = {
code: "USD", // "USD" | "UAH" | "EUR"
rate: 1, // arbitrary
locale: "en", // "en" | "uk" | "de"
}
new Intl.NumberFormat(currency.locale, { ..._, currency: currency.code }).format(15);
我发现这种方法不雅致:模型对视图一无所知。
但是,有没有更好的选择呢?
也许可以使用多个语言环境,例如:
const LOCALES = ["en", "uk", "de"];
// ...
new Intl.NumberFormat(LOCALES, { ..._, currency: currency.code }).format(15);
最佳答案
我有点怀疑是否真的需要这样做(多个区域设置)。
考虑一下将看到此内容的用户。
他们习惯于在一种语言环境中查看事物,并且可能不知道某种货币的“语言环境约定”是什么。
但事实是,货币不能决定格式。
如果我是美国人,那么我希望能看到$ 12,345.67和€12,345.67和¥12,345.67
我不熟悉欧洲或日本的约定。
因此,我认为您应该对所有格式使用相同的语言环境(当前的用户语言环境)。
哎呀,我什至不知道“грн”是什么,我宁愿期望像大多数货币兑换亭一样的“ 12,345.67乌克兰格里夫纳”或“ UAH 12,345.67”。因此,这取决于用例。
但是,如果您绝对肯定要让格式遵循货币,而不是用户自定义格式,那么只有不同的格式化程序才是唯一的方法。
您想要的不是常见的用例,因此没有API可以支持该用例。
关于javascript - Intl.NumberFormat有多个语言环境?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48609279/