de_DE / Who is who (Sprache / Land)

Mik3e

Erfahrenes Mitglied
Hi,

Kurze Frage:
Die Locale Einstellungen bestehen ja aus zwei Elementen.
z.B. de_DE für Deutschland.
Meine Frage dazu:
Was ist die Sprache und was ist das Land
de=Sprache?
DE= Land?

Also gibt es at_DE oder de_AT (für Österreich)?

Gibt es irgendwo eine Referenz wo alle Locales gelistet sind? Konnte auf PHP.net nichts finden..

Danke & LG
Mike
 
Du hast es schon fast richtig erfasst: der erste Teil, der so genannte primäre subtag des language tags repräsentiert die Sprache während der optionale subtag typischerweise das Land kann aber auch das Dialekt, die Schrift oder eine Verfeinerung der Sprache repräsentiert. So gibt es beispielsweise einen definierten Code für die neue Rechtschreibung von 1996 (de-DE-1996) aber auch für Klingonisch (i-klingon).
 
Hallo!

de_DE = Sprache/Land
Folglich: de_AT

Hmm, mit PHP hat dass nichts zu tun, darum wirst Du auf php.net auch keine "Funktion" dazu finden..... wenn dann kommen die Länderkürzel in irgendwelchen von den vielen Codeschnipseln vor.
Gibt doch einfach mal ein paar gei Google ein, irgendwas wird sich da sicherlich finden lassen..... de_DE de_AT en_US..... keine Ahnung welche es so gibt.
Schnell mal gemacht..... Stichworte: RFC 1766 / ISO 639 / ISO 3166 (de_DE, de_CH, de_AT, en_US, ...)

Gruss Dr Dau

[edit]
Ziemlich in der Mitte --> http://lists.debian.org/lsb-spec/2000/04/msg00001.html
[/edit]
 
Zuletzt bearbeitet:
Hi,

Dankeschön...
Das die Locales nichts mit PHP direkt zu tun haben ist mir klar. Ich meinte auch ich habe keinen link zum Passenden RFC gefunden :)

Und klingonisch hab ich sowieso schon immer gesucht :)

Danke Euch,
Ciao Mike
 
Hi,

Also ich bin nun endgültig verwirrt...
Habe mir die beiden ISO Normen zur Brust genommen (auf verschiedenen Sites)...
ÜBERALL ist
Sprache Deutsch = de

Und dann dazu eben das Länderkürzel (DE, AT etc.).

Aber:
Anhand folgender testfunktion werdet Ihr verstehen, warum ich verwirrt bin:
PHP:
if (!setlocale (LC_ALL, 'de_DE')) {
    // -> LIEFERT FALSE
}

if (!setlocale (LC_ALL, 'de_AT')) {
    // -> LIEFERT FALSE
}


if (!setlocale (LC_ALL, 'ge')) {
    // -> LIEFERT TRUE
}
Warum erwartet er die Angabe als "ge" und aktzeptiert "de" nicht, obwohl diese Bezeichnung nach ISO Norm korrekt ist

Ich verwende zum Testen eine WinXP Maschine (Deutsch) mit IIS und PHP 5.0.1
Installierte Sprachen:
- Deutsch
- Englisch (US)
- Niederländisch (habe ich zu Testzwecken mal dazuinstalliert).

Habt Ihr vielleicht eine Ahnung, wo das Problem liegen könnte

Danke & Ciao,
Mike
 
Dass hängt wohl irgendwie von den Servereinstellungen ab.

Auf meinem Server kann ich grad nicht testen..... der ist zur Zeit im "Wartungsmodus".

Lokal mit XAMPP unter Windows funktioniert bei mir nur "ge".
Auf meinem Webspace mit Debian hingegen funktioniert nur "de_DE" und "de_DE@euro"..... "ge" oder auch "de" wird ignoriert.

Ich weiss ja nicht was Du damit überhaupt bezwecken willst, aber Du kannst in setlocale() auch mehrere Angaben machen:
PHP:
<?php
setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
 
echo "Heute ist ".strftime('%A');
?>
So wird der Wochentag in deutsch ausgegeben, unabhängig davon ob der Server "de_DE", "de_DE@euro", "de" oder "ge" akzeptiert.
Die Mehrfachangabe macht aber eigentlich nur Sinn, wenn Du das Script auf verschiedenen Systemen einsetzen willst.
 
Ne, es geht mir eigentlich nur um die Sinnhaftigkeit von ISO Standards, wenn diese sowieso nicht eingehalten werden... Bei de, at, us, en kann man sich die Kürzel noch zusammenreimen...

Aber kennst Du den Code für z.B. Aszerbaidschan? (wenn man das so schreibt)
Dafür gibt es einen ISO Code, der dann aber wahrscheinlich nicht funktioniert.

Und genau vor diesem Problem stehe ich mit "niederländisch".
Kürzel "nl" (lt. ISO korrekt), akzeptiert er nicht. Und jetzt frage ich mich: Wie soll ich das korrekte Kürze rausfinden (Bruteforce-Language-Test ;)
 
Naja, Regeln sind dazu da, um gebrochen zu werden. ;)

Man könnte zwar rumprobieren, aber mit steigender Anzahl der Sprachen wird es eine ganz schöne Arbeit.
Und dann währe ja noch das Problem dass es bei z.b. einem Serverwechsel alles nochmal gemacht werden müsste..... siehe mein vorherigen Post.
In dem Fall müsste man also rausfinden ob es irgend eine Funktion gibt, die die Akzeptierte Sprache/Sprachen zurück gibt.
 
Irgendwie scheint sich XAMPP (oder Windows?) an keine ISO zu halten.
Ich gehe davon aus dass Du deine Seiten später auf irgend einen Webspace hochlädst?!
Dann solltest Du auf jedenfall schonmal prüfen welche Schreibweise Du dort anwenden musst.

Sind nur die Niederlande dein Problem?
Dort wird nicht Niederländisch, sondern Holländisch gesprochen.
Holländisch heisst auf englisch "Dutch", daraus ergibt sich "du".

Ich würde es also, um möglichst flexibel zu sein, so machen:
PHP:
<?php
setlocale (LC_ALL, 'nl_NL@euro', 'nl_NL', 'nl', 'du');
?>
Wobei "du" auch für den holländischen Sprachraum in Belgien gilt (nl_BE).
In Belgien gibt es aber auch en_BE und fr_BE für den englischen bzw. französischen Sprachraum.

Verzwickte Sache. ;)

[edit]
Nachtrag:
Ich habe grad nochmal auf 2 Servern getestet.
Beide mit Debian, Apache 1.3.33 und PHP 4.3.10.
Server 1: de_DE funktioniert, nl_NL funktioniert.
Server 2: de_DE funktioniert, nl_NL funktioniert nicht.

Daraus ergibt sich also dass nicht auf jedem Server auch jede Sprache zur Verfügung steht.

Daher solltest Du also unbedingt im vorwege prüfen ob die von dir gewünschten Sprachen überhaupt zur Verfügung stehen. :(
Andernfalls läufst Du Gefahr, dass Du dir die Arbeit ggf. umsonst machst
[/edit]
 
Zuletzt bearbeitet:
Hi,

Das die entsprechenden Sprachpakete installiert werden müssen, ist mir klar ;) Dafür habe ich hier ja meine Testmaschine stehen, auf der ich NL installiert habe... Anschließend kommt die Applikation auf meinen Live-Server (wird also nicht bei irgendeinem Provider virtual gehostet -> Somit kann ich beliebige Sprachpakete installieren).

Holländisch? Dachte die sprechen da oben flämisch? (wollte den Ausdruck nur nicht verwenden, weil sich sonst niemand mehr auskennt ;)

Auf jeden Fall ist das ganze ein echtes Problem.. Werde "du" mal versuchen...

Danke & Ciao,
Mike
 
Zurück