summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEdward Welbourne <edward.welbourne@qt.io>2020-10-15 17:25:24 +0200
committerEdward Welbourne <edward.welbourne@qt.io>2020-10-26 14:49:25 +0200
commit28bc3ca8114033a5542e7877105de4f7ec62bf83 (patch)
tree3be831511b0145bf17ee45684b9e7bf09e843ecc /src
parent27c9d1f2096b809486861af091adf48375729c57 (diff)
Fix locale look-up when language is unspecified
Looking up a locale with unspecified language got the C locale, due to taking a short-cut that would make sense if no locale were found for a specified language. Stop assuming the language was specified. Task-number: QTBUG-74287 Change-Id: I8b3c232da584fb187ebb6c190729c377d0083808 Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io> (cherry picked from commit e69b81101c6e09d1c1b81d50ea868a8625c9f248) Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/text/qlocale.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp
index 7dce860354..4617168781 100644
--- a/src/corelib/text/qlocale.cpp
+++ b/src/corelib/text/qlocale.cpp
@@ -367,10 +367,14 @@ static const QLocaleData *findLocaleDataById(const QLocaleId &localeId)
const QLocaleData *data = locale_data + idx;
- if (idx == 0) // default language has no associated script or country
+ // If there are no locales for specified language (so we we've got the
+ // default language, which has no associated script or country), give up:
+ if (localeId.language_id && idx == 0)
return data;
- Q_ASSERT(data->m_language_id == localeId.language_id);
+ Q_ASSERT(localeId.language_id
+ ? data->m_language_id == localeId.language_id
+ : data->m_language_id);
if (localeId.script_id == QLocale::AnyScript && localeId.country_id == QLocale::AnyCountry)
return data;
@@ -380,13 +384,17 @@ static const QLocaleData *findLocaleDataById(const QLocaleId &localeId)
if (data->m_country_id == localeId.country_id)
return data;
++data;
- } while (data->m_language_id && data->m_language_id == localeId.language_id);
+ } while (localeId.language_id
+ ? data->m_language_id == localeId.language_id
+ : data->m_language_id);
} else if (localeId.country_id == QLocale::AnyCountry) {
do {
if (data->m_script_id == localeId.script_id)
return data;
++data;
- } while (data->m_language_id && data->m_language_id == localeId.language_id);
+ } while (localeId.language_id
+ ? data->m_language_id == localeId.language_id
+ : data->m_language_id);;
} else {
do {
if (data->m_script_id == localeId.script_id
@@ -394,7 +402,9 @@ static const QLocaleData *findLocaleDataById(const QLocaleId &localeId)
return data;
}
++data;
- } while (data->m_language_id && data->m_language_id == localeId.language_id);
+ } while (localeId.language_id
+ ? data->m_language_id == localeId.language_id
+ : data->m_language_id);;
}
return nullptr;