/**
* Build a chain of locale objects according to the fallback rule and
* the available locales.
* @param Locale $locale
* @return array
*/
public function getLocaleChain(Locale $locale)
{
$fallbackRule = $this->configuration->getFallbackRule();
$localeChain = [(string) $locale => $locale];
if ($fallbackRule['strict'] === true) {
foreach ($fallbackRule['order'] as $localeIdentifier) {
$localeChain[$localeIdentifier] = new Locale($localeIdentifier);
}
} else {
$locale = $this->findBestMatchingLocale($locale);
while ($locale !== null) {
$localeChain[(string) $locale] = $locale;
$locale = $this->getParentLocaleOf($locale);
}
foreach ($fallbackRule['order'] as $localeIdentifier) {
$locale = new Locale($localeIdentifier);
$locale = $this->findBestMatchingLocale($locale);
while ($locale !== null) {
$localeChain[(string) $locale] = $locale;
$locale = $this->getParentLocaleOf($locale);
}
}
}
$locale = $this->configuration->getDefaultLocale();
$localeChain[(string) $locale] = $locale;
return $localeChain;
}