使用EmberJS进行本地化
Localization with EmberJS
我有一个I18n应用程序,它通过返回JSON的ajax调用加载语言环境的翻译。
现在,它将JSON放入Em.STRINGS中。在HTML中,我有一个像这样的车把标签
{{translate context key="LOGOUT_LABEL"}}
我已经在我的JS中写了一个助手,看起来像这样
Ember.Handlebars.registerHelper('translate', function(property, options) {
var key = options.hash && options.hash.key,
replacants = options.hash && options.hash.values, value;
if (key) {
value = Em.String.loc(key, replacants ? Em.String.w(replacants) : []);
return value ;
}
});
运行时,首先绘制HTML,然后进行AJAX调用。所以,翻译实际上不会显示!我该如何解决这个问题?
这里是小提琴URL: http://jsfiddle.net/infinityat0/gBa7T/
这行不通:
var App = Em.Application.create({
locale: 'en_US',
init: function () {
var locale = this.get('locale') || 'en_US';
$.get("http://localhost:8000/translations.json", {
locale: locale
}, function (data) {
Ember.STRINGS = data;
});
}
});
实际上你的小提琴工作,如果你替换AJAX-Call。对本地主机的ajax调用不能立即工作。在这里查看工作版本。
更新:如果您想为这个用例编写一个自己的助手,那么您必须创建一个绑定的助手。这在最新的ember版本(ember doc)中可用。您的代码可以像这样:
Em.Handlebars.registerBoundHelper('translate', function (property, options) {
var key = options.hash && options.hash.key,
replacants = options.hash && options.hash.values,
value;
if (key) {
value = Em.String.loc(key, replacants ? Em.String.w(replacants) : []);
console.log(value);
console.log(Ember.STRINGS);
return value;
}
}, "Ember.STRINGS");
注意:有一个叫做ember-i18n的项目。您可能应该在此基础上构建,而不是在如此低级的api上工作。
相关文章:
- Emberjs应用程序加载在除Index之外的所有路由上
- EmberJS中支持单字母单词模型
- Angularjs 1.5.x本地化最佳实践
- 什么'是在asp.net MVC中将本地化的resources.resx文件转换为javascript文件的有效
- 在Datatables中设置本地化后,需要更改标签文本
- EmberJS-适用于各种模型的适配器动态名称空间
- 我的组件的Emberjs特定的SCSS文件
- 如何在emberjs中使用幻影假数据进行分页
- Emberjs#每个循环不处理数组数据
- 如何获取整个laravel语言(本地化)数据
- 如何设置EmberJS组件的上下文
- 通过emberJS中的控制器修改组件的属性
- EmberJS无法找到视图异常
- EmberJs-将所有来自子组件的操作路由到父组件,再路由到父控制器
- EmberJS and REST
- 搜索引擎可爬网应用程序的EmberJS技术堆栈
- 如何本地化配色系统
- 升级emberjs-script以支持最新版本
- js中的本地化字符串消息
- 使用EmberJS进行本地化