усы/hogan i18n и с учетом порядка слов

Нашел пару вопросов (и ответов) по этому поводу: Как настроена интернационализация для Hogan .js? и т. д.

но не в частности, которые принимают во внимание порядок слов. Мне нужна способность:

  • шаг 1. при наличии ключа -> поиск предложения на определенном языке.

  • Шаг 2. Это предложение может содержать {{var}} , которые необходимо
    заменить json-значениями.

шаг 2. сам по себе является общим шаблоном усов.

Шаг 1 можно выполнить отдельно с помощью нескольких методов, но я предпочитаю методы, которые не включают какой-либо специализированный код за пределами движка Mustache/Hogan (конечно, в сочетании с пакетом ресурсов i18n). Хоган, кажется, поддерживает это чем-то вроде: (из приведенного выше URL-адреса)

var template = "{{#i18n}}Name{{/i18n}}: {{username}}",
    context = {
       username: "Jean Luc",
       i18n: function (i18nKey) {return translatedStrings[i18nKey];}
    };

Однако, чтобы объединить 1. и 2. в этом примере, я бы хотел, чтобы translatedStrings[i18nKey] возвращал строку, которая потенциально также содержит {{<some expansion>}}.

Кто-нибудь знает элегантный способ сделать это?

Обоснование: часто языки сильно различаются порядком слов и т. д., что делает сложные шаблоны без этой возможности.


person Geert-Jan    schedule 04.04.2012    source источник


Ответы (1)


Последняя версия Hogan.js будет обрабатывать теги Mustache внутри результата, возвращаемого из лямбда-выражения. Однако одно незначительное изменение кода в вашем вопросе заключается в том, что результатом лямбда должна быть функция для изменения строки:

var translatedStrings = { name: "Nom {{rank}}" };

var template = "{{#i18n}}name{{/i18n}}: {{username}}",
    context = {
        username: "Jean Luc",
        rank: 'Captain',
        i18n: function() {
            return function (i18nKey) {return translatedStrings[i18nKey];};
        }
    };

document.write(Hogan.compile(template).render(context));​ // Nom Captain: Jean Luc

Я создал jsfiddle, который демонстрирует это в последней версии.

person Phuong LeCong    schedule 18.04.2012