In meinem Projekt verwende ich Polymer 1 und i18next
(und i18next-xhr-backend
), um die Internationalisierung zu implementieren. Der grundlegende Ansatz, den ich gemacht habe (siehe unten), funktioniert sehr gut, aber wenn der Benutzer die Sprache ändert, werden Polymer-Datenbindungen nicht aktualisiert.I18Next & Polymer: Datenbindungen aktualisieren, wenn die Sprache geändert wurde
Der derzeitige Ansatz ist wie folgt:
const i18next = require('i18next');
const i18nextXHRBackend = require('i18next-xhr-backend');
i18next
.use(i18nextXHRBackend)
.init({
fallbackLng: ['en', 'default'],
debug: true,
backend: {
loadPath: '/locale/locales/{{lng}}.json',
crossDomain: false
}
}, function(err, t) {
console.log("Init done...");
});
if (!Polymer || !Polymer.Base) {
console.warn('CoolI18N needs Polymer to be loaded.');
}
Polymer.CoolI18N = i18next;
Polymer.Base._addFeature({
myVeryCoolTranslationMethod: function(...params) {
return i18next.t(params);
}
});
Und in meinem Elemente erreiche ich die Übersetzungen wie
<div>[[myVeryCoolTranslationMethod('application.welcomeMessage')]]</div>
oder programmatisch über
Polymer.CoolI18N.t('application.welcomeMessage')
Das Problem ist: wenn ich eine neue Sprache zur Laufzeit laden (wie de
), wird es geladen, wie es sollte, aber Die Datenbindungen werden nicht aktualisiert und alle Zeichenfolgen werden in en
oder default
festgelegt.
i18next
feuert ein languageChanged
Ereignis ich so fangen kann:
i18next.on('languageChanged', (newLang) => {
console.log("language changed to:", newLang);
});
Und das ist genau der Punkt, an dem Polymer muss etwas geändert wissen ...
Gibt es eine Möglichkeit, zu erreichen, dass diese Datenbindungen werden benachrichtigt? Ich möchte nicht jede Bindung manuell aktualisieren ...
Vielen Dank im Voraus!
gerade von i18next Seite -> got Sie einen Rückruf auf i18next.changeLanguage innerhalb, dass Sie auslösen können, was auch immer Bindungen in Polymer aktualisiert (nicht verwendet Polymer noch keine Idee dafür ... Entschuldigung). Oder binden Wechsler über https://www.i18next.com/api.html#onlanguagechanged Sorry für die Polymerteil nicht helfen kann ... – jamuhl
Ja, das ist wahr - ich die 'i18enxt.on was geht (‘ languageChanged ', ... 'Ereignis, aber das ist genau der Punkt, an dem ich nicht weiß, wie man Polymer benachrichtigt ... – sebastian
Nach https://stackoverflow.com/questions/27159625/polymer-using-a-function- in-a-data-binding-expression Polymer betrachtet die Parameter für das Aktualisieren von Funktionen in Datenbindungen, vielleicht können Sie den Sprachschlüssel als Parameter für die Aufrufe des Übersetzers hinzufügen !? – SJFrK