kostenloser Webspace werbefrei: lima-city


Sprache im Browser-Header erkennen und weiterleiten

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    m***************s

    Hallo,

    ich habe vor eine Webseite in 2 Sprachen zu erstellen. Dazu habe ich mir folgendes vorgestellt:

    - im Hauptverzeichnis befindet sich 1 index.php und 2 Ordner mit je einem Content in jewiliger Sprache z.B. "en" und "de"
    - in der index-Datei wird mit Hilfe des Browser-Headers die Sprache erkannt
    - nach der Erkennung wird in das jeweilige Ordner weitergeleitet, also falls die Funktion einen englischen Browser erkennt, wird auf den Content im Ordner "en" weitergeleitet

    Das möchte ich auf jeden Fall in PHP realisieren.
    So, nun bin ich noch etwas neu in PHP und brauche eure Unterstützung ;)

    So in der Art, nur dass man halt weitergeleitet wird ^^:

    $requested_language = "";
    
    if (!isset($_SESSION["language"]))
    {
    
    	if(isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]) && $_SERVER["HTTP_ACCEPT_LANGUAGE"] != "")
    	{
    		$requested_language = preg_split("/[\W]+/",$_SERVER["HTTP_ACCEPT_LANGUAGE"], 2);
    		$requested_language[0] = strtolower($requested_language[0]);
    	}
    	if (preg_match('/^[\w]{2,3}$/', $requested_language[0])) 
    	{
    		wie leite ich jetzt weiter? ^^
    	}
    	else 
    	{
    		die Standardsprache
    	}
    }


    Beitrag zuletzt geändert: 29.2.2012 14:26:00 von mcdonalds-coupons
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. s*************h

    Mit dem folgenden Code kannst du auf die index.php weiterleiten.

    <?php
    header('Location: index.php');
    ?>


    Ersetze index.php durch die Datei / Seite welche du aufrufen möchtest.

    Gruß S.Brosch
  4. Mach es doch wie folgt:
    Leg eine Datei /php/language.php an. Diese bekommt via GET Parameter "language" und "file" die Sprache in der die Datei angezeigt werden soll.

    # default die index.html anzeigen
    RewriteRule ^de/$ /php/language.php?language=de&file=index.html [L,QSA]
    RewriteRule ^en/$ /php/language.php?language=en&file=index.html [L,QSA]

    # falls eine Datei angegeben wurde, diese Datei anzeigen
    RewriteRule ^de/(.*)$ /php/language.php?language=de&file=$1 [L,QSA]
    RewriteRule ^en/(.*)$ /php/language.php?language=en&file=$1 [L,QSA]

    # CSS Verzeichnis auch in den Unterordnern verfügbar machen
    RewriteRule ^de/css/(.*)$ /css/$1 [L,QSA]
    RewriteRule ^en/css/(.*)$ /css/$1 [L,QSA]

    RewriteCond %{HTTP:Accept-Language} ^de [NC]
    RewriteRule ^$ /de/ [L,R=301]

    RewriteCond %{HTTP:Accept-Language} ^en [NC]
    RewriteRule ^$ /en/ [L,R=301]
  5. /*
      determine which language out of an available set the user prefers most
    
      $available_languages        array with language-tag-strings (must be lowercase) that are available
      $http_accept_language    a HTTP_ACCEPT_LANGUAGE string (read from $_SERVER['HTTP_ACCEPT_LANGUAGE'] if left out)
    */
    function prefered_language ($available_languages,$http_accept_language="auto") {
        // if $http_accept_language was left out, read it from the HTTP-Header
        if ($http_accept_language == "auto") $http_accept_language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
    
        foreach ($available_languages AS $langkey) {
            $failover[substr($langkey,0,2)] = $langkey;
            $new_available_languages[] = $langkey;
            $new_available_languages[] = substr($langkey,0,2);
        }
    
    
        // standard  for HTTP_ACCEPT_LANGUAGE is defined under
        // http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4
        // pattern to find is therefore something like this:
        //    1#( language-range [ ";" "q" "=" qvalue ] )
        // where:
        //    language-range  = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )
        //    qvalue         = ( "0" [ "." 0*3DIGIT ] )
        //            | ( "1" [ "." 0*3("0") ] )
        preg_match_all("/([[:alpha:]]{1,8})(-([[:alpha:]|-]{1,8}))?" .
                       "(\s*;\s*q\s*=\s*(1\.0{0,3}|0\.\d{0,3}))?\s*(,|$)/i",
                       $http_accept_language, $hits, PREG_SET_ORDER);
    
    
        // default language (in case of no hits) is the first in the array
        $bestlang = $new_available_languages[0];
        $bestqval = 0;
    
        foreach ($hits as $arr) {
            // read data from the array of this hit
            $langprefix = strtolower ($arr[1]);
            if (!empty($arr[3])) {
                $langrange = strtolower ($arr[3]);
                $language = $langprefix . "_" . strtoupper($langrange);
            }
            else $language = $langprefix;
            $qvalue = 1.0;
            if (!empty($arr[5])) $qvalue = floatval($arr[5]);
    
            // find q-maximal language
            if (in_array($language,$new_available_languages) && ($qvalue > $bestqval)) {
                $bestlang = $language;
                $bestqval = $qvalue;
            }
            // if no direct hit, try the prefix only but decrease q-value by 10% (as http_negotiate_language does)
            else if (in_array($langprefix,$new_available_languages) && (($qvalue*0.9) > $bestqval)) {
                $bestlang = $langprefix;
                $bestqval = $qvalue*0.9;
            }
        }
    
        return array_key_exists($bestlang,$failover) ? $failover[$bestlang] : $bestlang ;
    }


    Aufruf wie folgt:

    $simplecms->getLocaleEnabled(); // = array('de_DE','en_US');
    
    echo prefered_language($simpelcms->getLocaleEnabled());// return Default first Array Entry if not match something...


    nun die Index.php für die Weiterleitung:

    header('location: '.prefered_language( $simpelcms->getLocaleEnabled() ) );


    So habe ich das in einem Projekt von mir drin... bei mir ist aber das Verzeichnis auch in Form von "de_DE" usw. gestrickt.

    Kann man also gut anpassen ;) in dem man paar sachen auskommentiert...
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!