static function getLocaleFrom3LetterIso($iso3Letter)
{
assert(strlen($iso3Letter) == 3);
$primaryLocale = AppLocale::getPrimaryLocale();
$localeCandidates = array();
$locales =& AppLocale::_getAllLocalesCacheContent();
foreach ($locales as $locale => $localeData) {
assert(isset($localeData['iso639-2b']));
if ($localeData['iso639-2b'] == $iso3Letter) {
if ($locale == $primaryLocale) {
// In case of ambiguity the primary locale
// overrides all other options so we're done.
return $primaryLocale;
}
$localeCandidates[] = $locale;
}
}
// Return null if we found no candidate locale.
if (empty($localeCandidates)) {
return null;
}
if (count($localeCandidates) > 1) {
// Check whether one of the candidate locales
// is a supported locale. If so choose the first
// supported locale.
$supportedLocales = AppLocale::getSupportedLocales();
foreach ($supportedLocales as $supportedLocale => $localeName) {
if (in_array($supportedLocale, $localeCandidates)) {
return $supportedLocale;
}
}
}
// If there is only one candidate (or if we were
// unable to disambiguate) then return the unique
// (first) candidate found.
return array_shift($localeCandidates);
}