Я не думаю, что ответ Silent действительно решает / объясняет проблему.
Реальная проблема в том, что вам нужно дважды запустить Усы (или использовать что-то еще, а затем Усы).
ЭтоВ большинстве случаев i18n работает как двухэтапный процесс, подобный следующему:
- Визуализация текста i18n с заданными переменными.
- Визуализация HTML с отображаемым в тексте текстом i18n.
Вариант 1: Использовать частичные усы
<p>{{> i18n.title}}</p>
{{#somelist}}{{> i18n.item}}{{/somelist}}
Данные для этого шаблона усов могут быть следующими:
{
"amount" : 10,
"somelist" : [ "description" : "poop" ]
}
Тогда вы сохраните все свои шаблоны / сообщения i18n какмассивный JSON-объект шаблонов усов на сервере:
Ниже приведены переводы "en":
{
"title" : "You have {{amount}} fart(s) left",
"item" : "Smells like {{description}}"
}
Теперь существует довольно большая проблема с этим подходом в том, что усы не имеют логикитак что обработка таких вещей, как плюрализм, становится грязной.Другая проблема заключается в том, что при такой частичной загрузке производительность может быть плохой (возможно, нет).
Вариант 2: пусть i18n сервера выполнит свою работу.
Другой вариант - позволить серверу выполнитьпервый проход расширения (шаг 1).У Java есть много вариантов расширения i18n. Я полагаю, что и другие языки тоже.
Что довольно раздражает в этом решении, так это то, что вам придется загружать модель дважды.Один раз с обычной моделью и второй раз с расширенными шаблонами i18n.Это довольно раздражает, так как вам нужно точно знать, какие расширения / шаблоны i18n следует развернуть и вставить в модель (в противном случае вам придется развернуть все шаблоны i18n).Другими словами, вы получите несколько хороших нарушений DRY.
Одним из способов решения предыдущей проблемы является предварительная обработка шаблонов усов.