Хочу поделиться способом подключать языковые файлы для JS. Узнал я о нем от своего наставника Владислава, так что огромная ему благодарность.
Все знают, что у Битрикса есть JS метод BX.message() (https://dev.1c-bitrix.ru/api_help/js_l...essage.php), но к сожалению примеров использования в документации нет. Главный вопрос: Как "скормить" ему языковые файлы.
Рассмотрим на примере. Есть компонент с шаблоном, в котором создан script.js. Требуется реализовать мультиязычность в этом скрипте.
1) Создаём языковой файл script.js.php по аналогии с template.php
2) Создаём файл component_epilog.php со следующим содержимым:
use Bitrix\Main\Page\Asset,
Bitrix\Main\Localization\Loc;
// Получаем содержимое языкового файла
$ARJSMESS = Loc::LoadLanguageFile($_SERVER["DOCUMENT_ROOT"].$templateFolder."/script.js.php");
if (!empty($ARJSMESS)) {
// Добавляем объект с переводами.
Asset::getInstance()->AddString("<sc ript type=\"text/javascript\">BX.message(".CUtil::PhpToJSObject($ARJSMESS).")</sc ript>");
}
3) Используем метод BX.message() в самом script.js
Предложенный вариант подойдет и для использования в шаблонах сайтов.
Мне понравилось что вы подключаете лэнги ДЛЯ файла, которого не существует (sale.order.ajax/.default/script.js.php). Я думал там есть проверка, но видимо нет.
Также делает битрикс, только в template.php, а не в component_epilog.php.
Скажите, а чем плохо сделать то же самое в template.php ? В таком случае сгенереный массив с ленгами попадёт в кеш, а не будет отрабатывать на каждом хите. Или тут есть какие-то нюансы?
Кстати, скорее всего вместо CUtil::PhpToJSObject можно использовать \Bitrix\Main\Web\Json::encode. Не уверен, что они полностью совместимы.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».