Как интернационализация настроена для Hogan.js?


Я хочу использовать Хогана.js для создания html-формы шаблона в браузере. Я читал, что hogan поддерживает i18n, но я не могу найти пример того, как это работает. Как вы передаете переведенный текст Хогану и какой тег вы ставите в шаблоне, я видел и {{_i}}, и {{i18n}}?

2 3

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

Я действительно не вижу преимущества использования специальной версии усов с поиском глобальной функции (производительность, возможно?).