У меня есть многоязычный сайт с Drupal 7, использующий субдомены, такие как en.example.com, для определения языка. Все работает, как и ожидалось, но у меня есть мобильная версия веб-сайта, где я хочу быть доступным для таких доменов, как en.m.example.com и т. Д. Как мне это сделать? Я могу установить admin/config/regional/language
только один домен для каждого языка, но для его работы потребуется установить два, например:
for English:
en.example.com & en.m.example.com
for German:
de.example.com & de.m.example.com
etc.
(Мне бы хотелось иметь ту же структуру, что и в Википедии.) Проблема в том, что, используя субдомены для выбора языка, Drupal создает все внутренние ссылки как абсолютные патчи. Например, ссылка меню будет создана как:
<li class="menu-773"><a href="http://en.example.com/test" >test</a></li>
and not as
<li class="menu-773"><a href="/test" >test</a></li>
Итак, я мог бы создать псевдоним домена с помощью Apache, чтобы отправлять запросы с en.m.example.com на en.example.com, но все внутренние ссылки вернули бы пользователя из мобильной версии в нормальное состояние. Как я могу решить эту проблему?
Ответы:
После того, как вы настроили Drupal для обслуживания разных языков в разных доменах, вы должны указать своему веб-серверу отправлять запросы из нескольких доменов на один и тот же сайт Drupal.
В Apache вам нужно отредактировать
.conf (httpd.conf)
файл и добавить псевдонимы для всех доменов. Например:В дополнение к этому вам также нужно будет указать сервер доменных имен (DNS) на ваш сервер для всех доменных имен на разных языках.
источник
Ответ таков: использование нескольких доменов для одного языка невозможно с Drupal 7, и, насколько я знаю, нет модуля, который добавляет эту функциональность.
Но для достижения этой цели в любом случае есть обходной путь: как упоминалось выше, проблема с языковыми доменами состоит в том, что все внутренние патчи, имеющие псевдоним пути для конкретного языка и созданные с помощью базовой функции Drupal url () , создаются как абсолютные патчи. Ответственным за такое поведение является функция :
Не устанавливайте языковой домен для этого языка по умолчанию. Если вы этого не сделаете, Drupal не создаст абсолютные пути для языка по умолчанию, если - например - использовать домен xyz.example.com , где xyz.example.com не задан в качестве домена для какого-либо языка, Drupal создаст Все ссылки относительны, поэтому при нажатии любой внутренней ссылки будет сохранен поддомен. Но вы не можете использовать этот метод, если вы хотите иметь чувствительные к языку субдомены, как описано выше:
для английского языка: en.example.com & en.m.example.com
для немецкого: de.example.com & de.m.example.com и т. д.
Таким образом, второй метод - изменить текущий язык всех типов с помощью функции: hook_language_init . Я использую следующий код, чтобы приведенный выше пример работал:
:
источник
custom_api
и хукhook_language_init()
. Вместе это такcustom_api_language_init()
. Может быть, это сбивает с толку, поэтому я отредактировал пример, чтобы прояснить этот момент. Вы правы, использование «hook_language_switch_links_alter ()» может быть лучшим способом. Но так как кажется, что почти никто не заинтересован в этой проблеме, я думаю, что не стоит переписывать этот пример.