我使用流星+ Angular2 +离子本地化不与离子标签的流星标题
现在我需要添加i18n到我的项目。在尝试学习Angular官方I10n和角度翻译之后,我因为缺乏对我有意义的例子而放弃了它们。
最后我用:
meteor npm install angular-localization --save
这个包很简单:每一种语言都有一个包含所有键和值对应的JSON文件。 i18n指令只是加载值并设置为元素的innerText。我做了一些修改,并喜欢使用它,直到我试图设置ion-tab的标题。
主要功能在我的修改后的角度定位的来源是:
angular
.module('i18n')
.directive('i18n', ['$rootScope', '$i18n', function($rootScope, $i18n) {
return {
priority: 100,
link: function(scope, element, attrs) {
function applyTabTitle(translation) {
var tabs = element.parent();
var idx = tabs.children('ion-tab').index(element);
var a = tabs.children('a').eq(idx);
a.children('span.tab-title').text(translation);
}
function applyLocal() {
try {
var jsn = JSON.parse(attrs.i18n);
for (prop in jsn) {
var translation = $i18n(jsn[prop]);
if (prop == 'tabtitle') {
applyTabTitle(translation);
} else {
element.attr(prop, translation);
}
}
} catch (e) {
var translation = $i18n(attrs.i18n);
element.text(translation);
}
}
applyLocal();
$rootScope.$on('i18n.language:change', function() {
applyLocal();
});
}
}
}]);
如图ionTabNav限定的离子选项卡将被扩展成像这样
<ion-tab icon-on="ios-icon-home" href="#/home"></ion-tab>
<a ng-class="tab-item">
<i class="icon"></i>
<span class="tab-title" ng-bind-html="title"></span>
</a>
所以,我不能只用这个(主页是语言键):
<ion-tab data-i18n="homepage" ...>..</ion-tab>
因为“element.text(translation)”会破坏扩展。这就是为什么我发明了“applyTabTitle”功能,然后使用HTML如下:
<ion-tab data-i18n='{"tabtitle":"profile"}'>..</ion-tab>
但遗憾的是,经过短短重定向从登录页面网页上的“$ state.go标签的标题仍然是空白(“主页')“,而如果我刷新主页,标题显示正确。
我想也许是因为i18n重定向没有在ionTab重定向之前运行。所以我试图将优先级设置为100.但没有效果。
也许我从一开始就走错了路。我想说的是这些高度自动化的框架非常难以定制。发展过程是如此坎坷。
非常感谢任何提示。