diff --git a/src/TranslateQueryArguments.php b/src/TranslateQueryArguments.php index 7e0701c..3bb3a01 100644 --- a/src/TranslateQueryArguments.php +++ b/src/TranslateQueryArguments.php @@ -13,43 +13,50 @@ class TranslateQueryArguments implements OutboundPathProcessorInterface { * {@inheritdoc} */ public function processOutbound($path, &$options = [], Request $request = NULL, BubbleableMetadata $bubbleable_metadata = NULL) { - // If the link being generated is to another language we need to change the - // facet query strings. + // No language in the link, so no way to see if the language is different. if (!isset($options['language']) || !($options['language'] instanceof LanguageInterface)) { return $path; } + // No query arguments, so we can't translate them. if (!isset($options['query']) || empty($options['query'])) { return $path; } /** @var \Drupal\language\ConfigurableLanguageManagerInterface $languageManager */ $languageManager = \Drupal::languageManager(); - $id = $languageManager->getCurrentLanguage()->getId(); + $currentLanguageId = $languageManager->getCurrentLanguage()->getId(); $newLanguageId = $options['language']->getId(); - if ($newLanguageId !== $id) { - /** @var \Drupal\facets\FacetInterface[] $allFacets */ - $allFacets = \Drupal::entityTypeManager() - ->getStorage('facets_facet') - ->loadMultiple(); - if (empty($allFacets)) { - return $path; - } - foreach ($allFacets as $facet) { - if (isset($options['query'][$facet->getFacetSourceConfig()->getFilterKey()])) { - $translatedConfig = $languageManager->getLanguageConfigOverride($newLanguageId, $facet->id()); - foreach ($options['query'][$facet->getFacetSourceConfig()->getFilterKey()] as &$filters) { - // @todo Doesn't work yet - $translatedAlias = $translatedConfig->get('url_alias'); - if ($translatedAlias !== NULL) { - $filters = str_replace( - $facet->getUrlAlias(), - $translatedAlias, - $filters - ); - } - } + // Current language is the same as the language for generated link, so we + // don't need to execute other code. + if ($newLanguageId === $currentLanguageId) { + return $path; + } + + /** @var \Drupal\facets\FacetInterface[] $allFacets */ + $allFacets = \Drupal::entityTypeManager() + ->getStorage('facets_facet') + ->loadMultiple(); + + // No facets found, so we can stop executing. + if (empty($allFacets)) { + return $path; + } + + foreach ($allFacets as $facet) { + if (isset($options['query'][$facet->getFacetSourceConfig()->getFilterKey()])) { + $name = 'facets.facet.' . $facet->id(); + $translatedConfig = $languageManager + ->getLanguageConfigOverride($newLanguageId, $name); + $translatedAlias = ($translatedConfig->get('url_alias') ?: $facet->getUrlAlias()); + + foreach ($options['query'][$facet->getFacetSourceConfig()->getFilterKey()] as &$filters) { + $filters = str_replace( + $facet->getUrlAlias(), + $translatedAlias, + $filters + ); } } }