2013-08-06 4 views
0

При внедрении многоязычного веб-приложения с Ember мне пришлось использовать строки, которые были бы переведены на язык по выбору пользователя. Для Ember есть I18n.js, который делает именно это. Он предоставляет хелпер Handlebars, который берет ключевую строку и обрабатывает перевод: {{t login.username}} будет искать ключ «login.username» и заменять его соответствующим текстом текущего языка. Моя проблема заключается в том, что этот помощник принимает буквальное строковое значение и выполняет поиск с этим значением, но в некоторых местах я ссылаюсь на строку. Например, я перебираю массив хэшей с выражением {{#each}}, и тогда мне придется переводить значение из каждого хэша. То, что я хотел бы предоставить для перевода. Handlebars helper - это выражение, которое нужно было бы оценить в текущем контексте, чтобы определить ключ перевода. К сожалению, помощник, предоставленный I18n.js, не поддерживает этого. Как я могу использовать функциональность I18n.js с выражением вместо литерала?Как перевести динамический ключ с I18n.js

ответ

0

Хелпер Handlebars, предоставляемый I18n.js, использует функцию 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}} 
Смежные вопросы