214  /  330

Языковые файлы

Просмотров: 5725 (Статистика ведётся с 06.02.2017)
Цитатник веб-разработчиков.

Антон Долганин: В компонентах языковые фразы выношу в ланг-файлы, просто потому что это системная часть и там хотелось бы видеть порядок.

Языковой файл - представляет из себя PHP скрипт, хранящий переводы языковых фраз на тот или иной язык. Данный скрипт состоит из массива $MESS, ключи которого - идентификаторы языковых фраз, а значения - переводы на соответствующий язык.

Языковые файлы не являются обязательными.

Пример языкового файла для русского языка:

<?
$MESS ['SUP_SAVE'] = "Сохранить";
$MESS ['SUP_APPLY'] = "Применить";
$MESS ['SUP_RESET'] = "Сбросить";
$MESS ['SUP_EDIT'] = "Изменить";
$MESS ['SUP_DELETE'] = "Удалить";
?>

Пример языкового файла для английского языка:

<?
$MESS ['SUP_SAVE'] = "Save";
$MESS ['SUP_APPLY'] = "Apply";
$MESS ['SUP_RESET'] = "Reset";
$MESS ['SUP_EDIT'] = "Change";
$MESS ['SUP_DELETE'] = "Delete";
?>

Примеры работы

  • просмотр всего массива словаря:

    <? echo'<pre>';print_r($MESS);echo'</pre>'; ?>
    

  • получение названия месяца в двух падежах:

    <?
       echo $MESS['MONTH_'.date('n')]; // Июнь
       echo $MESS['MONTH_'.date('n').'_S']; // Июня
    ?>
    

Для каждого языка существует свой набор языковых файлов, хранящихся в подкаталогах /lang/ (подробнее смотрите на страницах документации структура файлов системы, структура файлов модуля).


Языковые файлы, как правило, используются в административных скриптах модулей или в компонентах и в зависимости от этого подключаются одной из следующих функций:

Для удобства поиска и дальнейшей модификации языковых фраз можно пользоваться параметром страницы show_lang_files=Y, позволяющим быстро найти и исправить ту или иную языковую фразу в модуле Перевод.

Языковые файлы в собственных компонентах

При создании собственного компонента языковой путь должен выглядеть следующим образом:

/bitrix/templates/[шаблон_сайта|.default]/components/[пространство_имен]/[имя_компонента]/[имя_шаблона_компонента]/lang/[код_языка]/template.php

Где код языка, к примеру = ru.

В таком случае языковые файлы подключатся автоматически.


Для подключения из компонента языковых сообщений другого компонента можно использовать следующую функцию:

function IncludeComponentLangFile ($abs_path, $lang = false)
{
if ($lang === false) $lang = LANGUAGE_ID;

global $BX_DOC_ROOT;

$filepath = rtrim (preg_replace ("'[\\\\/]+'", "/", $abs_path), "/ ");

if (strpos ($filepath, $BX_DOC_ROOT) !== 0)
{
return;
}

$relative_path = substr ($filepath, strlen ($BX_DOC_ROOT));

if (preg_match ("~^/bitrix/components/([-a-zA-Z0-9_\.%]+)/([-a-zA-Z0-9\._%]+)/templates/([-a-zA-Z0-9\._%]+)/(.*)$~", $relative_path, $matches))
{
$lang_path = $BX_DOC_ROOT."/bitrix/components/$matches[1]/$matches[2]/templates/$matches[3]/lang/$lang/$matches[4]";
__IncludeLang ($lang_path);
return;
}

if (preg_match ("~^/bitrix/components/([-a-zA-Z0-9_\.%]+)/([-a-zA-Z0-9\._%]+)/(.*)$~", $relative_path, $matches))
{
$lang_path = $BX_DOC_ROOT."/bitrix/components/$matches[1]/$matches[2]/lang/$lang/$matches[3]";
__IncludeLang ($lang_path);
return;
}
}

Замена языковых фраз продукта

Иногда при разработке требуется заменить какие-то слова или фразы в компонентах или модулях.

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

Путь к файлу замен:

/bitrix/php_interface/user_lang/<код языка>/lang.php

Примечание: если в php_interface нет нужных папок, их следует создать.
Возможно использование папки /local/php_interface/user_lang/<код языка>/lang.php.

В файле должны определяться элементы массива $MESS в виде $MESS['языковой файл']['код фразы'] = 'новая фраза', например:

<?
$MESS["/bitrix/components/bitrix/system.auth.form/templates/.default/lang/ru/template.php"]["AUTH_PROFILE"] = "Мой любимый профиль";
$MESS["/bitrix/modules/main/lang/ru/public/top_panel.php"]['top_panel_tab_view'] = "Смотрим";
$MESS["/bitrix/modules/main/lang/ru/interface/index.php"]['admin_index_sec'] = "Проактивка";
?>

Первая строка меняет текст ссылки в компоненте формы авторизации; вторая строка меняет название вкладки публичной панели; третья меняет строку для индексной страницы панели управления.

Важно! Возможны проблемы сопровождения этого файла при изменении кода фразы или расположения языкового файла.

Подключение языковых фраз на новом ядре D7

По умолчанию подстановка языковых фраз не работает в файле component_epilog.php шаблона компонента. Поэтому в нем языковые фразы подключаются следующим образом:

use \Bitrix\Main\Localization\Loc;
Loc::loadLanguageFile(__FILE__);
echo Loc::getMessage("SOMETHING_LANGUAGE_CONSTANT"); 

Сами языковые фразы, например, для русского языка должны быть заданы в файле lang/ru/component_epilog.php. Кроме того, при таком подключении языковые фразы будут работать как в кеше, так и "мимо" кеша.


15
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии