Как интернационализация настроена для Hogan.js?
Я хочу использовать Хогана.js для создания html-формы шаблона в браузере. Я читал, что hogan поддерживает i18n, но я не могу найти пример того, как это работает. Как вы передаете переведенный текст Хогану и какой тег вы ставите в шаблоне, я видел и {{_i}}, и {{i18n}}?
2 ответа:
Похоже, я перепутал старую вилку усов .js из Twitter, с Hogan отдельным компилятором усов из Также из twitter. Вилка поддерживает тег
{{_i}}
для интернационализации. Это вызовет глобальную функцию с именем_
, в которой вы предоставляете свой собственный метод для поиска переведенного значения. Например,translatedStrings = { name: "Nom"; } function _(i18nKey) { return translatedStrings[i18nKey]; } var template = "{{_i}}Name{{/i}}: {{username}}", context = {username: "Jean Luc"}; Mustache.to_html(template, context);
Вернет "Nom: Jean Luc". В то время как с Hogan интернационализация достигается с нормальным усатые лямбды, например:
translatedStrings = { name: "Nom"; } var template = "{{#i18n}}Name{{/i18n}}: {{username}}", context = { username: "Jean Luc", i18n: function (i18nKey) {return translatedStrings[i18nKey];} }; Hogan.compile(template).render(context);
См. http://mustache.github.com/mustache.5.html подробнее о предоставлении лямбд. Таким образом, основное различие заключается в том, что функция поиска переводов должна всегда предоставляться в контексте при рендеринге с помощью Hogan, тогда как вилка усов будет искать глобальный метод.
На самом деле это легко совместить с другими подходами к интернационализации. Мы используем jQuery-i18n-properties, который является плагином jQuery, поддерживающим использование .файл свойств, которые совместимы с Java.
Фреймворк пытается загрузить файл под названием Messages.свойства и в зависимости от браузеров языке приводятся Messages_en.свойства и Messages_en_US.свойства. Это позволяет очень быстро построить иерархию переводов.
Так немного меняется пример слэшника и использование hogan / mustache, я пишу:
var template = "{{#i18n}}Name{{/i18n}}: {{username}}", context = { username: "Jean Luc", i18n: function (i18nKey) {return jQuery.i18n.prop(key);} }; // Init i18n jQuery.i18n.properties( { name:'Messages', path:'some/path', mode : 'map' }); Hogan.compile(template).render(context);
Сообщения.файл свойств:
Name = Name
Messages_fr.файл свойств:
Name = nom
Я действительно не вижу преимущества использования специальной версии усов с поиском глобальной функции (производительность, возможно?).