Hi
Leider kann ich dir auch nicht sagen was es damit genau auf sich hat. Ich habe das wie untenstehnd beschrieben gelöst. Allerdings kann ich nicht sagen ob das der korrekte Weg ist, eventuell gibt es da noch andere Ansätze. Bei mir hat es jedenfalls letztendlich auf diese Art funktioniert.
1. Datei erstellen und unter /mysite/http_sprache.php ablegen, um die Browsersprache zu ermitteln (der Code kann so kopiert werden):
<?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;
}
?>
(oben stehenden Code, habe ich nicht selber geschrieben. Wenn ich mich recht erinnere habe ich das php.net kopiert)
2. Einen Seitentyp "HomePage.php" erstellen oder falls schon vorhandenen folgende Funktion im Controller einfügen und wie gewünscht anpassen:
class HomePage_Controller extends Page_Controller {
public function language() {
include_once ($_SERVER['DOCUMENT_ROOT'].'/mysite/http_sprache.php');
if ($_SERVER['REQUEST_URI'] != '/?locale=de_CH' && $_SERVER['REQUEST_URI'] != '/welcome-page/?locale=en_US') {
$allowed_langs = array ('de','en');
$lang = lang_getfrombrowser ($allowed_langs, 'de', null, false);
if ($lang == "de") {
Director::redirect("/?locale=de_CH");
} elseif ($lang == "en") {
Director::redirect("/welcome-page/?locale=en_US");
} else {
Director::redirect("/?locale=de_CH");
}
}
}
public function init() {
parent::init();
$this->language();
}
}
?>
3. Den Pfade für beim Include anpassen damit die unter Punkt 1 erstellte Datei korrekt inkludiert wird.
4. Die Pfade und erlaubten Sprachen den eigenen Bedürfnissen anpassen.
5. Bei der Startseite unter Verhalten den Seitentyp "Home Page" aktivieren.
Ich hoffe das hilft dir weiter...
gruss riot222