Здравствуйте!
Сделал мультиязычный сайт.
Язык определяется по префиксу в URL.
У меня есть раздел "Контакты" - это просто нода. Ссылка добавлена в главное меню
При редактировании английского материала в русской админке пункт меню автоматически отключается.
Как это предотвратить?
Уточню по подробней:
Есть русский материал по адресу
http://example.com/contacts
Английский материал по адресу
http://example.com/eng/contacts
Оба материала имеют одинаковый алиас "contacts".
Если зайти по адресу http://example.com/node/15/edit
где /node/15 - это английский материал и сохранить его, то пропадает ссылка "Contacts", а точнее деактивируется.
Если зайти по адресу http://example.com/eng/node/15/edit
и сохранить, то всё работает нормально.
То есть сейчас чтобы этого бага не было, мне приходится редактировать русские материалы в русской админке, а английские - в английской.
Как убрать автоматическое отключение пунктов меню.
PS: кстати если редактировать русский материал из английской админки, то русский пункт меню тоже отключается...
Комментарии
Пока решил проблему с помощью редиректов.
Написал такой хук в своём модуле:
{
//хак чтобы побороть баг с пропадающим меню при
//редактировании английской ноды в русской админке
//просто делаем редирект на английскую админку
if (isset($variables['node'], $variables['language']) and $variables['node']->language == 'en' and $variables['language']->language == 'ru') {
header('Location: /eng' . $_SERVER['REQUEST_URI']);
exit();
}
//Мы русские, поэтому не пользуемся английской админкой
if (strpos($_SERVER['REQUEST_URI'], '/eng/admin') === 0) {
header('Location: ' . str_replace('/eng/admin/', '/admin/', $_SERVER['REQUEST_URI']));
exit();
}
}
При установке модуля i18n, если я не ошибаюсь, в таблицу, в которой хранятся пункты меню, добавляются поля, хранящие информацию о языке элемента меню.
И, соответственно, пункты меню, помеченные как англоязычные, не будут отображаться на русскоязычных страницах. Как-то так ...
А вот чтобы при редактировании англоязычных страниц была русскоязычная админка, есть модуль admin_language
roman-yrv, спасибо!
С локализацией и переводом пунктов меню я разобрался.
Я не понял, почему при сохранении английского материала в русской админке пункт меню, соответствующий этому материалу деактивируется. И как это предотвратить.
А модуль admin_language мне пока не нужен, так как пока проблема не решена, мне необходима английская админка для редактирования английских нод.
Сейчас попробовал сделать на тестовом сайте многоязычность через entity_translation, благо, что нода также является сущностью.
Причем, настроил так, чтобы, к примеру, если сайт на пяти языках, то нода была одна, а полей - по пять. То есть, перевод по полям.
Получается очень удобно. Нода - одна. Её адрес без префикса языка - в любом случае один.
Физически элемент меню - также один, если пункты меню вводить как "Нейтральные по отношению к языку", а после - локализовывать.
Единственно, для реализации такого варианта перевода нужно установить модуль title, который делает так, что заголовок ноды начинает обладать свойствами CCK-полей (его можно переводить и хранить их для каждой ноды несколько)
Может быть, если Вам настроить перевод таким вот образом, то эта проблема с меню не возникнет в принципе.
Спасибо,
Я рассматривал такой способ мультиязычности, но мне он не подходит.
Вообще я думал может быть есть где-то волшебный чекбокс отключающий такое поведение.
Или может кто-то знает, почему так сделано, и, мало ли, это является частью какой-то идеологии...
Вобщем пока всё работает с моим фиксом. Но хочется проблему добить.