JavaScript/React - 加拿大法语的货币格式

JavaScript/React - Currency Formatting For Canadian French

提问人:jrad09 提问时间:11/14/2023 更新时间:11/14/2023 访问量:24

问:

我正在尝试编写一个函数,该函数说:“如果 URL 包含 /fr,请将法语格式应用于定价。否则,如果 URL 包含 /en,则保留默认定价”。

在加拿大法语中,数字的格式略有不同。示例:19 304,45 $ 而不是 19,304.45 美元。

我的以下尝试不起作用。如何更正我的代码以使其正常工作?

formatPrice 函数:

export function formatPrice(price: any) {
  const language = window.location.pathname.includes("/fr") ? "fr" : "en";
  const options = {
    style: "currency",
    currency: "CAD",
    minimumFractionDigits: 2,
    maximumFractionDigits: 2,
  };

  return price.toLocaleString(language, options);
}

用法:

<Td className="align-right reg-price">
    ${formatPrice(Number(equipment["regular-price"]?.text).toLocaleString())}
</Td>
<Td className="align-right sale-price">
    <strong>${formatPrice(Number(equipment["sale-price"]?.text).toLocaleString())}</strong>
</Td>
JavaScript ReactJS 本地化 货币格式

评论

0赞 Yevhen Horbunkov 11/14/2023
首先,你不应该依赖 .为此,你宁愿需要一个全局共享的状态变量(如果 Web 应用隐含语言选择选项)或环境变量(如果语言设置是基于部署的)。如果您的 URL 中有类似内容,它甚至可能会失败。window.location/from
0赞 Yevhen Horbunkov 11/15/2023
其次,当您通过键入 your (这显然是类型) as 来选择立即退出类型安全时,使用 TypeScript 的意义何在?pricenumberany

答:

1赞 Ale_Bianco 11/14/2023 #1

问题:该方法主要用于根据语言和地区设置数字格式,但可能不适合使用特定符号和位置设置货币格式。中的语言参数需要 BCP 47 语言标记,而“fr”或“en”可能不足以设置货币格式。toLocaleStringtoLocaleString

溶液:您可以使用构造函数,它允许您指定用于设置数字(包括货币)格式的语言和样式。Intl.NumberFormat

export function formatPrice(price: any) {
  const language = window.location.pathname.includes("/fr") ? "fr-CA" : "en-CA";
  const options = {
    style: "currency",
    currency: "CAD",
    minimumFractionDigits: 2,
    maximumFractionDigits: 2,
  };

  return new Intl.NumberFormat(language, options).format(price);
}

评论

0赞 Yevhen Horbunkov 11/15/2023
Number.prototype.toLocaleString() 在支持此 API 的任何地方进行调用。无论哪种方式,您的答案都不能解决 OP 的问题,因为他们的问题显然是正确设置变量(如果您将其作为参数传递给 ,即使以 / 的形式,它也会完美地工作)。Intl.NumberFormat()languageformatPrice()'en''fr'
0赞 jrad09 11/15/2023
谢谢@Ale_Bianco!快速调整您的代码以使其正常工作..用 替换了你的语句,然后在我的用法中,删除了 的两个实例,现在它起作用了!returnreturn price.toLocaleString(language, options);.toLocaleString()