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

Ember.js 如何使用I18n.js翻译动态密钥,ember.js,Ember.js,在使用Ember实现多语言web应用程序时,我需要使用字符串,这些字符串将被翻译成用户选择的语言。对于Ember,I18n.js就是这样做的。它提供了一个Handlebars助手,它接受一个键字符串并处理转换:{t login.username}将查找键“login.username”,并用当前语言的相应文本替换它。 我的问题是,这个助手接受一个文本字符串值并使用该值进行查找,但我在某些地方引用了一个字符串。例如,我用一个{{#each}}表达式在一个散列数组上循环,然后我必须从每个散列中转换一

在使用Ember实现多语言web应用程序时,我需要使用字符串,这些字符串将被翻译成用户选择的语言。对于Ember,I18n.js就是这样做的。它提供了一个Handlebars助手,它接受一个键字符串并处理转换:{t login.username}将查找键“login.username”,并用当前语言的相应文本替换它。 我的问题是,这个助手接受一个文本字符串值并使用该值进行查找,但我在某些地方引用了一个字符串。例如,我用一个{{#each}}表达式在一个散列数组上循环,然后我必须从每个散列中转换一个值。我想向translation Handlebar助手提供的是一个表达式,它必须在当前上下文中进行计算,以确定translation键。不幸的是,I18n.js提供的帮助程序不支持这一点。
如何将I18n.js功能与表达式而不是文字一起使用?

I18n.js提供的Handlebars帮助程序使用函数I18n.t(键、选项)进行真正的转换。 您可以编写自己的助手来使用相同的函数。下面是一个不支持“options”参数的示例实现

Em.Handlebars.registerHelper('translate', function(keypath, options) {
    var translationKey = Em.Handlebars.get (this, keypath, options);
    return Em.I18n.t(translationKey);
});
然后可在车把表达式中使用:

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