私が取り組んでいるアプリの多言語サポートを構築しています。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 をオブザーバブルにラップしようとしましたが、それもうまくいきませんでした。
私が最終的に最もクリーンな方法にたどり着いたとは思いませんし、他の誰かが共有できる別の方法を持っていたのかもしれません。ありがとう。