【问题标题】:Why does the JS Internationalization API for number formatting contradict German standards?为什么数字格式的 JS 国际化 API 与德国标准相矛盾?
【发布时间】:2016-03-01 21:15:56
【问题描述】:

今天我开始了解 ECMAScript 国际化 API,因为我正在研究一种合理的数字格式设置方法。 因此,我通过调用测试了德语

Intl.NumberFormat("de").format(10000.23)

在 Firefox 和 Chrome 的控制台上,它为我提供“10.000,23”。

但是,根据 DIN 5008 标准(以及官方语言参考“Duden”),不鼓励这种形式的数字格式在德语中使用,该标准规定应使用细空格 (\u2009) 作为千位分隔符。

谁为德语本地化定义了千位分隔符的使用? Unicode 联盟还是浏览器供应商?

(是的,我知道某些程序和人员可能会使用点作为德语本地化方法)

【问题讨论】:

    标签: javascript localization intl


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      这在某种程度上是“安全胜于遗憾”的问题。 DIN 5008 第 6.4 节:“金额的分隔符应该是句号”(我的释义),程序如何知道这一点?在 HTML 和大多数编程语言中,带空格的排版也是一个问题。您可以轻松地用空格替换句点,但反过来会更复杂。

      所以,这不是错误,这是故意的。

      【讨论】:

      • 确实,第 6.4 节出于“安全原因”建议偏离货币的数字格式标准,但我再次发现很难证明将其设为 CLDR 中的默认值,当另一个默认值实际上由 DIN 定义时。我宁愿假设在这种情况下,程序有责任区别对待货币。此外,我认为“空格很难”在本地化上下文中也不是一个很好的理由,因为在 CLDR 中的其他语言环境(例如瑞典语)中,千位分隔符被定义为空格字符。
      • 好的,如果它已经在其他地方使用空格,那么,这使得 that 参数毫无意义,当然。顺便说一句:空格本身并不是hard,只是处理起来更复杂,因为空格(ASCII 0x20)是一个非常常见的标记分隔符。瑞典语版本似乎也是错误的:那里的空格必须是不间断的空格(例如:\u00a0 或在德国的情况下为 \u202f)。还是改变了?
      • 抱歉不精确:实际上应该使用 \u2009(细空格),而不是 ASCII 0x20 字符。我相应地更正了我上面的帖子。
      • \u2009 太窄(0.2em 或更少),我已经知道(但那是很久以前的事了)不能使用四分之一(0.25em),所以 \u202f 会更合适。并且 \u202f 包含一个不中断,而 \u2009 没有。
      猜你喜欢
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      • 2017-06-28
      • 2011-02-07
      相关资源
      最近更新 更多