public static function parseAcceptLanguageHeader($acceptLanguageHeader)
{
$acceptLanguageHeader = str_replace(' ', '', $acceptLanguageHeader);
$matchingLanguages = [];
if (preg_match_all(self::PATTERN_MATCH_ACCEPTLANGUAGE, $acceptLanguageHeader, $matches, \PREG_PATTERN_ORDER) !== false) {
foreach ($matches[1] as $localeIdentifier) {
if ($localeIdentifier === '*') {
$matchingLanguages[] = $localeIdentifier;
continue;
}
if (strpos($localeIdentifier, '-') !== false) {
list($language, $region) = explode('-', $localeIdentifier);
} else {
$language = $localeIdentifier;
$region = null;
}
if (strlen($language) >= 2 && strlen($language) <= 3) {
if ($region === null || strlen($region) >= 2 && strlen($region) <= 3) {
// Note: there are 3 chars in the region code only if they are all digits, but we don't check it above
$matchingLanguages[] = $localeIdentifier;
}
}
}
if (count($matchingLanguages) > 0) {
return $matchingLanguages;
}
}
return false;
}