Angular 5 Internationalisierung



angular title service (3)

Ich baue eine Anwendung, die das neueste Angular5 verwendet, und was ich brauche, ist, dass ein Benutzer die Sprache wechseln kann. Ich musste das noch nie in einem Angular2 + implementieren (eigentlich verwende ich Angular5).

Ich muss an zwei Stellen Übersetzungen setzen:

  • HTML-Vorlage der Komponente - Ändern Sie die Beschriftungen in die angegebene Sprache
  • Im Code in der komponente.ts-Datei - Ich muss möglicherweise einige Strings übersetzen, die unter bestimmten Bedingungen im Code dynamisch erstellt werden

Ich habe mir ngx-translation und es sieht so aus, als würde ich alles tun, was ich brauche, da Sie die Sprache ändern können, ohne Ihren Code neu zu erstellen, siehe here . Ich habe jedoch gelesen, dass here weil der Hauptentwickler zu dem Angle-Team wechselt, um seinen i18n-Code zu entwickeln.

Ich verstehe auch, dass der aktuelle i18n nicht alles unterstützt, was ich jetzt brauche, siehe here .

Meine Frage - Wie ist der Stand der Übersetzungen in der neuesten Version von Angular? Gibt es andere Bibliotheken, die die Leute stattdessen empfehlen würden, wenn Angular selbst noch nicht die volle Unterstützung erhalten hat (für das Ändern der Sprache ohne Neukompilieren)? Ist ngx-translate gut für die Zukunft?

Jede Anleitung in diesem Bereich wird sehr geschätzt!


Ja. ngx-translate ist bis jetzt gut, und ich hoffe, dass es auch in Zukunft so sein wird.

Ich verwende ngx-translation in meinem aktuellen Angular 5-Projekt mit mehr als 5 Sprachen.

Es funktioniert soweit gut für mich. Ich musste keine benutzerdefinierten Änderungen vornehmen, es funktionierte wie eine Plug-and-Play-Sache.

Ich habe dieses Plugin https://github.com/ngx-translate/core


Rob McCabe, es gibt noch andere wichtige Bedenken als die, die Sie oben aufgeführt haben. Ich habe es here erklärt.


Nachdem ich mir Zeit genommen hatte, dachte ich, ich würde die wichtigsten Unterschiede zwischen ngx-translation und i18n :

  • Angular funktioniert immer nur mit einer Sprache. Sie müssen die Anwendung vollständig neu laden, um die Sprache zu ändern. Die JIT-Unterstützung bedeutet nur, dass sie mit JIT funktioniert. Sie müssen die Übersetzungen jedoch immer noch beim Bootstrap bereitstellen, da der Text in den Vorlagen während der Kompilierung ersetzt wird, während diese Bibliothek Bindungen verwendet. Dies bedeutet, dass Sie die Übersetzungen jederzeit ändern können . Der Nachteil ist, dass Bindungen Speicher benötigen, sodass der Angular-Weg performanter ist. Wenn Sie jedoch OnPush für Ihre Komponenten verwenden, werden Sie den Unterschied wahrscheinlich nie bemerken
  • Angular unterstützt derzeit nur die Verwendung von i18n in Ihren Vorlagen. Ich arbeite an einer Funktion, mit der Sie sie in Ihrem Code verwenden können, aber es wird noch gearbeitet. Diese Bibliothek funktioniert sowohl in Code als auch in Vorlagen
  • Angular unterstützt entweder XLIFF oder XMB (beide sind XML-Formate), während diese Bibliothek standardmäßig JSON unterstützt. Sie können jedoch Ihren eigenen Loader schreiben, um jedes gewünschte Format zu unterstützen (z. B. ein Loader für PO-Dateien). Persönlich sind Json-Dateien recht einfach zu lesen und nicht in diesen anderen Formaten, aber das ist kein großer Nachteil.
  • Angular unterstützt ICU-Ausdrücke (plurals und select), diese Bibliothek jedoch nicht
  • Angular unterstützt HTML-Platzhalter einschließlich Winkelcode, während diese Bibliothek nur reguläres HTML unterstützt (da sie zur Laufzeit und nicht während der Kompilierung ausgeführt wird und es in Angular kein $ compile wie in AngularJS gibt).
  • Die API dieser Bibliothek ist vollständiger, da sie zur Laufzeit ausgeführt wird. Sie bietet mehr Dinge (Observables, Events, ...), die Angular nicht hat (was aber nicht unbedingt erforderlich ist, da Sie die Übersetzungen nicht ändern können) Der Schöpfer von ngx-translate hat folgendes gesagt:

Ocombe (Entwickler von ngx): @josersleal ist genau das, was sie getan haben, das Winkelteam hat mich angeheuert, um i18n für alle zu verbessern. Es gibt jedoch keine Möglichkeit, meine Bibliothek direkt in den Kern zu integrieren, nachdem ich 3 Monate für das Kernteam gearbeitet habe, das ich kann Ich sage Ihnen, dass Angular I18n viel komplexer und ausgefeilter ist als meine Bibliothek. Es behandelt viel komplexeres Zeug und es ohne all die Fehler und Mängel, die meine Bibliothek hat. Ich verstehe, dass es frustrierend ist, dass sich der Kern nicht so schnell entwickelt, wie das, was eine Bibliothek tun kann, aber dafür gibt es Gründe. Der erste Grund ist, dass Sie etwas nicht implementieren und ändern können, wenn Sie sehen, dass Sie vergessen haben, ein Anwendungsfall. Alles muss gründlich geplant und durchdacht werden. Die meisten Dinge, die diese Bibliothek im Kern ausführen kann, werden Sie in der Zukunft noch haben, aber es kann ein Jahr dauern, bis wir dorthin gelangen. Die gute Nachricht ist, dass es viel besser ist als meine naive Implementierung.

Dies ist ein guter Artikel, um die wichtigsten Unterschiede zwischen ngx-translate und Angulars i18n zu diskutieren: here

Die Änderungen für i18n sind in Version 6 von angle fällig. Heute sind wir derzeit auf Version 5:

Einige Gedanken…

  • Angular-i18n ist performanter, wenn Sie Ihre Anwendung in der von Ihnen gewünschten Sprache kompilieren (und nicht zur Laufzeit zur Laufzeit). Kann auch ein Nachteil sein, da Sie möglicherweise mehrere Builds Ihrer Anwendung in verschiedenen Sprachen benötigen.
  • Wenn wir SEO verwenden würden, wäre das Durchsuchen von E-Mail durch das Durchsuchen von URLs der Fall. Für meinen Fall brauche ich das überhaupt nicht.
  • Wenn wir Plural-Switching usw. benötigen. Auch hier brauche ich das nicht - ich brauche nur eine recht einfache Sprachumschaltung in Templates und Code.
  • Angular-i18n wird mindestens bis März 2018 nicht veröffentlicht. Für mich kann ich nicht warten, da ich jetzt meine App erstellen muss.
  • ngx-translate hat nicht mehr so ​​umfassende Funktionen wie Angular-i18n, aber ich brauche nur einfache Laufzeitübersetzungen. Denken Sie also daran, was wir brauchen.
  • ngx-translate ist Open Source und wird an dem Tag, an dem es nicht mehr entwickelt wird, entwickelt. Wenn es ein schwerwiegendes Problem gibt, könnte ich mich vielleicht selbst beheben (hoffentlich werden die auftretenden Probleme hoffentlich beseitigt).

Ich werde mir auch die Angular-L10n-Bibliothek ansehen, die sehr gut aussieht: