diff --git a/src/MenuBasedBreadcrumbBuilder.php b/src/MenuBasedBreadcrumbBuilder.php index 45b7fb8..b9c39e3 100644 --- a/src/MenuBasedBreadcrumbBuilder.php +++ b/src/MenuBasedBreadcrumbBuilder.php @@ -110,6 +110,13 @@ class MenuBasedBreadcrumbBuilder implements BreadcrumbBuilderInterface { private $taxonomyAttachment; /** + * Content language code (used in both applies() and build()). + * + * @var string + */ + private $contentLanguage; + + /** * {@inheritdoc} */ public function __construct( @@ -160,6 +167,11 @@ class MenuBasedBreadcrumbBuilder implements BreadcrumbBuilderInterface { $node_object = $route_match->getParameters()->get('node'); $node_is_fieldable = $node_object instanceof FieldableEntityInterface; + // Make sure menus are selected, and breadcrumb text strings, are displayed + // in the content rather than the (default) interface language: + $this->contentLanguage = $this->languageManager + ->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId(); + // Check each selected menu, in turn, until a menu or taxonomy match found: // then cache its state for building & caching in build() and exit. $menus = $this->config->get('menu_breadcrumb_menus'); @@ -171,6 +183,18 @@ class MenuBasedBreadcrumbBuilder implements BreadcrumbBuilderInterface { // Look for current path on any enabled menu. if (!empty($params['enabled'])) { + // Skip over any menu that's not in the current content language. + // TODO This also skips checking taxonomy attachment for that menu: OK? + // (see https://www.drupal.org/node/2840178#comment-11851137) + $menu_objects = $this->entityTypeManager->getStorage('menu') + ->loadByProperties(['id' => $menu_name]); + if ($menu_objects) { + $menu_language = reset($menu_objects)->language()->getId(); + if ($menu_language != $this->contentLanguage) { + continue; + } + } + $trail_ids = $this->menuActiveTrail->getActiveTrailIds($menu_name); $trail_ids = array_filter($trail_ids); if ($trail_ids) { @@ -248,7 +272,7 @@ class MenuBasedBreadcrumbBuilder implements BreadcrumbBuilderInterface { $this->addMissingCurrentPage($links, $route_match); // Create a breadcrumb for which may be either added or replaced: - $langcode = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId(); + $langcode = $this->contentLanguage; $label = $this->config->get('home_as_site_name') ? $this->configFactory->get('system.site')->get('name') : $this->t('Home', array(), array('langcode' => $langcode));