Преемник. Первые links.menu.yml я создал так:
my_menu_item_id:
title: 'Dummy Title'
description: 'Dummy Description'
url: http://www.google.com
parent: mainmenu
menu_name: mainmenu
weight: -100
Затем я добавил в свой модуль hook_menu_links_discovered_alter()
вот так:
function mymodule_menu_links_discovered_alter(&$links) {
$language = \Drupal::languageManager()->getCurrentLanguage()->getId();
$links['my_menu_item_id']['title'] = 'Title:'.$language;
}
И в принципе это работает, но проблема в том, что он выполняется не с каждым запросом, а с кэшированием. То есть, если вы хотите иметь разные названия или URL в зависимости от языка, это не сработает. Версия для первого языка будет кэширована, а для всех остальных языков будет использоваться та же самая кэшированная версия.
Поэтому мне пришлось пойти на другое решение:
Вместо того, чтобы использовать эту функцию ловушки, я добавил параметр "class" в links.menu.yml:
my_menu_item_id:
class: Drupal\my_module\Plugin\Menu\MyPluginClass
title: 'Dummy Title'
description: 'Dummy Description'
url: http://www.google.com
parent: mainmenu
menu_name: mainmenu
weight: -100
Затем, конечно, я создал этот класс в my_module/src/Plugin/Menu
(не забудьте поместить плагин в src dir!), И он выглядит так:
<?php
namespace Drupal\my_module\Plugin\Menu;
use Drupal\Core\Menu\MenuLinkDefault;
use Drupal\Core\Url;
class MyPluginClass extends MenuLinkDefault {
/**
* {@inheritdoc}
*/
public function getTitle() {
$language = \Drupal::languageManager()->getCurrentLanguage()->getId();
return (string) 'Title: '.$language;
}
public function getUrlObject($title_attribute = TRUE) {
return Url::fromUri('http://www.yahoo.com');
}
}