2016-08-30 192 views
1

我在應用程序中使用ICU Message Format作爲i18n。RTL語言:逗號分隔的列表

某些字符串涉及動態長度逗號分隔列表。例如,字符串:

「有三種寵物:一隻狗,一條魚,一隻貓。」

「有{計數}寵物::{列表}」

當計數是該列表的長度,和列表是

可以與該消息生成個人字符串本身。 (順便說一下,這是一個真正的字符串,我會爲每個「count」配置「pets」,但讓我們保持簡單)。

僞代碼,可能會像這樣來產生列表變量:

pets.join(', ');

最後一點就是我不是一個球迷。它似乎只對LTR語言有意義,可能只是LTR語言的一個子集。

我有兩個問題:

  1. 應該如何逗號分隔的列表中的其他語言被格式化,如RTL語言?
  2. ICU消息格式是否支持以任何方式或除ICU外還需要系統來生成列表?

這是一個JavaScript web應用程序,雖然這些問題的答案可能與語言無關。

回答

2

列表格式化是區域設置敏感的。並非所有語言都使用「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

+0

感謝@MihaiNita!我最終做了一些研究並實現了一個適用於我的用例的東西:https://github.com/jmeas/i18n-list-generator.js我將看看這些其他選項,並參閱如果我可以改進我的代碼或以其他方式使用它們的庫。再次感謝:) – jmeas

+1

至少看看閉包中的數據,並在硬編碼解決方案中複製更多數據。還有其他語言不使用「ASCII逗號」(例如中文)。請參閱https://github.com/google/closure-library/tree/master/closure/goog/labs/i18n –

+0

中的listsymbols.js和listsymbolsext.js再次感謝!我去做。 – jmeas