Yandex Metrika
sanches.free 1 просмотр

Как переопределить языковые сообщения ядра Битрикс без правки каталога /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 дней гарантии