如何使用I18n.js翻译动态密钥

时间:2013-08-06 06:18:33

标签: ember.js

在使用Ember实现多语言Web应用程序时,我需要使用可以转换为用户选择语言的字符串。对于Ember来说,I18n.js就是这样做的。它提供了一个Handlebars帮助器,它接受一个键字符串并处理转换:{{t login.username}}将查找键“login.username”并将其替换为当前语言的相应文本。 我的问题是这个帮助器获取一个文字字符串值,并使用该值进行查找,但我在某些地方有一个字符串的引用。例如,我使用{{#each}}表达式循环遍历哈希数组,然后我必须从每个哈希值转换一个值。我想为翻译Handlebars helper提供的是一个表达式,必须在当前上下文中进行评估才能确定翻译键。不幸的是,I18n.js提供的帮助不支持。 如何将I18n.js功能与表达式而不是文字一起使用?

1 个答案:

答案 0 :(得分:0)

I18n.js提供的Handlebars助手使用函数I18n.t(key,options)来进行真正的翻译。 您可以编写自己的帮助程序,使用相同的功能。以下是不支持'options'参数的示例实现。

Em.Handlebars.registerHelper('translate', function(keypath, options) {
    var translationKey = Em.Handlebars.get (this, keypath, options);
    return Em.I18n.t(translationKey);
});

然后可以在Handlebars表达式中使用它:

{{#each type in dishtypes}}
{{translate type.key}}
{{/each}}