Как переопределить языковые сообщения ядра Битрикс без правки каталога /bitrix
Как устроены языковые файлы в продукте
В «Битрикс: Управление сайтом» подписи, подсказки и системные ошибки собираются из PHP-файлов с ключами сообщений. Структура каталогов обычно повторяет путь исходного скрипта: в нужной языковой подпапке лежит зеркальный файл вида /lang/<код языка>/…. Например, для комплекта строк компонента каталога — в дереве компонента, для классов модуля main — в /bitrix/modules/main/lang/ru/ и глубже.
Содержимое таких файлов — ассоциативная таблица: код сообщения и строка для отображения. Ядро и компоненты подтягивают их до вывода, поэтому править исходники в /bitrix ради текстов категорически не стоит: обновление перезапишет правки.
Безопасный слой переопределения
Точка расширения фиксируется в официальной схеме: для языка создаётся файл /bitrix/php_interface/user_lang/<код языка>/lang.php. В нём задаётся массив $MESS, где первый индекс — путь к тому языковому файлу, чей текст вы хотите заменить «как файл на диске» (строго совпадает с путём в ядре), второй индекс — символьный код сообщения из этого файла.
<?php
$MESS['/bitrix/modules/main/lang/ru/classes/general/user.php']['WRONG_LOGIN'] = 'Неверная пара логин/пароль. Проверьте язык раскладки и регистр.';Порядок важен только логически: сначала «откуда взять исходник», затем «какой ключ». После сохранения кеш языковых файлов нужно очистить, если включён агрессивный кеш композитного режима или внешние ускорители держат старый HTML.
Ситуация с «заглушками» в формах
Иной раз требуется не новый текст, а пустое значение по умолчанию — например, чтобы поле имени нового пользователя в сценарии оформления заказа не подставляло служебную пометку. Тот же механизм: файл в user_lang, нужный языковой путь и константа сообщения.
<?php
$MESS['/bitrix/modules/main/lang/ru/classes/general/user.php']['FORMATNAME_NONAME'] = '';Проверку делайте в контурной копии: пустые строки могут повлиять на валидацию, если где-то в шаблоне ожидали непустой placeholder.
Связь с D7 в собственном коде
В свежих модулях и административном PHP вы чаще встретите класс локализации D7 — он загружает словари рядом с вашим файлом и отдаёт готовые фразы:
<?php
use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);
$bannerHint = Loc::getMessage('CIFTIX_NOTICE_SHIPPING_HINT');Переопределения из user_lang относятся прежде всего к штатным путям внутри /bitrix; для своих ключей поддерживайте /lang/ внутри проекта или модуля, а переопределения ядра держите отдельно в php_interface, чтобы апдейты платформы оставались предсказуемыми.
На что смотреть в работе
- Разделяйте языки каталогами
user_lang/ru/,user_lang/en/и т.д., иначе не попадёте в контекст зоны. - Точность пути первого индекса критична: опечатка в сегменте — и переопределение просто игнорируется.
- Не правьте сообщения напрямую в обновляемых пакетах: проще отдать патч локализации через
user_langи версионировать его вместе со своим кодом.
В двух словах
Сообщения ядра подменяются без хаков: достаточно корректно заполнить php_interface/user_lang/…/lang.php и убедиться, что путь к исходному языковому файлу и символьный код ключей совпадают с тем, что уже лежит в дистрибутиве. Для авторского функционала на D7 по-прежнему уместен Loc; оба слоя дополняют друг друга и решают разные задачи.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии