Sprachsteuerung
Steffi
- design/layout
- html
- php
Hallo,
wenn ich die Seite www.example.com aufrufe, soll je nach Browser-Einstellung (in Frankreich bzw. Deutschland) die Seite www.example.com/fr/ bzw. www.example.com/de/ aufgerufen werden.
Wie mache ich dies am einfachsten?
Gruß
Steffi
Moin Steffi,
soll auf die Unterseite an Hand der Sprache oder des Landes weitergeleitet werden?
Viele Grüße
Robert
Hallo Steffi,
ich nehme an, du sprichst aus der Sicht des Seitenbetreibers von www.example.com.
Ausgangsbasis ist der accept-language Header, den der Browser mitschickt. Der wird vom Browser basierend auf Anwendereinstellungen generiert, nicht basierend auf dem Land, in dem der Browser läuft. Aber ich nehme an, das weißt Du.
Bei statischen Seiten in Apache kann man das über Einstellungen im Webserver lösen. Mit PHP zusammen ist es nicht ganz so einfach.
Es gibt DUMME Beispiele, die mit RewriteCond arbeiten, worin sie dann testen, ob "de" oder "en" im accept-language Header des Webrequests vorkommt. Das missachtet aber die q-Gewichte im Header, und wenn Dir jemand "accept-language: en;q=1.0,de;q=0.9" schickt, Du aber zuerst auf de testest, lieferst Du die Seite gegen den Willen des Besuchers auf deutsch
Ich nehme an, dass Du im Root-Ordner des Projekts eine index.php hast. Surft jemand "https://www.example.com" an, sollte die als Defaultpage eingetragen sein. Darin kannst Du den accept-language Header interpretieren. Dafür gibt es gute und schlechte Lösungen.
Wenn Du allerdings die Seiten https://www.example.com/de/foo.php
und https://www.example.com/fr/foo.php
im Angebot hast, und jemand ruft https://www.example.com/foo.php
ab, dann musst Du entweder eine schlaue Error-Page vorsehen oder für jede sprachspezifische PHP Datei eine Weiche vorsehen.
Eine Alternative ist, gar keine sprachabhängigen URLs zu haben. Statt dessen erstellst Du eine Rewrite-Rule, die jeden Abrufpfad auf deiner Seite (außer denen, die auf statische Ressourcen führen), auf ein /index.php umleitet. Nach außen hin bietest Du URLs an wie https://www.example.com
oder https://www.example.com/foo
oder https://www.example.com/bar?q=hugo
. Und die Rewrite-Rule leitet das nach index.php
, index.php?page=foo
oder index.php?page=bar&q=hugo
. In index.php wertest Du den Sprachheader aus und delegierst den Abruf dann zur richtigen Seite. Aber nicht zu jeder beliebigen, das ist ein Security-Loch, du musst eine Whitelist von erlaubten page-Werten vorsehen.
Soweit die Helikoptersicht, wenn Du weitere Infos brauchst, frag gerne nach.
So würde ich es jedenfalls machen, ich bin aber nicht unbedingt der PHP-Gott 😉
Rolf
@@Steffi
wenn ich die Seite www.example.com aufrufe, soll je nach Browser-Einstellung (in Frankreich bzw. Deutschland) die Seite www.example.com/fr/ bzw. www.example.com/de/ aufgerufen werden.
Dass du hier etwas völlig anderes beschreibst als im Betreff „Sprachsteuerung“ genannt, darauf haben @Rolf B und @Robert B. ja schon hingewiesen.
Und du meinst „Sprachauswahl“, nicht „-steuerung“. Sprachsteuerung wäre, ein System mit natürlicher Sprache zu steuern. (Auch das funktioniert bei Webseiten out of the box, wenn man das nicht mit schlechtem HTML oder JavaScript zunichtemacht.)
Wie mache ich dies am einfachsten?
Auch diese Frage ist nicht gut gestellt. Geht es dir um „am einfachsten“ oder um „am besten“?
Am einfachsten dürfte language negotiation sein, in deinem Fall wohl mit type maps.
Das allein ist aber nicht am besten, siehe das unter Navigation angesprochene Problem. Sobald ein Nutzer das Sprachauswahlmenü benutzt (was vorhanden sein muss), sollte man dessen Auswahl in einem Cookie speichern, der Vorrang vor der Angabe im HTTP-Header hat.
Lassen die beiden verlinkten Artikel noch Fragen offen?
Kwakoni Yiquan
Hallo,
habe leider nicht alles verstanden. Und ich habe mich offensichtlich unklar ausgedrückt.
Wenn jemand www.example.com aufruft, so soll bei mir mit meinen (offensichtlich auf Deutsch eingestellten Browsern) die Seite www.example.com/de aungezeigt werden, auch wenn ich in Japan sein sollte.
Umgekehrt soll für französische Leser mit ihren auf "französisch" eingestellten Browsern die Seite www.example.com/fr angezeigt werden.
Hallo
Ich habe mal die Absätze in deinem Posting sichtbar gemacht. Mit zwei Zeilenumbrüchen von einem zum nächsten Absatz kannst du das auch. 😀
habe leider nicht alles verstanden. Und ich habe mich offensichtlich unklar ausgedrückt.
Im Betreff deines Postings bist hast du das schon (auch ich bin beim erstmaligen Lesen des Betreffs von der Steuerung der Seite mit natürlicher Sprache ausgegangen), im Text deines Beitrags wurde aber schon klar, dass du auf die Auswahl der Sprache hinauswillst. Ganz so, wie du es hier nachfolgend beschreibst.
Wenn jemand www.example.com aufruft, so soll bei mir mit meinen (offensichtlich auf Deutsch eingestellten Browsern) die Seite www.example.com/de aungezeigt werden, auch wenn ich in Japan sein sollte.
Umgekehrt soll für französische Leser mit ihren auf "französisch" eingestellten Browsern die Seite www.example.com/fr angezeigt werden.
Das ist genau das, was Rolf und Gunnar meinten. Jetzt ist meine Frage, wo du kenntnismäßig stehst. Eine fachlich gute Lösung hat eine gewisse Komplexität, die einen Vorkenntnisstand voraussetzt.
Tschö, Auge
Hi,
- Auswertung der vom Browser gesendeten Header
- Berücksichtigung einer eventuell vom Benutzer getätigten Auswahl
- überstimmen der vom Browser gesendeten Header
- speichern der Auswahl des Benutzers im Browser und Übermittlung dieser Info bei nachfolgenden Seitenaufrufen
Nicht vergessen: Eine Default-Sprache bestimmen, wenn man keine der vom Besucher gewünschten Sprachen liefern kann
Einen schönen Tag noch
Martin