Вопросы и ответы
Вебмастеру
Языковой перевод MaxSite CMS
Стандартно в MaxSite CMS используется русский язык в качестве основного. Поддержка других языков осуществляется с помощью языковых файлов.
Языковые файлы представляют собой обычные текстовые php-файлы, которые содержат массив $lang
переводимых фраз, например:
$lang = array( '404 - несуществующая страница' => '404 - not found', 'Аноним' => 'Anonim', 'Комментатор' => 'User', 'Новый комментарий' => 'New comment', );
Языковые файлы следует располагать в application/maxsite/common/language
.
Для того, чтобы фраза была переведена, используются две функции: t()
и tf()
. Они полностью идентичны, и служат только для разделения перевода админ-панели (t) и внешней части сайта (tf — frontend).
echo '<div class="update">' . t('Обновлено!') . '</div>';
В данном случае фраза «Обновлено!» будет обработана функцией t()
и, если необходимо, будет переведена с помощью языкового файла.
На уровне шаблона используется функция tf()
.
$p->format('view_count', tf('Просмотров'));
Поскольку перевод для админ-панели достаточно объёмный, то перевод следует разделять на два файла: один будет подключаться всегда (в постфиксом «-f»), а второй только для админ-панели.
Например для английского: en-f.php
— всегда загружаемый файл перевода, и en.php
— только для админ-панели.
Указание языка сайта
Указать язык сайта можно в файле application/maxsite/mso_config.php
, или на уровне шаблона в файле index.php
с помощью строчки:
$MSO->language = 'en';
Для админ-панели язык выбирается в Основных настройках - Админ-панель. Обратите внимание, что в админ-панели поддерживаются только ua ro en de (потому что нет других переводов).
Если языковой файл есть, то фразы будут автоматически переводиться. Если файла нет, или в нём нет переводимой фразы, то перевода не будет.
Общая схема создания перевода
В некоторых случаях в MaxSite CMS фразы переводятся автоматически, например опции ini-файлов. Система берёт на себя обслуживание таких файлов и прогоняет фразы через языковые функции. Из-за такой схемы, воспользоваться сторонними программами (PoEdit), которые анализируют исходные php-файлы на предмет языковых функций, оказывается проблематичным. Из-за этого, собрать все переводимые фразы нужно в режиме реальной работы сайта.
Создание файлов перевода осуществляется в три этапа.
- сбор переводимых фраз
- их обработка
- сам перевод на основе словаря
Сбор всех фраз
Фразы, которые указаны как переводимые, будут накапливаться в отдельных текстовых файлах. Чтобы их собрать, нужно вручную посетить некоторые страницы сайта, включая служебные (архив, регистрация и т.п.). При сборе фраз будут созданы два файла t.txt и tf.txt.
Сбор фраз происходит не зависимо от выбранного языка.
Обработка
Полученные данные нужно обработать. Это происходит в автоматическом режиме: нужно лишь набрать адрес обработчика в браузере.
Перевод
Сам перевод осуществляется в автоматическом режиме на основе словаря dictionary.php
. Если этого файла нет, то можно использовать mso-dictionary.php
как заготовку.
После нужно набрать в браузере адрес переводчика. Появятся два готовых для использования языковых файла.
Инструкция
Распакуйте архив application/maxsite/common/language/lang.zip
в корень своего сайта. Поскольку сбор фраз достаточно ресурсозатратная операция, то используйте только локальный сервер.
В каталоге lang находятся php-файлы:
- lang.php — сборщик переводимых фраз
- build.php — обработчик
- translation.php — переводчик
Каталог lang/mso
— является служебным. Именно в нем будет происходить работа по сбору и обработке данных.
Для того, чтобы включить сбор фраз в файле application/maxsite/mso_config.php
добавьте строчку:
define('MSO__PLEASE__ADD__FILE_LANG', $MSO->config['FCPATH'] . 'lang/lang.php');
После этого нужно обновить страницы своего сайта (используйте default-шаблон), зайти в админ-панель. Фразы начнут собираться в каталоге lang/mso/
в виде двух файлов t.txt
и tf.txt
. Следите за размером файлов, чтобы он не вызвал излишнюю нагрузку на сервер.
Во время или после сбора фраз запустите build-обработчик, набрав его адрес в браузере: http://localhost/cms/lang/build.php
(используйте свой адрес сайта).
Обработчик создаст три файла
- mso-serialize.php и mso-f-serialize.php — серилизованные массивы данных
- mso-dictionary.php — заготовка для словаря переводчика
При этом файлы t.txt и tf.txt также будут обработаны и из них будут удалены все дублирующиеся фразы.
В процессе сбора фраз, вы можете периодически запускать build-обработчик, чтобы уменьшить размер текстовых файлов.
После того, как сбор фраз завершен, закомментируйте добавленную строчку (с MSO__PLEASE__ADD__FILE_LANG) в mso_config.php
.
Теперь, для того, чтобы сделать перевод, нужно создать каталог языка. Например для английского — en
.
- Если у вас нет своего словаря, то скопируйте в этот каталог
mso-dictionary.php
какdictionary.php
— именно в этом файле нужно выполнять перевод. - В файле
translation.php
укажите каталог языка, а также дополнительные данные, если необходимо. - После того, как вы сделали какой-то перевод в
dictionary.php
, то нужно запустить translation-переводчик. В браузере наберите его адрес:http://localhost/cms/lang/translation.php
В каталоге языка появятся два готовых файла en-f.php
и en.php
. Это готовые файлы, которые можно скопировать в application/maxsite/common/language/ для использования.
Не редактируйте en-f.php и en.php, поскольку они будут обновлены автоматически.
Языковой перевод плагинов
Языковой перевод плагинов точно также базируется на массиве $lang
, но при этом набор переводимых фраз должен составить автор плагина в виде любого языкового файла (даже пустого).
Языковые файлы плагина следует размещать в подкаталоге плагина language
. См. например плагин bbcode.
В самом плагине функции t/tf следует вызывать со вторым параметром __FILE__
. Например:
$header = tf('Показать/Скрыть...', __FILE__);
В этом случае MaxSite CMS будет использовать перевод из каталога плагина.
Языковой перевод шаблонов
Шаблон также может содержать свои языковые файлы в каталоге шаблона language
. При вызове t/tf в файлах шаблона, вторым параметром следует указать строку mytemplate
:
$catalog = tf('Каталог проекта ', 'mytemplate');
Создание языкового файла также ложится на автора шаблона.