Блог

Как организовать мультиязычное меню для ""Юпи!" ?

Модуль "Меню" из коробки не поддерживает мультиязычность, т.е. мы не можем переводить пункты меню на разные языки.
Однако, применяя некоторые простые решения, этого можно добиться. Вот об этом и поговорим.

Обычно в панели управления все доступные меню сайта выглядят примерно вот так:

Обратите внимание на столбец "Уникальный код", выделенный красной рамкой. После того как меню создано, оно отображается на сайте вот через такой вызов виджета:

https://github.com/yupe/yupe/blob/master/themes/de... Заметили, что здесь используется все тот же "Уникальный код" ?

Итак, чтобы на сайте отобразить меню на другом (любом доступном) языке нам необходимо сделать два шага:

  1. Для каждого языка в панели управления создаем свое собственное меню. При этом "Уникальный код" такого меню должен выглядеть вот так: <menu-name>-<language>, например: top-menu-ru или top-menu-en
  2. При выводе меню через виджет необходимо учитывать текущий язык пользователя сайта и выбирать для отображения соответствующее меню. Сделать это можно, просто заменив вызов виджета, показанный ранее вот на такой https://gist.github.com/yupe/6e905ca7dd2cdfac87b0 Обратите внимание на то, что теперь код меню, которое должно отобразиться, формируется динамически и зависит от текущего языка приложения (переменная Yii::app()->language) При смене языка приложения будет меняться и отображаемое на сайте меню.

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

В зависимости от языка можно по-разному упорядочивать пункты меню, можно скрывать часть пунктов или добавлять новые.

Предлагайте вопросы и проблемы для будущих советов!