Блог Горошко Андрея 1C-Битрикс Локализация в Битрикс: Правильная работа с языковыми файлами (GetMessage и Loc::getMessage)

Локализация в Битрикс: Правильная работа с языковыми файлами (GetMessage и Loc::getMessage)

Жестко «зашивать» текстовые строки (заголовки, названия кнопок, сообщения) прямо в код — плохая практика. Это затрудняет перевод сайта на другие языки и усложняет поддержку. В Битрикс для этого существует механизм локализации, основанный на языковых файлах.

Зачем нужны языковые файлы?

  1. Многоязычность: Легко перевести компонент или модуль, просто создав новую папку с переводами (en, de и т.д.).
  2. Чистый код: Логика отделена от текста.
  3. Удобство: Весь текст собран в одном месте, его легко найти и отредактировать.

Структура и подключение

Языковые файлы всегда лежат в папке lang. Для каждого языка создается своя подпапка (ru, en). Структура папок с языковыми файлами должна повторять структуру папок с PHP-файлами, к которым они относятся.

  • Для файла /local/components/my/comp/component.php
  • Языковой файл будет: /local/components/my/comp/lang/ru/component.php

Содержимое языкового файла — это простой PHP-массив $MESS.

// /.../lang/ru/component.php
<?
$MESS['MY_COMP_TITLE'] = 'Заголовок компонента';
$MESS['MY_COMP_BUTTON_SEND'] = 'Отправить';

1. Классический подход: GetMessage()

Это глобальная функция, доступная везде. Перед ее использованием нужно убедиться, что соответствующий языковой файл подключен. В компонентах это происходит автоматически.

Синтаксис: GetMessage(«КОД_СООБЩЕНИЯ»)

Пример в шаблоне компонента:

// template.php
?>
<h3><?= GetMessage('MY_COMP_TITLE') ?></h3>
<button><?= GetMessage('MY_COMP_BUTTON_SEND') ?></button>

Подстановка значений:
GetMessage поддерживает замену плейсхолдеров.

// lang/ru/template.php
$MESS['GREETING_MESSAGE'] = 'Здравствуйте, #USER_NAME#!';

// template.php
echo GetMessage('GREETING_MESSAGE', ['#USER_NAME#' => $arResult['USER']['NAME']]);

2. Современный D7-подход: Loc::getMessage()

В ядре D7 для локализации предназначен класс \Bitrix\Main\Localization\Loc. Он предлагает более удобный и производительный механизм «ленивой» загрузки.

Подготовка:

use Bitrix\Main\Localization\Loc;

// Сообщаем системе, для какого файла нам нужны языковые сообщения
// Сама загрузка произойдет только при первом вызове getMessage
Loc::loadMessages(__FILE__);

Строка Loc::loadMessages(__FILE__); — обязательна. Она указывает, для текущего файла нужно будет найти и подключить соответствующий lang-файл.

Синтаксис: Loc::getMessage(«КОД_СООБЩЕНИЯ», $replace, $language)

Пример в component.php

use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);

if (empty($arParams['NAME'])) {
    $arResult['ERRORS'][] = Loc::getMessage('ERROR_NAME_EMPTY');
}

Подстановка значений в D7:
Массив для замены передается вторым аргументом.

// lang/ru/template.php
$MESS['GREETING_MESSAGE_D7'] = 'Добро пожаловать, #USER_NAME#.';

// template.php
use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);

echo Loc::getMessage('GREETING_MESSAGE_D7', ['#USER_NAME#' => 'Гость']);

GetMessage vs. Loc::getMessage

КритерийGetMessage (старое API)Loc::getMessage (D7)
СтильГлобальная функцияСтатический метод класса
ЗагрузкаТребует явного IncludeTemplateLangFile или автоподключения в компонентах«Ленивая» загрузка через Loc::loadMessages(__FILE__)
ПроизводительностьФайл подключается всегдаФайл подключается только при реальной необходимости
РекомендацииДля шаблонов и старого кодаДля component.php, class.php и всего нового кода

Вывод:
Всегда выносите текстовые строки в языковые файлы. Это признак качественного кода. Используйте современный Loc::getMessage в логике ваших компонентов и модулей для повышения производительности и чистоты кода, а привычный GetMessage можно оставить для использования в template.php, где его использование максимально просто.

GetMessage, Loc::getMessage, языковые файлы Битрикс, локализация, lang.php, многоязычность, D7.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Настройка защиты от спама в формах обратной связи через Яндекс SmartCaptcha без навязчивых картинокНастройка защиты от спама в формах обратной связи через Яндекс SmartCaptcha без навязчивых картинок

Высокая скорость загрузки сайта и безупречная серверная безопасность — обязательные требования для успешного коммерческого проекта на 1С-Битрикс. Услуга «Настройка защиты от спама в формах обратной связи через Яндекс SmartCaptcha без

Изменить склад catalog.store.updateИзменить склад catalog.store.update

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Изменить склад catalog.store.update», разберем архитектурные особенности и предоставим

Как использовать CIBlockElement::Update() в 1С-Битрикс: пример кодаКак использовать CIBlockElement::Update() в 1С-Битрикс: пример кода

Оптимизация производительности и безопасности — залог успешного проекта на 1С-Битрикс. Данный материал посвящен практическому применению «Как использовать CIBlockElement::Update() в 1С-Битрикс: пример кода». Мы подготовили подробный разбор принципов работы и развернутые