【问题标题】:Override Number.toLocaleString("fa-IR") and change its thousands separator character for Persian numbers覆盖 Number.toLocaleString("fa-IR") 并更改波斯数字的千位分隔符
【发布时间】:2020-05-01 10:50:17
【问题描述】:

我需要根据区域设置格式重新格式化数值,为此我使用Number.toLocaleString("LOCAL") 函数。在伊朗,大多数人更喜欢使用, 作为千位分隔符,但Number.toLocaleString("fa-IR") 使用٬(从技术上讲是正确的)。

虽然您可以使用以下代码替换字符,但有没有办法覆盖Number.toLocaleString("fa-IR") 的功能?

function formatNumber(number) {
  let string = number.toLocaleString('fa-IR'); // ۱۲٬۳۴۵٫۶۷۹
  number = number.replace(/\٬/g, ",‬");
  return string;
}
    
formatNumber(12345.6789); // the result: ۱۲,۳۴۵٫۶۷۹

PS:我知道那里有很多类似的 code-sn-ps,但我想覆盖内置函数(如果可能的话)。

【问题讨论】:

  • 我不知道“大多数”人是否更喜欢使用,(后期逗号),但这是错误的。即使他们这样做,他们也可能喜欢千位分隔符,看起来像拉丁逗号,而不是实际的拉丁逗号。您不应使用非标准字符。如果您希望千位分隔符看起来像拉丁逗号,请更改字体。有像 Vazir 这样的免费字体和像 IranSansX 这样的商业字体,它们的分隔符看起来像拉丁逗号。
  • This sentence from a Wikipedia article 说使用拉丁逗号或空格不是波斯数字的标准(如果我理解正确的话)。
  • @Mahozad 是的,您已经正确理解并提到了正确的观点,但这是客户的偏好。所以它是否可以接受,我无法控制。而关于更改字体,这不是我的愿望,因为在这种情况下,我必须添加一个新的依赖项(字体文件)并增加流量网络。
  • 好的,没问题。

标签: javascript localization number-formatting farsi


【解决方案1】:

如果您愿意更改Number 的原型,那么可以。它经常被警告不要更改内置类的原型,因为这可能会与其他库等混淆。

砥砺前行:

const old = Number.prototype.toLocaleString;
Number.prototype.toLocaleString = function(locale)
{
  let result = old.call(this, locale);
  if(locale === 'fa-IR')
  {
    result = result.replace(/\٬/g, ",‬");
  }
  return result;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多