Angular: [i18n] zukünftiger 2.x-Plan

Erstellt am 9. Juni 2016  ·  122Kommentare  ·  Quelle: angular/angular

Für 2.0 geplante Funktionen:

  • [x] Geschlecht
  • [x] Pluralisierung
  • [x] Laufzeitcompiler
  • [x] Offline-Compiler
  • [x] xliff-Unterstützung
  • [x] Hash-Nachrichten-IDs
  • [x] i18n-Nachrichten

Probleme beheben:

Beitrag 2.0 beheben:

  • [ ] Template-Parser: Fehler beim Übergeben des Objektliterals als Pipe-Parameter. #9571
  • [ ] Verbesserung des HTML-Parsers #9340
  • [ ] Übersetzung ablehnen https://github.com/angular/angular/issues/7814
  • [x] Bereitstellung von NgLocalization Implementierung pro Gebietsschema
  • [ ] Pluralformat auf der Intensivstation #9117
  • [ ] ICU-Nachrichten in Attributen zulassen
  • [ ] ICU-Ordinalnachrichten implementieren
  • [ ] Übersetzungsstrings außerhalb einer Vorlage verwenden #11405
i18n

Hilfreichster Kommentar

@christiandreher @fank @ckemmler @marcalj @dagerber @esinek das Kochbuch für i18n ist auf angle.io erschienen: https://angular.io/docs/ts/latest/cookbook/i18n.html

Alle 122 Kommentare

@vicb Ich habe ein paar Postings zu i18n im https://github.com/angular/i18n? Ist das eine neue Initiative?

@thelgevold Wie die meisten Dinge in ng2 existierten die eigenständigen Repos für das frühe Prototyping. Hauptarbeit wird normalerweise innerhalb dieses getan.

Hallo, gibt es ein Dokument darüber, wie es funktionieren wird?
Ich frage mich, ob ich Schlüssel in Markup und normalen Text in Übersetzungsdateien schreiben kann, wie ich es mit angle-translate verwende.

{{ 'HOMEPAGE__ACTION__SIGNUP' | translate }}

Bei dieser Codierung kann eine externe Person alle unterstützten Sprachen bearbeiten (da sie sich in einer JSON/po-Datei befinden, eine Datei pro Sprache). Wenn die Hauptsprache im Markup enthalten ist, blockiert sie alle Revisionen, bis ein Entwickler die Zeichenfolge im Markup-Code ändern kann.

Danke!

@marcalj Die (veraltete) Spezifikation ist https://docs.google.com/document/d/1mwyOFsAD-bPoXTk3Hthq0CAcGXCUw-BtTJMR4nGTY-0/edit.

Ihr Anwendungsfall wird unterstützt.

Danke Viktor! Gibt es Pläne, Nummernabkürzungen aufzunehmen? Es ist etwas i18n-kontextbewusst.

@marcalj könnten Sie bitte ein separates Problem mit weiteren Details erstellen? Danke (aber wahrscheinlich sowieso nicht für 2.0)

Wird oder wird es Unterstützung für dynamische Übersetzungen (von einem Server geladen) geben?
Gibt es Pläne, i18n in naher Zukunft zu dokumentieren?
Danke!

Der aktuelle Plan besteht darin, eine Binärdatei pro Gebietsschema zu generieren.

Wir werden an dem Dokument arbeiten, sobald die Funktionen verfügbar sind. Wir sollten auf jeden Fall eine minimale Dokumentation für die 2.0-Version haben.

Was meinst du mit "binär pro Gebietsschema". Ist die bereitgestellte Ressourcendatei ein bisschen binär wie PO/MO, wobei MO anstelle von PO verwendet wird, um die Leistung zu verbessern? Es gibt auch schlechte Beispiele in der binären Bereitstellung wie XAML/BAML.

Ich bin mit den aktuellen Lokalisierungsmethoden von Anguar nicht sehr zufrieden. Dies sind die Gründe:

  • Mehrere verschiedene APIs und Methoden.
  • Sie müssen Ihre Vorlagen so stark vom Original abweichen, dass Vorlagen schwer zu lesen und zu warten sind.
  • Sie müssen die ursprüngliche Ressourcendatei manuell aktualisieren und sicherstellen, dass sie mit den in der Vorlage verwendeten IDs synchronisiert ist

Was wir wirklich brauchen ist

  • Eine einzige offizielle Lokalisierungsmethode mit solidem Ressourcenformat (XML- oder JSON-basiert)
  • Minimaler Einfluss auf Vorlagen. Fügen Sie beispielsweise nur das Attribut "localize" in das Wurzelelement und mögliche "noloc"-Attribute in die Elemente ein, die nicht lokalisiert sind.
  • Möglichkeit, Lokalisierungskommentare zu den Zeichenfolgen in den Vorlagen hinzuzufügen.
  • Ein Tool, das Quellcode scannt und Original-Strings und Kommentare in eine Ressourcendatei extrahiert. Verwenden Sie so dauerhafte IDs wie möglich. Verwenden Sie beispielsweise ID-Attribute oder verwenden Sie, wenn diese nicht bereitgestellt werden, eine Kombination aus Standort und ursprünglichem Zeichenfolgenwert.
  • Diese Ressourcendatei sollte einfache Strings, Strings mit Mustern ({{...}}), pluralisierte Strings und Gender-Strings speichern können, ein bisschen wie die Wertedateien von Android.
  • Einfache Möglichkeit, lokalisierte Ressourcen zu packen und bei Bedarf herunterzuladen
  • Möglichkeit, die Sprache ohne Neuladen zu ändern.

Ich bin bereit zu helfen, wenn Sie Hilfe brauchen.

@jaska45 die meisten deine Wünsche sollten in Erfüllung gehen. Eine Ausnahme: "Fähigkeit, die Sprache ohne Neuladen zu ändern.". Das Ändern einer Sprache impliziert das Bootstrapping einer neuen App.

Danke. Klang sehr gut. Sprachänderungen sind etwas, das selten vorkommt, und in diesem Fall ist es akzeptabel, dass ein gewisser Zustand verloren geht. Definitiv niedrigste Priorität in meiner Liste und es lohnt sich nicht, zu viel Mühe zu investieren.

@vicb Ich bin mir nicht sicher, ob ich diese "Binärdatei pro Gebietsschema" richtig verstehe, aber würde das bedeuten, dass es zur Laufzeit nicht möglich ist, Übersetzungen hinzuzufügen? Wir bauen derzeit SAAS mit Mandantenunterstützung, wobei jeder Mandant unser System erweitern kann, indem er seinen eigenen Satz von Formulardefinitionen und seinen eigenen Satz von Übersetzungen bereitstellt, daher wäre es in unserem Fall wirklich wichtig, Übersetzungen zur Laufzeit hinzufügen zu können.

Die @angular/common DatePipe ( date_pipe.ts ) enthält derzeit diese TODO in Zeile 15:

// TODO: move to a global configurable location along with other i18n components.
var defaultLocale: string = 'en-US';

Ist die Möglichkeit, eine Gebietsschemazeichenfolge an die DatePipe zu übergeben, in den i18n-Plänen für die Version 2.0 enthalten?

@vicb Unsere App legt die Frontend-Sprache fest, sobald wir das Benutzerobjekt nach dem Bootstrapping der Anwendung aus dem Netzwerk

Es gibt eine Information, die ich nirgendwo finden kann, nur um zu bestätigen und nachts schlafen zu können :)
Die offizielle i18n-Implementierung unterstützt gettext/po- Dateien, richtig ? Das kommt sehr häufig vor, also denke ich, dass es verfügbar sein sollte, wir werden nicht nur bei jsons und xtb hängen bleiben, oder? Ich meine, gettext ist so verbreitet, dass es nicht einmal erwähnt werden muss, es ist immer in jeder i18n-Implementierung standardmäßig vorhanden, das denke ich.

Es ist nicht geplant, po für 2.0 zu unterstützen. Sie sollten in der Lage sein, von/zu xliff zu konvertieren.

Entschuldigung für deine Nächte!

Was ist der Gedanke hinter dem Speichern von Strings im XML-Format? Beim Extrahieren in POT und Kompilieren von PO in JSON in Angular-Gettext sind nie Probleme aufgetreten. Es hat uns sehr gute Dienste geleistet:

// en-GB.json, cached into localStorage after first request
"en-GB": {
    "Hello {{firstName}}": "{{firstName}}, Gutentag"
}

Zufallsfrage: Irgendwelche Gedanken zu übersetzten URLs im Router?

Zufallsfrage: Irgendwelche Gedanken zu übersetzten URLs im Router?

@vsavkin was sind die Pläne?

Wir planen keinen Support für übersetzte URLs, bis das Finale veröffentlicht ist. Danach hatten wir einige Ideen, wie wir das erreichen könnten, aber wir haben noch keine Entscheidungen getroffen.

ng2 i18n hat mir Kopfschmerzen bereitet. Ich suchte nach der i18n-Direktive im Export: D ohne Ende ... Beim Durchsehen der Testspezifikationen und des Codes traf mich der Blitz:

Der Vorlagencompiler selbst transformiert und lokalisiert die Vorlage.

Habe ich recht, dass der grundlegende Workflow für i18n so aussehen wird:

  1. Markieren Sie Elemente mit i18n oder schließen Sie HTML-Teile in i18n-Kommentaren ein.
  2. Führen Sie irgendwie den Extractor (ng cli?) aus, um xliff zu erzeugen.
  3. Übergeben Sie dies an die Übersetzung und erhalten Sie die übersetzte Binärdatei zurück.
  4. Konfigurieren Sie angle beim Bootstrap irgendwie, um die gewünschte Sprachbinärdatei zu verwenden.
  5. Der Vorlagencompiler selbst transformiert und lokalisiert die Vorlage.

Denn wenn dies der Fall ist, werde ich vorerst eine benutzerdefinierte "i18n"-Direktive verwenden, um die sehr-sehr-Grundlagen der Übersetzung bis 2.0-Treffer nachzuahmen.

Ist dies der geplante Workflow für i18n in angle2 in der Zukunft?

@concept-hf das ist richtig, siehe das Dokument, das ich weiter oben in dieser Diskussion verlinkt habe.

Sie führen ng-xi18n aus, um das xliff zu erstellen.

Wir haben einige Anweisungen und Filter für Nachrichten auf der Intensivstation

@vicb Wird in der kommenden RC5 verfügbar sein? :)

Hängt davon ab, wann RC5 ist... sonst in RC6

Welche Version von XLIFF wird unterstützt? 1.2 oder 2.0 oder beides?

Unterstützt die Extraktion von Textnachrichten aus HTML-Vorlagen wie Angular-Gettext-Funktionen von Angular 2 Core?

  • Wird in RC6 sein,
  • xliff 1.2 vorerst.

Bedeutet der Teil "i18n-Nachrichten", dass ng2-translate unnötig wird und Angular alle Tools zur Verfügung stellt, die wir für die Verwendung von Übersetzungsstrings benötigen?

Wenn ich nur {{ 'TRANSLATION_ID' | translate }} brauche, könnte ich es jetzt verwenden? (rc5)
und wie man es importiert

@vicb Das sind GUTE

Gibt es Pläne, das Nachrichtenformat Json (kein XML) zu unterstützen?

Bedeutet der Teil "i18n-Nachrichten", dass ng2-translate überflüssig wird und Angular alle Tools zur Verfügung stellt, die wir für die Verwendung von Übersetzungsstrings benötigen?

das ziel ist es, i18n eingebaut zu haben. Ich bin mir jedoch nicht sicher, welche Funktionen von ng2-translate abgedeckt werden.

wenn ich nur {{ 'TRANSLATION_ID' | . brauche Übersetzen }}

Die Syntax ist <p i18n>TRANSLATION_KEY</p> / <p i18n>test in src lang</p> . Siehe das Dokument, das in einem der ersten Kommentare zu diesem Thread verlinkt ist

liebe eckig 2!

ich auch !

Gibt es Pläne, das Nachrichtenformat Json (kein XML) zu unterstützen?

Nicht jetzt. Sie können eine Feature-Anfrage erstellen und wir werden das Interesse entsprechend bewerten.

Bei einer sehr großen Anwendung kann sich die Verwendung einer einzigen Datei (xliff) pro Sprache auf die Ladezeiten auswirken. Gibt es eine Möglichkeit, die Sprachdatei in kleinere Dateien aufzuteilen? Wenn ja, wird es mit NgModulen verwaltet (0..1 xliff pro NgModule)?

Eine einzelne Datei (xliff) pro Sprache kann sich auf die Ladezeiten auswirken

Im AoT-Modus (kompiliert) wird die Übersetzungsdatei nicht geladen, wenn die Vorlage in die Zielsprache kompiliert wird. Dies wäre nur bei der JIT-Kompilierung (Laufzeit) der Fall.

Bitte erstellen Sie auch eine Funktionsanfrage, wenn Sie diese Funktion benötigen. Danke.

@marinho ng2-translate war (und wird es immer sein) eine minimale Möglichkeit, Ihre Anwendung zu übersetzen. Es ist sehr flexibel und funktioniert zur Laufzeit (kein Neuladen der Seite zum Ändern der Sprache).
Die i18n-Implementierung von Angular 2 erfordert mehr Arbeit, ist aber wahrscheinlich viel besser für große (Unternehmens-)Anwendungen, sie wird Pluralisierung, Geschlechter und die automatische Extraktion von Strings unterstützen.

Wenn die i18n-Implementierung alles abdeckt, was ng2-translate bereits tut, werde ich sie verwerfen, ansonsten werde ich versuchen, einige der Tools von i18n in ng2-translate zu importieren (ein xliff-Loader zum Beispiel) und die Bibliothek auf das konzentrieren, was i18n tut. nicht tun

Sind mit RC-6 die Tools für die automatische Extraktion von Strings noch verfügbar? Wenn ja, weisen Sie mich bitte in ihre Richtung - zusammen mit allen dazugehörigen Dokumenten.
_Update_ :

noch nicht, ich habe gerade angefangen, daran zu arbeiten :)
Sie können das ng-xi18n-Tool genau wie ngc verwenden: Fügen Sie ein Skript in Ihrer package.json hinzu, das "ng-xi18n" ausführt.
Beispiel: "extract": "ng-xi18n" und dann npm run extract ausführen, es sollte eine Datei Messages.xlf mit Ihren zu übersetzenden Strings erstellen

Hallo,

  • Wenn ich das Skript ng-xi18n ausführe, kann es die Ressourcen nicht finden, wenn ein absoluter Pfad verwendet wird.
  • Ist es möglich, i18n mit Interpolation zu verwenden?

Grüße.

Wenn ich das Skript ng-xi18n ausführe, kann es die Ressourcen nicht finden, wenn ein absoluter Pfad verwendet wird.

Wenn Sie dem Befehl einen Pfad angeben, wird meiner Meinung nach nach der Datei tsconfig.json gesucht oder anderweitig die Standardparameter verwendet (und wahrscheinlich kläglich fehlschlagen). Ich bin mir jedoch nicht sicher, der Autor des Tools ist seit einiger Zeit abwesend, was bedeutet, dass ich keine wirklichen Informationen zu dem Zeug hatte :)

Ist es möglich, i18n mit Interpolation zu verwenden?

Solange Sie die Direktive für Ihre Elemente verwenden, sollte es funktionieren. Haben Sie ein Beispiel im Kopf?

Zu meiner ersten Frage: Es ist nicht wirklich ein Problem, da ich denke, dass es besser ist, relative Pfade zu verwenden.
Für den zweiten: Ich muss eine Liste von Schlüsseln (KEY_A, KEY_B, ...) wiederholen und die zugehörige Übersetzung dieser Schlüssel anzeigen. Ich habe versucht, das i18n-Attribut auf mein Element zu setzen, aber das Skript hat das folgende xlf trans erstellt.

<div *ngFor="let k of myKeys" i18n>{{k}}</div>

<trans-unit id="fdbc61d14108f805b0c5234d1af631b8a03f8001" datatype="html"> <source><x id="INTERPOLATION"/></source> <target/> </trans-unit>```

Ah, ich verstehe. Ich denke, es funktioniert nur mit statischem Text, nicht mit Variablen

Bitte richten Sie Support-Fragen an externe Listen und halten Sie GH für Funktionsanfragen und Fehler bereit

Wie bekomme ich einen i18n-String im Skript?
zum Beispiel:

let _THIS_IS_A_I18N_STRING = ???
alert(_THIS_IS_A_I18N_STRING);

Ich glaube nicht, dass es möglich ist, wie ich bereits sagte, es funktioniert nur mit statischem Text, es wird kein Text im js-Code geparst, nur Vorlagen

Ich verwende $translate.instant('KEY_FOO_BAR'); viel ... es gibt viele Anwendungsfälle, es außerhalb einer Vorlage zu verwenden.

@zh99998 @marcalj Dies ist mit der aktuellen Impl. Könnten Sie bitte eine ordnungsgemäße Funktionsanfrage im Issue-Tracker erstellen, indem Sie die Issue-Vorlage ausfüllen und Anwendungsfälle hinzufügen (und ggf. einen Link zu einer anderen Implementierung hinzufügen).

Danke.

Bitte verlinken Sie auch die Feature-Anfrage hier; Ich würde es gerne unterstützen.

Grüße

@vicb @db6edr https://github.com/angular/angular/issues/11405 Danke! :)

Ich habe mich gefragt, wie i18n mit lokalisierten UI- / Komponentenpaketen funktionieren würde?

Lassen Sie mich unsere Situation erklären:
Wir erstellen UI-Komponenten als (Feature-) NgModule, die wir in einer internen npm-Registry veröffentlichen. Dann, eine Ebene höher, würde die eigentliche App (möglicherweise für einen bestimmten Kunden) diese Module installieren und auf die Komponente verweisen. Da die Lokalisierung derzeit auf App-Ebene erfolgt, müssten wir nun xlf-Dateien aus dem Feature-Modul mit dem App-Modul zusammenführen und das zusammengeführte XLF als ÜBERSETZUNGEN bereitstellen.

Konkretes Beispiel: Unser Authentifizierungsmodul stellt eine AuthenticationComponent zur Verfügung, die einen Login-Button anzeigt, der lokalisiert werden muss ("Login", "Anmelden", etc.). Idealerweise möchten wir eine Messages.us.xlf, Messages.de.xlf usw. mit dem npm-Paket bereitstellen, das AuthenticationComponent liefert. Die Hauptanwendung müsste daher diese xlf-Dateien zusammenführen und zum Bootstrap verwenden, da nur ein einziger TRANSLATIONS-Wert bereitgestellt werden kann (richtig?).

Im AOT-Modus bedeutet dies, dass ngc ngfactory-Dateien für jedes Feature-Modul erstellt. Gibt es eine Möglichkeit, lokalisierte ngfactory-Dateien in npm zu packen und den Compiler beim Aufrufen von ngc für die Hauptanwendung auf die lokalisierten ngfactory-Dateien verweisen zu lassen? Das Kompilieren aller abhängigen Vorlagen in jeder App für jede Sprache scheint etwas aufwendig zu sein.

Danke!

@paumayr Wir haben diesen Anwendungsfall noch nicht, aber das ist definitiv etwas, das wir abdecken müssen.

Das bedeutet, dass Sie für 2.0 final keine andere Möglichkeit haben, als eine einzelne Datei zu erstellen.

Bitte erstellen Sie jedoch eine separate Funktionsanfrage, in der Ihre Anforderungen beschrieben werden, und wir werden nach weiteren Versionen Ausschau halten.

Danke

Gibt es bereits Leitfäden / Best Practices für Workflows zur Arbeit mit XLIFF? Ich habe dafür diese Stack Overflow-Frage erstellt , aber keine Antworten erhalten. Ich frage mich, weil ich einen .po Hintergrund habe und einfach kein einziges gutes Werkzeug (wie Poedit) finden kann, das meinen Anforderungen entspricht (aktualisiere messages.LANG-lang.xlf Dateien von messages.xlf für Beispiel).

Außerdem: Gibt es Optionen für ng-xi18n bezüglich des Extraktionsorts? Ich möchte einen separaten Ordner zum Speichern meiner Lokalisierungen.

Und zu guter Letzt: Sollen wir wirklich manuell eine messages.LANG-lang.ts Datei für jede messages.LANG-lang.xlf Datei erstellen, oder wird die .xlf Datei irgendwann automatisch geparst (insbesondere für JIT für Entwicklungszwecke)?

Es gibt einen Befehl zum Aktualisieren von xlf-Dateien für jede Sprache :)

Gibt es Anleitungen

@ocombe arbeitet an einigen Dokumenten

Ich komme aus einem .po-Hintergrund

Erstellen Sie eine Ausgabe, wenn Sie ein größeres Format benötigen – wir bewerten die Ausgabe basierend auf der Beliebtheit der Ausgabe.
In der Zwischenzeit sollten Sie in der Lage sein, po <> xlf umzuwandeln?

Gibt es Optionen für ng-xi18n bezüglich des Extraktionsorts?

vorerst nicht, erstelle bei Bedarf ein Problem

wird die .xlf-Datei schließlich automatisch geparst

Sie müssen nichts manuell tun.
ng-xi18n wird zum Extrahieren verwendet,
ngc wird zum Zusammenführen verwendet.

Docs hinkt vorerst hinterher, aber

aus dem Urlaub zurückkommen :D

Welcher Entwickler, welche Feiertage?

Vielen Dank @ocombe und @vicb für die schnelle Antwort. Ich freue mich schon sehr auf die Doku. Mach weiter so tolle Arbeit :)

@vicb ok, wird reichen. Ich denke, dass dies zwei getrennte Probleme sind: Das eine unterstützt mehrere TRANSLATIONS-Anbieter (möglicherweise auf NgModule-Ebene?), das andere verweist auf lokalisierte externe ngfactory.ts-Dateien in ngc. Ich werde eine Funktionsanfrage öffnen, um mehrere ÜBERSETZUNGEN zu unterstützen. Das AOT-Problem mit ngfactories, die in npms ausgeliefert werden, ist eine Verbesserung der Entwicklungszeit.
Danke!

Wie ich im i18n-Beispiel von StephenFluin sehen kann, erfolgt die Lokalisierung zum Zeitpunkt des App-Bootstrap. Ich muss in der Lage sein, die Sprache jederzeit während der Ausführung der App zu ändern, was dieser Ansatz anscheinend nicht zulässt. Gibt es einen anderen gegenwärtigen oder zukünftigen Mechanismus, der es ermöglicht, die Sprache der App zur Laufzeit dynamisch zu ändern?

@ckemmler als @vicb oben in diesem Thread erwähnt (https://github.com/angular/angular/issues/9104#issuecomment-229975293), ein App-Neustart ist erforderlich, um die Sprache zu ändern, da der Compiler die lokalisierten Strings in die ngfactories / kompilierten Vorlagencode.

Und es macht Sinn, wenn der Benutzer die Sprache ändert, weil er die aktuelle nicht versteht, also sollte das Nachladen kein allzu großes Problem sein.
Außerdem sollten Sie die anzuwendende Sprache anhand der Browsersprache des Benutzers erkennen. In den meisten Fällen sollte der Benutzer beim ersten Laden die richtige Sprache erhalten

Danke @paumayr. Das habe ich leider nicht gesehen. Wirklich? Ich verstehe, dass die Lokalisierung manchmal schwierig sein kann, aber die App neu starten zu müssen, ist eine Art Deal-Breaker, finden Sie nicht? Und definitiv nicht das Verhalten, an das sich die Leute auch von der Nutzung von Websites gewöhnt haben. Zugegeben, bei Angular geht es um Apps, nicht um Websites, aber dennoch: Die meisten Web-Apps sind heutzutage sowieso nicht von Webseiten zu unterscheiden und es ist aus UX-Perspektive inakzeptabel, dass der Benutzer etwas so Störendes tun muss, wie einen Neustart der App, nur um die Sprache zu ändern. zumindest in meinem buch.
Ich meine: Stellen Sie sich eine Reise-Website vor, auf der Sie denken, Sie würden alles gut verstehen, egal welche Sprache im aktuellen Gebietsschema aktiv ist Knall! muss man "App neu starten", lesen -> alles neu starten?

Kannst du dann auch im obersten Post (unter "Für 2.0 geplante Features:") klarstellen, was "Laufzeit-Compiler" bedeutet? Danke!

Das Neuladen der App bedeutet nicht, von vorne zu beginnen, Sie können dieselbe URL beibehalten und im exakt gleichen Zustand neu laden

@ocombe du hast recht :-)

@ckemmler Ich denke, Ihr "3rd form page"

Eine weitere Sache, ich sehe, dass ng-xi18n an einigen Stellen erwähnt wird. Wo ist die Verwendung dokumentiert? Ich habe gegoogelt aber nichts gefunden.

@ckemmler Ich denke, es ist immer noch WIP. Ich sehne mich danach, es endlich zu studieren :)

@paumayr es sollte nicht viel hinzufügen, um die Textzeichenfolgen zu extrahieren, ich habe keinen Benchmark, aber es scheint schneller als ein einfacher Tsc
@ckemmler noch nirgendwo, sollte bald dokumentiert werden (wenn ich die Zeit finde, die Dokumente fertig zu stellen :D)

@ocombe wo finden wir die Dokumentation, wenn sie fertig ist? Können wir erwarten, dass es bei angle.io erscheint? Weil ich die Dokumente täglich überprüfe, damit ich keine Informationen von anderen Kanälen abrufen muss, ob sie veröffentlicht wurden oder nicht

Ja, es wird auf angle.io sein, ich werde hier eine Nachricht hinzufügen, sobald es verfügbar ist

Bitte verwenden Sie diesen Kanal nicht mehr für allgemeine Diskussionen und Supportanfragen.
Es sollte nur für Fehler und Funktionsanfragen sein.
Je weniger Rauschen wir filtern müssen, desto produktiver.

Danke !

@christiandreher @fank @ckemmler @marcalj @dagerber @esinek meine PR für die Dokumentation zu i18n gibt es hier: https://github.com/angular/angular.io/pull/2309
⚠️ es ist immer noch eine PR ausstehende Überprüfung und der Inhalt wird sich ändern, aber wenn Sie das Dokument jetzt wirklich brauchen, können Sie es lesen

@ocombe vielen Dank für die

Nein, ist es nicht.

Gitter und StackOverflow verwenden

Die Möglichkeit, die Sprache ohne Neuladen zu ändern, ist entscheidend für die Verwendung von i18n in AngularJS. Nachladen ist nicht Angularonic. Die gesamte UX in Angular besteht aus einer einzigen Seite. Die aktuelle i18n-Implementierung (mit Nachladen) bricht das SPA-Prinzip.

Beiträge sind willkommen!

@anderflash Ich stimme Ihrer Behauptung nicht wirklich zu, dass das Neuladen bei dieser i18n-Implementierung entscheidend ist.

Es gibt noch einige Implementierungen (ng2-translate, ng2-i18next in geringerem Maße), die auf Direktiven basieren und die Sprache zur Laufzeit ändern können. Aber das hat echte Kosten bei der Ausführung, da die Sprache bei jedem Änderungszyklus überprüft werden muss (soweit ich das verstehe)

Ich kann diese i18n-Implementierung als eine statische Möglichkeit sehen, mit Übersetzungen umzugehen. Ich kann viele Situationen nicht sehen, in denen der Benutzer die Sprache während der Verwendung einer App ändern möchte. Entscheidend ist für mich stattdessen die Erkennung der Sprache zum Zeitpunkt des Bootstraps (oder sogar der Kompilierung): Der Benutzer sollte die Sprache nicht aufgrund einer falschen anfänglichen Wahl ändern müssen.

@anderflash Ich bin sicher, jeder möchte, dass eine App (Web oder anderweitig) bei einer
Wenn der Benutzer 1.000 Dinge in Ihrer App tut, von denen nur 1 "die Sprache ändern" ist, möchten wir lieber die maximale Leistung bei den anderen 999 Dingen haben, ohne dafür ein bisschen Leistung zu opfern.

Auch wenn wir die entstehenden "Kosten" außer Acht lassen... wenn es einen Leistungsnachteil gibt, müssen wir die Dinge wirklich abwägen:

  1. Wie oft muss ein User die Sprache wechseln?... Ich würde höchstens einmal aufs Geld
  2. Meistens haben Sie in einer App auch Inhalte vom Server. Eine Änderung der Sprache würde also auch bedeuten, Inhalte auf Ihrer Seite zu aktualisieren. Dies ist der Fall, selbst wenn die i18n-Lösung von Angular dies bieten würde, wenn es um meinen Teil geht (Aktualisierung von Inhalten, die bereits vom Server bereitgestellt wurden), würde ich dem Client auf jeden Fall sagen, dass wir die App neu laden müssen :) Entweder das oder das Kunden selbst würden sagen "oh, okay ... laden Sie einfach die Seite neu", nachdem ich sie über die Kostendifferenz informiert habe.

Sehen Sie sich auch native Apps (iOS, Android, Windows) an, die i18n implementieren. Auch dann muss die App nach einem Sprachwechsel meist neu gestartet werden (es sei denn, es handelt sich um eine recht einfache App). Die Kosten für den "Live-Sprachwechsel" sind in den meisten Fällen einfach zu hoch (entweder performance- oder entwicklungstechnisch)

Es scheint interessant zu sein, wie Android mit solchen Fällen umgeht.
Tatsächlich handelt es sich bei Android-Apps um isolierte Aktivitäten (Komponenten), die unter Umständen neu geladen werden können: Bildschirmrotation oder ... Sprachwechsel.

In diesen Fällen wird die gesamte Aktivität mit Hilfe von Daten, die von der Aktivität in Erwartung dieses Ereignisses zwischengespeichert wurden, von Grund auf neu erstellt.

Um eine Parallele zu ziehen, klingt es für mich akzeptabel, dasselbe Ereignis auf die gleiche Weise zu behandeln. Und es scheint möglich, mit Hilfe des Routers und etwas anderem Datencache (localStorage?) die App neu starten zu können, ohne den Kontext zu verlieren.

@MrCroft

ein Benutzer müsste zwischen den Sprachen hin und her wechseln.

In diesem Fall wäre es einfacher, 2 Registerkarten zu öffnen (eine für jede Sprache)

Entschuldigung @vicb für einen weiteren Kommentar...

die Vorteile sind hier beschrieben:
https://github.com/IdeaBlade/angular.io/blob/b3e44c88dd8cd6b37da64e56d275e058314922fd/public/docs/ts/latest/guide/i18n.jade#L67

Eine meiner zusätzlichen Erfahrungen ist, dass Dienste von Drittanbietern wie Google Maps API, FB-Plugins zur Laufzeit oder ohne Hindernisse wie das Nachladen von JS-Skripten usw. nicht geändert werden können, sodass das Neuladen der Seite meistens erforderlich und einfacher ist.

Ja, der Nachteil ist die Notwendigkeit einer serverseitigen Unterstützung...

@christiandreher @fank @ckemmler @marcalj @dagerber @esinek das Kochbuch für i18n ist auf angle.io erschienen: https://angular.io/docs/ts/latest/cookbook/i18n.html

@ocombe Ich bin neu bei Web und lädt man die App zur Laufzeit neu?

Gibt es Pläne, ng-xi18n für ES6-Module zum Laufen zu bringen, bisher bekomme ich nur eine "leere" Messages.xlf?

Entschuldigung, aber wie macht man das? Das Kochbuch sagt, dass Sie Dateien manuell kopieren müssen ...
https://github.com/angular/angular/issues/9104#issuecomment -245337147

@yandreiy Ich denke, das ist im Moment nicht möglich, lest einfach oben einige Kommentare ;)
@select Haben Sie die HTML-Attribute i18n in Ihren Elementen definiert? nur markierte Texte werden extrahiert!

PS: Ich habe einen Blogbeitrag über den i18n-Workflow für Angular 1 & Angular 2 geschrieben

Ich habe 2 Module: mein Haupt-App-Modul AppModule und ein SecondModule das ich direkt in mein AppModule importiere (also kein faul geladenes Modul - wenn das irgendwelche machen würde Unterschied, aber ich glaube nicht).

Im App-Modul möchte ich eine Komponente von SecondModule , also habe ich in meinem SecondModule :

exports: [ SomeComponent ]

(Es hat keinen Sinn, dafür ein gemeinsames Modul zu erstellen, und ich bin mir nicht sicher, ob es das beheben würde, obwohl ich es nicht versucht habe).

Jetzt kann SomeComponent überall in jeder Vorlage einer beliebigen Komponente von AppModule .
Aber das Ausführen von ./node_modules/.bin/ng-xi18n -p src/ schlägt fehl mit: Cannot determine the module for component SomeComponent!

Hier ist das komplette Protokoll:

$ ./node_modules/.bin/ng-xi18n -p src/
Error: Cannot determine the module for component SomeComponent!
    at D:\wamp\www\bs\pdp.ng2\node_modules\@angular\compiler-cli\src\extract_i18n.js:101:27
    at Array.map (native)
    at D:\wamp\www\bs\pdp.ng2\node_modules\@angular\compiler-cli\src\extract_i18n.js:97:52
    at Array.map (native)
    at Extractor.extract (D:\wamp\www\bs\pdp.ng2\node_modules\@angular\compiler-cli\src\extract_i18n.js:95:28)
    at extract (D:\wamp\www\bs\pdp.ng2\node_modules\@angular\compiler-cli\src\extract_i18n.js:16:35)
    at Object.main (D:\wamp\www\bs\pdp.ng2\node_modules\@angular\tsc-wrapped\src\main.js:30:16)
    at Object.<anonymous> (D:\wamp\www\bs\pdp.ng2\node_modules\@angular\compiler-cli\src\extract_i18n.js:160:9)
    at Module._compile (module.js:556:32)
    at Object.Module._extensions..js (module.js:565:10)
Extraction failed

Sollte ich dafür ein Problem eröffnen, ist das ein Bug? Oder muss ich hier anders vorgehen?

Ich habe unseren automatischen Workflow für i18n in meinem Blog zusammengefasst
Es macht alles automatisch, wie das Kopieren von Dateien, das Zusammenführen mit vorhandenen Übersetzungen usw.
Hoffe das hilft.

@MrCroft habe genau das gleiche Problem ...

@MrCroft @spock123 Wenn Sie ein Problem haben, erstellen Sie bitte ein neues Ticket. Zuerst verschmutzen Sie diesen und dann achten wir nicht darauf.

Davon abgesehen sollte Ihr Problem durch die neuesten Commits im Offline-Compiler und im Extraktor behoben sein - es sollte in den kommenden Tagen eine Veröffentlichung geben, die Sie ausprobieren können.

@vicb Ich habe alle i18n-Dokumente gelesen und bin sehr gespannt auf die AOT-Richtung.

Eine Sache, die ich jetzt nicht finden kann, ist das Übersetzen von Attributtext. Beispielsweise

<img src="icon.png" alt="This Text should be Translated!" />

Habe ich das nur in der Dokumentation übersehen oder sollte ich dazu ein Ticket eröffnen?

Danke.

@martinmcwhorter ich denke du musst nur ein Attribut hinzufügen i18n-alt

@actimeo Das scheint zu funktionieren. Ich habe es versucht mit
<input type="text" i18n-placeholder placeholder="Who do you want to find?"/>

Dies ist dokumentiert ... in einer ausstehenden PR https://github.com/angular/angular.io/pull/2740

Ich dränge darauf , dass es bald zusammengeführt wird /cc @wardbell @Foxandxss

Wir planen keinen Support für übersetzte URLs, bis das Finale veröffentlicht ist. Danach hatten wir einige Ideen, wie wir das erreichen könnten, aber wir haben noch keine Entscheidungen getroffen.

Gibt es diesbezüglich Fortschritte? Es wird auch eine Möglichkeit zum Verknüpfen dieser übersetzten Routen benötigt.

Hallo Leute, anscheinend können wir mit Angular i18n nur Texte in Ansichten übersetzen. Aber was ist mit Nachrichten, die in den Code eingebettet sind? Etwas wie:

throw new Error('This request has failed')

Wie kann ich das übersetzen?

Ich gehe davon aus, dass Sie die Fehlermeldung an den Benutzer in der Ansicht beabsichtigen. In diesem
case fügen Sie einen Code mit Ihrer ausgelösten Ausnahme hinzu und ordnen Sie diesen Code a . zu
Nachricht in der Vorlage einer Fehlerbehandlungskomponente.

Am Mo, 12 Dez 2016, 15:04 Daniele Ghidoli, [email protected]
schrieb:

Hallo Leute, es scheint, dass wir mit Angular i18n nur Texte ins übersetzen können
Ansichten. Aber was ist mit Nachrichten, die in den Code eingebettet sind? Etwas wie:

throw new Error('Diese Anfrage ist fehlgeschlagen')

Wie kann ich das übersetzen?


Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/angular/angular/issues/9104#issuecomment-266453448 ,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/ABI5-kyVvBnng0jPTwvP3ZdHzumtHERYks5rHWKQgaJpZM4IxhKY
.

Ja, aber nicht nur Fehlermeldungen. Jede Zeichenfolge, die im Code hartcodiert werden kann und in der Ansicht nicht vorhanden ist. Die alte ngTranslate-Bibliothek für Angular1 verfügt über einen $translate Dienst, mit dem Sie einen String von einem Controller übersetzen und später verwenden können. Sollte ich alle Nachrichten in der Ansicht verschieben müssen? oder wird es einen anderen Weg geben?

Der Plan ist, Strings in TS übersetzen zu können - es gibt ein Problem bei der Verfolgung der Funktion in GH.

@vicb Könntest du bitte einen Link posten?

@ghidoz Ich war bei der Arbeit mit dem gleichen Problem konfrontiert und habe eine etwas hackige Problemumgehung codiert:

  • Es gibt eine Benachrichtigungskomponente, die den gesamten Anzeigemechanismus übernimmt.
  • Ich habe eine Benachrichtigungsinstanz für jede Fehler-/Warnungs-/Info-Situation hinzugefügt, die die Anwendung unterstützt
  • Jede Instanz enthält die entsprechenden lokalisierten Texte und wird mit *ngIf und/oder *ngSwitch ausgelöst, je nachdem, was besser passt

Danke @db6edr , ich habe den Punkt verstanden. Aber es ist nicht immer möglich. Ich muss zum Beispiel auch Web-Benachrichtigungen übersetzen, die keine Ansicht haben, in die ich alle möglichen Texte einfügen kann.

@vicb eine Roadmap dafür? Danke

@feloy Vorhin schrieben Sie "Das Entscheidende für mich ist stattdessen die Erkennung der Sprache beim Bootstrap". Wenn das Gebietsschema Kanada ist, laden Sie Englisch oder Französisch; Wenn das Gebietsschema Belgien ist, laden Sie Niederländisch, Französisch oder Deutsch, wenn sich der Benutzer in Südtexas befindet, laden Sie Englisch oder Spanisch? Ich fahre nicht einmal in die Schweiz oder nach Indien oder rede in vielen Ländern von Einwanderern - ich hoffe, du verstehst, worauf es ankommt. Es besteht ein echtes Benutzerbedürfnis, die Sprache zu ändern, nachdem die App geladen wurde. Angular 2 sollte diesen Bedarf unterstützen, wenn Sie eine globale Verwendung erwarten. Sobald sich die Sprache ändert, sehe ich keine Notwendigkeit, sie in jedem Aktualisierungszyklus zu überprüfen. Geben Sie dem Benutzer eine Nachricht, dass die Sprachänderung "einen Moment dauern wird", wenn das Änderungsereignis eintritt. Wenn der Benutzer die App verlässt, sollte diese Sprache in einem Cookie gespeichert und beim nächsten Mal mit dieser Sprache geladen werden. Das ist die beste Vermutung für die Präferenz des Benutzers.

Hallo @mLaird Ich rede von Sprachen, keine Länder, genau wie du. Jeder Browser bietet in seinen Einstellungen die Möglichkeit, die bevorzugte Sprache des Benutzers zu definieren. Wenn also ein texanischer Benutzer seine bevorzugte Sprache als es_US definiert, würde er wie erwartet eine spanische Benutzeroberfläche erhalten.

eine Roadmap dafür? Danke

Ich werde versuchen, einen Blick darauf zu werfen, was e/o diese Woche benötigt wird, und einen Plan vorlegen.

@Philippe MARTIN Ja, das ist möglich, aber du hast es mit mehr zu tun
technisch versierte Kunden als ich ;-) Dann sind da noch die Vorübergehenden
Benutzer - Benutzer in Bibliotheken, Benutzer in einem Freundeshaus, Benutzer an einem Flughafen
Kiosk usw. usw. Sie haben oft eine andere Sprachpräferenz als die
Browser-Einstellung.

Am Dienstag, 13. Dezember 2016 um 15:06 Uhr, Victor Berchet [email protected]
schrieb:

eine Roadmap dafür? Danke

Ich werde versuchen, diese Woche einen Blick darauf zu werfen, was e / o benötigt wird, und komme mit einem
planen.


Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/angular/angular/issues/9104#issuecomment-266846439 ,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/ADDSb05rHEK1RipS1btty5TFsQAwiE1Mks5rHvqygaJpZM4IxhKY
.

--

Mike Laird

12 Arbor Creek Drive, Pittsford, New York 14534
[email protected]

"... sich auf beiden Seiten daran erinnern, dass Höflichkeit kein Zeichen von Schwäche ist,
und Aufrichtigkeit ist immer beweispflichtig. Lass uns nie aus verhandeln
Angst, aber lasst uns keine Angst vor Verhandlungen haben." - John F. Kennedy

@mLaird Bitte sehen Sie sich meine Implementierung an. Sie können die Standardsprache überschreiben, indem Sie die App mit der neuen Sprache als Argument neu starten. Das klingt für mich vernünftig.
https://github.com/actimeo/simmage-ui (siehe Live-Demo)

Ich habe ein Problem mit Pluralen gefunden und wähle: Sind Sie sicher, dass es richtig implementiert ist?

Wenn ich nur eine normale Zeichenfolge habe, kann ich sie mit dem Befehl ng-xi18n exportieren, aber wenn ich eine Zeichenfolge mit Pluralen hinzufüge oder auswähle, funktioniert es nicht.

Verwenden von

<span i18n>{user.receivedReports, plural, =0 {No spam/scam reports} =1 {One spam/scam report} other {# spam/scam reports}}</span>

und

<span i18n>{currentConversation.user.online, select, true {Online} false {Offline}}</span>

Ich bekomme viele Parsing-Fehler wie diese:

Unexpected closing tag "li" ("plural, =0 {No spam/scam reports} =1 {One spam/scam report} other {# spam/scam reports}}</span>
    [ERROR ->]</li>

Mit der Kommentarsyntax erhalte ich beim Extrahieren keinen Fehler:

<!--i18n: select test-->
{user.online, select, true {Online} false {Offline}}
<!--/i18n-->
<!--i18n: plural test-->
{user.receivedReports, plural, =0 {No spam/scam reports} =1 {One spam/scam report} other {# spam/scam reports}}
<!--/i18n-->



md5-b6643fed0ae53c51b5e311fa11670548



<trans-unit id="2b10577df0a3d78b7e65c07d5760524f881f390a" datatype="html">
    <source>
        <x id="ICU"/>
    </source>
    <target/>
    <note priority="1" from="description">plural test</note>
</trans-unit>

<trans-unit id="e61681024eadd7f72e33f053f04c128910c419a2" datatype="html">
    <source>
        <x id="ICU"/>
    </source>
    <target/>
    <note priority="1" from="description">select test</note>
</trans-unit>



md5-1ed6d3f87b24b5bd78093a4ca13431c4



<msg id="3c8aef599bb96e303600aa44617acd0a7d602147">{user.receivedReports, plural, =0 {No spam/scam reports} =1 {One spam/scam report} other {# spam/scam reports} }</msg>
<msg id="06fe711b55463e3ee28d72239d77e9a50da62d86">{currentConversation.user.online, select, true {Online} false {Offline} }</msg> 

Wie übersetzt man Datum/Uhrzeit?

Das Datum wird mit der Datumspipe übersetzt

Am Mittwoch, den 4. Januar 2017, 08:12 Uhr zh99998, schrieb [email protected] :

Wie übersetzt man Datum/Uhrzeit?


Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/angular/angular/issues/9104#issuecomment-270315783 ,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/ABI5-gHZiWOREPwucdqwRhVIs9xwMgorks5rO1RngaJpZM4IxhKY
.

@feloy , in Ihrem Beispiel können Sie nur die Sprache auf der Anmeldeseite ändern möchten? Wie kann man die Anwendung manuell zerstören und erneut booten?

@dietergeerts das geht nur mit JIT, nicht mit AOT.

@rolandoldengarm , es ist auch mit AOT möglich, wenn Sie Ihre Übersetzungen beim Laden der Anwendung laden. Ich verwende derzeit etwas zwischen ngx-translate und dem offiziellen i18n, in dem Sinne, dass wir Pipes verwenden, um die Übersetzungen (reine) zu erhalten, aber wir laden nur eine Sprache beim Start und das Umschalten der Sprache erfordert einen Neustart des Anwendung (Wenn wir nur das Routing neu laden hätten, da das i18n-Setup in einer der Root-Auflösungen erfolgt)

@vicb

Ich werde versuchen, einen Blick darauf zu werfen, was e/o diese Woche benötigt wird, und einen Plan vorlegen.

Gibt es Neuigkeiten zur Roadmap? Speziell für eine i18n-Implementierung für Übersetzungen außerhalb von Vorlagen.

Ich interessiere mich auch sehr für die Möglichkeit, Strings in TypeScript zu übersetzen. Gibt es dazu eine ETA?

@Thomas-Kuipers @thelgevold Ich arbeite daran und es wird in 4.1 oder 4.2 (höchstwahrscheinlich) verfügbar sein.

@ocombe
wie man mit statischem Text bei der Interpolation umgeht, der keine ausgewählte Übersetzung verwenden kann.

<div i18n>{{exercise._desc ? exercise._desc : 'empty'}}</div>

String 'leer' kann nicht übersetzt werden

@rayer4u dies ist nicht Thema dieses Problems, für Supportfragen sollten Sie stackoverflow oder gitter verwenden.
Ich werde diese trotzdem beantworten, aber bitte hier keine weiteren Fragen stellen, die nichts mit den Zukunftsplänen von i18n zu tun haben.

Die Antwort lautet: Sie können es nicht tun, dynamische Übersetzungen werden von Angular i18n nicht unterstützt, da es zur Kompilier- oder Build-Zeit und nicht zur Laufzeit funktioniert.

Off Topic: Ich entschuldige mich
@rayer4u Die Lösung besteht darin, statische Übersetzungen zu verwenden:

<div *ngIf="exercise?._desc">{{ exercise?._desc }}</div>
<div *ngIf="!exercise?._desc" i18n>empty</div>

@ocombe Ich entschuldige mich für Off Topic, keine Notwendigkeit zu antworten. Ich habe einfach dieses Bedürfnis und kann keinen schnellen Weg finden, es zu besprechen. Ich denke, dies könnte von einem eckigen i18n-Plan betroffen sein. Da der Angular-i18n-Plan nicht mit Interpolation befasst ist, ist ein zusätzliches Markieren/Suchen/Ersetzen für mich derzeit die bessere Build-Time-i18n-Lösung.
@martinmcwhorter Danke für deine Antwort. Wir schreiben viel gemischte Wenn/Sonst-Logik, um verschiedene i18n-Texte in der Vorlage auszugeben. Dies ist die einfachste. Vielleicht ist das Einfügen von Laufzeittextlogik in die Vorlage eine schlechte Wahl.

Vielleicht ist dies eine schlechte Idee, aber kann nicht automatisch @@id in unseren i18n-Attributen hinzufügen, wenn wir das erste Mal extrahieren?

Nein, da wir dies bei der Bearbeitung des Codes pflegen müssten.
Nehmen wir an, Sie haben zwei gleiche Blöcke von i18n-Code, wir fügen die IDs hinzu und ändern dann einen von ihnen, die IDs stimmen nicht überein, was bedeutet, dass die nächste Extraktion diese überspringt ...

Ich bestätige, dass es eine schlechte Idee ist. Können Sie erklären, wie kantig weiß, wie man einem String dieselbe ID zuordnet, wenn wir immer wieder extrahieren, wie dieselbe ID auf dem String beibehalten wird? so mächtig, aber ich verstehe nicht :s

@ocombe

Wir sind jetzt bei v4, also schließe ich diese Ausgabe. Bitte informieren Sie sich in Nr. 16477 über unsere Pläne für v4 und darüber hinaus.

Dieses Problem wurde aufgrund von Inaktivität automatisch gesperrt.
Bitte reichen Sie ein neues Problem ein, wenn Sie auf ein ähnliches oder verwandtes Problem stoßen.

Lesen Sie mehr über unsere Richtlinie zum automatischen Sperren von Konversationen .

_Diese Aktion wurde automatisch von einem Bot ausgeführt._

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen