Я не думаю, что ответ Silent действительно решает/объясняет проблему.
Настоящая проблема в том, что вам нужно дважды запустить Mustache (или использовать что-то еще, а затем Mustache).
То есть большинство 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.
Одним из способов решения предыдущей проблемы является предварительная обработка шаблонов усов.
person
Adam Gent
schedule
04.04.2012