Как организовать мультиязычное меню для ""Юпи!" ?
Модуль "Меню" из коробки не поддерживает мультиязычность, т.е. мы не можем переводить пункты меню на разные языки.
Однако, применяя некоторые простые решения, этого можно добиться. Вот об этом и поговорим.
Обычно в панели управления все доступные меню сайта выглядят примерно вот так:
Обратите внимание на столбец "Уникальный код", выделенный красной рамкой. После того как меню создано, оно отображается на сайте вот через такой вызов виджета:
https://github.com/yupe/yupe/blob/master/themes/de... Заметили, что здесь используется все тот же "Уникальный код" ?
Итак, чтобы на сайте отобразить меню на другом (любом доступном) языке нам необходимо сделать два шага:
- Для каждого языка в панели управления создаем свое собственное меню. При этом "Уникальный код" такого меню должен выглядеть вот так: <menu-name>-<language>, например: top-menu-ru или top-menu-en
- При выводе меню через виджет необходимо учитывать текущий язык пользователя сайта и выбирать для отображения соответствующее меню. Сделать это можно, просто заменив вызов виджета, показанный ранее вот на такой https://gist.github.com/yupe/6e905ca7dd2cdfac87b0 Обратите внимание на то, что теперь код меню, которое должно отобразиться, формируется динамически и зависит от текущего языка приложения (переменная Yii::app()->language) При смене языка приложения будет меняться и отображаемое на сайте меню.
Такой подход к реализации многоязычного меню дает одно большое преимущество: на разных языках может отличаться не только текст пунктов меню, но и вся его структура.
В зависимости от языка можно по-разному упорядочивать пункты меню, можно скрывать часть пунктов или добавлять новые.
Предлагайте вопросы и проблемы для будущих советов!
Комментарии