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

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

Как в 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.

Какие услуги предоставляю:
- Создание сайтов, шаблонов и компонентов на 1С-Битрикс;
- Разработка функционала с нуля и доработка кода на уже созданных проектах;
- Адаптивная вёрстка макетов и натяжка на Битрикс;
- Парсинг файлов и выгрузка на сайт (форматы - CSV, XML, XLSX, JSON)
- Интеграции со сторонними сервисами по API;
- Многоязычные версии и многое другое.

Если у вас остались вопросы, свяжитесь со мной любым удобным для вас способом или оставьте комментарий внизу.
E-mail: dmitriyribka@gmail.com
Skype: cinemacreaterus

Один комментарий

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

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