Для отображения на сайте различных вспомогательных надписей на разных языках (например, «Подписаться на рассылку» или «Корзина») удобно использовать механизм локализации тем дизайна.
Механизм локализации тем дизайна работает по принципу gettext: в качестве идентификатора строки используется ее вариант на одном из языков (обычно на английском), и для каждой из доступных во фреймворке локалей указывается перевод. Если для какой-то из локалей перевод строки не указан, то для этого языка используется идентификатор этой строки.
Строки локализации и их варианты на разных языках задаются в файле-манифесте theme.xml
темы дизайна в виде одного общего элемента locales
и вложенных в него элементов locale
.
Внутри каждого элемента locale
должен присутствовать один элемент msgid
с идентификатором строки локализации и произвольное количество элементов msgstr
— по одному для каждой локали, для которой необходимо указать перевод этой строки. Для каждого элемента msgstr
должен быть указан атрибут locale
с обозначением соответствующей локали. Если для какой-либо локали отдельный перевод некоторой строки не требуется (например, когда перевод строки совпадает с ее идентификатором), то добавлять для этой локали элемент msgstr
не нужно.
Пример секции locales
для файла theme.xml
:
<locales> <locale> <msgid>Subscribe for news</msgid> <msgstr locale="ru_RU">Подписаться на новости</msgstr> </locale> <locale> <msgid>Shopping cart</msgid> <msgstr locale="ru_RU">Корзина</msgstr> </locale> </locales>
Использование строк локализации в шаблонах
Для вставки локализованных строк в шаблон используется конструкция вида [`string`]
. Ниже показан фрагмент шаблона с использованием строки, объявленной в предыдущем примере:
<p>[`Subscribe for news`]</p>
Если для поселения, использующего тему дизайна с такой строкой локализации, выбрана (или определена автоматически) локаль русского языка (ru_RU
), то вместо [`Subscribe for news`]
в браузер пользователя будет отдан перевод строки:
<p>Подписаться на новости</p>
В противном случае на веб-странице будет использоваться идентификатор этой строки:
<p>Subscribe for news</p>