В данном примере делаем переключение языков с помощью параметра lang= в адресной строке. Параметр нужно будет ввести только один раз, после этого сайт переключается на другой язык.
1. Код, добавляемый в header.php шаблона сайта:
2. Код, добавляемый в /bitrix/.settings_extra.php:
3. Код, добавляемый в init.php:
Понятно, что все шаблоны должны быть многоязычными, инфоблоки проще всего разделить по языковым разделам, но можно подключать нужный в зависимости от выбранного языка.
1. Код, добавляемый в header.php шаблона сайта:
Цитата |
---|
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 } } |
Цитата |
---|
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']); } } |
Цитата |
---|
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'); // если языка нет в базе - ставим английский } |
Понятно, что все шаблоны должны быть многоязычными, инфоблоки проще всего разделить по языковым разделам, но можно подключать нужный в зависимости от выбранного языка.