sibirix / sibirix-translator
Sibirix.Translator composer package for Bitrix
Requires
- php: ^7.0
README
Пакет для 1С-Битрикс, для простой мультиязычности текстовых полей элементов/разделов инфоблоков. Удобно для создания симметричный языковых версий - в одном элементе инфоблока будут задаваться тексты для всех языкоовых версий сразу.
При редактировании элемента/раздела добавляется по вкладке для каждого языка в системе и в них дублируются нужные (какие вы настроите) текстовые поля. Введённые строки для всех языков сохраняются в одно исходное поле в специальном формате {{ru:Текст на русском}}{{en:English text}}.
В связи с этим и ограничение - запрет на использование в тексте двойных фигурных скобок и ограничение на максимальную суммарную длину текста. Но зато не требуются никакие изменения в БД.
Из-за ограничения на макс. длину текста модуль не рекомендуется использовать на сайтах с более чем 3 языками.
Возможности
Поддерживается перевод только текстовых полей:
- стандартные поля элемента инфолбока NAME, PREVIEW_TEXT, DETAIL_TEXT
- дополнительные свойства элемента инфоблока типов Строка и HTML/Текст
- стандартные поля раздела инфоблока NAME, DESCRIPTION
- дополнительные свойства раздела инфоблока типа Строка
Установка
Установка модуля
Если у вас в проекте уже используется composer:
composer require sibirix/sibirix-translator
Если вы хотите использовать данный модуль переводов в проекте, где ещё нет композера:
- в папке /local/ выполнить
composer require sibirix/sibirix-translator
- подключить файл автозагрузки композера: в файле
/local/php_interface/init.php
(создайте, если он у вас отсутствует) добавить строкуrequire_once($_SERVER["DOCUMENT_ROOT"] . '/local/vendor/autoload.php');
Добавление обработчиков событий
Добавьте обработчики событий модуля:
в файле /local/php_interface/init.php
:
use Bitrix\Main\EventManager as BitrixEventManager;
use Sibirix\Translator\IBlockLocales;
$manager = BitrixEventManager::getInstance();
$manager->addEventHandler("main", "OnBeforeProlog", [IBlockLocales::class, 'onBeforeProlog']);
$manager->addEventHandler("main", "OnAdminTabControlBegin", [IBlockLocales::class, 'onAdminTabControlBegin']);
Настройка формы редактирования в админке
- Открываем страницу редактирования элемента/раздела инфоблока
- Открываем настройки формы редактирования
- Жмём кнопку "Добавить" рядом со списком вкладок, вводим название вкладки "{{}}" (без кавычек, 2 открвающихся и 2 закрывающихся фигурных скобки)
- Выбираем новую вкладку в спике и добавляем на неё те поля, для которых требуется выполнять перевод
- Сохраняем настройки формы
В форме появятся вкладки с названиями "Перевод: ...", список языков для перевода берётся из языков, используемых в созданных в системе сайтах (Настройки - Настройки продукта - Сайты - Список сайтов. Открываем редактирование свойств сайта, блок "Региональные настройки", поле "Язык").
Вывод данных в шаблонах
<?= \Sibirix\Translator\IBlockLocales::t($item['PROPERTY_TEXT_VALUE']) ?>
$item['PROPERTY_TEXT_VALUE']
- строка с данными в формате {{}}, сохранённая пакетом в админке.
Выводит текст в языке текущего сайта (определяется по константе LANGUAGE_ID, [https://dev.1c-bitrix.ru/api_help/main/general/constants.php])