QDate in falscher Sprache, Locale jedoch korrekt

Alles rund um die Programmierung mit Qt
Antworten
EdgarButan
Beiträge: 8
Registriert: 25. März 2010 14:10

QDate in falscher Sprache, Locale jedoch korrekt

Beitrag von EdgarButan »

Ich habe folgendes Problem, das ich am besten mit zwei Zeilen (PyQt-, sollte aber auch für Fremdsprachler gut verständlich sein)Code beschreibe:

Code: Alles auswählen

print QtCore.QLocale().languageToString(QtCore.QLocale().language())
print QtCore.QDate().currentDate().toString(QtCore.Qt.DefaultLocaleLongDate)
ergibt als Ausgabe:

Code: Alles auswählen

German
Saturday, 28 January 2012
Sprich: die Ländereinstellung (die hier, wie ich in #qt erfahren habe, maßgeblich ist, nicht die Übersetzung, welche ich aber mit QTranslator.load() ebenfalls erfolgreich geladen habe) ist korrekt auf Deutsch gesetzt, das Datum bekomme ich dennoch auf Englisch.
Was das Ganze noch mysteriöser macht, ist, dass das Programm nachweislich mindestens am 24. Dezember 2011 (und über einen Zeitraum von über einem Jahr davor, ich habe das Programm schon lange ohne Probleme in Benutzung) noch ein deutsches Datum generiert hat (ohne, dass ich irgendwelche Übersetzungs-Dateien oder sonst irgendwas laden musste).

In #qt konnte mir leider niemand richtig weiterhelfen, eigene Recherchen haben in den letzten Tagen nichts ergeben und da dieses Problem auch noch scheinbar völlig aus dem Nichts auftauchte, bin ich mit meinem zugegeben begrenzten Latein am Ende; für Hilfe wäre ich sehr dankbar.

Gruß,
EdgarButan
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QDate in falscher Sprache, Locale jedoch korrekt

Beitrag von Christian81 »

Ich würde da mal eher bei einer speziellen PyQt ML anfragen. Bei mir (openSUSE 12.1, Qt 4.7.4, PyQt 4.8.5) funktioniert es:

Code: Alles auswählen

>>> from PyQt4 import QtCore
>>> print QtCore.QLocale().languageToString(QtCore.QLocale().language())
German
>>> print QtCore.QDate().currentDate().toString(QtCore.Qt.DefaultLocaleLongDate)
Sonntag, 29. Januar 2012
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
EdgarButan
Beiträge: 8
Registriert: 25. März 2010 14:10

Re: QDate in falscher Sprache, Locale jedoch korrekt

Beitrag von EdgarButan »

Ok, dann werd ich's da mal versuchen. Was die Suche nach diesem winzigen Fehler für Ausmaße annimmt…
Danke.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QDate in falscher Sprache, Locale jedoch korrekt

Beitrag von franzf »

Bei mir geht es auch nicht.
Was gibt bei euch ein

Code: Alles auswählen

qDebug() << qgetenv("LC_ALL");
aus?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QDate in falscher Sprache, Locale jedoch korrekt

Beitrag von Christian81 »

LC_ALL ist bei mir in der Konsole nicht gesetzt. Was habt ihr für (Py)Qt-Versionen?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QDate in falscher Sprache, Locale jedoch korrekt

Beitrag von franzf »

Und LC_TIME?
Das Problem hier ist, dass überhaupt keine LC gesetzt sind. (Ist ein neuerer Rechner und das hab ich wohl bisher komplett versäumt).
Sobald ich in der Konsole LC_ALL exportiere, bekomme ich deutsche Namen für Tage/Monate/...
Es hat also nichts mit Python zu tun (mein Testprogramm war in C++).
Siehe auch: <qt-4.8.0-src>/src/corelib/tools/qlocale_unix.cpp:Z.60 ff

* Geht schnell seine zsh-Config anpassen *
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QDate in falscher Sprache, Locale jedoch korrekt

Beitrag von Christian81 »

Bei mir ist auch kein LC_xxx gesetzt, nur LANG steht auf de_DE.UTF-8
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QDate in falscher Sprache, Locale jedoch korrekt

Beitrag von franzf »

LANG ist ja (theoretisch) auch OK:

Code: Alles auswählen

        QByteArray lang = qgetenv("LANG");
        if (lang.isEmpty())
            lang = QByteArray("C");
        if (numeric.isEmpty())
            numeric = lang;
LANG ist also ein Fallback.
Dann muss hier wohl ein Bug sein, denn LANG war (ist) auch hier gesetzt, hat sich aber auf die locale nicht ausgewirkt.
EdgarButan
Beiträge: 8
Registriert: 25. März 2010 14:10

Re: QDate in falscher Sprache, Locale jedoch korrekt

Beitrag von EdgarButan »

Tatsächlich, jetzt habe ich von Hand LC_ALL explizit auf Deutsch gesetzt und siehe da, ich bekomme ein deutsches Datum!
Dann ist auch klar bzw. verständlich, warum Christian das Problem nicht hat; mein Qt ist Version 4.8.0.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QDate in falscher Sprache, Locale jedoch korrekt

Beitrag von Christian81 »

Ok, ist definitiv ein Bug in Qt4.8, hab es hier auf einen anderen System mit Qt 4.8.0 und PyQt 4.9.0 getestet und das gleiche fehlerhafte Verhalten festgestellt.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QDate in falscher Sprache, Locale jedoch korrekt

Beitrag von franzf »

Ich... :roll:
Da war ich SO KURZ davor, aber doch zu blind...

Code: Alles auswählen

--- src/corelib/tools/qlocale_unix.cpp.org      2012-04-14 11:02:06.425917171 +0200
+++ src/corelib/tools/qlocale_unix.cpp  2012-04-14 11:02:50.247920549 +0200
@@ -68,6 +68,8 @@
             lang = QByteArray("C");
         if (numeric.isEmpty())
             numeric = lang;
+       if (time.isEmpty())
+           time = lang;
         if (monetary.isEmpty())
             monetary = lang;
         if (lc_messages_var.isEmpty())
Mit dem Patch funktioniert es wieder...

// edit:
Und es wurde vor 9 Tagen im git-repository gefixt:
http://qt.gitorious.org/qt/qt/commit/9e ... e324fb1e33
Antworten