这是一个从angularjs 1.2升级到1.6的旧项目,它使用常量,服务和过滤到翻译。 字符串在所有页面范围内都已正常翻译,但升级后无法正常工作。有关代码如何的示例:
app.js
.constant("config", {
"translations": {
'es': {
'Default string': 'String por defecto',
}
}
});
service.js
return function(text) {
var lang = $rootScope.lang;
var langExists = typeof config.translations[lang] !== 'undefined';
if (lang && langExists && config.translations[lang][text]) {
return config.translations[lang][text];
}
return text;
};
filter.js
return function(text) {
return translateService(text);
};
的index.html
<div class="dropdown pull-right">
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">
{{ 'Default string' | translate }} <span class="caret"></span></button>
<ul class="dropdown-menu" style="cursor:pointer;">
<li><a ng-href="#" ng-click="header.changeLanguage('es')">es</a></li>
<li><a ng-href="#" ng-click="header.changeLanguage('en')">en</a></li>
</ul>
</div>
controller.js
var vm = this;
vm.language = 'Select language';
vm.changeLanguage = function(lang) {
$rootScope.lang = lang;
};
实际上,在这一点上,使用$ resource检索数据。
问题在于,当用户点击更改语言时,使用{{&#39; String&#39; |必须在所有范围内翻译翻译}}。在升级之前,这可行。
我的想法是,我无法理解为什么过去工作,因为过滤器没有被再次调用,并且范围没有连接抛出服务...... 如何刷新&#34;应用程序中使用自定义过滤器翻译的所有控制器和范围中的字符串?