Aplikacja Durandal (knockout) z obsługą wielu języków
Buduję wielojęzyczną obsługę aplikacji, nad którą pracuję. Po wykonaniu pewnych badań i czytaniu SO (najlepsza praktyka internacjonalizacji) Próbuję zintegrować to w sposób „przyjazny ramom”. To, co zrobiłem w tej chwili, jest następujące:
Utworzono moduły .resource sformatowane tak:
resources.en-US.js
define(function () {
return {
helloWorlLabelText: "Hello world!"
}
});
W app.start otrzymuję moduł zasobów z requirejs i przypisuję wszystkie dane do app.resources. Wewnątrz każdego modułu do obserwowalnych przypisywany jest określony zasób i związany z tekstem wiążącym etykiety i inne rzeczy związane z tekstem. Tak jak:
define(function (require) {
var app = require('durandal/app'),
router = require('durandal/plugins/router')
};
return{
helloWorldLabelText: ko.observable(app.resources.helloWorldLabelText),
canDeactivate: function () {
}
}
});
On the view:
<label for="hello-world" data-bind="text: helloWorldLabelText"></label>
Zasoby są zamieniane tylko przez przypisanie nowego modułu do app.resources.
Teraz problem polega na tym, że język został zmieniony i niektóre widoki zostały już wyrenderowane, wartości poprzedniego języka nadal istnieją. Skończyło się więc na przypisywaniu obserwowalnych wewnątrzAktywuj metoda. Próbowałem również zawinąć app.resources w obserwowalne, ale to też nie zadziałało.
Nie sądzę, że skończyło mi się na najczystszym sposobie i może ktoś inny miał inny sposób, który mógłby się dzielić. Dzięki.