Intl.NumberFormat 中的多个语言环境?
Multiple locales in Intl.NumberFormat?
我必须处理三种不同的货币:美元、乌克兰格里夫纳和欧元。为了使用 Intl.NumberFormat
正确显示它们中的每一个,我必须为每个使用不同的语言环境:
const _ = { style: "currency" };
// notice different locales
new Intl.NumberFormat("en", { ..._, currency: "USD" }).format(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);
我有点怀疑是否真的需要这样做(多个语言环境)。
想想会看到这个的用户。
他们习惯于在一个地方看东西,可能不知道 "locale convention" 是什么货币。
但问题是,货币并不能决定格式。
如果我是美国人,那么我希望看到 12,345.67 美元、12,345.67 欧元和 12,345.67 日元
我不熟悉欧洲或日本的公约。
所以我认为您应该对所有格式使用相同的语言环境(当前用户语言环境)。
哎呀,我什至可能不知道“грн”是什么,我宁愿像大多数货币兑换亭一样期待“12,345.67 乌克兰格里夫纳汇率”或 "UAH 12,345.67" 之类的东西。所以这取决于用例。
但是,如果您确实希望格式遵循货币而不是用户习惯,那么拥有不同的格式器是唯一的方法。
你想要的不是一个常见的用例,所以没有 API 来支持它。
我必须处理三种不同的货币:美元、乌克兰格里夫纳和欧元。为了使用 Intl.NumberFormat
正确显示它们中的每一个,我必须为每个使用不同的语言环境:
const _ = { style: "currency" };
// notice different locales
new Intl.NumberFormat("en", { ..._, currency: "USD" }).format(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);
我有点怀疑是否真的需要这样做(多个语言环境)。
想想会看到这个的用户。
他们习惯于在一个地方看东西,可能不知道 "locale convention" 是什么货币。
但问题是,货币并不能决定格式。 如果我是美国人,那么我希望看到 12,345.67 美元、12,345.67 欧元和 12,345.67 日元 我不熟悉欧洲或日本的公约。
所以我认为您应该对所有格式使用相同的语言环境(当前用户语言环境)。 哎呀,我什至可能不知道“грн”是什么,我宁愿像大多数货币兑换亭一样期待“12,345.67 乌克兰格里夫纳汇率”或 "UAH 12,345.67" 之类的东西。所以这取决于用例。
但是,如果您确实希望格式遵循货币而不是用户习惯,那么拥有不同的格式器是唯一的方法。 你想要的不是一个常见的用例,所以没有 API 来支持它。