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

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

Сама возможность мультиязычности в первой ветке уже присутствует. В существующем решении и русскоязычная и англоязычная версия страницы будет находиться по одному и тому же 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

и сразу после

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

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

Код PHP:
  1. 'lang'=>'ru',
на это

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

После строки

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

Код PHP:
  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. }
и ниже заменил значения парметров на заданные переменные

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

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

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

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

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

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

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

Но это в следующих сериях, сейчас я хотел только поделиться самим принципом организации мультиязычности (с выносом локализации на отдельный поддомен, но без копирования файлов системы) в связке с инстантом первой ветки.
Рассылка пользователям сайта с выборкой адресов с рядом условий
Комментарии (1)
Олег Васильевич я 10 июля 2020 в 20:56 +1
Ждём продолжения...
Спасибо!