PHP-Sprachweiche
lima-city → Forum → Sonstiges → Spam und sonstiges Unvergütetes
array
auslese
bevorzugte sprachen
browser
buffer
code
ermitteln
feld
http
lang buffer
lang feld
lang tag
lang url
letztes zeichen
pos
position
sprache
suchen
tag
url
-
Hallo zusammen,
ich hab für meine Webside eine Sprachweiche geschrieben.
Sie funktioniert sehr gut (wie ich finde) und wollte sie euch nicht vorenthalten,
da vielleich jmd. anderes auch mal eine Sprachweiche sucht...
Also hier der tag/code">Code:
<?php // Array mit den verfügbaren Sprachen // Die Sprachen sind die ISO 639-1 Sprachtags // Liste der ISO 639-1 und ISO 639-2 Sprachtags auf: // http://www.loc.gov/standards/iso639-2/php/code_changes.php $languages = array('de', 'en'); // Mit GET abfragen, ob eine Sprache angegeben wurde $lang = $_GET["lang"]; // prüfen, ob die Sprache verfügbar ist if( $lang == "" || !in_array( $lang, $languages ) ) { // wenn nicht, dann das HTTP-Sprachfeld auslesen $langs = " ".$_SERVER['HTTP_ACCEPT_LANGUAGE']; // die gesendeten Sprachtags ermitteln (bevorzugte Sprachen des Browsers) foreach($languages as $code) { $pos = strpos($langs, $code); if(intval($pos) != 0) { $position[$code] = intval($pos); } } // eine default-Sprache der Webside festlegen $bestLanguage = 'en'; // den ersten unterstützten Sprachtag ermitteln // sollte keine Sprache unterstützt werden, so wird $bestLanguage nicht überschrieben if(!empty($position)) { foreach($languages as $code) { if(isset($position[$code]) && $position[$code] == min($position)) { $bestLanguage = $code; } } } // das vom Browser angefragte Script auslesen $url = $_SERVER["REQUEST_URI"]; // prüfen, ob schon GET-Felder vorhanden sind $pos = strpos( $url, "?" ); $questionmarkAdded = false; if( $pos === false ) { // wenn nicht, dann ein "?" an die URL anhängen $url .= "?"; $questionmarkAdded = true; } // prüfen, ob das "lang" Feld schon verhanden ist if( preg_match( "/lang=../" , $url ) == 1 ) { // versuchen dieses Feld zu überschreiben $buffer = preg_replace( "/lang=../", "lang=$bestLanguage", $url ); if( $buffer == NULL || strlen( $lang ) != 2 ) { // wenn das Überschreiben fehlgeschalgen ist // oder das lang-Tag zu viele Zeichen hat, // dann den an die URL angehängten String neu erstellen $buffer = ""; foreach( $_GET as $key => $value ) { if( $key == "lang" ) { $buffer .= "$key=$bestLanguage&"; } else { $buffer .= "$key=$value&"; } } // letztes Zeichen entfernen, da es ein überflüssiges "&" ist $buffer = substr( $buffer, 0, -1 ); // den erstellten string an die URL anhängen $url = substr( $url, 0, strpos( $url, "?" ) + 1 ) . $buffer; } else { // wenn das Überschreiben erfolgreich war, dann $buffer in $url schreiben $url = $buffer; } } else { // ist kein "lang" Feld vorhanden if( !$questionmarkAdded ) { // wenn kein "?" an die URL angehängt wurde ein "&" anhängen $url .= "&"; } // "lang" Feld an die URL anhängen $url .= "lang=$bestLanguage"; } // Browser auf die neue URL umleiten header( "Location: $url" ); // und script beenden exit; } // hier oder nach dem schließenden PHP-Tag kommt nun der normale Seitentext ?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage