Друпал 8 мультиязычный сайт

Главные вкладки

Аватар пользователя nic12 nic12 2 февраля 2019 в 22:31

Добрый вечер господа! Перевел сайт мультиязычный на Друпал 8, сделано три языка.
На англоязычной версии адреса страниц вопросов нет, но вот на немецком и французском проблема.
Проблема заключается в том что, при нажатии очистить кэш, страницы некоторые теряют префикс
de или fr, точнее не совсем так страницы имеют префиксы нужные, а вот вывод в боковом меню там часть страниц (не очень большая) становится без префикса выбранного языка. Я пробовал несколько раз убирать эти ссылки в меню на эти страницы и потом заново добавлять- все отлично работает- без вопросов, но только я сделаю очистку кэша, опять эти же страницы без префикса.
Хотел в базе изменить но строк много и где именно менять не нашел. Подскажите где копать.

Комментарии

Аватар пользователя EvgenySorokin EvgenySorokin 2 февраля 2019 в 23:18

Я бы проверил - есть ли у тех страниц, где "пропадают префиксы" страницы соответствующего языка, то есть выбран ли вообще у страницы язык и есть ли все переводы. Если пункты меню вручную создавались, то и у них настройки языка. Потом анонимом перепроверил бы ситуацию, то есть что он видит - тоже самое или у него проблема с потерей не воспроизводится.
В базе вручную ничего лучше не трогать.

nic12 wrote:

Перевел сайт мультиязычный на Друпал 8

здесь понимается апгрейд с 6/7 версии или же сайт был изначально сделан на 8ке, просто включили мультиязычность? Чтобы исключить проблемы от апгрейда (если он был).

Аватар пользователя nic12 nic12 2 февраля 2019 в 23:52

Страницы одного и того же материала имеют переводы и адреса у них с префиксами. Апргрейд на 8-ю версию простым переносом страниц вручную, т.е сайт с нуля.
Создание ссылки в меню соответственно добавить ссылку на нужном языке (скопировав ссылку соотвествующего языка готовой страницы ), вопрос в чем еще раз - сссылка теряет префикс "de" хотя другие ссылки в этом меню остаются с префиксом при очистке кэша, получается она сидит в кэше с префиксом. Я пробовал, страница имеет префикс если не очищать кзш.

Аватар пользователя sas@drupal.org sas@drupal.org 6 февраля 2019 в 8:51

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

Аватар пользователя nic12 nic12 7 февраля 2019 в 19:03

Все делалось на денвере, а то что пишете отлично - не факт, пока это только слова, перепробовал много разных вариантов, не помогло после очистки кэша, тем более оно может и отлично, а если делать несколько меню на разных языках боковое по разделам.
Было бы здорово, кто мультиязычный сайт делал поделился бы опытом, помогло бы многим, на разных примерах.
Мне пришлось в базе открыть сточку menu_link_content_data и где не хватало префикса (соответствующих страниц) добавить /de или /fr, английский язык по умолчанию итак работает.
Может надо было по-другому сделать, но вот такой вариант получается, сейчас закончу и перезалью сайт на 8-ку.

Аватар пользователя nic12 nic12 7 февраля 2019 в 19:18

Насчет добавления префикса, добавлял не везде, где в соответствующем меню данного языка страница бокового меню была без префикса, там и добавлял, очистка кэша и проверял меню.

Аватар пользователя marassa marassa 7 февраля 2019 в 21:46

Вот похожая тема была, там я рассказывал как победил похожую проблему: https://drupal.ru/node/136679
Вот мой текущий код немного почище того старого, без завязки на названия языков:

/**
 * Implements hook_link_alter().
 */

function HOOK_link_alter(&$variables) {
  // Make sure all internal links from a page lead to the correct language versions of any linked page
  if (isset($variables['options']['attributes']['class'])
      && is_array($variables['options']['attributes']['class'])
      && in_array('language-link', $variables['options']['attributes']['class'])) return;

  $language = \Drupal::languageManager()->getCurrentLanguage();
  $variables['options']['language'] = $language;
}

Аватар пользователя marassa marassa 8 февраля 2019 в 9:30

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

/**
 * Implements hook_link_alter().
 */

function HOOK_link_alter(&$variables) {
  // Make sure all internal links from a page lead to the correct language versions of any linked page
  if ($variables['url']->isExternal()) return;
  if (isset($variables['options']['attributes']['class'])
      && is_array($variables['options']['attributes']['class'])
      && in_array('language-link', $variables['options']['attributes']['class'])) return;
  $language = \Drupal::languageManager()->getCurrentLanguage();
  $variables['options']['language'] = $language;
}