Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как в шаблоне сайта вывести переключение между языками

00 голосов
4
Всем привет!Вопрос такой:
Какой код вывода переключателя языков? (чтобы в header.php прописать)

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

Если это так, то какой код вывода переключения между шаблонами,
Спасибо.
спросил 22 Дек, 13 от Vangelis (100 баллов)

4 Ответы

00 голосов
Вам необходимо создать 2 сайта и настроить многосайтовость для нормального перевода (таких как формат дат и прочее).
Или же в системных файлах менять код для переключения языков (не советую) при этом в параметрах передавать сам язык.

Список языков можно получить CLanguage::GetList()
ответил 10 Март, 14 от Run (1,300 баллов)
00 голосов
Хорошо вот, я вывел стандартный код переключения между шаблонами

Но если я хочу переключить на другой шаблон (язык) на какой-либо странице, то меня почему-то адресует на главную!

а как сделать так, чтобы шаблон переключался, а страница оставалась та же?
ответил 30 Июнь, 14 от Vangelis (100 баллов)
00 голосов
В битриксе все ужасно с языками. Сделайте два сайта (ru.site.com и en.site.com), и добавьте в шапку переключатель в виде простого php-блока, в коде которого ссылка на другой язык (сайт) должна подставлять другой домен в текущий REUQEST_URI.
ответил 31 Окт, 14 от Eddie (2,060 баллов)
00 голосов
Самое обидное, что в 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=язык при клике, например, на флаг страны. Язык будет запоминаться у пользователя на час, а если у него не выбран язык или он попытался выбрать несуществующий язык (параметр передал вручную) - будет показан тот, который выбран в панели управления.

Насколько безопасен подобный код?
ответил 28 Фев, 15 от Subarit (100 баллов)

Похожие вопросы

0 голосов
5 ответов
0 голосов
4 ответов
спросил 28 Окт, 13 от trixi (120 баллов)
0 голосов
6 ответов
0 голосов
6 ответов
0 голосов
5 ответов