Фреймворк позволяет легко организовать многоязычность сайтов, особенно простых.
Многоязычность предполагает следующие принципы:
Для того, чтобы активировать режим мультиязычности, необходимо:
Для добавления нового поля, которое будет иметь языковой вариант, необходимо просто создать копию существующего с префиксом en_
.
То есть для текстовой страницы спсок полей (fields/pages.ini) может быть следующим:
[admin.fields]
small url "Адрес страницы (необязательно)"
small title "Название"
small en_title "Название на английском"
rich text "Текст"
rich en_text "Текст на английском"
Далее, при переходе по адресу site.ru/en/страница все поля, значения английских версий заполнены, будут вставлены автоматически. Изменений в роутере делать не надо. Такие поля, как image (изображения) в английской версии, как правило, не нуждаются, но для некоторых случаев могут быть использованы.
Данный принцип касается любых полей, если есть столбец en_adress
, то при запросе и выводе свойства adress объекта ActiveRecord, будет выведено значение из en_adress. Это касается любого языка, но для русского языка префикс не нужен.
В шаблоне для перевода данных из базы данных ничего менять не надо, в коде тоже.
Для перевода надписей (например "позвоните нам"), необходимо заполнить файлы переводов. Для этого необходимо в файле lang/ru.ini добавить следующие строчки:
[translate]
Call us=Позвоните нам
About us=О нас
Далее в шаблоне вставляется код {"Call us"|t}
Другой вариант:
<?php
print t("Call us");
?>
Функция t()
пытается найти перевод в файлах языка и, если не находит, то выводит текст, который ей передали. Таким образом, найдя перевод, она выводит его для русской версии, и выводит саму фразу "Call us" в английской.
Если фразы более сложные, или языков больше двух, то можно использовать файлы более широко. Например, для фрагмента {"SLOGAN"|t}
ru.ini:
[translate]
SLOGAN=Мы всегда впереди всех!
en.ini:
[translate]
SLOGAN=We always on top!
Кроме того, файлы lang/xx.ini могут содержать другие директивы, кроме блока translate.
В меню сайта и других местах необходимо правильно расставить ссылки: английская версия сайта должна содержать ссылки на английские страницы.
Если раньше на сайте был код:
<ul>
<li><a href="/news/{.url}">{.title}</a></li>
</ul>
<a href="/about">{"About"|t}</a>
То его надо изменить следующим образом:
<ul>
<li><a href="{langlink}/news/{.url}">{.title}</a></li>
</ul>
<a href="{langlink}/about">{"About"|t}</a>
Переменная langlink
, она же d()->langlink
- автоматически инициируемая переменная. Она содержит пустую строку для русского языка и, например, /en
для английского и необходима для формирования ссылок.
Переменная lang
, она же d()->lang
- автоматически инициируемая переменная. Она содержит ru
для русского языка и, например, en
для английского.
Для вывода дат можно использовать функцию ml_userdate
, аналог userdate
, но автоматически переводящей язык. Например:
<div>
Дата новости:
<span>{.date|ml_userdate}</span>
</div>
Для того, чтобы сделать многоязычный сайт, необходимо:
en_title
, en_text
в таблицах и дать их редактировать адмнистратору{"News"|t}
в шаблонах и перевести их в файлах перевода в папке lang{langlink}
для нормального функционирования ссылок