所以我试图为网页实现多语言支持。在控制器中保存JSON并显示这些值工作正常,如果我将JSON更改为另一种语言,它也会像它应该更新。
但我认为以另一种方式实现它可能会更好,因此指令中的字符串也会被翻译。所以我写了一个自定义过滤器,应该可以完成这项任务。
目前我有一个languageFactory,它通过$ http提供JSON。过滤器访问json。此时的问题是,在加载JSON之后,它不会再次使用过滤器转换表达式。如果我手动更改值,则过滤器会再次翻译它。有没有办法翻译使用过滤器的所有表达式? $ apply不起作用,因为表达式值没有改变
由于我在6周前才开始使用Angular,我不确定这个解决方案是否合适。我也希望听到其他可能性来实现这一点。
// LanguageFactory
lang.changeLanguage = function(language) {
$http.get("assets/lang/" + language + ".json").success( function(json) {
lang.all = json;
lang.promise.resolve();
});
};
// TranslateFilter
return function(item) {
var lang = null;
if(LanguageFactory.all === null) {
LanguageFactory.getPromise().promise.then(function() {
lang = LanguageFactory.all;
});
}
else {
lang = LanguageFactory.all;
}
if(lang !== null) {
return lang[item]; // <- RETURN here translation
}
else {
return "";
}
};
// index.html
<span id="test1">{{iCtrl.something | translate}}</span>
我的问题是,如果表达式的值没有改变,则不会重新应用过滤器,但我希望即使这些表达式没有任何改变也会重新应用它。
答案 0 :(得分:0)
看看这个:http://jsfiddle.net/TahmidTanzim/N9Vqk/
但是你的问题是,使用过滤器:
angular.module('App.filters', []).filter('companyFilter', [function () {
return function (clients, selectedCompany) {
/* Here implement your filter custom by language. Look example in link jsfiddle */
};
}]);
在html中:
<tr data-ng-repeat="client in filtered = (clients | companyFilter:<language selected>)">