Установка языка по умолчанию в drupal 6 на мультиязычном сайте

Столкнулся с интересной проблемкой в Drupal 6 при создании мультиязычного сайта.

Сама мультиязычность создавалась довольно типичным способом — пара стандартных модулей locate, content translate + i18n. Для каждого языка был выбран свой префикс пути (ru — для русских статей, en — для английских и cs — для чешских), и все было отлично и работало ожидаемо, пока сайт был открыт с правами администратора. Надо заметить, что сайт должен был быть приоритетно на английском. И он был установлен языком по умолчанию, и у администратора (admin) выбран в профиле.

Что происходило, когда мы выходили из профиля админа.

Главная страница, для которой в пути не было указания на язык, как для остальных страниц сайта, начинала отображаться на двух языках одновременно. В качестве главной, была выбрана англоязычная версия одной из статей, и она отображалась на английском, а вот меню, breadcrumbs и прочее — на русском. Т.е. не смотря на то, что на странице /admin/settings/language был выбран по умолчанию английский, drupal решал, что язык надо выбрать русский.

Возникал резонный вопрос — а почему? Ответ кроется в недрах ф-ции language_initialize() (/common/language.inc). Оказалось, что сначала drupal выясняет язык пользователя, и если тот авторизирован на сайте, язык берется из его профиля. Вот почему администратор получал верное отображение главной страницы — его языком в профиле был анлийский.

Вторым по значимости оказалось значение, передаваемое браузером — а именно русский язык. Его и устанавливал drupal для анонима. Статья отображалась на английском, а все остальное согласно работе модуля «интернационализации» — на русском.

А вот в последнюю очередь бралось значение языка по умолчанию. Не трудно догадаться, что современные браузеры всегда передают значение языка — и потому вариант со значением по умолчанию в данной функции остается не использованным. Разве что для ботов :), или если язык пользователя не поддерживается на сайте.

Пришлось часть кода, связанных с извлечением языка из данных, передаваемых браузером, закомментировать. Это, понятно, кривая тропинка и делать так не стоит (ковырять файлы ядра движка — ай-ай-ай). Погрозим сами себе пальчиком.

Вот пара более «правильных вариантов».

1. Записать в setting.php — cтроку

Затираем переменную HTTP_ACCEPT_LANGUAGE в настройка сайта, и drupal её уже не сможет проанализировать при инициализации языка.

2. Оформить вариант 1 в виде hook-а, который вызывается до инициализации языка. К примеру как то так

Если значение этой переменной важно, то его можно сохранять в зацепке (hook) boot и восстанавливать, к примеру, в зацепке init, когда язык уже выбран.

Мало букафф? Читайте есчо !

Создание администратора через drush, Drupal 9

Сентябрь 22, 2023 г.

Полезные команды для создания пользователя с админ правами, используя drush. Для начала нужно создать пользователя (пусть это будет yury): [crayon-69fe233cab23a923297379/] Далее назначим ему роль администратора: [crayon-69fe233cab244183975090/] ...

Читать

Программное управление добавлением публикаций в xml sitemap

Декабрь 10, 2017 г.

Благодаря модулю xmlsitemap, XML карту не сложно добавить на любой Drupal-сайт. Модуль позволяет управлять тем, какие типы публикаций добавлять в карту, ...

Читать

Ошибка в Drupal: once is not a function

Май 8, 2023 г.

В Drupal 9/10 нет jQuery плагина once(), потому при использовании этой функции вы увидите сообщение о том, что once - не является функцией. Плагин удобен, но его не сложно заменить в коде буквально парой вставок. Он работает по следующему алгоритму ...

Читать

Войти под учеткой другого пользователя в Drupal

Февраль 8, 2015 г.

Рассмотрим такую несложную задачу администрирования как вход под именем другого пользователя в drupal. Иногда требуется взглянуть на сайт "глазами" ...

Читать
 

Комментарии к «Установка языка по умолчанию в drupal 6 на мультиязычном сайте»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: