Google Closure Templates создает несколько файлов JavaScript для каждого языка вместо единой базы кода JavaScript с отдельными файлами ресурсов.

Я использую шаблон закрытия Google, чтобы написать пользовательский интерфейс моего приложения с помощью JavaScript. Посмотрите на этот вопрос, чтобы подробно узнать, почему я использую шаблон закрытия Google. Я хочу, чтобы он был многоязычным. Я вижу, что есть переключатель --locales, а также просмотрел примеры, представленные в проекте здесь и здесь. В файлах README_FOR_EXAMPLES написано, что

+ simple_generated_en.js, features_generated_en.js,
simple_generated_x-zz.js, features_generated_x-zz.js Файлы JS, сгенерированные SoyToJsSrcCompiler, когда он выполняется на simple.soy и features.soy (языки 'en' и 'x -zz» с переведенными файлами XLIFF из общего каталога примеров «examples» и с указанным выше глобальным файлом времени компиляции). Нам нужны как simple.soy, так и features.soy, потому что некоторые шаблоны в features.soy вызывают шаблоны в simple.soy. Примечание. Пример цели Ant (и аргументов командной строки), который генерирует эти файлы, см. в разделе target 'js-features-example' в файле build.xml верхнего уровня.

Я ожидал, что он сгенерирует только одну базу кода JavaScript, которая будет использовать нужные строки из соответствующего файла локали на основе параметра, предоставленного во время выполнения до вызова функции шаблона. Возможно ли это с шаблонами закрытия?


person IsmailS    schedule 10.08.2011    source источник


Ответы (1)


Насколько я понимаю, вы можете использовать словарь-объект в качестве параметра для вашего шаблона.

/**
 * @param dict
 */
{template .example}
    <h1>{$dict.title}</h1>
    <div>{$dict.content}</div>
{/template}

Этот объект может быть сгенерирован на стороне сервера из вашего файла локали и передан в javascript через тег script.

В противном случае вы можете загрузить другой скомпилированный файл шаблона на стороне клиента в соответствии с локалью.

Существует также i18n возможность, но это бесполезно для вашей проблемы, имхо.

person Mironor    schedule 10.08.2011
comment
Не могли бы вы связать меня с документацией по объекту-словарю? - person IsmailS; 11.08.2011
comment
Ладно, я понял. Обычный объект JavaScript подойдет. Хотя проблема сейчас в том, что HTML экранирует его, используя soy.$$escapeHtml(opt_data.title), но для меня в строках могут быть биты HTML. Любая идея для этого? - person IsmailS; 11.08.2011
comment
Хорошо! Я тоже это нашел. Если в моем шаблоне есть {$dict.content |noAutoescape}, то я могу передать HTML в content, и он не будет экранирован, т. е. < не будет преобразован в &lt;. - person IsmailS; 11.08.2011
comment
Да, объект-словарь = обычный объект javascript. Кроме того, если вам нужно что-то более мощное, чем noAutoescape, вы можете написать свою собственную функцию шаблона ( code.google.com/closure/templates/docs/plugins.html#functions ) - person Mironor; 11.08.2011
comment
Спасибо @Mironor, сейчас noAutoescape не подойдет, а также то, что мы работаем над стеком технологий Microsoft и не обладаем большими навыками работы с Java. Надеюсь, нам не нужно создавать какой-либо плагин. Шаблоны закрытия Я просто использую, чтобы легко получить JavaScript для рисования моей DOM из HTML, предоставленного дизайнером. - person IsmailS; 11.08.2011