Как создать локализованный шаблон handlebarsjs?

#javascript #php #handlebars.js

#javascript #php #handlebars.js

Вопрос:

У меня есть серверная часть php, которая создает динамический сайт с шаблонами handlebars. Сайт должен поддерживать локализацию пользовательского интерфейса по предпочтениям пользователя (на сайте есть аутентификация пользователей с настройками пользовательского интерфейса для них). Теперь все шаблоны handlebars, созданные процессором php, например:

 {{!-- Template for dispatch table --}}
<table id="records" class="table-data">
    <caption>
        <h3>
            <div class="column-right"><span class="icon-clock"></span><span id="clock"></span></div>
            <div><span class="icon-database"></span><?php echo _('Records in the order for dispatching.'); ?></div>
            <div class="clear"></div>
        </h3>
    </caption>
    <thead>
        <tr>
            <th colspan="2"><span class="icon-database"></span><?php echo _('Name'); ?></th>
            <th><span class="icon-clock"></span><?php echo _('Record Date'); ?></th>
            <th><span class="icon-user"></span><?php echo _('Client'); ?></th>
            <th><span class="icon-pencil"></span><?php echo _('Conclusion'); ?></th>
            <th><span class="icon-doc"></span><?php echo _('Status'); ?></th>
            <th><span class="icon-doc-text"></span><?php echo _('Doctor'); ?></th>
            <th><span class="icon-code"></span><?php echo _('Type'); ?></th>
        </tr>
    </thead>
    <tbody>
        {{#each records}}
        .................
        {{/each}}
    </tbody>
</table>
  

И это не круто:( Слишком много <?php echo ... ?> в шаблоне.
Может быть, есть какое-то решение этой проблемы?

PS: Шаблон, созданный на серверной части, но скомпилированный и работающий на стороне пользователя.

ОБНОВЛЕНИЕ: я хочу сократить работу, выполняемую серверной частью. Лучшее решение для меня — преобразовать динамический шаблон hbs в набор статики (по одному для поддерживаемой локализации). Для этой цели я хочу скомпилировать шаблон так, чтобы все <?php echo _('...'); ?> операторы были преобразованы в локальные строки. Но я не знаю, как это сделать.

Комментарии:

1. в чем именно проблема??

2. @Джефф, я хочу сократить работу, выполняемую сервером.

Ответ №1:

Чтобы избежать использования echo оператора, вы можете использовать механизм шаблонов Php, такой как Smarty. Таким образом, вместо использования echo вы будете компилировать свой шаблон, уже написанный в HTML-файле. Этот HTML-файл также будет содержать директиву handlebars, поэтому он будет скомпилирован на стороне пользователя. Но на данный момент, почему бы вам не использовать только движок шаблонов Php?Это зависит от вас . . .

Комментарии:

1. Шаблоны PHP будут работать быстрее, чем echo инструкции в сгенерированных hbs? Могу ли я предварительно скомпилировать эти шаблоны для всех языков?

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