Sprachumschaltung

Alles, was PHP betrifft, kann hier besprochen werden.

Sprachumschaltung

Postby juergen&lx » 04. September 2006 09:51

Hallo Freunde,

es ist kein direktes Problem, aber es stört!

Ich habe eine funktionierende Sprachumschaltung in der HP, die auf die Browser-Spracheinstellung erkennt und ein Cookie mit "de | en" setzt.

Aber: die Suchmaschinen nehmen nur die englischsprachige Version.
Hier der
Code: Select all
<?php
//***************************************SPRACHAUSWAHL
if ( isset ( $_COOKIE ['language'] ) ) {

    include ( "lang/".$_COOKIE ['language'].".php" ) ;

    $lang = $_COOKIE ['language'];  }

if ( !isset ( $_COOKIE['language'] ) ) {

    include_once ('http_lang.php'); // Browsersprache
    $allowed_langs = array ('en', 'de');

    $lang = lang_getfrombrowser ( $allowed_langs, 'de', null, false );  // Browsersprache abfragen und vergleichen
    include("lang/".$lang.".php"); }
?>

für Ideen bin ich dankbar
cu
Jürgen
juergen&lx
 
Posts: 154
Joined: 18. February 2004 21:36
Location: in einem Dorf am Rande des Strombergs
Operating System: Linux

Postby juergen&lx » 04. September 2006 10:22

Hier ist noch die http_lang.php
Code: Select all
 <?php
 // 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;
 }
 ?>

Jürgen
juergen&lx
 
Posts: 154
Joined: 18. February 2004 21:36
Location: in einem Dorf am Rande des Strombergs
Operating System: Linux


Return to PHP

Who is online

Users browsing this forum: No registered users and 12 guests