Поддержка мультиязычности

В движке на уровне ядра реализован функционал по поддержке мультиязычности.

Конечно, многоязычный сайт нужен далеко не всем. Но, все же, немало людей создают сайты на двух (и более) языках. И вот для таких случаев и реализована поддержка «мультиязычности» .

Итак, общая схема такая:

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

Тут важно подчеркнуть, что мультиязычность «из коробки» подразумевает лишь легкую смену на лету «текстовок» сайта (т.е. надписи интерфейса, сообщения и т.д.), но не меняет сам контент. В каких-то случаях этого бывает достаточно. Но в каких-то — мало. Поэтому для тех, кому нужно оперировать мультиязычным контентом (а не просто интерфейсом), потребуется дополнительно разрабатывать соответствующий функционал. Но, я думаю, имея базовую поддержку мультиязычности на уровне ядра, сделать это будет не так уж и сложно. Вообще, разработка подобного плагина стоит у меня в планах, но сделать это может и любой сторонний разработчик. Тем более, что могут быть разные варианты, как, в принципе, может работать мультиязычный сайт — как со стороны посетителя, так и со стороны админа. Поэтому может быть несколько плагинов, реализующие разный подход к мультиязычности контента.

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

Похожие статьи

  • Мультиязычность!
    возможно ли на Alto сделать так чтобы в «интересные» попадали статьи установленного по умолчанию языка у пользователя. если стоит EN игнорируются русские статьи, подскажите в каком направлении думать, как в обще...
  • Преодолеваем трудности перевода Alto CMS, скинов и плагинов на другие языки
    Сегодня в версии 1.1 на гитхабе были обновлены тексты на английском языке. И это было б рядовым событием, если б не одна деталь — корректировка и обновление текстов были выполнены с помощью нового сервиса локализации....
  • Как выключить мультиязычность?
    На сайте есть страницы вида sitename.com/en/blogs/ как их можно отключить?
  • Мультиязычность в 1.0.7
    Добрый день! Подскажите,пожалуйста, как сейчас реализована мультиязычность? Меня интересует можно ли писать одну статью на разных языках и показывать ее пользователям в зависимости от выбранного языка интерфейса?...

16 комментариев

0
Мне нужен такой функционал. Очень нужен!
0
Для Livestreet есть плагин L10n, по моему очень не плохо описано какая должна быть мультиязычность. Ставил на свой сайт, сейчас точно не помню, количество запросов к бд возросло чуть ли не в два раза, но даже это не останавливало. Остановило то что не смог подружить sphinx с этим плагином, поиск перестал работать, не помог и конфиг идущий с плагином. В результате ограничился «Панелькой смены языка сайта (Language changer)»
+1
Я писал уже, что бывают разные варианты, и у разных сайтостроителей могут быть разные потребности. Например, для кого-то достаточно смены языка интерфейса, а вот фильтрация контента по языку может быть нежелательной. А кто-то создает, фактически, разные версии сайта под разные языки. Встречался мне вариант, когда владелец сайта хотел статические страницы делать под разные языки и выдавать соответствующую языковую версию страницы в зависимости от языка, выбранного юзером, а вот топики разноязычные по его замыслу должны были одной лентой идти, с указанием языка, и юзер сам мог доп.фильтр включать/выключать.

Поэтому и решено было в самом движке лишь базовый функционал реализовать, а навороты оставить для плагинов
0
Здравствуйте, хотелось бы знать как обстоят дела с переводом такого пункта как «Дополнительные поля». и Пользовательские типы топиков
Насколько я понял они указываются только в одном языке?
Отредактирован:
0
В текущей версии — да. Но есть решение проблемы, сделаем
0
Не понимаю, как можно проделать следующую штуку. Хочу добавить на страницу настроек сайта отдельное поле, где можно выбрать язык сайта. Добавляю селект в шаблон, в хук settings_tuning_save_before добавляю
E::ModuleLang()->SetLang('en');
, но в итоге на сайте вообще исчезают все тексты. Пробовал также через
Config::Set('lang.current', 'en');
и
E::ModuleSession()->SetCookie('lang', $_REQUEST['settings_language'], 31536000)
, но тоже не помогло. Как можно сделать еще выставление языка сайта через страницу настроек?
0
Все уже придумано и все гораздо проще :) Если в конфиге не меняли языковые настройки по умолчанию, то достаточно перезагрузить страницу сайта (любую) с параметром lang=en. Например, так: site.com/settings/?lang=ru

Но, повторюсь, это можно сделать на любой странице. Например, можно добавить в шаблон такой код, который будет выводиться на всех страницах сайта:
<a href="?lang=en">EN</a>
<a href="?lang=ru">RU</a>

Тогда при клике на первую ссылку сайт будет отображаться на английском, при клике на вторую — на русском (независимо от того, авторизован ли юзер).

По умолчанию языковые настройки сохраняются только на время текущей сессии. Если хотите, чтобы они сохранялись в куках на бОльший срок, добавьте в app/config/config.local.php строку:
$config['lang']['save'] = '1 year';
Отредактирован:
0
Это я уже сделал, и все работает прекрасно. Теперь я хочу сделать, чтобы пользователь мог зайти в настройки своего профиля и среди остальных настроек мог выбрать желаемый язык сайта. Сохранить все поля, после чего сайт должен показываться в нужном переводе.
0
Т.е. получается, что нужно сохранять индивидуальные настройки конфига сайта для конкретного юзера. Такого функционала в движке нет (хотя мысль интересная).

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

Но если все ж задаете какие-то кастомные настройки, и пишете свой плагин, в котором сохраняете эти самые настройки, то тогда в нем можете реализовать расширенный метод инициализации сущности, примерно так:
class PluginCustom_ModuleUser extends Module {

    public function Init() {
        parent::Init();
        if ($this->oUserCurrent) {
            Config::Set('lang.current', 'en');
        }
    }
}
0
Почему же? По идее достаточно прописать нужную куку в браузер и все. Только вот не получается это сделать. Похоже, что при инициализации страницы заново инициализируется язык и прописывается своя кука. Как ее перезатереть на своем уровне я не нашел…
Отредактирован:
0
По идее достаточно прописать нужную куку в браузер и все
Тогда я что-то не понимаю. При настройках по умолчанию при вызове типа site.com/?lang=ru нужная кука автоматически пишется самим движком без дополнительных телодвижений. В чем тогда проблема? На вашем сайте язык переключается при вызове с параметром lang=ru? Потом при переходе по разным ссылкам язык сохраняется?
0
Да, все сохраняется. Я просто не хочу добавлять в футер или хедер две ссылки с флагами для переключения языков, а хочу вынести это в настройки аккаунта. Я не говорю, что на сайте не работает мультиязычность, меня просто интересует как можно сделать переключение языка сайта через настройки аккаунта, выставив нужную куку в браузере.
0
меня просто интересует как можно сделать переключение языка сайта через настройки аккаунта, выставив нужную куку в браузере
Ну так просто же — все что нужно, это один раз дернуть любую страницу сайта с параметром ?lang=xx.

Например, добавляете в форму настроек юзера поле с языком. И, в зависимости от выбора юзера меняете джаваскриптом адрес отправки формы, т.е. задаете в атрибуте action значение ?lang=ru или ?lang=en. И все! Со стороны сервера даже трогать ничего не придется, движок сам запишет языковую куку.

Годится такой вариант?
0
Возможно, попробую сделать
0
А можно ли сделать чтобы все ссылки шли через /ru/... ? И как это сделать? Сейчас у меня стоят все статьи с урл site.com/ru/1234.html , а мне нужно еще й другие страницы так сделать. Плюс, главную страницу site.com/ru Как это правильно сделать, подскажите пожалуйста
0
Если нужно, чтобы везде добавлялось /ru, и при этом сейчас на сайте используется только один язык, то самый простой вариант такой: создать в корне сайта папку /ru/ и движок установить в этой папке. И все — без всяких дополнительных настроек получите желаемое. А из корня сайта прямо средствами вебсервера настроить редирект в папку /ru (если используется Apache, то это в файле .htaccess делается).

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