Wie funktioniert die Internationalisierung in JavaScript?

143

Ich frage mich, wie ich mit Internationalisierung in JavaScript umgehen soll. Ich habe gegoogelt, aber ich bekomme keine überzeugenden Antworten für:

  • Hat JavaScript native Unterstützung für die Internationalisierung?
  • Was ist i18n in JavaScript?
  • Wie gehe ich mit Kalendern, Währungen, Daten usw. um?

Ich habe bereits Internationalisierung in JavaScript gelesen .

rajakvk
quelle
Microsoft hat kürzlich ein jquery-Globalisierungs-Plugin veröffentlicht. Die Details sind hier
Adeel

Antworten:

161

Die Lokalisierungsunterstützung in älteren Browsern ist schlecht. Ursprünglich lag dies an Phrasen in der ECMAScriptSprachspezifikation, die so aussehen:

Number.prototype.toLocaleString ()
Erzeugt einen Zeichenfolgenwert, der den Wert der Nummer darstellt, die gemäß den Konventionen des aktuellen Gebietsschemas der Hostumgebung formatiert wurde. Diese Funktion ist implementierungsabhängig und es ist zulässig, aber nicht empfohlen, dass sie dasselbe wie toString zurückgibt .

Jede in der Spezifikation definierte Lokalisierungsmethode ist als "implementierungsabhängig" definiert, was zu vielen Inkonsistenzen führt. In diesem Fall geben Chrome Opera und Safari dasselbe zurück wie .toString(). Firefox und IE geben Zeichenfolgen mit Gebietsschema-Format zurück, und IE enthält sogar ein Tausendertrennzeichen (perfekt für Währungszeichenfolgen). Chrome wurde kürzlich aktualisiert, um eine durch Tausende getrennte Zeichenfolge ohne feste Dezimalstelle zurückzugeben.

Für moderne Umgebungen bietet die ECMAScript Internationalization API-Spezifikation , ein neuer Standard, der die ECMAScript Language-Spezifikation ergänzt, eine viel bessere Unterstützung für den Zeichenfolgenvergleich, die Zahlenformatierung sowie die Datums- und Uhrzeitformatierung. Außerdem werden die entsprechenden Funktionen in der Sprachspezifikation festgelegt. Eine Einführung finden Sie hier . Implementierungen sind verfügbar in:

  • Chrome 24
  • Firefox 29
  • Internet Explorer 11
  • Oper 15

Es gibt auch eine Kompatibilitätsimplementierung, Intl.js , die die API in Umgebungen bereitstellt, in denen sie noch nicht vorhanden ist.

Das Ermitteln der bevorzugten Sprache des Benutzers bleibt ein Problem, da es keine Spezifikation zum Abrufen der aktuellen Sprache gibt. Jeder Browser implementiert eine Methode zum Abrufen einer Sprachzeichenfolge. Diese kann jedoch auf der Betriebssystemsprache des Benutzers oder nur auf der Sprache des Browsers basieren:

// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;

Eine gute Problemumgehung besteht darin, den Accept-Language-Header vom Server auf den Client zu übertragen. Wenn es als JavaScript formatiert ist, kann es an die Internationalization API-Konstruktoren übergeben werden, die automatisch das beste (oder zuerst unterstützte) Gebietsschema auswählen.

Kurz gesagt, Sie müssen einen Großteil der Arbeit selbst erledigen oder ein Framework / eine Bibliothek verwenden , da Sie sich nicht darauf verlassen können, dass der Browser dies für Sie erledigt.

Verschiedene Bibliotheken und Plugins zur Lokalisierung:

  • Andere:

Fühlen Sie sich frei, hinzuzufügen / zu bearbeiten.

Andy E.
quelle
13
Vielen Dank an alle Mitwirkenden; Ich hätte nie gedacht, dass ich etwas lernen könnte, wenn ich meine alten Antworten lese. Ich bin froh, das Update für die Internationalization API-Spezifikation dort zu sehen. Das ist wirklich großartig und ich muss es nur in Chrome testen.
Andy E
1
Danke für die hervorragende Zusammenstellung. Positiv ist zu vermerken, dass Mozilla bald einen modernen toLocaleString () ausliefern könnte - möglicherweise FF28: bugzilla.mozilla.org/show_bug.cgi?id=769871
Chris Adams
1
i18next.com verfügt jetzt über ein Übersetzungsmanagement, das auf locize.com basiert. Dies kann ein großer Gewinn sein, wenn Sie den gesamten Übersetzungsprozess lösen müssen - und nicht nur Ihren Code für i18n instrumentieren. Plus hat eine schöne Incontext Editor-Funktion ...
Jamuhl
12

Mozilla hat kürzlich das großartige L20n oder die Lokalisierung 2.0 veröffentlicht. In ihren eigenen Worten ist L20n

Eine lokalisierungsspezifische Open-Source-Skriptsprache, mit der Geschlecht, Pluralformen, Konjugationen und die meisten anderen skurrilen Elemente der natürlichen Sprache verarbeitet werden.

Ihre js-Implementierung befindet sich im Github L20n-Repository.

Eschen
quelle
Ich habe ein Projekt gestartet, das lokalisiert werden muss, und wir haben uns entschieden, auch L20n zu verwenden;). Daher habe ich eine erste Version eines L20n-Plugins für RequireJS ( github.com/fernandogmar/L20n-RequireJS ) geschrieben, falls Sie RequireJS verwenden. Ich hoffe, es wäre auch für Sie nützlich. Jeder Vorschlag wird begrüßt.
Fernando Gm
0

Ein Teil davon ist nativ, der Rest ist über Bibliotheken erhältlich.

Zum Beispiel ist Datejs eine gute internationale Datumsbibliothek .

Im Übrigen geht es nur um Sprachübersetzung, und JavaScript ist nativ Unicode-kompatibel (sowie alle gängigen Browser).

Luca Matteis
quelle
0

Sie können auch eine andere Bibliothek ausprobieren - https://github.com/wikimedia/jquery.i18n .

Zusätzlich zum Ersetzen von Parametern und mehreren Pluralformen bietet es Unterstützung für das Geschlecht, ein ziemlich einzigartiges Merkmal der benutzerdefinierten Grammatikregeln, die einige Sprachen benötigen.

Amir E. Aharoni
quelle