Как настраивается интернационализация для Hogan.js? - PullRequest
3 голосов
/ 09 февраля 2012

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

Ответы [ 2 ]

3 голосов
/ 13 февраля 2012

Казалось бы, я путал более старую вилку из Mustache.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);

Вернул бы "Ном: Жан Люк". Принимая во внимание, что с Hogan интернационализация достигнута с нормальными лямбдами усов, например ::11012*

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, тогда как усиковая вилка будет искать глобальный метод.

1 голос
/ 19 сентября 2012

На самом деле это легко сочетать с другими подходами интернационализации Мы используем jquery-i18n-properties, который является плагином jQuery, который поддерживает использование файлов .properties, которые совместимы с Java.

Фреймворк пытается загрузить файл с именем Messages.properties и в зависимости от языка браузера для примера Messages_en.properties и Messages_en_US.properties. Это позволяет очень быстро построить иерархию переводов.

Так что, слегка изменив пример слешника и используя хоган / усы, я пишу:

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);

Файл Messages.properties:

Name = Name

Messages_fr.properties Файл:

Name = nom

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

...