• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[ERLEDIGT] Automatische Spracherkennung mit PHP

mobby

Mitglied
Hello liebe Community,

ich verwende auf meiner Homepage folgenden simplen PHP Schnipsel fuer eine Multilinguale Bedienung:

PHP:
<?php
session_start();
header('Cache-control: private'); 
 
if(isSet($_GET['lang']))
{
 $lang = $_GET['lang'];
  $_SESSION['lang'] = $lang;
 
 setcookie('lang', $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
 $lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
 $lang = $_COOKIE['lang'];
}
else
{
 $lang = 'de';
}
 
switch ($lang) {
 
case 'en':
 $lang_file = 'lang.en.php';
break;
 
case 'de':
 $lang_file = 'lang.de.php';
break;
 
case 'es':
 $lang_file = 'lang.es.php';
break;
case 'fr':
 $lang_file = 'lang.fr.php';
break;
case 'cn':
 $lang_file = 'lang.cn.php';
break;
 
default:
 $lang_file = 'lang.de.php';
 
}
 
include_once 'languages/'.$lang_file;
?>

Jetzt wuerde ich gerne eine automatische Spracherkennung einfuegen. Dazu nutze ich folgenden Code:

PHP:
<?php
header('Cache-control: private');

if(isSet($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
 $abfrage = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
 $lang = substr($abfrage,0,2);
}

switch ($lang) 
{
case 'de':
 $lang_file = 'lang.de.php';
break;

case 'en':
 $lang_file = 'lang.en.php';
break;
}

include_once 'languages/'.$lang_file:
?>

Wie kann ich das jetzt geschickter Weise kombinieren, dass er beim ersten Aufrufen der Webseite die automatische Sprache ausaehlt und daraufhin die richtige Datei einbidet ... jedoch danach immer noch auf das verlinkte Sprachmenu reagiert, mit dem man manuell die Sprache veraendern kann. ... Das macht er beim zweiten Code naemlich nicht mehr ...

Ich verstehe wie das logisch funktionieren sollte, kann es aber aufgrund meiner mangelnden PHP Kentnisse nicht umsetzen ... :(
Vielen Dank fuer jederlei Hilfe!
 
Werbung:
du könntest z.B. einen cookie setzen wenn die manuelle auswahl bedient wurde und per simpler if-abfrage unterbinden, dass deine automatische erkennung die sprache wieder umstellt, falls der cookie gesetzt ist.
 
Hey,

also ich hab jetzt mal ein bisschen dran rumgebastelt und was ich wollte funktioniert. Jetzt hab ich nur noch folgendes Problem:
Ich moechte zusaetlich absichern, dass wenn die Browsersprache eine nicht unterstuetzte Sprache ist ("aa") (Afar .. nur n Beispiel), die Sprache automatisch auf Englisch umgestellt wird ... meiner Meinung nach ist das so wie ichs geschrieben hab logisch aufgebaut, funktioniert aber trotzdem nicht ^^ neeeed help!

PHP:
<?php
header("Cache-control: private"); 
$abfrage = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
if(isSet($_GET["lang"]))
{
 $lang = $_GET["lang"];
}
else if(!isSet($GET["lang"]))
{
 $lang = substr($abfrage,0,2);
 if($lang == "de" OR "en")
 {
  $lang = substr($abfrage,0,2);
 }
 else
 {
  $lang = "en";
 }
}
switch ($lang) {
 
case "en":
 $lang_file = 'lang.en.php';
break;
 
case "de":
 $lang_file = 'lang.de.php';
break; 
}
 
include_once 'languages/'.$lang_file;
?>

Habs auch damit ausprobiert, ging aber auch nicht, egal wie rum:

PHP:
 if($lang != "de" OR "en")
 {
  $lang = "en" 
 }
 
Werbung:
sooo hat geklappt, vielen Dank!

Das Ganze sieht jetzt folgendermaßen aus und funktioniert 1a:

PHP:
 <?php
header("Cache-control: private"); 
$abfrage = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
if(isSet($_GET["lang"]))
{
 $lang = $_GET["lang"];
}
else if(!isSet($GET["lang"]))
{
 if(substr($abfrage,0,2) == "de" OR substr($abfrage,0,2) == "en")
 {
  $lang = substr($abfrage,0,2);
 }
 else
 {
  $lang = "en";
 }
}
switch ($lang) {
 
case "en":
 $lang_file = 'lang.en.php';
break;
 
case "de":
 $lang_file = 'lang.de.php';
break; 
}
 
include_once 'languages/'.$lang_file;
?>

Frage dazu noch: Fällt jemandem was auf, was man besser machen könnte bzw. mögliche Bugs/Unverträglichkeiten?
Thx!
 
Werbung:
Zurück
Oben