Dans mon projet, j'utilise Polymer 1 et i18next
(et i18next-xhr-backend
) pour implémenter l'internationalisation. L'approche de base que j'ai suivie (voir ci-dessous) fonctionne très bien, mais lorsque l'utilisateur change de langue, les liaisons de données Polymer ne sont pas mises à jour.I18Next & Polymer: mise à jour des liaisons de données en cas de changement de langue
L'approche actuelle est la suivante:
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);
}
});
Et dans mes éléments que je tends les traductions comme
<div>[[myVeryCoolTranslationMethod('application.welcomeMessage')]]</div>
ou par programmation via
Polymer.CoolI18N.t('application.welcomeMessage')
Le problème est le suivant: quand je charger une nouvelle langue à l'exécution (comme de
), il est chargé comme il se doit, mais les liaisons de données ne sont pas mises à jour et toutes les chaînes sont définies dans en
ou default
.
i18next
déclenche un événement languageChanged
je peux attraper comme ceci:
i18next.on('languageChanged', (newLang) => {
console.log("language changed to:", newLang);
});
Et c'est exactement le point où Polymer a besoin de savoir quelque chose a changé ...
Est-il possible de réaliser, que ces les liaisons de données sont-elles notifiées? Je ne veux pas mettre à jour toutes les reliures manuellement ...
Merci d'avance!
Juste de côté i18next -> vous avez obtenu un rappel sur i18next.changeLanguage à l'intérieur que vous pouvez déclencher tout ce qui met à jour les liaisons en polymère (polymère non utilisé mais n'ayant pas une idée pour cela ... désolé). Ou lier changeLanguage via https://www.i18next.com/api.html#onlanguagechanged Désolé ne peut pas aider pour la partie polymère ... – jamuhl
Oui, c'est vrai - je geht la 'i18enxt.on (» LanguageChanged ', ... 'événement, mais c'est exactement le point où je ne sais pas comment notifier Polymer ... – sebastian
Selon https://stackoverflow.com/questions/27159625/polymer-using-a-function- in-a-data-binding-expression Polymer regarde les params pour la mise à jour des fonctions dans les liaisons de données, alors peut-être que vous pouvez ajouter la clé de langue comme paramètre aux appels du traducteur!? – SJFrK