Современная, быстрая и удобная система управления сайтом

Языковой перевод 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');

Создание языкового файла также ложится на автора шаблона.