我正在使用ICU Message Format用于应用程序中的 i18n。
某些字符串涉及动态长度逗号分隔列表。例如,字符串:
"There are three pets: a dog, a fish, a cat."
可以通过此消息生成:
"There are {count} pets: {list}"
其中 count 是列表的长度,list 是各个字符串本身。 (顺便说一句,如果这是一个真正的字符串,我会为每个“计数”配置“宠物”,但让我们保持简单)。
在伪代码中,列表变量可能会像这样生成:
pets.join(', ');
最后一点是我不喜欢的。它似乎只对 LTR 语言有意义,并且可能只是 LTR 语言的一个子集。
我有两个问题:
- 在其他语言(例如 RTL 语言)中应如何设置逗号分隔列表的格式?
- ICU 消息格式是否以任何方式支持这一点,或者是否需要除 ICU 之外的系统来生成列表?
就其值(value)而言,这是一个 JavaScript Web 应用程序,尽管这些问题的答案可能与语言无关。
最佳答案
列表格式是区域设置敏感的。并非所有语言都使用“ASCII 逗号”或空格。 ICU 有一个 ListFormatter: http://icu-project.org/apiref/icu4j/com/ibm/icu/text/ListFormatter.html
对于 JavaScript Closure 有一个等效的 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
它(仍然)没有得到很好的支持,但是给它一些时间
关于javascript - RTL 语言 : comma-separated lists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39237769/