Битрикс как подключить файл с переводом

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

Как в 1С-Битрикс подключить файл с переводом в компонентах и шаблонах

Для начала давайте разберемся где мы будем хранить переменную с языком. Вариантов довольно много — cookie, local storage или-же в дополнительных свойствах пользователя. Есть и другие способы. А вот еще дилемма — будет ли язык сам определяться при входе на сайт? 🙂 Как видите, вопросов на старте много и данную задачу можно решить несколькими способами.

Рассмотрим простой пример записи в куки:

<form id="form-lang" name="form-lang" action="" method="POST">
	<select name="lang" id="lang">
		<option<?if ($_COOKIE['LANG'] != 'ru'){ echo ' selected';}?> value="en">en</option>
		<option<?if ($_COOKIE['LANG'] == 'ru'){ echo ' selected';}?> value="ru">ru</option>
	</select>
</form>
<?if ($_POST['lang'] != false) {?>
	<?setcookie("LANG", $_POST['lang'], time()+86400, "/");?>
	<?LocalRedirect($_SERVER['HTTP_REFERER']);?>
<?}?>

Если мы применим этот код, у нас появится обычный селект с выбором языка. При отправке формы, записываем выбранный язык в куки-переменную LANG. После отправки делаем редирект чтобы избежать вопросов «почему я нажимаю F5 а у меня в браузере …». К сожалению, 1С-Битрикс не решит все ваши траблы.

В файле header.php нашего шаблона объявляем константу:

if ($_COOKIE['LANG'] === 'ru') {
	define("MY_LANG", $_COOKIE['LANG']);
} else {
	define("MY_LANG", 'en');
}

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

<?IncludeTemplateLangFile(__FILE__);?>

<?__IncludeLang($_SERVER["DOCUMENT_ROOT"].'/contacts/lang/'.MY_LANG.'/index.php');?>

<?__IncludeLang($_SERVER["DOCUMENT_ROOT"].$templateFolder.'/lang/'.MY_LANG.'/template.php');?>

<?__IncludeLang($_SERVER["DOCUMENT_ROOT"].$templateFolder.'/lang/'.$_COOKIE['LANG'].'/template.php');?>

<?IncludeTemplateLangFile($_SERVER["DOCUMENT_ROOT"]."/bitrix/templates/".SITE_TEMPLATE_ID."/header.php", MY_LANG);?>

Для компонентов обычно используются первые 4 варианта, для шаблона соответственно последний. $templateFolder — папка шаблона. Кстати говоря, теперь вы понимаете почему в константе (и в куках) записывается язык явно, а не его ID :).

Не забывайте что все языковые файлы имеют вид:

<?
$MESS["TITLE"] = "Контакты";
?>

Хранятся такие файлы в соответствующей папке шаблона или компонента, и путь их лежит от шаблона:
lang/ru/component.php
где, ru соответствующий язык, а component.php соответствует имени файла, в котором используется вывод.

Для отображения воспользуемся битрикс методом GetMessage():

<?=GetMessage("TITLE")?>

Тема переводов в битриксе довольно противоречивая, идеального решения вы не найдете, т.к. часть информации хранится в файлах, другая часть в инфоблоках. Настоятельно рекомендую почитать документацию на этот счет. Стоит также отметить, иногда для решения задачи перевода на несколько языков применяют многосайтовость. На всех редакциях 1С-Битрикс можно создавать по 2 сайта, и докупать недостающее кол-во.

Надеюсь, что данная статья помогла вам, а если вы знаете решение получше, пожалуйста поделитесь им в комментариях. Уверен другим читателям будет очень интересно :).

Свяжитесь со мной, если на вашем сайте необходимо настроить переводы на несколько языков или реализовать многосайтовость.

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru

Пишите, отвечу на любые вопросы.
E-mail: dmitriyribka@gmail.com

3 комментария

  1. Как и ожидалось, в документации битрикса нет функции __IncludeLang(). Зато она есть в движке и она работает. Я целый день потратила в муках, пытаясь подключить языковой файл с английскими фразами для шапки и подвала. Наконец-то мои мучения с этим окончены. Спасибо за статью. Хоть она и стара, но все еще актуальна.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *