storeManager->getStores(false) as $store) { if (!$store->isActive()) { continue; } $languageCode = $this->getLanguageCode((string)$store->getCode()); if ($languageCode === '') { continue; } $groups[$languageCode]['label'] = $this->getLanguageLabel($languageCode); $groups[$languageCode]['store_ids'][] = (int)$store->getId(); $groups[$languageCode]['store_codes'][] = (string)$store->getCode(); } ksort($groups); return array_map( static fn (array $group): LanguageGroup => new LanguageGroup( $group['label'], $group['target_locale'], $group['store_ids'], $group['store_codes'] ), array_map( static fn (array $group, string $languageCode): array => $group + ['target_locale' => $languageCode], $groups, array_keys($groups) ) ); } public function getGroup(string $label): ?LanguageGroup { foreach ($this->getGroups() as $group) { if ($group->getLabel() === $label || $group->getTargetLocale() === $label) { return $group; } } return null; } private function getLanguageCode(string $storeCode): string { if (!preg_match('/^([a-z]{2,3})(?:[_-]|$)/i', $storeCode, $matches)) { return ''; } return strtolower($matches[1]); } private function getLanguageLabel(string $languageCode): string { if (class_exists(\Locale::class)) { $label = \Locale::getDisplayLanguage($languageCode, 'en'); if (is_string($label) && $label !== '') { return ucfirst($label); } } return strtoupper($languageCode); } }