i10n angularjs分配翻译变量
i10n angularjs assign translate variable
好的,所以我有下面的小翻译文件:
{
"components" : {
"1" : "Video",
"2" : "Lyd",
"3" : "Dokument",
"4" : "Tekst"
}
}
然后我有以下李项目:
<li ng-repeat="type in componentTypes" ng-hide="module.module_type_id == 2 || module.module_type_id == 10"><a href="" ng-click="addComponent(type)" translate="components.{{1}}">{{type.name}}</a></li>
您需要注意的是:
<a href="" ng-click="addComponent(type)" translate="components.{{1}}">{{type.name}}</a>
或者更准确地说:
translate="components.{{1}}"
这样它就不会翻译<a></a>
标签。
然而,如果我做
translate="components.1"
它翻译正确,但是这种方法对我不起作用
所以我的问题是如何动态地更改translate属性的值?
components.{{1}}
不起作用的原因是Angular中的双curlies只是用来计算表达式。1只是一个数字,所以你每次都会得到components.1
。
如果我正确理解您需要什么,那么您需要有一个基于类型的相应组件。所以如果是type.id === 1
,那么你的类型就是Video
。
为了在Angular中动态实现这一点,您只需要具备:
translate="{{components[type.id]}}"
Fiddle
据我所知,如果向componentTypes数组添加了一个新类型,您希望动态化转换json。
有一个解决方案可以满足这种需求,您可以在这里实现一个新的自定义翻译加载程序工厂并以指定的方式使用它https://github.com/angular-translate/angular-translate/wiki/Asynchronous-loading.之后,您必须将这个新项目添加到您的数组的translationjson中,然后刷新翻译。
视图:
<div ng-app="myApp">
Links to jsfiddle.net must be accompanied by code. Please indent all code by 4 <div ng-controller="MyCtrl">
<input type="text" ng-model="type.name" /> <a href="javascript:;" ng-click="addComponent(type)">Add Component</a>
<ul>
<li ng-repeat="type in componentTypes" ng-hide="module.module_type_id == 2 || module.module_type_id == 10">{{ 'components.' + type.name | translate }}</li>
</ul>
</div>
</div>
应用程序的实施:
var myApp = angular.module('myApp', ['pascalprecht.translate']);
var components_en = {
"components": {
"1": "Video",
"2": "Lyd",
"3": "Dokument",
"4": "Tekst"
}
};
myApp.config(function ($translateProvider) {
$translateProvider.useLoader('customLoader', {});
$translateProvider.translations('en', components_en);
$translateProvider.preferredLanguage('en');
});
myApp.controller('MyCtrl', function ($scope, $translate) {
$scope.module = {
module_type_id: 1
};
$scope.addComponent = function (type) {
// Add the componentTypes array you took from database
$scope.componentTypes.push({
name: $scope.componentTypes.length + 1
});
// Add the translation object
components_en["components"][$scope.componentTypes.length] = type.name;
console.log(components_en);
$translate.refresh();
};
$scope.componentTypes = [{
name: 1
}, {
name: 2
}, {
name: 3
}, {
name: 4
}];
});
myApp.factory('customLoader', function ($http, $q) {
return function (options) {
var deferred = $q.defer();
deferred.resolve(components_en);
return deferred.promise;
}
})
我为类似的用法准备了一个演示,请在jsfiddle:下面
http://jsfiddle.net/nerezo/1z071wzg/6/
注意:这种类似翻译的修改将不会持久,新的翻译将丢失。
请尝试一下:
translate="{{'components.' + type.id}}" //if there is id in type
或
translate="{{'components.' + ($index + 1)}}"
相关文章:
- 将函数的上下文应用于javascript变量
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 将PHP变量传递给jQuery时遇到问题
- 如何通过ajax刷新JSF填充的javascript变量
- 参数变量出现ngTable指令问题
- 通过javascript重定向html传递php变量
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 全局变量和全局对象的属性之间有什么区别吗
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 值对象在某个变量发生更改后发生更改
- Javascript变量赋值|
- 如何在javascript上使用flak-babel进行翻译
- AngularJS-在JSON选择器中使用变量名
- i10n angularjs分配翻译变量
- 如何在全局变量中通过角度平移存储翻译的值
- Raphael.js 2.0动画翻译变量不一致?(新手)
- 翻译API:变量文本翻译为空
- 动态翻译/带有i18next变量的翻译
- i18next翻译包中的Ejs变量