protected static function _getMatchingLanguage($acceptedLanguages, $availableLanguages)
{
$matches = array();
$any = false;
foreach ($acceptedLanguages as $acceptedQuality => $acceptedValues) {
$acceptedQuality = floatval($acceptedQuality);
if ($acceptedQuality === 0.0) {
continue;
}
foreach ($availableLanguages as $availableValue) {
$availableQuality = 1.0;
foreach ($acceptedValues as $acceptedValue) {
if ($acceptedValue === '*') {
$any = true;
}
$matchingGrade = self::_matchLanguage($acceptedValue, $availableValue);
if ($matchingGrade > 0) {
$q = (string) ($acceptedQuality * $availableQuality * $matchingGrade);
if (!isset($matches[$q])) {
$matches[$q] = array();
}
if (!in_array($availableValue, $matches[$q])) {
$matches[$q][] = $availableValue;
}
}
}
}
}
if (count($matches) === 0 && $any) {
if (count($availableLanguages) > 0) {
$matches['1.0'] = $availableLanguages;
}
}
if (count($matches) === 0) {
return self::$_languageFallback;
}
krsort($matches);
$topmatches = current($matches);
return current($topmatches);
}