WPML - Redirect Fehler auf Unterordner

Fonsi-Heizer

Mitglied
Hallo! ;-)

Ich habe derzeit ein fast unlösbares Problem mit dem Wordpress Plugin WPML.

Auch der Support scheint nicht in der Lage zu sein, geschweige denn das Plugin, dürfte meine gewünschte Funktion nicht beinhalten.
Mit QTranslate bzw. QTranslate X hingegen, hat mein Wunsch-Feature ohne etwas besonderes einzustellen funktioniert.

Ich möchte einfach nur wenn der Besucher auf https://www.xyz.com/ geht, dass dieser automatisch, je nach der eingestellten Browsersprache auf https://www.xyz.com/de/ oder https://www.xyz.com/en/ weitergeleitet wird.

Habt Ihr eine Idee oder Lösung um das Problem "sauber" zu lösen?

Ich denke einmal nicht das eine redirect.php wirklich sauber ist, oder?

PHP:
<?php
    // Initialize the language code variable
$lc = "";
    // Check to see that the global language server variable isset()
    // If it is set, we cut the first two characters from that string
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
    $lc = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

    // Now we simply evaluate that variable to detect specific languages
if($lc == "en"){
    header("location: /en/");
    exit();
} else if($lc == "de"){
    header("location: /de/");
    exit();
}
else{ // don't forget the default case if $lc is empty
    header("location: /en/");
    exit();
}
?>

Danke!
 
Hallo @sheel und @ScreamingDev ,

danke für Eure Antworten.

Genau wie ScreamingDev geschrieben hat ist es m.A. nach wohl nur ein Mittel zum Zweck. Ob es optimal ist, ist eben die Frage.
Ich habe mir einmal die template_redirect API angesehen, werde aber auch nicht wirklich schlauer daraus.

Oder wird die template_redirect mittels diesen Script durchgeführt?

PHP:
<?php
// Browsersprache ermitteln
function lang_get_from_browser($allowed_languages, $default_language, $lang_variable = NULL, $strict_mode = TRUE) {
    // $_SERVER['HTTP_ACCEPT_LANGUAGE'] verwenden, wenn keine Sprachvariable mitgegeben wurde
    if ( NULL === $lang_variable )
        $lang_variable = $_SERVER['HTTP_ACCEPT_LANGUAGE'];

    // wurde irgendwelche Information mitgeschickt?
    if ( empty($lang_variable) )
        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 dieser 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
        );

        if (!$res)
            continue;

        // Sprachcode holen und dann sofort in die Einzelteile trennen
        $lang_code = explode('-', $matches[1]);

        // Wurde eine Qualität mitgegeben?
        if ( isset($matches[2]) )
            $lang_quality = (float)$matches[2];
        else
            $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) {
                    $current_lang = strtolower( join('-', $lang_code) );
                    $current_q = $lang_quality;
                    break;
                }
            }
            // Wenn wir im strengen Modus sind, die Sprache nicht versuchen zu minimalisieren
            if ($strict_mode)
                break;

            // den rechtesten Teil des Sprachcodes abschneiden
            array_pop($lang_code);
        }
    }

    return $current_lang;
}

$allowed_langs = array('en', 'de');
$lang = lang_get_from_browser($allowed_langs, 'en', NULL, FALSE);

if ( 'de' === $lang )
    Header("Location: http://wpbasis.de/readme-de_DE.php");
else
    Header("Location: http://wpbasis.de/readme-en_US.php");
exit();
?>

Quelle: http://wordpress.stackexchange.com/a/3488
 
Zurück