Letzte Woche habe ich die Mehrsprachigkeit einer Webseite in PHP mit einigen zusätzlichen Extras und Debuginformationen veröffentlicht. Ich zeige jetzt nochmal eine gekürzte Produktivversion ohne Schnick-schnack und Kommentare.
Code
Den Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.
<?php /* ################### PHP Multilanguage (minified version) ################### Desc: This page detects your browserlanguage, cookie or chosen language with PHP and displays the right content. Author: Hannes Schurig Date: 20.06.2011 Edited: 20.06.2011 (v1.5) based on 1.4 of the long version 1.5: * Code minified 1.6: + header(Location) URL correction, no more .php?lang=?? after choosing lang URL (min version): http://hannes-schurig.de/21/06/2011/php-mehrsprachigkeitssystem-minified/ URL (long version): http://hannes-schurig.de/17/06/2011/php-mehrsprachigkeitssystem-mit-einigen-extras/ */ $lang = detectlang(); function langanalyse($new_lang) { switch($new_lang) { case ("de"): case ("en"): $lang = $new_lang; setcookie("lang", $lang, time()+31536000); break; case ("delete"): setcookie("lang", $lang, time()-3600); break; default: $lang = "de"; setcookie("lang", $lang, time()+31536000); break; } return $lang; } function detectlang() { //https Erkennung $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; if(isset($_GET["lang"])) { $lang = langanalyse($_GET["lang"]); header('Location: http'.$s.'://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']); } elseif(isset($_COOKIE["lang"])) { $lang = langanalyse($_COOKIE["lang"]); } elseif(isset($_POST["lang"])) { $lang = langanalyse($_POST["lang"]); header('Location: http'.$s.'://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']); } else { $cutstring = explode("-", $_SERVER["HTTP_ACCEPT_LANGUAGE"]); $detectlang = $cutstring[0]; $lang = langanalyse($detectlang); } return $lang; } echo(' <a href="'.$_SERVER['SCRIPT_NAME'].'?lang=de">De</a> <a href="'.$_SERVER['SCRIPT_NAME'].'?lang=en">En</a> <a href="'.$_SERVER['SCRIPT_NAME'].'?lang=delete">Del</a> '); // PHP Array mit den eigentlichen Inhalten der erlaubten Sprachen $content["de"]["text"]="Hallo, dies ist nur ein Test"; $content["en"]["text"]="Hello, this is just a test"; $content["de"]["menu"]=" <ul> <li>Autos</li> <li>Frauen</li> <li>Alkohol</li> </ul>"; $content["en"]["menu"]=" <ul> <li>Sex</li> <li>Drugs</li> <li>Rock'n'Roll</li> </ul>"; $content["de"]["info"]="Zu Ihrer Information:<br/> News 1: bla<br/> News 2: bla<br/> Test"; $content["en"]["info"]="For Your Information:<br/> News 1: Foo<br/> News 2: Bar<br/> foobar"; ?> <html> <head> <title>Mehrsprachigkeit mit PHP, Array und COOKIES</title> <style type="text/css"> div { margin: 20px; padding: 15px; float: left; } #langdebug { border: 1px solid black; font-size: 0.8em; } </style> </head> <body> <div id="menu"> <? echo($content[$lang]["menu"]); ?> </div> <div id="text"> <? echo($content[$lang]["text"]); ?> </div> <div id="info"> <? echo($content[$lang]["info"]); ?> </div> </body> </html>
Der eigentliche Codeteil (ohne Kommentare, Array und Sprachwahllinks) ist also nur noch 20 Zeilen lang aber trotzdem noch gut lesbar.
Demo
Download
long version: Link
Hallo Hannes,
danke für den Beitrag. Worin siehst du den Vorteil dieser Variante ggü. zwei Seiten (einmal englisch einmal deutsch)?
Viele Grüße und gute Nacht,
Fränk
Ich würde behaupten dass ein Array bei kleineren Webpräsenzen (wie z.B. meinem jetzigen Projekt mit nur 1 Inhaltsseite) einfacher und schneller zu realisieren ist.
Allerdings hat dieses System Grenzen, an die man schnell stoßen kann. Dann empfielt sich vlt eher die Variante mit einer Seite (Ordner) pro Sprache.
Ich mach vielleicht demnächst nen kleines Projekt mit deiner Variante und schreib was dazu.