Bitrix переключение языка - IlyaKovanov/lib GitHub Wiki

Добавляем в dbconn.php

<?
//для переключения языка
//Добавляем в dbconn.php 
session_start();
if ($_SESSION["LANG_UI"]) {
define('LANGUAGE_ID', $_SESSION["LANG_UI"]);
}
?>

Добавляем в header

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
//D7
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Page\Asset;
use Bitrix\Main\Loader;
// подключаем модуль инфоблок для получения параметров языка.
Loader::includeModule("iblock"); 
// подключаем lang файлы
\Bitrix\Main\Localization\Loc::loadMessages(__FILE__);
//проверяем нет бот ли открыл страницу, что бы не зациклить редирект.
$is_bot = preg_match(
    "~(Google|Yahoo|Rambler|Bot|Yandex|Spider|Snoopy|Crawler|Finder|Mail|curl)~i", 
    $_SERVER['HTTP_USER_AGENT']
);
// опредееляем поддомен через explode и создание массива
$domen = explode(".",str_replace("www.","",$_SERVER['HTTP_HOST']));
//если его нет домен второго уровня то выбираем язык по умолчанию в нашем случае ru
//! внимание тут домены 3 уровня, у нас на разразработке 4-го, потом не заюыть поменять.
if (count($domen)== 3) {$code = $domen[0];} else {$code = 'ru';}
// ищем язык в инфбоблоке. Тут по идее можно использовать IBLOCK_CODE
$arSelect = Array("ID", "IBLOCK_ID", "NAME", 'CODE', 'IBLOCK_SECTION_ID', 'PROPERTY_');
$arFilter = Array("IBLOCK_ID"=>20, "ACTIVE"=>"Y", 'CODE'=>$code);
$res = CIBlockElement::GetList(Array("SORT"=>"ASC", "NAME"=>"ASC"), $arFilter, false, false, $arSelect);
if ($ob = $res->GetNextElement())
{
    // стандартное получение данных тут можно получить лишь то что нужно, но не целесообразно
    $arLang = $ob->GetFields();    
    $arLang['PROPERTIES'] = $ob->GetProperties();
    // LANGUAGE_ID константа битрикса. Выбранный язык. Проверяем соответсвует ли язык домену
    // если нет то приравниваем сессии код и если не бот делаем редирект.
    if (LANGUAGE_ID!=$arLang['CODE']) {
        $_SESSION["LANG_UI"] = $arLang['CODE'];
        if (!$is_bot){
            LocalRedirect($_SERVER["REQUEST_URI"]);
        }
    }

}
?>

вывод в шаблоне

<?
//вывод в шаблоне
echo Loc::GetMessage('STP_MAIN_BANNER')
?>

<?
//переключатель языка

$rsLang = CLanguage::GetList($by="SORT", $order="asc", Array('ACTIVE'=>'Y'));

while ($arLangCh = $rsLang->Fetch())
{  ?>
    <li>
        <a href="//<?=($arLangCh['LID']=='ru')?(''):($arLangCh['LID'].'.')?><?=SITE_SERVER_NAME?><?=$APPLICATION->GetCurPage()?>" class='lang__link <?if($arLangCh['LID'] == LANGUAGE_ID) echo 'lang__link--current'?>'><span><?=$arLangCh['LID']?></span></a>
    </li>
<?}?>
⚠️ **GitHub.com Fallback** ⚠️