Работа с локализациями

Платформа DVelum поддерживает несколько языков локализации интерфейса. Язык интерфейса устанавливается во время инсталляции системы (устанавливается метка в system/config/main.php). При этом система настраивается на работу со словарями, локализацией свойств и наименований объектов ORM, списками подключенных модулей с использованием конкретной локали.

Основные файлы локализации находятся в папке system/lang. Дополнительные файлы локализации находятся во вложенных дирректориях, например, system/lang/[en]/objects.php содержит локализацию свойств объектов ORM.

Локализация находится в php-файлах, автоматически транслируется в js-формат для использования визуальными интерфейсами. Для обновления js-трансляции после изменения в файлах основной локализации необходимо зайти в интерфейс сборщика кода и нажать “Compile Lang” / “Пересобрать словари”, при этом будет перезаписан файл (необходимы права на запись) /js/lang/[локаль].js.

Для доступа к словарю локализации из визуальных интерфейсов при помощи JavaScript используйте объект appLang, он будет содержать необходимую локаль.

Например, appLang.EDIT_ITEM будет содержать строку ‘Edit item’ или ‘Редактировать элемент’ в зависимости от текущей локализации.

Для доступа к словарю из PHP используйте конструкцию:

<?php
// получение ссылки на объект дефолтной локализации
// в некоторых частях системы уже инициализирована, например
// $this->_lang  в контроллерах административных панелей
$lang = Lang::lang();
echo $lang->EDIT_ITEM;
// более предпочтительный вариант, так как работает быстрее в обход магических методов
echo $lang->get('EDIT_ITEM'); 

Регистрация собственных словарей, ленивая загрузка:

<?php
// Добавляем загрузчик словаря
// имя словаря, путь к файлу, тип адаптера для объекта Config
// в данном случае наш словарь находится в виде массива в файле  php,
// в таком же виде, как и основные файлы локализации
Lang::addDictionaryLoader('myLang', 'path/to/file.php', 'File_Array');
// получаем ссылку на свой словарь
$myLang = Lang::lang('myLang');
// получаем значение из словаря, обратите внимание, что словарь будет 
// загружен при первом обращении к словарю
echo $myLang->get('lang_key');

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

Особенности локализации ORM

ORM вполне независима от переключения языка. При указании заголовков полей и объектов данные записываются в файл текущей локализации, при переключении локали в main.php переподключается файл локали ORM. При отсутствии наименований в текущей локали (не переведен интерфейс) в качестве заголовков берутся значения из name.

Например, если мы создали Объект name = news, title= News List, то в другой локали он будет отображен как объект name= news, title = news. Так же обстоит и со свойствами объектов.

Таким образом, для перевода достаточно переключится на другой язык и изменить заголовки объектов и их свойств.

Особенности локализации Словарей

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

Словари располагаются в system/config/dictionary/[lang].

Допустим мы установили систему и создали несколько словарей, потом по каким то причинам решили изменить локализацию, например с [en] на [ru], для корректной работы словарей необходимо скопировать все файлы

из system/config/dictionary/en в system/config/dictionary/ru,

затем через интерфейс управления словарями задать локализированное значение.

Внимание! Изменение словаря одной локализации не ведет к его созданию и изменению в другой. Возможно, эта проблема будет решена позже.

Особенности локализации Списка подключенных модулей

С подключаемыми модулями ситуация обстоит также, как со словарями, их конфигурации находятся в папке system/config/modules.

Отличительная особенность - для разных локализаций может быть подключен разный набор модулей и их интерфейсов.

Особенности локализации проектов интерфейса

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

Файлы, связанные с локализацией:

  • js/lang (генерируются автоматически)
  • system/lang/ (основные файлы локализации)
  • system/config/dictionary/ (зависимые файлы локализации)
  • system/config/modules/ (зависимые файлы локализации)