Mit der folgenden Funktion können Sie die Browsersprache eines Benutzers ermitteln.
Diese Funktion eignet sich prima für das Festlegen der Ausgangssprache bei mehrsprachigen PHP-Anwendungen.
Der erste Parameter ist ein Array in dem Sie alle verfügbaren Sprachcodes ihrer PHP-Anwendung angeben. Bei nur Deutsch und Englisch wäre es: array(‚de‘,’en‘)
Im zweiten Parameter setzen Sie den Standard-Sprachcode, der zurück gegeben wird, wenn die Browsersprache eine Sprache ist die ihre PHP-Anwendung nicht unterstützt.
Im dritten Parameter können Sie manuell ein Header-String für die Sprache übergeben. Optional! Nur zum Testen vorgesehen.
Der vierte Parameter erlaubt ihnen den Strict-Mode zu missachten, wenn Sie diesen auf „false“ setzen. Optional! Standard ist „true“ und sollte auch beibehalten werden.
Darauf zu achten ist, das diese Funktion nur die Browsersprache ermittelt, wenn kein Parameter „language“ im $_GET und $_POST übergeben wurde. Wurde der Parameter übergeben, wird dessen Sprachcode auch von der Funktion zurück gegeben.
Aufruf:
echo getBrowserLanguage(array('de','en'), 'de');
Funktion:
<?php /** * Get the language code from the browser * * @param array Allowed Languages "array('de','en')" * @param string Default language * @param string Language string from HTTP-Header * @param bool Strict-Mode * @return array|int Data as array or null */ function getBrowserLanguage($arrAllowedLanguages, $strDefaultLanguage, $strLangVariable = null, $boolStrictMode = true) { if (isset($_REQUEST['language'])) { if (strlen($_REQUEST['language']) == 2) { return strtolower($_REQUEST['language']); } foreach ($arrAllowedLanguages as $strValue) { if (preg_match('/^'.$strValue.'\-/i',$_REQUEST['language'])) { return strtolower($strValue); } } } if (!is_array($arrAllowedLanguages)) { if (strpos($arrAllowedLanguages,';')) { $array = explode(';',$arrAllowedLanguages); $arrAllowedLanguages = $array; } } if (!isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { return $arrAllowedLanguages[0]; } if ($strLangVariable === null) $strLangVariable = $_SERVER['HTTP_ACCEPT_LANGUAGE']; if (empty($strLangVariable)) return $strDefaultLanguage; $arrAcceptedLanguages = preg_split('/,\s*/', $strLangVariable); $strCurrentLanguage = $strDefaultLanguage; $intCurrentQ = 0; foreach ($arrAcceptedLanguages as $arrAcceptedLanguage) { $boolResult = preg_match ('/^([a-z]{1,8}(?:-[a-z]{1,8})*)'. '(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i', $arrAcceptedLanguage, $arrMatches); if (!$boolResult) continue; $arrLangCode = explode ('-', $arrMatches[1]); if (isset($arrMatches[2])) $intLangQuality = (float)$arrMatches[2]; else $intLangQuality = 1.0; while (count ($arrLangCode)) { if (!is_array($arrAllowedLanguages)) $arrAllowedLanguages = array($arrAllowedLanguages); if (in_array (strtolower (join ('-', $arrLangCode)), $arrAllowedLanguages)) { if ($intLangQuality > $intCurrentQ) { $strCurrentLanguage = strtolower (join ('-', $arrLangCode)); $intCurrentQ = $intLangQuality; break; } } if ($boolStrictMode) break; array_pop ($arrLangCode); } } return $strCurrentLanguage; } ?>
Antworten