В мультиязычной версии сайта на Друпал 8 ссылка с поля "Содержимое: Ссылка на Содержимое" на странице представления на иностранном языке ведет на содержимое на русском языке

Аватар пользователя primary

Добрый день!

Нужна помощи по следующему вопросу. На мультиязычном сайте на Друпал 8 сделал материал "Новости" и Представление к нему "Все новости" - в виде страница с анонсами, содержащими поля:

Содержимое: Заголовок;
Содержимое: Image;
Содержимое: Body;
Содержимое: Ссылка на Содержимое.

Поля Содержимое: Заголовок; и Содержимое: Image; настроил в представлении в виде ссылки на Содержимое.

На англоязычной странице данного представления ссылка с заголовка и изображения ведет, как и нужно, на английский вариант страницы с материалом:

sait.ru/en/node/42

А вот поле: Содержимое: Ссылка на Содержимое - не правильно - на русскоязычную страницу: sait.ru/ru/node/42.

Перепробовал все настройки и не могу найти причину не правильной ссылки. На данный момент остается вариант убрать ссылку "Подробнее" (поле Ссылка на Содержимое), но надо бы разобраться, в чем дело.

Тип материала:
Версия Drupal:
0 Thanks

Лучший ответ

Комментарии

Аватар пользователя marassa
marassa 8 месяцев назад

Воевал с чем-то похожим примерно год назад, не придумал ничего лучше как принудительно проставлять во всех внутренних ссылках на странице (кроме переключателя языков! ;) язык текущей страницы. Получился жуткий хак, но работает исправно:

/**
 * Implements hook_link_alter().
 */

function MYMODULE_link_alter(&$variables) {

  /**
   * The URL of the link.
   *
   * @var Url
   */

  $url = $variables['url'];

  // Return early where possible.
  if ($url->isExternal()) return;

  // Make sure all internal links from a page lead to the correct language versions of any linked page
  if ($variables['text'] != 'English' && $variables['text'] != "Русский") {
    $language = \Drupal::languageManager()->getCurrentLanguage();
    $variables['options']['language'] = $language;
  }
}

Аватар пользователя primary
primary 8 месяцев назад

Попробовал поставить патч #11 с предложенного решения https://www.drupal.org/project/drupal/issues/2883450 , но к сожалению он мне не подходит, так как у меня при выводе представления на странице и в блоках установлена фильтрация по выбранному для страницы языку. В тоже время, для работы патча, при создании материала, в настройке выбора языка нужно выбирать "Не указано". Такие материалы в имеющихся представлениях на русском и английском просто не выводятся.

Попробовал и второе решение. По нему хочу уточнить. Данный хак добавил в файл темы mythemename.theme, соответственно, заменив MYMODULE на название моей темы mythemename. Почистил кэш. Но Ссылка на Содержимое в английской версии по-прежнему ведет на русскую страницу материала. Может что-то нужно сделать еще?

Аватар пользователя marassa
marassa 8 месяцев назад
primary написал:
Данный хак добавил в файл темы mythemename.theme, соответственно, заменив MYMODULE на название моей темы mythemename. Почистил кэш. Но Ссылка на Содержимое в английской версии по-прежнему ведет на русскую страницу материала. Может что-то нужно сделать еще?

Я не уверен, что данный хук будет работать в теме - многие работают только в модуле. У меня сделано в модуле и работает. Возможно в этом дело.

Аватар пользователя primary
primary 8 месяцев назад

Подскажите пожалуйста подробнее, в какой модуль и какой файл модуля добавить хак. (или нужно создать модуль?). И что прописать вместо MYMODULE

Аватар пользователя marassa
marassa 8 месяцев назад
itcrowd72 написал:
http://xandeadx.ru/blog/drupal/256

По ссылке описание создания модуля для семерки, в восьмерке всё немножко не так, начиная с папки. Найдите где-нибудь описание того, как создать свой модуль для восьмерки - там ничего военного нет, я тоже долго боялся, а оказалось ничего страшного. Рано или поздно это всё равно придётся сделать при разработке мало-мальски приличного сайта. Да, и на всякий случай предупрежу - название модуля должно отличаться от названия темы!

Аватар пользователя primary
primary 8 месяцев назад

Спасибо за помощь! Создам модуль, а также есть еще одна идея, которую попробую реализовать.

Аватар пользователя gun_dose
gun_dose 8 месяцев назад

Попробуйте вместо ссылки на содержимое использовать "ссылка на сущность". Т.к сам плагин ссылки на содержимое немного глючный и с версии 8.5 вроде бы должен стать deprecated.

Аватар пользователя nic12
nic12 2 месяца назад

К сожалению, пытаюсь перевести сайт на трех языках с друпал 6 на друпал 8, но даже в последней версии 8.6 так и остались проблемы при переходе на английский язык сайт так и не переходит нормально на свою языковую версию, включая и соответствующее меню на этом языке, языки site.com, site.com/ru, site.com/fr, site.com/de. В друпал 6 отлично решалась модулем i18n. Поиск в интернете не дал удачных вариантов, неужели придется переходить на Вордпресс? В Вордпрессе, там другая проблема возникает -страницы с одинаковыми адресами с префиксами языка он не дает сохранить а добавляет цифра 1 или 2 и т.д. Что делать, ждать 9 -ю версию?

Аватар пользователя marassa
marassa 2 месяца назад
nic12 написал:
даже в последней версии 8.6 так и остались проблемы при переходе на английский язык сайт так и не переходит нормально на свою языковую версию, включая и соответствующее меню на этом языке

Если бы Вы смогли чуть более внятно сформулировать свой вопрос , то появилась бы возможность получить внятный ответ. У меня без проблем работает двухязычный сайт на восьмёрке, начиная с версии 8.2.6 кажется.

Аватар пользователя nic12
nic12 2 месяца назад

Создал четыре языка,

nic12 написал:
site.com, site.com/ru, site.com/fr, site.com/de

site.com соответственно версия en, создаю четыре страницы одинакового содержания, но на разных языках. Не получается с меню и адресами, когда добавляю /en, то site.com/en только в такой конфигурации нормально переключаются языки с добавлением языка, по умолчанию нет, адрес сайта подскажите для примера.

Аватар пользователя marassa
marassa 2 месяца назад
nic12 написал:
создаю четыре страницы одинакового содержания, но на разных языках

Что такое "страница"? Каким образом создаёте? В восьмом друпале не создаются новые ноды для разных языков, а переводится исходная нода, nid для всех языковых версий один и тот же.

nic12 написал:
Не получается с меню и адресами, когда добавляю /en, то site.com/en только в такой конфигурации нормально переключаются языки с добавлением языка, по умолчанию нет

Увы, я не в состоянии понять написанное :(

nic12 написал:
адрес сайта подскажите для примера.

http://art.nouveau.world/moscow

Аватар пользователя marassa
marassa 2 месяца назад

PS Мой сайт пока на 8.5.3. Нельзя исключать что в 8.6 что-то поломали, хоть это и крайне маловероятно.

Аватар пользователя primary
primary 2 месяца назад

Последовательность должна быть такая:

1. Создаете сайт на основном языке (в т.ч. меню, блоки, информационные и другие страницы)
2. Включаете модули для мультиязычности
3. Загружаете в админке в языковых настройках необходимые языки
4. Далее для дополнительных языков не нужно создавать новые материалы, меню, блоки и т.д. Для каждого такого элемента переходим в соответствующих настройках по ссылке "Добавить перевод" и добавляем перевод существующего элемента.

Более подробно можно посмотреть, например, здесь:

https://tlito.ru/drupal-8-mnogoyazychnyy-sayt-iz-korobki

Проблема может быть в том, что на странице админпанели:

/admin/config/regional/content-language

нужно отметить те сущности которые нужно переводить, в том числе меню. Возможно не отмечен пункт "Пользовательская ссылка меню".

Аватар пользователя nic12
nic12 2 месяца назад

Спасибо marassa и primary попробую воспользоваться вашими советами, результат сообщу.

Аватар пользователя nic12
nic12 1 месяц назад

Господа получилось, большое спасибо- страницы со своим меню и переводом отображаются нормально, не нашел причины почему не могу переключить с языка на другой язык, на странице нет блока с переключением языков.
На настоящий момент выбор языка и переход на языковую страницу осуществляю, меняя в адресной строке en на de и прочее.

Аватар пользователя marassa
marassa 1 месяц назад
nic12 написал:
на странице нет блока с переключением языков

А Вы этот блок (Language switcher) добавляли через /admin/structure/block ?
Сам он и не может появиться на странице, если его туда не добавить.

Аватар пользователя nic12
nic12 1 месяц назад

Модули включены
Configuration Translation
Content Translation
Interface Translation
Language
на странице /admin/structure/block блока переключения языка нет
версия 8.6.2

Аватар пользователя nic12
nic12 1 месяц назад
marassa написал:
А Вы этот блок (Language switcher) добавляли через /admin/structure/block ?

Сам он и не может появиться на странице, если его туда не добавить.

Я его не добавлял на странице admin/structure/block не нашел как его добавить

Аватар пользователя nic12
nic12 1 месяц назад

Осталось одно решить, как сделать, чтоб не переведенные страницы, не показывались в меню. Получается к примеру, если две страницы переведены, а одна не переведена, то все равно показывается переход на не переведенную на данный язык страница, по-моему эта проблема 8-го друпал мультиязычного сайта.

Аватар пользователя marassa
marassa 1 месяц назад

О каком конкретно меню идёт речь, и как оно формируется?

Аватар пользователя nic12
nic12 1 месяц назад

Речь идет о блоке переключения языков, в котором отражаются переход на страницу материала на английском, немецком и .. и если страница не переведена на немецкий то в меню его не должно быть, а только те языки на который она имеет перевод. В друпале 6 это было без вопросов.

Аватар пользователя nic12
nic12 1 месяц назад
marassa написал:
Let me Google that for you: https://www.drupal.org/forum/support/translations/2016-08-28/language-sw...

[/quot] Посмотрел, почитал, не уверен, что это надежное решение, так нет статистики, плохо что допиливать, пока думаю и ищу решение в инете, но пока больше не попалось, а так большое спасибо.