Zweifelsfrei die Sprache feststellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Wie kann ich zweifelsfrei die Sprache feststellen?

Code: Alles auswählen

locale.getdefaultlocale()
kann mir bei einem deutschen System diverse Sprachcodes liefern: de_CH, de_AT, nds_DE, ...

Ich möchte aber einfach nur wissen ob es Deutsch ist oder nicht. Dabei interessiert mich nicht ob es Niedersachsen, Schweiz oder Österreich ist. Muss ich dafür tatsächlich auf alle Möglichen "_de, de_, _DE" Varianten testen?
BlackJack

@rhersel: Da kann auch "german", "deutsch", "87872", oder sonstwas kommen, das ist nicht standardisiert. Also ist die Antwort auf Deine Frage "leider gar nicht".
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Für mich sieht das so aus, als stehe der erste Teil für die Sprache (de: deutsch, en: englisch, nds: niederdeutsch...) und der zweite Teil für das Land (DE: Deutschland, CH: Schweiz...). Niederdeutsch ist eine eigenständige Sprache und "nds_DE" steht für in Deutschland gesprochenes niederdeutsch. Also nur den ersten Teil testen, wenn es um die Sprache geht. Ansonsten wäre "fr_DE" und "en_DE" im Test ebenfalls deutsch.

Du könntest wie folgt testen (wenn es denn standardisiert wäre, siehe BlackJacks Antwort):

Code: Alles auswählen

>>> locale = 'de_DE'
>>> locale.split('_')[0] in ['de', 'nds']
True
>>> locale = 'nds_DE'
>>> locale.split('_')[0] in ['de', 'nds']
True
Grüße
Gerrit
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Code: Alles auswählen

>>> locale = 'de_DE'
>>> any(l.lower() == 'de' for l in locale.split('_'))
True
>>> locale = 'nds_DE'
>>> any(l.lower() == 'de' for l in locale.split('_'))
True
>>> 
Mit any gehts IMHO schöner/besser.

//Edit: sry nicht genau genug gelesen
the more they change the more they stay the same
Benutzeravatar
noisefloor
User
Beiträge: 4209
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

bei mir (Ubuntu 10.04.01) kommt raus: ('de_DE', 'UTF8')

Ob unter bestimmten Umständen / Konfigurationen auch nur 'UTF8' rauskommen kann weiß ich nicht... Dann wäre jeder Test auf 'de' ja so wie so sinnlos.

Was ist denn der Hintergrund der Frage? Vielleicht gibt es eine alternative Lösung.

Gruß, noisefloor
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Danke für die bisherigen Antworten.

Der Hintergrund der Frage ist ganz einfach: In meiner Anwendung muss ich je nach Sprache die richtige Übersetzung der Labels, Messages und der Hilfe auslösen (gettext() usw.). Dafür muss ich aber eindeutig feststellen welche Sprache der Anwender hat. Dabei ist nur von Interesse ob es DE, EN, FR usw. ist.

Ich werde wohl den Vorschlag:

Code: Alles auswählen

locale = 'nds_DE'
any(l.lower() == 'de' for l in locale.split('_'))
verwenden.

Oder besser so:

Code: Alles auswählen

loc = locale.getdefaultlocale()[0].lower().split('_')
if 'de' in loc: print 'hier wird Deutsch gesprochen'
Antworten