Javascript 使用自定义过滤器的Angularjs翻译
这是一个从angularjs 1.2升级到1.6的老项目,它使用常量、服务和过滤器进行翻译。 字符串在所有页面范围内的翻译都正常,但升级后不起作用。下面是一个关于代码如何使用的示例: app.jsJavascript 使用自定义过滤器的Angularjs翻译,javascript,angularjs,Javascript,Angularjs,这是一个从angularjs 1.2升级到1.6的老项目,它使用常量、服务和过滤器进行翻译。 字符串在所有页面范围内的翻译都正常,但升级后不起作用。下面是一个关于代码如何使用的示例: app.js .constant("config", { "translations": { 'es': { 'Default string': 'String por defecto', } } }); service.js return function
.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>
实际上,在这一点上,数据是使用$resource检索的
重点和问题是,当用户单击ChangeLanguage时,所有使用{{‘String’| translate}}的字符串都必须在所有范围内进行翻译。在升级之前,这是有效的
让我大吃一惊的是,我不明白过去为什么会工作,因为过滤器不会再次调用,作用域也不会连接到服务。。。
如何使用自定义筛选器“刷新”应用程序中所有控制器和作用域中的字符串?这里是您的问题所在。把它贴在问题上。我试图解决,但我不知道为什么它不起作用。如果我做错了什么,请更新小提琴并告诉我。祝你好运,非常感谢!此处更新:但配置更改时过滤器翻译刷新仍不工作…确定,已解决。从Angular 1.3开始,内容只使用“刷新”一次过滤器,它不是“状态感知”的,因为文字字符串永远不会改变…有必要添加过滤器。$stateful=true;在filter declaration.Woow中,很难找到解决方案。如果可以,请更新JSFIDLE,以便我可以发布答案或自己发布…:)是的,一场噩梦!谢谢!这是你的问题的答案。把它贴在问题上。我试图解决,但我不知道为什么它不起作用。如果我做错了什么,请更新小提琴并告诉我。祝你好运,非常感谢!此处更新:但配置更改时过滤器翻译刷新仍不工作…确定,已解决。从Angular 1.3开始,内容只使用“刷新”一次过滤器,它不是“状态感知”的,因为文字字符串永远不会改变…有必要添加过滤器。$stateful=true;在filter declaration.Woow中,很难找到解决方案。如果可以,请更新JSFIDLE,以便我可以发布答案或自己发布…:)是的,一场噩梦!谢谢!
var vm = this;
vm.language = 'Select language';
vm.changeLanguage = function(lang) {
$rootScope.lang = lang;
};