From f7b1262c7f34e9c685f30dbf7a31ff62e7736795 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Wed, 2 May 2012 14:23:34 +0200 Subject: Always return uiLanguages in bcp47 format MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The old code didn't convert the uilanguages coming from the system locale to bcp47 format, leading to QLocale().uiLanguages() and QLocale("en_US").uiLanguages() returning things in an inconsistent format. Now it always returns bcp47 format (ie. Language and Country separated by a hyphen). Change-Id: I40d3442255e6e8daa4723f7b3fc13829c9764eb1 Reviewed-by: Jędrzej Nowacki Reviewed-by: Denis Dzyubenko --- src/corelib/tools/qlocale_unix.cpp | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/corelib/tools/qlocale_unix.cpp b/src/corelib/tools/qlocale_unix.cpp index 5f7a9da95d..b4a560b718 100644 --- a/src/corelib/tools/qlocale_unix.cpp +++ b/src/corelib/tools/qlocale_unix.cpp @@ -71,6 +71,7 @@ struct QSystemLocaleData QLocale lc_messages; QByteArray lc_messages_var; QByteArray lc_measurement_var; + QStringList uiLanguages; }; void QSystemLocaleData::readEnvironment() @@ -212,29 +213,26 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const return QVariant((int)QLocale(meas_locale).measurementSystem()); } case UILanguages: { - static QString languages = QString::fromLatin1(qgetenv("LANGUAGE")); - if (!languages.isEmpty()) { - QStringList lst = languages.split(QLatin1Char(':')); - for (int i = 0; i < lst.size();) { - const QString &name = lst.at(i); - QString lang, script, cntry; - if (name.isEmpty() || !qt_splitLocaleName(name, lang, script, cntry)) - lst.removeAt(i); - else - ++i; - } - return lst; - } - if (!d->lc_messages_var.isEmpty()) { + if (!d->uiLanguages.isEmpty()) + return d->uiLanguages; + QString languages = QString::fromLatin1(qgetenv("LANGUAGE")); + QStringList lst; + if (languages.isEmpty()) + lst.append(QString::fromLatin1(d->lc_messages_var)); + else + lst = languages.split(QLatin1Char(':')); + + for (int i = 0; i < lst.size(); ++i) { + const QString &name = lst.at(i); QString lang, script, cntry; - if (qt_splitLocaleName(QString::fromLatin1(d->lc_messages_var.constData(), d->lc_messages_var.size()), - lang, script, cntry)) { - if (!cntry.length() && lang.length()) - return QStringList(lang); - return QStringList(lang % QLatin1Char('-') % cntry); + if (qt_splitLocaleName(name, lang, script, cntry)) { + if (!cntry.length()) + d->uiLanguages.append(lang); + else + d->uiLanguages.append(lang % QLatin1Char('-') % cntry); } } - return QVariant(); + return d->uiLanguages.isEmpty() ? QVariant() : QVariant(d->uiLanguages); } case StringToStandardQuotation: return lc_messages.quoteString(in.value()); -- cgit v1.2.3