Интернационализация
При установке нового компонента системой импортируются языковые файлы из папки «lang».
Файл каждого языка должен иметь расширение .lng и название аббревиатуры языка, который он представляет.
Например, путь к файлу компонента, содержащем в себе русскую локализацию, выглядит так «lang/ru.lng».
Синтаксис файла идентичен синтаксису конфигурационных файлов (INI):
Секции языкового файла каждого модуля должны иметь название уникальное по отношению к остальным секциям интернационализации движка во избежание слияния языковых переменных.
Перевод фраз осуществляется следующим образом.
Файл каждого языка должен иметь расширение .lng и название аббревиатуры языка, который он представляет.
Например, путь к файлу компонента, содержащем в себе русскую локализацию, выглядит так «lang/ru.lng».
Синтаксис файла идентичен синтаксису конфигурационных файлов (INI):
[gears]
editor = "Редактор"
editor_description = "Описание модуля 'Редактор'"
[editor]
button = "Кнопка"
...
Важно отметить обязательный блок [gears], который должен содержать локализованные название и описание компонента.Секции языкового файла каждого модуля должны иметь название уникальное по отношению к остальным секциям интернационализации движка во избежание слияния языковых переменных.
; Хорошо
[editor]
...
[editor_buttons]
...
; Плохо
[editor]
...
[buttons]
При отключенном кеше информационная база интернационализации обновляется своевременно при обновлении любого из языковых файлов.Перевод фраз осуществляется следующим образом.
/*
* Языковой файл
*/
[test]
hello = "Приветствую тебя, Гость!"
/*
* В коде контроллера, модели, библиотеки, хуков
*/
t('test.hello');
// равнозначно
t('test hello');
// равнозначно
t('test > hello');
// равнозначно
t('!test hello');
/*
* Вы можете задать активный раздел, чтобы не указывать его каждый раз явно
*/
d('test');
echo t('hello');
/*
* Вызвав функцию d без аргумента, мы вернемся к предыдущему разделу перевода (если его не было, то к разделу 'global')
*/
d();
/*
* % -- короткий суффикс для раздела global
*
* Данная запись аналогична t('global new');
*/
echo t('%new');
/*
* Вспомогательная функция
*
* Вторым аргументом идет значение по-умолчанию, если перевод не обнаружен
* Третьим аргументом идет секция перевода, в которой следует поискать, если не установлено значение по-умолчанию
*/
// Если перевода переменной нет, то будет использовано значение аргумента
at($field.'_description',$field['description']);
/*
* Если третий аргумент не указан, то ищется в разделе 'edit'
* Если перевода переменной нет в текущем или указанном разделе,
* то поиск будет произведен в разделе 'edit'.
*/
at($field.'_description',FALSE,'edit');
