getLocaleVariants($locale); // A fallback locale was provided, add it to the end of the chain. if (isset($fallbackLocale)) { $localeVariants[] = $fallbackLocale; } // Try to resolve a locale by finding a matching definition file. $resolvedLocale = null; foreach ($localeVariants as $localeVariant) { $path = $this->definitionPath . $localeVariant . '.json'; if (file_exists($path)) { $resolvedLocale = $localeVariant; break; } } // No locale could be resolved, stop here. if (!$resolvedLocale) { throw new UnknownLocaleException($locale); } return $resolvedLocale; } /** * Returns all variants of a locale. * * For example, "bs-Cyrl-BA" has the following variants: * 1) bs-Cyrl-BA * 2) bs-Cyrl * 3) bs * * @param string $locale The locale (i.e. fr-FR). * * @return array An array of all variants of a locale. */ protected function getLocaleVariants($locale) { $localeVariants = array(); $localeParts = explode('-', $locale); while (!empty($localeParts)) { $localeVariants[] = implode('-', $localeParts); array_pop($localeParts); } return $localeVariants; } }