Самое обидное, что в Bitrix есть все предпосылки многоязычности в рамках одного сайта и шаблона. Подключение языковых файлов в рамках определённого ид языка, установка языков по умолчанию через панель и т.д. Мне кажется, можно реализовать смену языков в рамках текущего шаблона заменой строк кода в \bitrix\modules\main\include.php
Вот эти строки:
Код |
---|
define("LANG_CHARSET", $arLang["CHARSET"]);
define("LANGUAGE_ID", $arLang["LANGUAGE_ID"]); |
Можно заменить на что-то похожее на эти:
Код |
---|
$CHARS = Array('ru' => 'windows-1251', 'en' => 'windows-1251');
setcookie('LANGUAGE_ID', (empty($GLOBALS['_COOKIE']['LANGUAGE_ID']) && (empty($GLOBALS['_GET']['lang']) || empty($CHARS[$GLOBALS['_GET']['lang']])) ? $arLang["LANGUAGE_ID"] : (empty($GLOBALS['_GET']['lang']) ? $GLOBALS['_COOKIE']['LANGUAGE_ID'] : $GLOBALS['_GET']['lang'])), time() + 3600);
if (empty($GLOBALS['_COOKIE']['LANGUAGE_ID']) && (empty($GLOBALS['_GET']['lang']) || empty($CHARS[$GLOBALS['_GET']['lang']]))) { $GLOBALS['_COOKIE']['LANGUAGE_ID'] = $arLang["LANGUAGE_ID"];
} elseIf (!empty($GLOBALS['_GET']['lang']) && !empty($CHARS[$GLOBALS['_GET']['lang']])) { $GLOBALS['_COOKIE']['LANGUAGE_ID'] = $GLOBALS['_GET']['lang']; }
define("LANGUAGE_ID", $GLOBALS['_COOKIE']["LANGUAGE_ID"]);
define("LANG_CHARSET", $CHARS[LANGUAGE_ID]); |
Здесь $CHARS - массив кодировок, который нужно будет вручную дописывать при добавлении языков с другими кодировками, например немецкого. А теперь в шаблон дописать код смены языка переадресацией пользователя на его текущую страницу с параметром ?lang=язык при клике, например, на флаг страны. Язык будет запоминаться у пользователя на час, а если у него не выбран язык или он попытался выбрать несуществующий язык (параметр передал вручную) - будет показан тот, который выбран в панели управления.
Насколько безопасен подобный код?