Подход к организации мультиязычности на сайте с выносом на поддомен но без дублирования файлов

+7
1.47K
Решил "побаловаться" и запустить англоязычную версию сайта.

Сама возможность мультиязычности в первой ветке уже присутствует. В существующем решении и русскоязычная и англоязычная версия страницы будет находиться по одному и тому же url. Технически вполне удобно, через POST запрос менять настройки языка.

Но в большинстве случаев наша цель — проиндексироваться в Google и привлечь на англоязычную версию — англоязычный трафик. Google велит использовать разные url для разных языковых версий и даже рекомендует использовать поддомены с префиксом языка en.site.ru и т.д.

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

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

Решил опробовать другой подход. Возможно кому то пригодится.

Здесь я описываю общий принцип.

В настройках сайта на хостинге к основному домену mysite.ru прикрепил алиас поддомен en.mysite.ru — должно получиться полное зеркало, при наборе адреса en.mysite.ru должен выводиться основной сайт. Это как с www и без www.

Потом открыл /core/classes/config.class.php

и сразу после

  1. public static function getDefaultConfig() {
добавил строки

  1. $curenthost = $_SERVER['HTTP_HOST'];
  2. if($curenthost == 'en.mysite.ru'){
  3. $sitelang = 'en';
  4. } else {
  5. $sitelang = 'ru';
  6. }
и чуть ниже заменил строку

  1. 'lang'=>'ru',
на это

  1. 'lang'=>$sitelang,
Потом открыл /includes/config.inc.php

После строки

  1. if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }
добавил строки

  1. $curenthost = $_SERVER['HTTP_HOST'];
  2. if($curenthost == 'en.mysite.ru'){
  3. $sitelang = 'en';
  4. $htitle = 'Good Site';
  5. $offtext = 'The site is being updated';
  6. $kwords = 'site, super site';
  7. $sdescr = 'Very Goos Site';
  8. } else {
  9. $sitelang = 'ru';
  10. $htitle = 'Хороший сайт';
  11. $offtext = 'Производится обновление сайта';
  12. $kwords = 'сайт, супер сайт';
  13. $sdescr = 'Очень хороший сайт';
  14. }
и ниже заменил значения парметров на заданные переменные

  1. $_CFG['hometitle'] = $htitle;
  2. $_CFG['offtext'] = $offtext;
  3. $_CFG['keywords'] = $kwords;
  4. $_CFG['metadesc'] = $sdescr;
  5. $_CFG['lang'] = $sitelang;
Таким образом я поставил системные настройки языка в зависимость от того на каком домене находится пользователь. Если en.mysite.ru в настройках сайта значится — языка английский, в остальных случаях — русский. У пользователя всё ещё остаётся переопределить языка сайта через стандартную кнопку инстанта, если вы её не уберёте.

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

В общем то всё.

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

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

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

Пока плохо понятно, куда складывать sitemaps для англоязычной версии сайта, если отдельного каталога для этой версии сайта просто не существует.

Но это в следующих сериях, сейчас я хотел только поделиться самим принципом организации мультиязычности (с выносом локализации на отдельный поддомен, но без копирования файлов системы) в связке с инстантом первой ветки.
Олег Васильевич я Олег Васильевич я 4 года назад #
Комментарий удален

Еще от автора

Капча на сайт или разделы сайта
Если нужно, закрыть весь сайт или некоторые его разделы каптчей.
Пинг поисковых систем для первой ветки
Небольшая интеграция инструментов для пингования, чтобы сделать его чуть удобнее
Генератор карты сайта в формате txt на лету без крона
Вообще то где то тут уже есть вполне рабочие генераторы карты для первой ветки, но этот вариант тоже имеет право быть.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.