Регион на сайте: Новодвинск
close
Мы угадали?
close
Выберите ваш регион
Абакан Абинск Адлер Азов Аксай Алапаевск Алатырь Алдан Алейск Александров Александровск Александровск-Сахалинский Александровское Алексеевка Алексин Алупка Алушта Альметьевск Амурск Анадырь Анапа Ангарск Анжеро-Судженск Анива Анна Апатиты Апрелевка Арзамас Арзгир Армавир Армянск Арсеньев Артем Артемовский Архангельск Асбест Астрахань Аткарск Ачинск Аша Аэропорт "Домодедово" Бабаево Багаевский Байконур Балабаново Балаково Балахна Балашиха Балашов Баргузин Барнаул Батайск Бахчисарай Белая Калитва Белгород Белово Белогорск Белорецк Белореченск Бердск Березники Березовка Березовский Беслан Бийск Биробиджан Бирск Благовещенск Благодарный Бобров Богданович Богородск Богучар Бодайбо Бологое Большой Камень Бор Борисоглебск Боровичи Боровск Братск Бронницы Брянск Буденновск Бузулук Буйнакск Бутурлиновка Валуйки Ванино Великие Луки Великий Новгород Великий Устюг Вельск Верхний Уфалей Верхняя Пышма Верхняя Салда Веселый Вешенская Взморье Видное Вилючинск Вихоревка Владивосток Владикавказ Владимир Внуково Волгоград Волгодонск Волжск Волжский Вологда Волоколамск Волоконовка Волосово Волхов Вольно-Надеждинское Вольск Воркута Воробьевка Воронеж Воскресенск Воскресенское Воткинск Всеволожск Вурнары Выборг Выкса Вырица Выселки Вышний Волочек Вязовая Вязьма Вятские Поляны Гаврилов-ям Гагарин Гай Галенки Гатчина Геленджик Георгиевск Глазов Голицыно Горно-Алтайск Горнозаводск Городец Городище Гремячинск Грозный Грязовец Губаха Губкин Гудермес Гуково Гулькевичи Гусиноозерск Гусь Хрустальный Далматово Дальнегорск Дальнереченск Дедовск Демидово Десногорск Джанкой Дзержинск Дзержинский Дивногорск Дивное Диксон Димитровград Дмитров Добрянка Долгопрудный Домодедово Донецк Дубна Дубовка Дудинка Евпатория Егорлык Егорлыкская Егорьевск Ейск Екатеринбург Елабуга Елань Елец Елизово Еманжелинск Ерофей-Павлович Ессентуки Ефремов Железноводск Железногорск Железногорск-Илимский Железнодорожный Жигулевск Жирновск Жуковка Жуковский Забайкальск Заволжье Заполярный Зарайск Заречный Заринск Звенигород Зеленогорск Зеленоград Зеленокумск Зерноград Зима Зимовники Златоуст Иваново Ивантеевка Ижевск Изобильный Иланский Иловля Инжавино Инта Ипатово Иркутск Искитим Истра Ишимбай Йошкар-Ола Кабанск Кавалерово Кагальницкая Казанская Казань Казлук Калач Калач-на-дону Калининград Калтан Калуга Калязин Каменоломни Каменск-Уральский
Каменск-Шахтинский Камень-Рыболов Камышин Канаш Кандалакша Каневская Канск Кантемировка Карабаш Карагай Касимов Каспийск Качканар Кашары Кашира Кемерово Керчь Кизел Кизляр Кимры Кинель Кинешма Киржач Кириллов Кириши Киров Кировград Кирово-Чепецк Кировск Кировский Киселевск Кисловодск Климовск Клин Ковров Когалым Кодинск Кола Коломна Кольчугино Комсомольск-на-Амуре Конаково Кондопога Константиновск Копейск Коркино Королев Корсаков Коряжма Кострома Котельники Котельниково Котово Котовск Красноармейск Красновишерск Красногорск Краснодар Краснознаменск Краснокаменск Краснокамск Красноперекопск Краснотурьинск Красноуральск Красноуфимск Красноярск Красный Сулин Красный Яр Крымск Кстово Куанда Кудымкар Кузнецк Куйбышев Кулебаки Кумертау Кунгур Купавна Курагино Курган Курганинск Курсавка Курск Курчатов Кушва Кызыл Кыштым Лабытнанги Лангепас Лебедянь Левокумское Лениногорск Ленинск Ленинск-Кузнецкий Ленск Лермонтов Лесной Лесозаводск Лесосибирск Летняя Ставка Линево Липецк Лиски Лобня Лосино-Петровский Луга Луховицы Лучегорск Лысково Лысьва Лыткарино Люберцы Магадан Магнитогорск Майкоп Малаховка Малоярославец Мариинск Маркс Матвеев Курган Махачкала Мегион Медвежьегорск Медногорск Междуреченск Менделеево Менделеевск Миасс Микунь Миллерово Минеральные Воды Минусинск Мирный Михайловка Михнево Мичуринск Могоча Можайск Можга Мончегорск Морозовск Москва Муравленко Мурманск Муром Мытищи Мышкин Набережные Челны Навашино Навля Надым Назрань Нальчик Наро-Фоминск Нарьян-Мар Научный Нахабино Находка Невинномысск Невьянск Нерехта Нерюнгри Нефтегорск Нефтекамск Нефтекумск Нефтеюганск Нехаевский Нижневартовск Нижнегорский Нижнекамск Нижнеудинск Нижние Серги Нижний Архыз Нижний Новгород Нижний Тагил Нижняя Салда Нижняя Тура Николаевск Николаевск-на-Амуре Новая Усмань Новоалександровск Новоаннинский Нововоронеж Новодвинск Новокубанск Новокузнецк Новокуйбышевск Новомичуринск Новомосковск Новониколаевский Новопавловск Новороссийск Новосибирск Новотроицк Новоуральск Новочебоксарск Новочеркасск Новошахтинск Новошахтинский Новый Оскол Новый Рогачик Новый Ургал Новый Уренгой Ногинск Норильск Ноябрьск Нытва Обнинск Обь Одинцово Озерск Октябрьский Оленегорск Ольга Ольховатка Омск Орда Орел Оренбург Орехово-Зуево Орлов Орловский Орск Оса Отрадное Очер п. Лесной Городок Павлово Павловский Посад Палласовка Панино Париж Пенза Первомайск Первоуральск Переславль-Залесский Пермь Песьянка Петрозаводск Петропавловск-Камчатский Печора
Пикалево Питкяранта Подольск Покров Покровка Покровское Полевской Поронайск пос. Вешки пос. Лесной Приморско-Ахтарск Прокопьевск Протвино Прохоровка Псков Пулково Путилково Пушкино Пущино Пыть-ях Пятигорск Радужный Раменское Ревда Ремонтное Репьевка Реутов Ржакса Родионово-Несветайская Романовская Рославль Россошь Ростов Ростов-на-Дону Рубцовск Рудня Руза Рузаевка Румянцево Рыбинск Ряжск Рязань Саки Салават Салехард Салым Сальск Самара Санкт-Петербург Саракташ Саранск Сарапул Саратов Саров Сатка Сафоново Саяногорск Светлогорск Светлоград Светлый Светлый Яр Свободный Севастополь Северобайкальск Северодвинск Северск Сегежа Селятино Семенов Семикаракорск Сергач Сергиев Посад Серебряные Пруды Серов Серпухов Сертолово Сестрорецк Сибай Симферополь Сковородино Славянка Славянск-на-Кубани Смоленск Снежинск Собинка Советск Советская Гавань Советский Совхоз имени Ленина Соликамск Солнечная Долина Солнечногорск Сортавала Сосновоборск Сосновый Бор Сочи Спасск-Дальний Средняя Ахтуба Ставрополь Старая Купавна Старая Полтавка Старая Русса Старая Чара Старый Оскол Степное Стерлитамак Стрежевой Ступино Суворов Судак Сургут Сухой Лог Сходня Сызрань Сыктывкар Сысерть Таганрог Тайга Тайшет Таксимо Тамбов Тарасовский Тарко-сале Татищево Таштагол Тверь Тейково Темрюк Терней Тимашевск Тихвин Тихорецк Тобольск Тольятти Томилино Томск Топки Тосно Трехгорный Троицк Трудовое Туапсе Туймазы Тула Тутаев Тымовское Тында Тюмень Увельский Углич Удомля Укромное Улан-Удэ Ульяновск Унеча Урай Урень Урюпинск Усинск Уссурийск Усть-Илимск Усть-Катав Усть-Кинельский Усть-Кут Уфа Ухта Учалы Феодосия Фокино Фролово Фрязево Фрязино Хабаровск Ханты-Мансийск Хасавюрт Хилок Химки Холмск Хороль Целина Цимлянск Чайковский Чалтырь Чамзинка Чапаевск Чебаркуль Чебоксары Чегдомын Челябинск Череповец Черкесск Черниговка Черноголовка Черногорск Чернушка Чернышевск Черняховск Чертково Чехов Чита Чудово Чусовой Шадринск Шарыпово Шарья Шатура Шахты Шахунья Шебекино Шелехов Шерегеш Шилка Шимановск Шумерля Шумиха Щёлкино Щелково Щербинка Электрогорск Электросталь Электроугли Элиста Энгельс Юбилейный Югорск Южно-Сахалинск Южноуральск Юрга Юрюзань Ядрин Яковлевка Якутск Ялта Янаул Яранск Ярославль Ярцево Ясный Яхрома

Мультиязычность на Битриксе


Здесь я не буду рассказывать о том, зачем вообще нужны другие языки на сайте, считаю, что вы и так знаете зачем это вам, но расскажу как организовать показ сайта на нескольких языках быстро и без слёзок.

Какие вообще есть варианты работы с языками?

Есть три способа настройки мультиязычности с точки зрения сео:

  • Один домен
  • Отдельные сайты
  • Поддомены

Разберём каждый.

Один домен

Плюсы:

  • Цена
  • Поддержка

Минусы:

  • Неявное определение
  • Проблемы с индексацией

Пользователь нажимает на кнопку/переключатель и ему в сессию или прямо в куки записываются необходимые метки и, в случае сессионного массива, до выхода с сайта он будет видеть сайт на нужном языке, во втором случае, и в последующие заходы ему будет выдаваться выбранный раннее язык.

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

Но тут есть большой подводный камень в самом механизме определении какой язык нужно выдавать. Если с пользователями ещё всё не так плохо, они в любой момент могут снова переключить язык в случае ошибки, то поисковики - настоящая проблема. Робот не может сознательно выбрать язык и поэтому ему будет показан или язык по умолчанию или какой-то случайный набор из разных языков на разных страницах. Даже если он сможет полностью проиндексировать сайт на одном языке, второй ему уже не скормить, потому что урлы страниц будут одинаковые, и в поисковике вас никогда не найдут по запросу на втором языке, который у вас между прочим представлен и над которым вы так долго мучились с переводом.

Отдельные сайты

Плюсы:

  • Никаких проблем с индексацией

Минусы:

  • Цена
  • Поддержка

Тут решается проблема со "смешиванием" языков из предыдущего способа, языковые версии теперь вообще не связаны между собой: урлы, код и база данных абсолютно разные. Можно даже разделять логику работы для разных языков.

Но возникает проблема с поддержкой сайтов и общей ценой проекта. Вы знаете, что на одной лицензии можно сделать два сайта, но уже для третьего придётся покупать новую лицензию. Сколько стоит лицензия Битрикса вашей редакции? Да к тому же хостинг и домены будут стоить на порядок больше. Если это не такая уж и проблема (домены стоят чуть ли не по 100 рублей, у вашего хостера нет ограничения на количество сайтов, а Битриксов вам подарили на жизнь вперёд), то поддержка такого проекта превратится в настоящий ад.

Представьте, что вы решили добавить новую кнопку в шапку сайта, а у вас есть 5 языков, программистам придётся 5 раз править код вместо одного, а это человекочасы и возможность допустить ошибку. А если на сайте ошибка, то история повторяется, придётся отлавливать её на 5 разных сайтах. Мониторить проект и продвигать в поисковиках также придётся 5 сайтов, а для тестировщиков это в буквальном смысле в пять раз больше работы.

Поддомены

Плюсы:

  • Никаких проблем с индексацией
  • Цена
  • Поддержка

Минусы:

  • В сравнении с остальными - никаких

Этот способ можно назвать комбинированным из предыдущих двух: поддомены - не обязательно разные сайты, но для поисковиков - всегда разные. В зависимости от варианта исполнения мультиязычности на поддоменах можно добиться и сохранения единства кодовой базы, и не получить проблем с поисковиками, а также сохранить деньги и время на поддержке, мониторинге, тестировании.

Однажды я реализовал такой функционал на Битриксе и вынес его в модуль Регионы продаж. Поддомены в нём виртуальные, но выбор информации строго привязан к текущему поддомену и не может дать сбой.

Другие варианты

Конечно, можно придумать и другие, более эзотерические способы, например, продублировать страницы в папке /en/ или работать через $_GET-параметр, но мы их не рассматриваем из-за того, что они уступают каждому уже рассмотренному случаю.

Конкретные действия

Ниже представлена пошаговая инструкция по разделению сайта на языковые версии с помощью модуля "Регионы продаж".

Шаг 1. Настройка

Подразумевается, что модуль вы уже купили и поставили, если нет, дублирую ссылку. Теперь в инфоблоке регионов создаём новое строковое свойство, в котором будем хранить идентификатор языка ("ru", "en", "de", ...). Указываем это свойство в настройках модуля.

Свойство для хранения идентификатора языка Настройка свойства языка в модуле регионов продаж

Шаг 2. Перевод надписей, кнопок, статичного текста

В любом файле, в котором фразы для пользователей прописаны прямо в коде, например, header.php шаблона, вставьте в самое начало код подключения языковых фраз, на примере того же header.php это можно сделать так:

use Bitrix\Main\Localization\Loc;
Loc::loadMessages($_SERVER["DOCUMENT_ROOT"]."/bitrix/templates/".SITE_TEMPLATE_ID."/header.php");

Сам файл с ланг-массивом должен лежать по адресу /lang/{id языка}/{указанный путь}, для русского id языка - "ru". Он имеет вид:

<?
$MESS["Ключ массива"] = "Фраза";
$MESS["Другой ключ"] = "Другая фраза";
...
?>

А теперь заменяем нужную фразу на код:

<?=Loc::getMessage("Ключ массива");?>

Если вы это всё сейчас проделали, проверьте, ничего не должно измениться, что логично.

Теперь попробуйте другой язык, например, английский. Для этого в папке lang создайте папку en и продублируйте в ней структуру и файлы папки ru, оставьте ключи массивов в файлах такими же, но сами фразы переведите. Теперь на поддомене, который отвечает за английский на том же самом месте, должна быть фраза на английском.

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

Работу со свойствами страниц (мета, например) можно организовать также.

Шаг 3. Компоненты

С компонентами мы поступаем точно также, только там корнем для lang являются корень шаблона или корень компонента, вы можете увидеть пример в стандартных компонентах.

Шаг 4. Инфоблоки

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

"IBLOCK_ID" => $_SESSION["VREGIONS_REGION"]["LANG_ID"] == "en" ? "17" : "10"

Или если языков, больше двух, то можно хранить id инфоблока в инфоблоке регионов и выводить через сессию:

"IBLOCK_ID" => $_SESSION["VREGIONS_REGION"]["CATALOG_IBLOCK_ID"],

Другая идея состоит в том, чтобы создать для элементов доп. свойство(а), например, "Название на английском", и передавать идентификатор языка в $arParams и прописывать условия в template.php.


Вот и вся настройка, остаётся только набраться терпения и перевести всё, чтобы предоставить носителям другого языка качественный и полный контент.

Если у вас нет штатного программиста, но перевести сайт хочется, напишите мне на aristov-92@mail.ru и я сам позабочусь о коде.



Аристов Василий
Разработчик всех модулей на проекте

Теги



Что-то осталось непонятным или вы нашли неточность? Напишите, пожалуйста об этом в комментариях.

Написать комментарий

Чтобы писать комментарии, вам нужно войти на сайт

Авторизоваться через соцсеть

Авторизоваться через vk.com Авторизоваться через facebook.com

Хотите такие же комментарии себе на сайт? Купите готовый к установке модуль