Hallo zusammen,
schon jemand Erfahrung mit der Extension Language Detection gemacht? Habe Probleme bei der Installation. Es tritt irgendein Konflikt mit der TS Language, German Extension auf:
Double installs? A 'Global' extension with this key is also available on the server, but cannot be loaded because the 'Local' version takes precendence.
Hat jemand vielleicht schon nach Anleitung von maxhp versucht, die Spracheinstellung vom Browser auslesen zu lassen? So richtig funktioniert das nicht bei mir.
(
#2175)
Bin über jeden Hinweis dankbar!
Gruß Sw-Student
also ich hab das mit folgender php-funktion gelöst.
je nach rückgabewert rufe ich dann die index.php mit entsprechendem parameter auf. (zB index.php?id=400&L=1)
<?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})))?$/', $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 (join ('-', $lang_code), $allowed_languages)) {
// Qualität anschauen
if ($lang_quality > $current_q) {
// diese Sprache verwenden
$current_lang = 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;
}
?>
Kannst mir noch verraten, wie ich das Skript in Typo3 implementiere?
Danke, Gruß
Sw-Student
ich führe das skript in einer "nicht-typo3-startseite" aus, die dann die erste seite des typo3-webs per redirect mit dem entsprechenden L-parameter aufruft.
<?
include_once ('httpsprache.php');
$allowed_langs = array ('de', 'hu', 'cs', 'sk','en');
$lang = lang_getfrombrowser ($allowed_langs, 'en', null, false);
//var_dump ($lang);
//echo $lang;
$id=400;
switch($lang)
{
case "de":
$L="L=0";
break;
case "en":
$L="L=2";
break;
case "hu":
$L="L=5";
break;
case "cs":
$L="L=3";
break;
case "sk":
$L="L=1";
break;
default:
$L="L=0";
break;
}
header("Location: http://www.meintypo3.com/cms/index.php?id=".$id."&".$L);
?>
Hi,
klingt alles verständlich. Leider bin ich der totaler Php-Newbie und hab ein Problem den Code richtig einzubinden. Hab deinen oberen Code in der httpsprache.php abgespeichert, richtig?
Was muss ich mit dem unteren Code machen?
Habs mal mit einer start.php/start.html versucht: Code in ein HTML eingebettet --> URL abgeändert
Leider Fehlanzeige 😢
Steckt der redirect überhaupt schon im Code drin?
Hallo,
- obigen code 1:1 in datei httpsprache.php kopieren
- den unteren code 1:1 in eine datei mit endung PHP!
beide dateien müssen im selben ordner sein. da die funktionen der httpsprache.php in die andere datei included werden.
folgendes musst du anpassen:
zeile 7: "$id=400" auf die id deiner Startseite setzen
vorletzte zeile (das ist der redirect): hier den link zu deiner domain mit der index.php von typo3
in den case-abschnitten musst du ev. noch die L-Werte auf die id's deiner Sprachen anpassen. L=2 muss zb, abhängig von deiner installation, bei dir nicht englisch entsprechen.
Sorry, aber irgendwie stell ich mich gerade ziemlich Blöde an. Hab die beiden Dateien nach deinen Instruktionen erstellt. Wenn ich nun die start.php öffne, wird im IE der Code der Datei ausgegeben. Was mache ich falsch?? 😢
hi,
ich hab dir meine beiden funktionierenden files an die
webmaster@....-email geschickt.
Super! Danke! Funktioniert!
Schäme mich fast ne Erklärung abzugeben :o
Den Code hatte ich richtig abgeändert, jedoch die start.php lokal ausgeführt ... ohne Php Interpreter läuft da wohl nich viel.
Vielen Dank nochmals!
Hallo wasiko,
ich beisse mir ebenfalls die Zähne an der "language detection" aus. Wäre es Dir möglich, die Scripts mir als PN zu schicken. Ich weiß... klingt unverschämt... aber ich weiß jetzt nicht mehr weiter... hab' schon überall gesucht.
Und die Anleitungen zur Ext. verstehe ich jetzt, nachdem ich alles versucht habe, überhaupt nicht mehr...
Vorab vielen Dank.
JMS
Hallo,
hab mich auch mal daran versucht ... leider ohne Erfolg!
Frage 1: Existiert bereits eine httpsprache.php irgendwo? Ihr spricht ja von "reinkopieren", dann müsste ja bereits eine existieren ... aber wo?
Frage 2: Habe den unteren Part abgeändert und Start.php genannt:
<?
include_once ('httpsprache.php');
$allowed_langs = array ('de', 'fr', 'es', 'ita','en');
$lang = lang_getfrombrowser ($allowed_langs, 'en', null, false);
//var_dump ($lang);
//echo $lang;
$id=96;
switch($lang)
{
case "de":
$L="L=0";
break;
case "en":
$L="L=1";
break;
case "fr":
$L="L=2";
break;
case "es":
$L="L=4";
break;
case "ita":
$L="L=3";
break;
default:
$L="L=0";
break;
}
header("Location: <a href="http://www.meineSite.com/index.php?id=".$id."&".$L);"" target="_blank" class="link_10">http://www.meineSite.com/index.php?id=".$id."&".$L);</a>
?>
nur leider will er nicht!
Wenn ich mir diese Seite aufrufe: meineSite/Start.php dann zeigt er mir einen Fehler in Zeile 29 an. Ist das nicht richtig?
Könnt ihr mir da weiterhelfen?
Cheers
paopao