config = $config; $this->marketResolver = $marketResolver; $this->httpContext = $httpContext; $this->request = $request; $this->storeManager = $storeManager; $this->storeCodeMapper = $storeCodeMapper; $this->languageResolver = $languageResolver; $this->logger = $logger; } public function execute(Observer $observer): void { if (!$this->config->isEnabled()) { $this->logger->debug('[LanguageUrlStoreResolver] config not Enabled'); return; } $market = $this->resolveMarket(); $storeCode = $this->resolveStoreCode(); $this->httpContext->setValue( self::CONTEXT_MARKET, $market, $this->resolveDefaultStoreCode() ); $this->httpContext->setValue( self::CONTEXT_STORE_CODE, $storeCode, $this->resolveDefaultStoreCode() ); } private function resolveStoreCode(): string { try { $storeCode = $this->storeManager->getStore()->getCode(); return $this->storeCodeMapper->isRealStoreCodeInScope($storeCode) ? $storeCode : $this->resolveDefaultStoreCode(); } catch (\Throwable $exception) { return $this->resolveDefaultStoreCode(); } } private function resolveMarket(): string { try { $storeCode = $this->storeManager->getStore()->getCode(); $language = $this->storeCodeMapper->languageFromStoreCode($storeCode); if ($language !== null) { return $this->marketResolver->resolveForLanguage($this->request, $language) ?: ''; } } catch (\Throwable $exception) { return $this->resolveDefaultStoreCode(); } return $this->marketResolver->resolve($this->request) ?: $this->resolveDefaultStoreCode(); } private function resolveDefaultStoreCode(): string { $language = $this->request instanceof \Magento\Framework\App\Request\Http ? $this->languageResolver->resolveFromPath($this->request->getPathInfo()) : null; if ($language === null) { return ''; } return $this->storeCodeMapper->getDefaultStoreCodeForLanguage($language) ?: ''; } }