2016-08-30 7 views
1

Ich verwende die ICU Message Format für i18n in einer Anwendung.RTL-Sprachen: durch Komma getrennte Listen

Einige der Zeichenfolgen enthalten kommagetrennte Listen mit dynamischer Länge. Zum Beispiel die Zeichenfolge:

"Es gibt drei Haustiere: ein Hund, ein Fisch, eine Katze."

"Es gibt {count} Haustiere: {list}" die Länge der Liste

Wo zählen, und die Liste ist sind die

können mit dieser Meldung erzeugt werden einzelne Saiten selbst. (Nebenbei, wäre das eine echte Schnur, würde ich "Haustiere" pro "Zählung" konfigurieren, aber lass es uns einfach halten).

In Pseudo-Code kann die Liste Variable wie so generiert werden:

pets.join(', ');

Das letzte Stück ist, was ich bin kein Fan von. Es scheint nur für LTR-Sprachen und möglicherweise nur eine Teilmenge von LTR-Sprachen sinnvoll zu sein.

Ich habe zwei Fragen:

  1. Wie soll in anderen Sprachen, wie RTL Sprachen formatiert durch Komma getrennte Listen werden?
  2. Unterstützt das ICU-Nachrichtenformat das in irgendeiner Weise, oder benötigt es zusätzlich zur ICU ein System, um die Listen zu generieren?

Für das, was es wert ist, ist dies eine JavaScript-Webanwendung, obwohl die Antworten auf diese Fragen wahrscheinlich sprachunabhängig sind.

Antwort

2

Die Formatierung der Liste ist für das Gebietsschema empfindlich. Nicht alle Sprachen verwenden das "ASCII-Komma" oder Leerzeichen. ICU hat eine ListFormatter: http://icu-project.org/apiref/icu4j/com/ibm/icu/text/ListFormatter.html

Für JavaScript Verschluss hat eine äquivalente https://github.com/google/closure-library/blob/master/closure/goog/labs/i18n/listformat.js

+0

Dank @MihaiNita! Am Ende habe ich etwas recherchiert und eine Sache implementiert, die für meine Anwendungsfälle funktioniert: https://github.com/jmeas/i18n-list-generator.js Ich werde mir diese anderen Optionen ansehen und sehen wenn ich meinen Code verbessern oder anderweitig nur ihre libs verwenden kann. Nochmals vielen Dank :) – jmeas

+1

Schauen Sie sich zumindest die Daten in Schließung an und kopieren Sie weitere Daten in Ihre hardcodierte Lösung. Es gibt andere Sprachen, die nicht "das ASCII-Komma" verwenden (zum Beispiel Chinesisch). Siehe listesymbols.js und listsymbolsext.js unter https://github.com/google/closure-library/tree/master/closure/goog/labs/i18n –

+0

Noch einmal vielen Dank! Ich werde das machen. – jmeas

Verwandte Themen