Я создаю многоязычную поддержку для приложения, над которым я работаю. После некоторых исследований и чтения SO (лучшей практики интернационализации) я пытаюсь интегрировать это в "дружественный к среде" способ. То, что я сделал в данный момент, следующее:
Созданы модули .resource, отформатированные так:
resources.en-US.js
define(function () {
return {
helloWorlLabelText: "Hello world!"
}
});
На app.start я получаю модуль ресурсов с requirejs и присваиваю все данные app.resources. Внутри каждого модуля определенный ресурс присваивается наблюдаемым и связан с привязкой текста к меткам и другим связанным с текстам вещам. Например:
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>
Ресурсы заменяются путем назначения нового модуля app.resources.
Теперь проблема в том, когда язык изменен, и некоторые из представлений уже отображены, значения предыдущего языка все еще существуют. Поэтому я закончил переназначение наблюдаемых внутри метода активации. Также попытался обернуть app.resources в наблюдаемый, но это тоже не сработало.
Я не думаю, что закончил с самым чистым способом, и, возможно, у кого-нибудь еще был другой способ, который мог бы поделиться. Спасибо.