В движке на уровне ядра реализован функционал по поддержке мультиязычности.
Конечно, многоязычный сайт нужен далеко не всем. Но, все же, немало людей создают сайты на двух (и более) языках. И вот для таких случаев и реализована поддержка «мультиязычности» .
Итак, общая схема такая:
1) Вы указываете, какие языки доступны на вашем сайте. Можно указать любое число поддерживаемых языков. Как правило, языки указываются в двухсимвольных международных кодах: ru — русский, en — английский, uk — украинский, eo — эсперанто, и т.д. Если список поддерживаемых языков не задан или задан всего один язык, то функционал «мультиязычности» отключается автоматически.
2) Вы можете указать, каким образом происходит переключение между языками. Варианта два:
* язык задается через адрес (URL) сайта: site.com/en/ или site.com/ru/
* язык задается через параметр в URL: site.com/?lang=en или site.com/?lang=ru
В настройках вы можете указать как оба варианта, так и любой из них.
3) Выбранный язык сохраняется в сессии пользователя и/или может сохраняться в течение заданного вами времени. Т.е. если этот параметр задан, то при последующем заходе на сайт будет автоматически устанавливаться тот язык, который пользователь выбрал в прошлый раз.
4) Для каждого из заданных языков может быть установлена своя локаль и своя временная зона.
5) На мультиязычных сайтах при генерации страниц автоматически проставляются атрибуты rel="alternate" hreflang="x". Эти атрибуты распознаются поисковиками (как минимум, Google и Yandex их понимают) для того, чтобы корректно индексировать и ранжировать разноязычные страницы для посетителей из разных стран.
Тут важно подчеркнуть, что мультиязычность «из коробки» подразумевает лишь легкую смену на лету «текстовок» сайта (т.е. надписи интерфейса, сообщения и т.д.), но не меняет сам контент. В каких-то случаях этого бывает достаточно. Но в каких-то — мало. Поэтому для тех, кому нужно оперировать мультиязычным контентом (а не просто интерфейсом), потребуется дополнительно разрабатывать соответствующий функционал. Но, я думаю, имея базовую поддержку мультиязычности на уровне ядра, сделать это будет не так уж и сложно. Вообще, разработка подобного плагина стоит у меня в планах, но сделать это может и любой сторонний разработчик. Тем более, что могут быть разные варианты, как, в принципе, может работать мультиязычный сайт — как со стороны посетителя, так и со стороны админа. Поэтому может быть несколько плагинов, реализующие разный подход к мультиязычности контента.
Описанный выше функционал уже доступен в девелоперской версии на гитхабе. Правда, настройки мультиязычности пока выполняются только через конфиг-файл, но, разумеется, все это будет реализовано в админке к релизу.
апреля
28
2013
+8
Поддержка мультиязычности
Похожие статьи
-
Мультиязычность!
возможно ли на Alto сделать так чтобы в «интересные» попадали статьи установленного по умолчанию языка у пользователя. если стоит EN игнорируются русские статьи, подскажите в каком направлении думать, как в обще...
-
Преодолеваем трудности перевода Alto CMS, скинов и плагинов на другие языки
Сегодня в версии 1.1 на гитхабе были обновлены тексты на английском языке. И это было б рядовым событием, если б не одна деталь — корректировка и обновление текстов были выполнены с помощью нового сервиса локализации....
-
Как выключить мультиязычность?
На сайте есть страницы вида sitename.com/en/blogs/ как их можно отключить?
-
Мультиязычность в 1.0.7
Добрый день! Подскажите,пожалуйста, как сейчас реализована мультиязычность? Меня интересует можно ли писать одну статью на разных языках и показывать ее пользователям в зависимости от выбранного языка интерфейса?...
16 комментариев
Поэтому и решено было в самом движке лишь базовый функционал реализовать, а навороты оставить для плагинов
Насколько я понял они указываются только в одном языке?
Но, повторюсь, это можно сделать на любой странице. Например, можно добавить в шаблон такой код, который будет выводиться на всех страницах сайта:
Тогда при клике на первую ссылку сайт будет отображаться на английском, при клике на вторую — на русском (независимо от того, авторизован ли юзер).
По умолчанию языковые настройки сохраняются только на время текущей сессии. Если хотите, чтобы они сохранялись в куках на бОльший срок, добавьте в app/config/config.local.php строку:
Собственно, если сделали, как описано выше, то уже нет особой необходимости еще как-то специально задавать язык для юзера, выбранный им язык и так сохранится в куках на целый год.
Но если все ж задаете какие-то кастомные настройки, и пишете свой плагин, в котором сохраняете эти самые настройки, то тогда в нем можете реализовать расширенный метод инициализации сущности, примерно так:
Например, добавляете в форму настроек юзера поле с языком. И, в зависимости от выбора юзера меняете джаваскриптом адрес отправки формы, т.е. задаете в атрибуте action значение ?lang=ru или ?lang=en. И все! Со стороны сервера даже трогать ничего не придется, движок сам запишет языковую куку.
Годится такой вариант?
Со временем, когда Вы будете готовы запустить мультиязычную версию сайта, то в эту новую версию с соответствующими настройками Вы можете установить уже в корень, и пути типа /ru/ и /en/ у Вас уже будут виртуальными и отрабатываться роутером движка.