WebsiteBaker Support (2.13.x) > Hilfe & Support (deutsch)

Form-Modul und mpForm senden nur auf Seiten in Primärsprache

<< < (4/5) > >>

masju:
Ich habe gerade noch herausgefunden:
Es liegt nicht am Form-Modul, sondern an der Übermittlung von Formularen per POST im Allgemeinen. Ich habe den <form></form>-Abschnitt im Quelltext in eine eigene WYSIWYG-Section gepackt, und auch hier derselbe Effekt.

Und jetzt kommt's: Ich habe in den Einstellungen die Option "Eingangsseite" gewählt und hier eine Sprachweiche eingebaut, die beim Aufruf der index.php per header auf die jeweilige Sprachunterseite umleitet:


--- Code: ---<?php
// Verfügbare Sprachunterseiten (z.B. &#39;de&#39; für Deutsch, &#39;en&#39; für Englisch)
$available_languages = [&#39;es&#39;, &#39;de&#39;, &#39;en&#39;, &#39;fr&#39;];

// Funktion zum Extrahieren der bevorzugten Sprache
function getPreferredLanguage($available_languages) {
    if (isset($_SERVER[&#39;HTTP_ACCEPT_LANGUAGE&#39;])) {
        // Liste der Sprachen aus dem Header holen und aufsplitten
        $languages = explode(&#39;,&#39;, $_SERVER[&#39;HTTP_ACCEPT_LANGUAGE&#39;]);
        foreach ($languages as $lang) {
            // Nur den Sprachcode (z.B. &#39;de&#39; oder &#39;en&#39;) extrahieren
            $lang_code = substr($lang, 0, 2);
            // Prüfen, ob die Sprache verfügbar ist
            if (in_array($lang_code, $available_languages)) {
                return $lang_code;
            }
        }
    }
    // Standardmäßig auf Englisch setzen, falls keine passende Sprache gefunden wird
    return &#39;en&#39;;
}

// Bevorzugte Sprache des Besuchers ermitteln
$user_language = getPreferredLanguage($available_languages);

// Weiterleitung auf die entsprechende Unterseite mit einem switch

switch ($user_language) {
    case &#39;es&#39;:
        header("Location: [...]/pg/es/inicio.php");  // Spanisch
        break;
    case &#39;de&#39;:
        header("Location: [...]/pg/de/startseite.php");  // Deutsch
        break;
    case &#39;en&#39;:
        header("Location: [...]/pg/en/home.php");  // Englisch
        break;
    case &#39;fr&#39;:
        header("Location: [...]/pg/fr/accueil.php");  // Französisch
        break;
    default:
        header("Location: [...]/en/home.php");  // Fallback auf Englisch
        break;
}
?>

--- End code ---

Und jetzt das Wunder von Bern: Schalte ich die Startseite (intro.php) ab, ist alles okay.

Gruß,
masju

sternchen8875:
Du machst mich fertig....   :-D :-D :-D

benenn mal ein paar der Variablen um, einige werden im Core schon verwendet, $lang, $user_language usw

masju:
 (Y)

Variablen geändert in


--- Code: ---<?php
// Verfügbare Sprachunterseiten (z.B. &#39;de&#39; für Deutsch, &#39;en&#39; für Englisch)
$my_available_languages = [&#39;es&#39;, &#39;de&#39;, &#39;en&#39;, &#39;fr&#39;];

// Funktion zum Extrahieren der bevorzugten Sprache
function getPreferredLanguage($my_available_languages) {
    if (isset($_SERVER[&#39;HTTP_ACCEPT_LANGUAGE&#39;])) {
        // Liste der Sprachen aus dem Header holen und aufsplitten
        $my_languages = explode(&#39;,&#39;, $_SERVER[&#39;HTTP_ACCEPT_LANGUAGE&#39;]);
        foreach ($my_languages as $my_lang) {
            // Nur den Sprachcode (z.B. &#39;de&#39; oder &#39;en&#39;) extrahieren
            $my_lang_code = substr($my_lang, 0, 2);
            // Prüfen, ob die Sprache verfügbar ist
            if (in_array($my_lang_code, $my_available_languages)) {
                return $my_lang_code;
            }
        }
    }
    // Standardmäßig auf Englisch setzen, falls keine passende Sprache gefunden wird
    return &#39;en&#39;;
}

// Bevorzugte Sprache des Besuchers ermitteln
$my_user_language = getPreferredLanguage($my_available_languages);

// Weiterleitung auf die entsprechende Unterseite mit einem switch-Block

switch ($my_user_language) {
    case &#39;es&#39;:
        header("Location: /pg/es/inicio.php");  // Spanisch
        break;
    case &#39;de&#39;:
        header("Location: /pg/de/startseite.php");  // Deutsch
        break;
    case &#39;en&#39;:
        header("Location: /pg/en/home.php");  // Englisch
        break;
    case &#39;fr&#39;:
        header("Location: /pg/fr/accueil.php");  // Französisch
        break;
    default:
        header("Location: /pg/en/home.php");  // Fallback auf Englisch
        break;
}
?>

--- End code ---

Noch kein Success.
Seltsam, dass es auf dem gespiegelten Server trotzdem lief.

sternchen8875:
Ging schneller als erwartet bei Doc, Donnerstag früh gehts weiter...

lass dir die Sprachen mal ausgeben mit


--- Code: ---var_dump($_SERVER['HTTP_ACCEPT_LANGUAGE']);
--- End code ---

vielleicht auch auf dem zweiten Server, um mögliche Unterschiede zu sehen

P.S.: noch ein Tip am Rande: ist ist empfehlenswert, bei solchen Tests immer den Browsercache zu löschen

masju:
var_dump($_SERVER['HTTP_ACCEPT_LANGUAG E']); ist bei beiden Installationen gleich:

string(23) "de,en-US;q=0.7,en;q=0.3"
string(23) "de,en-US;q=0.7,en;q=0.3"
(Browser-Cache ist gelöscht)

In der Sprachweiche habe ich nochmal komplett die Variablen geändert, keine Änderung.

--- Quote ---<?php
// Verfügbare Sprachunterseiten (z.B. 'de' für Deutsch, 'en' für Englisch)
$meine_available_languages = ['es', 'de', 'en', 'fr'];

// Funktion zum Extrahieren der bevorzugten Sprache
function getPreferredLanguag e($meine_available_languages) {
    if (isset($_SERVER['HTTP_ACCEPT_LANGUAG E'])) {
        // Liste der Sprachen aus dem Header holen und aufsplitten
        $meine_languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAG E']);
        foreach ($meine_languages as $meine_lang) {
            // Nur den Sprachcode (z.B. 'de' oder 'en') extrahieren
            $meine_lang_code = substr($meine_lang, 0, 2);
            // Prüfen, ob die Sprache verfügbar ist
            if (in_array($meine_lang_code, $meine_available_languages)) {
                return $meine_lang_code;
            }
        }
    }
    // Standardmäßig auf Englisch setzen, falls keine passende Sprache gefunden wird
    return 'en';
}

// Bevorzugte Sprache des Besuchers ermitteln
$meine_user_language = getPreferredLanguag e($meine_available_languages);

// Weiterleitung auf die entsprechende Unterseite mit einem switch-Block

switch ($meine_user_language) {
    case 'es':
        header("Location: [...]/pg/es/inicio.php");  // Spanisch
        break;
    case 'de':
        header("Location: [...]/pg/de/startseite.php");  // Deutsch
        break;
    case 'en':
        header("Location: [...]/pg/en/home.php");  // Englisch
        break;
    case 'fr':
        header("Location: [...]/pg/fr/accueil.php");  // Französisch
        break;
    default:
        header("Location: [...]/pg/en/home.php");  // Fallback auf Englisch
        break;
}
?>

--- End quote ---

PS: Wie mache ich den Cursor im Code-Modul und auch in den Droplets wieder sichtbar?
(Hinweis: code macht in diesem Forum aus dem einfachen Hochkomma immer &#39;, deswegen habe ich quote genommen)

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version