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

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

Аватар пользователя primary primary 16 апреля 2018 в 18:32

Добрый день!

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

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

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

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

sait.ru/en/node/42

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

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

Лучший ответ

Комментарии

Аватар пользователя marassa marassa 16 апреля 2018 в 22:24

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

/**
 * 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 17 апреля 2018 в 17:44

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

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

Аватар пользователя marassa marassa 17 апреля 2018 в 18:43

primary wrote:

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

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

Аватар пользователя primary primary 17 апреля 2018 в 19:45

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

Аватар пользователя marassa marassa 17 апреля 2018 в 20:09

itcrowd72 wrote:

http://xandeadx.ru/blog/drupal/256

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

Аватар пользователя gun_dose gun_dose 17 апреля 2018 в 22:58

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

Аватар пользователя nic12 nic12 14 октября 2018 в 21:30

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

Аватар пользователя marassa marassa 14 октября 2018 в 21:40

nic12 wrote:

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

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

Аватар пользователя nic12 nic12 14 октября 2018 в 22:09

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

nic12 wrote:

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

Аватар пользователя marassa marassa 15 октября 2018 в 8:21

nic12 wrote:

создаю четыре страницы одинакового содержания, но на разных языках

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

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

Увы, я не в состоянии понять написанное Sad
nic12 wrote:

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

http://art.nouveau.world/moscow

Аватар пользователя primary primary 15 октября 2018 в 12:03

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

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

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

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

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

/admin/config/regional/content-language

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

Аватар пользователя nic12 nic12 20 октября 2018 в 1:28

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

Аватар пользователя marassa marassa 20 октября 2018 в 8:02

nic12 wrote:

на странице нет блока с переключением языков

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

Аватар пользователя nic12 nic12 20 октября 2018 в 8:19

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

Аватар пользователя nic12 nic12 20 октября 2018 в 8:22

marassa wrote:

А Вы этот блок (Language switcher) добавляли через /admin/structure/block ?

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

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

Аватар пользователя nic12 nic12 20 октября 2018 в 12:56

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

Аватар пользователя nic12 nic12 20 октября 2018 в 14:52

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

Аватар пользователя nic12 nic12 21 октября 2018 в 10:07

[quote=marassa]

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