'zh-CN', 'zh_Hans_CN' => 'zh-CN', 'zh_TW' => 'zh-TW', 'zh_Hant_TW' => 'zh-TW', 'nb_NO' => 'no', ]; private const DEEPL_TARGET_LANGUAGE_MAP = [ 'en_US' => 'EN-US', 'en_GB' => 'EN-GB', 'en_AU' => 'EN-GB', 'pt_BR' => 'PT-BR', 'pt_PT' => 'PT-PT', 'zh_CN' => 'ZH-HANS', 'zh_Hans_CN' => 'ZH-HANS', 'zh_TW' => 'ZH-HANT', 'zh_Hant_TW' => 'ZH-HANT', ]; public function __construct(private readonly ScopeConfigInterface $scopeConfig) { } public function getLanguageCode(int $storeId, string $provider, bool $target): string { if ($storeId <= 0) { $locale = (string)$this->scopeConfig->getValue(self::DEFAULT_SOURCE_LANGUAGE_PATH); } else { $locale = (string)$this->scopeConfig->getValue( self::LOCALE_PATH, ScopeInterface::SCOPE_STORE, $storeId ); } if ($locale === '') { throw new \RuntimeException((string)__('The Locale is not configured for this Store View.')); } if ($provider === 'deepl') { if ($target && isset(self::DEEPL_TARGET_LANGUAGE_MAP[$locale])) { return self::DEEPL_TARGET_LANGUAGE_MAP[$locale]; } return strtoupper($this->getBaseLanguage($locale)); } if (isset(self::GOOGLE_LANGUAGE_MAP[$locale])) { return self::GOOGLE_LANGUAGE_MAP[$locale]; } return $this->getBaseLanguage($locale); } private function getBaseLanguage(string $locale): string { $parts = preg_split('/[_-]/', $locale); $language = strtolower((string)($parts[0] ?? '')); if ($language === '') { throw new \RuntimeException((string)__('Invalid Locale "%1".', $locale)); } return $language; } }