Systemsprache abfragen
xpfreund
- php
Hallo,
Gibt es eine Möglichkeit die Sprache des Systems mit PHP abzufragen. Es soll in jedem Browser funktionieren und für viele Sprachen der Welt gehen, also z. B. auch Koreanisch oder Chinesisch. Der Grund ist: Ich habe eine Sprachauswahl als Auswahlliste, wo die Systemsprache standardmäßig aktiviert ist.
Kennt ihr da ne Möglichkeit? Hab schon ein bisschen gegoogelt aber nichts gutes gefunden.
gruß aus Senftenberg am See
Hello,
Gibt es eine Möglichkeit die Sprache des Systems mit PHP abzufragen.
was suchst du denn eigentlich? Die Sprache des Systems, oder die bevorzugte Sprache des Nutzers? Im letzteren Fall hilft dir der Header Accept-Language weiter.
MfG
Rouven
Hallo,
Gibts das denn in allen Browsern?
Bevorzugte oder Systemsprache, je nachdem, was vorhanden ist.
gruß aus Senftenberg am See
Hi,
Gibts das denn in allen Browsern?
Accept-Language ist seit mindestens[1] 1996 definiert.
Cheatah
[1] Die Spezifikation von HTTP/0.9 finde ich gerade nicht; also beziehe ich mich auf RFC 1945.
Hi Cheatah,
[Accept-Language]
Gibts das denn in allen Browsern?
Accept-Language ist seit mindestens[1] 1996 definiert.
ja schon, aber es wird in RFC 1945 als "Additional Feature" gelistet, ist also keine Pflichtangabe im Protokoll. Ein Client, der keinen Accept-Language-Header sendet, ist also durchaus vorstellbar - wenn auch sehr unwahrscheinlich, es sei denn für spezielle Zwecke.
So long,
Martin
Hallo,
<code lang=php>
$languages = array("English" => "en", //array mit benötigten Sprachen
"Deutsch" => "de",
"Andorran" => "ad",
"Brazilian" => "br",
"Catalan" => "ct",
"China,P.R.C.(GB)" => "zh",
"Czech" => "cz",
"Danish" => "da",
"Dutch" => "nl",
"Espanol" => "es",
"Finnish" => "fi",
"Français" => "fr",
"Greek" => "gr",
"Hungarian" => "hu",
"Italiano" => "it",
"Icelandic" => "is",
"Korean" => "ko",
"Norwegian" => "no",
"Portugues" => "pt",
"Polish" => "pl",
"Romanian" => "ro",
"Russian" => "ru",
"Slovenian" => "si",
"Slovak" => "sk",
"Svenska" => "se",
"Turkish" => "tr",
"Taiwan,R.O.C.(TW)" => "tw");
$lang=$_SERVER["HTTP_ACCEPT_LANGUAGE"]; //Headerabfrage
echo "<br><tr><td>Language:</td><td><select name='setting_langua'>\n"; //Auswahlliste
foreach ($languages as $l_long => $l_short) {
echo "<option value='$l_short'";
$lang=substr($lang,0,2);
if ($lang==$l_short) { echo " selected"; }
echo ">$l_long-$l_short\n";
}
echo "</select><br><br></td></tr>\n";
Bitte keine Kommentare über Tabellen und Abstände, die nicht über CSS definiert wurden.
gruß aus Senftenberg am See
Hi,
$languages = array("English" => "en", //array mit benötigten Sprachen
in aller Regel würde die Zuordnung Key=>Klartext mehr Sinn ergeben.
$lang=$_SERVER["HTTP_ACCEPT_LANGUAGE"]; //Headerabfrage
foreach ($languages as $l_long => $l_short) {
$lang=substr($lang,0,2);
Warum versuchst Du, $lang bei jedem Schleifendurchlauf erneut zu normalisieren? Außerdem beachtest Du das Format des Headers nicht hinreichend.
Bitte keine Kommentare über Tabellen und Abstände, die nicht über CSS definiert wurden.
Warum nicht? Der erzeugte HTML-Code ist nicht sinnbehaftet. Daran ändert sich auch nichts, wenn der Themenbereich PHP lautet.
Cheatah
hi,
Bitte keine Kommentare über Tabellen und Abstände, die nicht über CSS definiert wurden.
Dann sei wenigstens einer zu
$lang=$_SERVER["HTTP_ACCEPT_LANGUAGE"]; //Headerabfrage
$lang=substr($lang,0,2);
if ($lang==$l_short) { echo " selected"; }
erlaubt: Das ist reichlich suboptimal.
Accept-Language kann mehr als eine präferierte Sprache enthalten, und darüber hinaus auch noch einen "quality value" - was bei dir komplett unberücksichtigt bleibt.
Du triffst also im Zweifelsfalle gar keine Auswahl, wenn die erste gewünschte Sprache nicht vorliegt - obwohl die nächste vielleicht durchaus verfügbar wäre.
Und abhängig vom quality value wählst du vielleicht sogar eine "falsche" aus.
gruß,
wahsaga
Hallo,
hi,
Bitte keine Kommentare über Tabellen und Abstände, die nicht über CSS definiert wurden.
Dann sei wenigstens einer zu
$lang=$_SERVER["HTTP_ACCEPT_LANGUAGE"]; //Headerabfrage
$lang=substr($lang,0,2);
if ($lang==$l_short) { echo " selected"; }erlaubt: Das ist reichlich suboptimal.
Accept-Language kann mehr als eine präferierte Sprache enthalten, und darüber hinaus auch noch einen "quality value" - was bei dir komplett unberücksichtigt bleibt.
Du triffst also im Zweifelsfalle gar keine Auswahl, wenn die erste gewünschte Sprache nicht vorliegt - obwohl die nächste vielleicht durchaus verfügbar wäre.
Und abhängig vom quality value wählst du vielleicht sogar eine "falsche" aus.
Dann wäre das ja auch nicht so schlimm, denn dann kann derjenige ja immer noch selbst auswählen. Und ob da nun en-us oder en-en steht, ist doch völlig egal, denn es werden sowieso nur die ersten beiden beiden Buchstaben ausgewählt.
Und was den ganzen Befehl angeht: So genau muss er nun auch nicht sein, denn ursprünglich musste der User allein auswählen, welche Sprache bei der Installation verwendet werden soll, also nehme ich ihm ja nur ein wenig Arbeit ab. Außerdem glaube ich nicht mal, dass das so veränderte Projekt überhaupt jemals aus unsere Firma rauskommt. Also selbst, wenn wir irgendwelche Praktikanten oder so was bei uns hätten, wären die wahrscheinlich mit Englisch auch schon zufrieden.
Deswegen ändere ich auch nichts an den Tabellen, weil ein CSS dort reinzukriegen viel zu kompliziert ist.
gruß aus Senftenberg am See
Hallo.
Die Liste der Sprachen ist hoffentlich nur ein Beispiel und in der richtigen Liste stehen die Sprachen in ihrer jeweiligen Sprache.
MfG, at
(Hallo|Hi(ho)|Tag) xpfreund,
Gibt es eine Möglichkeit die Sprache des Systems mit PHP abzufragen. Es soll in jedem Browser funktionieren und für viele Sprachen der Welt gehen, also z. B. auch Koreanisch oder Chinesisch. Der Grund ist: Ich habe eine Sprachauswahl als Auswahlliste, wo die Systemsprache standardmäßig aktiviert ist.
Kennt ihr da ne Möglichkeit? Hab schon ein bisschen gegoogelt aber nichts gutes gefunden.
Ich weiß nicht, was du gefunden hättest, wenn du nach "language negotiation" gegoogelt hättest, aber es gibt dafür (und einige andere Spielchen mit HTTP-Headern) eine PEAR-Klasse, sie heißt schlicht HTTP. Die Methode HTTP::negotiateLanguage() dürfte dir bei deinem speziellen Problem besser weiterhelfen, als dein selbstgestrickter Code.
Auch können Sprachenkürzel ganz anders aussehen, als du dir vielleicht vorstellst, siehe z.B.:
http://de.selfhtml.org/diverses/sprachenlaenderkuerzel.htm#zusammengesetzte
http://de.wikipedia.org/wiki/ISO_639
http://www.loc.gov/standards/iso639-2/langhome.html
MffG
EisFuX
Hi,
[...] mit PHP abzufragen. Es soll in jedem Browser funktionieren
Das ist ein Widerspruch, da PHP mit dem Browser (im Normalfall) nicht in Berührung kommt ...
cu,
Andreas