【问题标题】:RTL languages: comma-separated listsRTL 语言:逗号分隔的列表
【发布时间】:2016-08-30 22:02:16
【问题描述】:

我在应用程序中为 i18n 使用 ICU Message Format

一些字符串涉及动态长度的逗号分隔列表。例如,字符串:

“共有三种宠物:狗、鱼、猫。”

可能会生成此消息:

“有 {count} 个宠物:{list}”

其中 count 是列表的长度,而 list 是各个字符串本身。 (顺便说一句,这是一个真正的字符串吗?我会为每个“计数”配置“宠物”,但让我们保持简单)。

在伪代码中,列表变量可能是这样生成的:

pets.join(', ');

最后一点是我不喜欢的。它似乎只对 LTR 语言有意义,并且可能只是 LTR 语言的一个子集。

我有两个问题:

  1. 应如何在其他语言(例如 RTL 语言)中设置逗号分隔列表的格式?
  2. ICU 消息格式是否以任何方式支持这一点,或者它是否需要除 ICU 之外的系统来生成列表?

不管怎样,这是一个 JavaScript 网络应用,尽管这些问题的答案可能与语言无关。

【问题讨论】:

    标签: javascript internationalization


    【解决方案1】:

    列表格式对区域设置敏感。并非所有语言都使用“ASCII 逗号”或空格。 ICU 有一个 ListFormatter: http://icu-project.org/apiref/icu4j/com/ibm/icu/text/ListFormatter.html

    对于 JavaScript 闭包有一个等价的 https://github.com/google/closure-library/blob/master/closure/goog/labs/i18n/listformat.js


    2019 年 7 月更新

    ECMAScript 中(最终)支持列表格式:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ListFormat

    它(仍然)没有得到很好的支持,但给它一些时间

    【讨论】:

    • 谢谢@MihaiNita!我最终做了一些研究并实现了一个适用于我的用例的东西:github.com/jmeas/i18n-list-generator.js 我将看看这些其他选项,看看我是否可以改进我的代码,或者只是使用他们的库。再次感谢:)
    • 至少看一下闭包中的数据,并在硬编码的解决方案中复制更多数据。还有其他语言不使用“ASCII 逗号”(例如中文)。查看github.com/google/closure-library/tree/master/closure/goog/labs/…中的listsymbols.js和listsymbolsext.js
    • 再次感谢!我会这样做的。
    • 是否有任何不依赖于 Google Closure 库的 JavaScript 实现?
    猜你喜欢
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多