diff --git a/src/PathProcessor/DynamicPathProcessor.php b/src/PathProcessor/DynamicPathProcessor.php index 41acdce..73aa419 100755 --- a/src/PathProcessor/DynamicPathProcessor.php +++ b/src/PathProcessor/DynamicPathProcessor.php @@ -4,6 +4,7 @@ namespace Drupal\view_mode_page\PathProcessor; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\Language\LanguageInterface; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Path\AliasManagerInterface; use Drupal\Core\PathProcessor\InboundPathProcessorInterface; @@ -127,18 +128,24 @@ class DynamicPathProcessor implements InboundPathProcessorInterface, OutboundPat list($view_mode, $entityType, $entityId) = $path_minus_prefix_parts; $entity = $this->entityTypeManager->getStorage($entityType)->load($entityId); if ($entity) { + // Check if the target language is set. + if (isset($options['language'])) { + $target_language = $options['language']; + } + else { + $target_language = $this->languageManager->getCurrentLanguage(); + } // Check for a translation of the entity and load that instead if // one is found. - $language_interface = $this->languageManager->getCurrentLanguage(); - if ($entity instanceof TranslatableInterface && $entity->hasTranslation($language_interface->getId())) { - $entity = $entity->getTranslation($language_interface->getId()); + if ($target_language instanceof LanguageInterface && $entity instanceof TranslatableInterface && $entity->hasTranslation($target_language->getId())) { + $entity = $entity->getTranslation($target_language->getId()); } /** @var \Drupal\view_mode_page\ViewmodepagePatternInterface[] $patterns */ $patterns = $this->entityTypeManager->getStorage('view_mode_page_pattern')->loadByProperties(['view_mode' => $view_mode]); foreach ($patterns as $pattern) { if ($pattern->applies($entity)) { $url = $entity->toUrl(); - $url_alias = $this->aliasManager->getAliasByPath("/" . $url->getInternalPath()); + $url_alias = $this->aliasManager->getAliasByPath("/" . $url->getInternalPath(), $target_language->getId()); $path = str_replace('%', $url_alias, $pattern->getPattern()); break; }