Мультиязычный сайт, архитектура

Друзья, подскажите кто уже сталкивался с подобной задачей.

Необходимо сделать промо сайт, с банальным функционалом, новости, статьи, продукция и все такое.

Скелет у меня есть, но для одного сайта. Данные буду хранить в базе, статику через Yii::t()

Подскажите как лучше создать архитектуру, и как удобней разбирать ссылки ?

Думаю формировать примерно так /<lang>/something/else

В общем поделитесь пожалуйста опытом )

Может что-то новое для себя открою.

P.S. Прочел о i18n в новой книге по Yii, жиденько и не о чем (

В кукбуке вроде больше написано чем в книге.

  1. Можно сделать языки отдельными модулями при инициализации модуля указать какой в приложении будет язык, а actions, views и модели сделать для всех модулей одинаковыми.

  2. Можно сделать отдельными приложениями, на хостинге раскидать по папкам en, ru, de и так далее.

  3. Можно через urlManager поймать $_GET ‘<lang:\w+>/<_a>/<_b>’ => ‘/<_a>/<_b>’ и затем в корневом контроллере указать язык в зависимости от этой переменной.

Третий случай обсуждался здесь.

Можно еще язык вынести в поддомен будет выглядеть как de.example.com/controller/action и ловить его в urlManager


'http://<lang:\w+>.example.com/user/profile' => 'user/profile',

вот №3 больше нравится, но не очень нравится что для каждого правила надо писать <lang:\w+> может есть какой-то префикс в котором можно просто указать его и не парится ?

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

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

Тогда уж удобней через сессию - на стороне клиента незачем хранить.

При входе на сайт по geoip определяется страна, выбирается язык, пишется в сессию PHP. Если клиент язык меняет, то он меняется в сессии. А уже в базовом контроллере обрабатывать это значение и устанавливать язык системы

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

  1. GeoIP - каждый раз выполнять такое действие это расточительство за которое надо бить по рукам, при этом страна по IP и язык в OS могут не совпадать (иностранец к примеру). Каждый уважаемый себя браузер (не бот) передает в User-Agent языковые предпочтения пользователя. Парсим (качаем готовое решение) User-Agent узнаем на каком языке хочет общаться пользователь. И так всегда делаем пока пользователь не определится сам!

  2. Сooke vs Session - подумайте об удобстве пользователя - каждый раз ему надо выбирать языка при истечении сессий (если это не авторизованный юзер настройки которого подгружаются при авторизации), а значить куки предпочтительнее (с 100500 лет expire)!

  3. Url vs Sub-domain vs Сooke - здесь все зависит от SEO вашего проекта, что бы принять решения надо советоваться с SEO специалистами - если это перевод интерфейса для конечного пользователя то Сooke must have, в противном случает здесь есть много деталей (зеркала, канонические ссылки, заточенность под поисковые системы и т.п.).

P.S.: Если на собеседовании соискатель предложит GeoIP и Session на этом его интервью было бы законченно!