Home | Login

Development-Blog

Hier schreibe ich meine Erfahrungen und Recherchen zu verschiedenen Problemen nieder. Es dient lediglich zum Nachschlagen, weiter nichts!!! Ich erhebe hier keinen Anspruch auf Richtigkeit oder Alleinstellung.

  • Impressum
  • Kalender

    April 2009
    M D M D F S S
    « Mrz   Mai »
     12345
    6789101112
    13141516171819
    20212223242526
    27282930  
  • Pages

    • Impressum
  • Catagories

    • Allgemeines (7)
    • Apache (1)
    • Aptana (2)
    • Carminat TomTom (1)
    • Citrix (1)
    • CSS (8)
    • Firefox (4)
    • Fritz!Box (2)
    • HTML (2)
    • Internet Explorer (4)
    • JavaScript (14)
    • jQuery (1)
    • Linux (1)
    • Magento (4)
    • mySQL (4)
    • Outlook (2)
    • PHP (7)
    • Programmierung (1)
    • QNAP TS-239 Pro (1)
    • Samsung (1)
    • SharePoint (3)
    • Skype (2)
    • Software (3)
    • SSDs (1)
    • TomTom Home (1)
    • USV (1)
    • USV (1)
    • Windows 7 (12)
    • Windows Vista (3)
    • Windows XP (11)
    • Wordpress (1)
    • XML (1)
  • Archive

    • April 2012
    • März 2012
    • Januar 2012
    • Oktober 2011
    • April 2011
    • Februar 2011
    • Januar 2011
    • November 2010
    • September 2010
    • August 2010
    • Juli 2010
    • Juni 2010
    • Mai 2010
    • März 2010
    • Februar 2010
    • Januar 2010
    • November 2009
    • Oktober 2009
    • September 2009
    • August 2009
    • Juli 2009
    • Juni 2009
    • Mai 2009
    • April 2009
    • März 2009
    • Februar 2009
  • Linkliste

    • Development Blog
    • Documentation
    • Plugins
    • Suggest Ideas
    • Support Forum
    • Themes
    • WordPress Planet
  • Meta

    • Registrieren
    • Anmelden

[PHP] Ermitteln der Sprache des Browsers

Posted by skoch on 2. April 2009

Quelle: http://aktuell.de.selfhtml.org/artikel/php/httpsprache/

// Browsersprache ermitteln
function lang_getfrombrowser ($allowed_languages, $default_language, $lang_variable = null, $strict_mode = true) {
        // $_SERVER['HTTP_ACCEPT_LANGUAGE'] verwenden, wenn keine Sprachvariable mitgegeben wurde
        if ($lang_variable === null) {
                $lang_variable = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
        }

        // wurde irgendwelche Information mitgeschickt?
        if (empty($lang_variable)) {
                // Nein? => Standardsprache zurückgeben
                return $default_language;
        }

        // Den Header auftrennen
        $accepted_languages = preg_split('/,s*/', $lang_variable);

        // Die Standardwerte einstellen
        $current_lang = $default_language;
        $current_q = 0;

        // Nun alle mitgegebenen Sprachen abarbeiten
        foreach ($accepted_languages as $accepted_language) {
                // Alle Infos über diese Sprache rausholen
                $res = preg_match ('/^([a-z]{1,8}(?:-[a-z]{1,8})*)'.
                                   '(?:;s*q=(0(?:.[0-9]{1,3})?|1(?:.0{1,3})?))?$/i', $accepted_language, $matches);

                // war die Syntax gültig?
                if (!$res) {
                        // Nein? Dann ignorieren
                        continue;
                }
                // Sprachcode holen und dann sofort in die Einzelteile trennen
                $lang_code = explode ('-', $matches[1]);
                // Wurde eine Qualität mitgegeben?
                if (isset($matches[2])) {
                        // die Qualität benutzen
                        $lang_quality = (float)$matches[2];
                } else {
                        // Kompabilitätsmodus: Qualität 1 annehmen
                        $lang_quality = 1.0;
                }
                // Bis der Sprachcode leer ist...
                while (count ($lang_code)) {
                        // mal sehen, ob der Sprachcode angeboten wird
                        if (in_array (strtolower (join ('-', $lang_code)), $allowed_languages)) {
                                // Qualität anschauen
                                if ($lang_quality > $current_q) {
                                        // diese Sprache verwenden
                                        $current_lang = strtolower (join ('-', $lang_code));
                                        $current_q = $lang_quality;
                                        // Hier die innere while-Schleife verlassen
                                        break;
                                }
                        }
                        // Wenn wir im strengen Modus sind, die Sprache nicht versuchen zu minimalisieren
                        if ($strict_mode) {
                                // innere While-Schleife aufbrechen
                                break;
                        }
                        // den rechtesten Teil des Sprachcodes abschneiden
                        array_pop ($lang_code);
                }
        }
        // die gefundene Sprache zurückgeben
        return $current_lang;
}

Die Funktion lang_getfrombrowser erwartet zwei obligatorische Parameter und $allowed_languages$default_language. Der erste ist ein Array der erlaubten Sprachcodes, die klein geschrieben werden müssen. Der zweite ist die Standardsprache, wenn keine andere Sprache gefunden werden kann. Es gibt noch zwei optionale Parameter, $lang_variable und $strict_mode. Wenn $lang_variable nicht null ist, dann wird dieser Parameter anstelle von $_SERVER['HTTP_ACCEPT_LANGUAGE'] verwendet. Der letzte Parameter gibt an, ob sich die Funktion exakt an die HTTP-Sepzifiaktion halten soll, oder nicht.

Filed under: PHP

Leave a Reply

You must be logged in to post a comment.

«UNION ALL statt UNION SET-Werte finden mit der Funktion FIND_IN_SET »

Copyright © 2008 Development-Blog | XHTML 1.1 | CSS 2.1 | Design by Fernbap | WordPress Theme by DesertWolf