•  
  •  
  •  
  •  
1 1 1 1 1 1 1 1 1 1 Рейтинг 5.00 (3 Голосов)
Несколько языковых версий сайта на битриксе — справочник-чеклист - 5.0 out of 5 based on 3 votes

Дисклеймер-способов очень много, мы взяли тот, который был для нас наиболее доступен по возможностям и имеющемуся времени. В сети очень много материалов по данному вопросу, но мы не нашли ни одного, даже в документации самого битрикса, где бы в одном месте давалась четкая последовательность действий и описание возможных ошибок. Данную статью следует рассматривать как справочный материал по одному из типов решений создания многоязычности на 1C-BITRIX.

Примерный порядок создания второй и последующих языковой версии сайта

1. Создаем в административном интерфейсе новый сайт (каждая редакция битрикса идет сразу с возможностью создать на одной лицензии два сайта), выставляем в настройках нужный нам язык (допустим, английский). При необходимости большего количества языков докупаем сайты (поверьте на слово, это будет дешевле, чем делать многоязычность другими способами и платить разработчику, чтоб это все поддерживать)

2. Русский сайт переименовываем в «RU», английский называем «EN» — для вывода переключателя языков в шапке или подвале сайта.

3. Создаем в корне сайта раздел «en» (можно создать поддомен en.ВАШ_САЙТ.ru), указываем адрес папки (или поддомена) в настройках английской версии.

4. Определяемся с тем, какие страницы и инфоблоки нужны нам в английской версии. Может быть все, а может и не все.

5. Переопределяем навигацию — верхнее, нижнее и другие меню — в папке «en» создаем копии файлов меню из корневого раздела и меняем все названия на английские, а к адресам ссылок добавляем «/en».

6. Копируем в папку «en» все необходимые нам папки со разделами, страницами и инфоблоками.

7. Со страницами и разделами все понятно — переименовываем во всех разделах названия в файлах section.php, меняем текст в страницах.

8. Отдельная тема: многоязычность для инфоблоков!

  • Самое простое — сделать копии нужных нам инфоблоков и скопировать туда все или необходимые элементы.
  • А потом перенести уже внутри новых инфоблоков.
  • Поменять id инфоблоков на соответствующих страницах английского раздела.
  • Внести правки в файлы локализации (для кнопочек, метаданных и т.д.) с помощью функции
<?=GetMessage("UNIC_ID")?>

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

Если нужно сохранить один инфоблок для всех языковых версий (например, в случае большого торгового каталога, то придется создавать дополнительные свойства и поля для всей дублируемой информации (названия элементов и разделов, описания и т.д.), а потом прописывать в шаблонах условия для вывода в определенной языковой версии определенного поля.

Свойства элемента инфоблока выводятся так:

<?=$arItem["PROPERTIES"]["PROPERTY_NAME"]["VALUE"]?>

Вместо «VALUE» может быть другой метод вывода, подробнее в документации.

Если не получается узнать, какое название переменной или значение использовать, часто помогает простая команда:

<?print_r($arResult)?>

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

Дополнительные поля раздела выводятся через такой код:

<? $res=CIBlockSection::GetList(Array("SORT"=>"ASC"), Array("IBLOCK_ID"=>"ID инфоблока", "ID"=>"ID раздела"),false,
Array("название дополнительного поля"));if($res=$res->GetNext()){echo $res['название дополнительного поля'];}?><?}?
> // если нам нужно вывести нефильтрованный html из дополнительного поля, то перед название поля ставим тильду: {echo $res['~название дополнительного поля'];}

Проверку языковой версии можно устроить так:

<?if (LANGUAGE_ID == 'ru') {?>
	это для русской версии
<?} elseif (LANGUAGE_ID == 'en') {?>
    а это для английской
<?}?>

Через эту проверку выводим нужные нам поля для каждой версии сайта.

Важный момент: в настройках инфоблока проверьте, что отмечены галочки нужных сайтов!

Естественно, код вывода инфоблока для каждой версии поправьте, указав правильный каталог SEF. Что-то типа:

"SEF_FOLDER" => "/en/catalog/"

можно это же сделать через визуальные настройки компонента.

Настройка шаблона сайта под разные языковые версии.

Можно сделать под каждый язык свой шаблон, в котором просто все перевести. А можно использовать один шаблон, локализовав в нем все, что можно, через функцию

<?=GetMessage("UNIC_ID")?>

а остальное (всякие включаемые области и файлы) определить через проверку языковой версии. Для русской версии выводим один файл (копирайт, контакты в подвале, слоган в шапке и т.д.), для английской — другой.

Если вы используете какие-то специфические скрипты (всякие модальные окна с формами), где уже прописан русский, то проще всего сделать английскую копию скрипта и отдавать ее по условию, чем пытаться все прописать в одном файле. Для js я лично пока не знаю способов локализации.

Как вывести переключатель языков на сайте?

Вставьте в нужно место шаблона вот этот код:

<?$APPLICATION->IncludeComponent(
    "bitrix:main.site.selector",
    "",
    Array(
        "SITE_LIST" => array(),
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "3600"
    ),
    false
);?>

Если вам нужно вывести вместо названий языков флаги, то скопируйте шаблон этого компонента и отредактируйте его примерно таким образом:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
	<?foreach ($arResult["SITES"] as $key => $arSite):?>
		<?if ($arSite["CURRENT"] == "Y"):?>
			<img src="/<?if(is_array($arSite['DOMAINS']) && strlen($arSite['DOMAINS'][0]) > 0 || strlen($arSite['DOMAINS']) > 0):?>http://<?endif?><?=(is_array($arSite["DOMAINS"]) ? $arSite["DOMAINS"][0] : $arSite["DOMAINS"])?><?=$arSite["DIR"]?>lang_active.jpg" alt="<?=$arSite["NAME"]?>"><?else:?><a href="/<?if(is_array($arSite['DOMAINS']) && strlen($arSite['DOMAINS'][0]) > 0 || strlen($arSite['DOMAINS']) > 0):?>http://<?endif?><?=(is_array($arSite["DOMAINS"]) ? $arSite["DOMAINS"][0] : $arSite["DOMAINS"])?><?=$arSite["DIR"]?>" title="<?=$arSite["NAME"]?>"><img src="/<?if(is_array($arSite['DOMAINS']) && strlen($arSite['DOMAINS'][0]) > 0 || strlen($arSite['DOMAINS']) > 0):?>http://<?endif?><?=(is_array($arSite["DOMAINS"]) ? $arSite["DOMAINS"][0] : $arSite["DOMAINS"])?><?=$arSite["DIR"]?>lang.jpg" border="0" alt="<?=$arSite["NAME"]?>"></a>
		<?endif?>
	<?endforeach;?>

Вам понадобится положить в корень 4 картинки с флагами языков:

lang.jpg и lang_active.jpg — для русского языка в обычном и активном состоянии

enlang.jpg и enlang_active.jpg — для английского языка в обычном и активном состоянии

Портфолио
Память о Вас и Ваших близких на многие поколения
Подробнее
Прокат металла
Подробнее
Интернет-магазин кожи и меха
Подробнее
100% оригинальная парфюмерия в Москве
Подробнее
Вьетнамский ресторан премиум класса
Подробнее
Внедрение информационных систем
Подробнее
Организация международных конференций
Подробнее
Производство молочной продукции
Подробнее
Спортивный сайт
Подробнее
Интернет-магазин мебели и аксессуаров
Подробнее
Интернет-магазин электротранспорта
Подробнее
Сайт института актуальной экономики
Подробнее
Наши клиенты
Парк развлечений Boom Zoom
Алгор
Норбит
Molga Consulting
Metrotile
Нетология
Monqi
Премиум Пак
Aasha Herbals
Аджва
Салон красоты Сударушка
Пава
ТЦ &quot;Панфиловский&quot;
Фитнес Лаборатория
Система Главбух
Vanguard
GoAsia
ТЦ «Солнечный ветер»
Teledoc
Tchernov Cable
Отзывы
Благодарю компанию web-now.pro за помощь в разработке и запуске проекта POLITSECRETS.RU. Перед нами стояла задача – внедрить проект в сжатые сроки и по оптимальной цене. Порадовало то, что мне подроб...
Вера БлашенковаСекреты успешных выборов, Москва... апр.2016
Мне очень понравился подход с которым нас встретили "Ваша задача заниматься бизнесом, наша - сделать Вам представительство в сети". После этого ребята разработали полное тз на проект, мы внесли пожела...
МаксимIT-TASK, Москва... янв.2016
Работа проделана хорошо! Дизайнер и менеджер на отлично. Надеюсь на сотрудничество в дальнейшем. Есть шероховатости в деталях по задачам, но приятно сказывается оперативность и желание исправить, внес...
БруноСоциальная сеть След Жизни, Москва... янв.2016
Работой остались очень довольны. К работе подходят ответственно, аккуратно, открыто. Проект был сдан чуть раньше срока, по ходу работы возникали изменения, все они принимались безоговорочно, работа вы...
ЕвгенийМагазин текстиля, Москва... дек.2015
Сотрудничаем с 2007 года и сделали не один проект. Самое главное - команда умеет отстаивать своё мнение и постоянно развивается.
МарияМеждународные конференции, Москва... дек.2015
Спасибо всему коллективу компании! Разработали красивый и что самое главной рабочий интернет магазин! Реклама настроена и запущена, продажи идут, бизнес развивается! Нам постоянно подсказывают о новых...
ВадимИнтернет магазин Aromatic.pro, Москва... сен.2015
Большое спасибо команде за оперативность, качественные работы, отличный креатив и привлекательные цены!
Виктория, ОАО "Фармстандарт... июль.2015
Здравствуйте уважаемые партнеры! С наступающим Новым Годом! Желаю Вам дальнейшего процветания и успехов в Вашей благородной работе! С вами приятно сотрудничать! Очень благодарен Вам за своевременное о...
Сергей ЮрченкоКинотруд, Москва... дек.2014
Благодарим команду Brand Now и лично Дениса Логинова за оригинальное видение,разнообразие идей, четкость взаимодействия и безукоризненное соблюдение сроков выполнения проекта! Планируем продолжить сот...
ТатьянаBizness Linkerz... июль.2014
Компания КУН выражает благодарность за сотрудничество: непростая задача была выполнена в требуемые сроки и полностью удовлетворила заявленному ТЗ. Приятно удивила готовность Генерального директора нач...
Мария, Компания КУНhttp://www.kuhn.com/... апр.2014
Все отзывы
Добавить отзыв