@@Treziman
$grundspr = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
Was soll grundspr bedeuten?
Variablen mal deutsch, mal englisch zu benennen ist auch keine gute Idee.
Und warum kopierst du $_SERVER["HTTP_ACCEPT_LANGUAGE"]
überhaupt in eine Variable um?
$languag="en"; // Sprache erstmal grundsätzlich auf englisch
$language
mit e.
if(strpos($grundspr,"de",0) !== false){ $languag = "de"; }
Die Abfrage ist falsch. In mehrfacher Hinsicht.
1. Wenn der gesendete Accept-Language-Header bspw. en-US,en;q=0.7,de;q=0.3
ist, dann will der Nutzer bevorzugt Englisch haben, nicht Deutsch.
Du darfst nicht nur nach dem Vorkommen von de
suchen, sondern musst auch die Reihenfolge der Sprachen im Accept-Language-Header beachten.
2. Das Vorkommen von de
heißt nicht unbedingt Deutsch. Es gibt eine Vielzahl anderer Sprachen, deren dreibuchstabiges Kürzel de
enthält. [IANA Language Subtag Registry]
(Fun fact: Auch Google hatte das mal falsch gemacht.)
Du müsstest also nach \bde\b
suchen. Aber auch das ist nicht ganz sicher.
Für de
fällt mit kein sinnvolles Beispiel ein, aber für it
. Ein Südtiroler könnte de-it
(in Italien gesprochenes Deutsch) in seinem Accept-Language-Header stehen haben. Wenn man diesen nach \bit\b
durchsucht, ergibt es einen Treffer. Es wäre aber falsch, daraus zu folgern, dass die italienische Sprachvariante ausgeliefert werden soll.
Man müsste also auch prüfen, ob das gefundene it
(bzw. de
) auch wirklich ein Sprachkürzel ist und kein anderer Bestandteil des Sprachcodes; also ob kein -
(oder _
) unmittelbar davor steht. [Language Tags]
3. Dass Sprachcodes case-insensitive verarbeitet werden müssen, sagte ich schon. DE
muss gleichbehandelt werden wie de
.
🖖 Живіть довго і процвітайте
„Im Vergleich mit Elon Musk bei Twitter ist ein Elefant im Porzellanladen eine Ballerina.“
— @Grantscheam auf Twitter