В данном примере делаем переключение языков с помощью параметра lang= в адресной строке. Параметр нужно будет ввести только один раз, после этого сайт переключается на другой язык.
1. Код, добавляемый в header.php шаблона сайта:[QUOTE]if (isset($_REQUEST['lang'])) {
$lang = $_REQUEST['lang'];
// Проверим, что язык активен, иначе - английский
$rsLang = CLanguage::GetByID($lang);
$arLang = $rsLang->Fetch();
if ($arLang['ACTIVE'] != 'Y') {
$lang = "en";
}
$_SESSION['LANG_UI'] = $lang;
if (LANGUAGE_ID != $_SESSION['LANG_UI']) {
$uri = $_SERVER['SCRIPT_URL'] . '?lang=' . $lang;
$params = DeleteParam(['lang']);
if (!empty($params)) {
$uri .= '&' . $params;
}
LocalRedirect($uri); // переопределяем язык в /bitrix/.settings_extra.php
}
}
[/QUOTE]
2. Код, добавляемый в /bitrix/.settings_extra.php:[QUOTE]if (ADMIN_SECTION !== true) { // в админке переключение языков оставляем дефолтное
session_start();
if (!isset($_REQUEST['lang']) && isset($_SESSION["LANG_UI"])) {
define(LANGUAGE_ID, $_SESSION["LANG_UI"]);
} elseif (isset($_REQUEST['lang'])) {
define(LANGUAGE_ID, $_REQUEST['lang']);
}
}
[/QUOTE]
3. Код, добавляемый в init.php:[QUOTE]use Bitrix\Main\Context\Culture;
global $CULTURE;
$rsLang = CLanguage::GetByID(LANGUAGE_ID);
$arLang = $rsLang->Fetch();
if (!empty($arLang["CULTURE_ID"])) {
$CULTURE = Culture::wakeUp($arLang["CULTURE_ID"]);
} else {
$CULTURE = Culture::wakeUp('en'); // если языка нет в базе - ставим английский
}
[/QUOTE]
Понятно, что все шаблоны должны быть многоязычными, инфоблоки проще всего разделить по языковым разделам, но можно подключать нужный в зависимости от выбранного языка.