成功了。我创建的第一个 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;
}
基本上这是可行的,但问题是它不是在每个请求中都执行,而是被缓存了。因此,即如果您想根据语言使用不同的标题或网址,它将无法正常工作。第一语言的版本将被缓存,对于所有其他语言,将使用相同的缓存版本。
所以我不得不寻求不同的解决方案:
我没有使用那个钩子函数,而是在 links.menu.yml 中添加了“class”参数:
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 目录中!),它看起来像:
<?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');
}
}