PHP: Browsersprache für mehrsprachige Anwendungen ermitteln

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.

Einstieg in PHP 7 und MySQL

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;
}
?>
1 Star2 Stars3 Stars4 Stars5 Stars (Bewerte diesen Artikel als Erster!)

Ersten Kommentar schreiben

Antworten

Jeder freigeschaltete Kommentar erhält einen DoFollow-Link.
Wir schalten aber nur Kommentare frei, die auch wirklich welche sind und/oder den Artikel sinnvoll bereichern oder ergänzen. Also gebt euch ein wenig Mühe :)


*