Added support for QLocale::uiLanguages on Symbian.
Extended the mapping table that matches symbian device languages to a locale name and language code. Task-number: QTBUG-7329 Reviewed-by: trustme (cherry picked from commit 93233fc811920002d5b5b8272d9b5b8d5d3e2b98)
This commit is contained in:
parent
74dda83074
commit
fc7aaa5c48
@ -44,6 +44,7 @@
|
||||
#include <QTime>
|
||||
#include <QVariant>
|
||||
#include <QThread>
|
||||
#include <QStringList>
|
||||
|
||||
#include <e32std.h>
|
||||
#include <e32const.h>
|
||||
@ -86,6 +87,7 @@ static TPtrC defaultFormatSpec(TExtendedLocale&)
|
||||
struct symbianToISO {
|
||||
int symbian_language;
|
||||
char iso_name[8];
|
||||
char uilanguage[8];
|
||||
};
|
||||
|
||||
|
||||
@ -94,77 +96,79 @@ struct symbianToISO {
|
||||
NOTE: This array should be sorted by the first column!
|
||||
*/
|
||||
static const symbianToISO symbian_to_iso_list[] = {
|
||||
{ ELangEnglish, "en_GB" }, // 1
|
||||
{ ELangFrench, "fr_FR" }, // 2
|
||||
{ ELangGerman, "de_DE" }, // 3
|
||||
{ ELangSpanish, "es_ES" }, // 4
|
||||
{ ELangItalian, "it_IT" }, // 5
|
||||
{ ELangSwedish, "sv_SE" }, // 6
|
||||
{ ELangDanish, "da_DK" }, // 7
|
||||
{ ELangNorwegian, "no_NO" }, // 8
|
||||
{ ELangFinnish, "fi_FI" }, // 9
|
||||
{ ELangAmerican, "en_US" }, // 10
|
||||
{ ELangPortuguese, "pt_PT" }, // 13
|
||||
{ ELangTurkish, "tr_TR" }, // 14
|
||||
{ ELangIcelandic, "is_IS" }, // 15
|
||||
{ ELangRussian, "ru_RU" }, // 16
|
||||
{ ELangHungarian, "hu_HU" }, // 17
|
||||
{ ELangDutch, "nl_NL" }, // 18
|
||||
{ ELangBelgianFlemish, "nl_BE" }, // 19
|
||||
{ ELangCzech, "cs_CZ" }, // 25
|
||||
{ ELangSlovak, "sk_SK" }, // 26
|
||||
{ ELangPolish, "pl_PL" }, // 27
|
||||
{ ELangSlovenian, "sl_SI" }, // 28
|
||||
{ ELangTaiwanChinese, "zh_TW" }, // 29
|
||||
{ ELangHongKongChinese, "zh_HK" }, // 30
|
||||
{ ELangPrcChinese, "zh_CN" }, // 31
|
||||
{ ELangJapanese, "ja_JP" }, // 32
|
||||
{ ELangThai, "th_TH" }, // 33
|
||||
{ ELangArabic, "ar_AE" }, // 37
|
||||
{ ELangTagalog, "tl_PH" }, // 39
|
||||
{ ELangBulgarian, "bg_BG" }, // 42
|
||||
{ ELangCatalan, "ca_ES" }, // 44
|
||||
{ ELangCroatian, "hr_HR" }, // 45
|
||||
{ ELangEstonian, "et_EE" }, // 49
|
||||
{ ELangFarsi, "fa_IR" }, // 50
|
||||
{ ELangCanadianFrench, "fr_CA" }, // 51
|
||||
{ ELangGreek, "el_GR" }, // 54
|
||||
{ ELangHebrew, "he_IL" }, // 57
|
||||
{ ELangHindi, "hi_IN" }, // 58
|
||||
{ ELangIndonesian, "id_ID" }, // 59
|
||||
{ ELangKorean, "ko_KO" }, // 65
|
||||
{ ELangLatvian, "lv_LV" }, // 67
|
||||
{ ELangLithuanian, "lt_LT" }, // 68
|
||||
{ ELangMalay, "ms_MY" }, // 70
|
||||
{ ELangNorwegianNynorsk, "nn_NO" }, // 75
|
||||
{ ELangBrazilianPortuguese, "pt_BR" }, // 76
|
||||
{ ELangRomanian, "ro_RO" }, // 78
|
||||
{ ELangSerbian, "sr_RS" }, // 79
|
||||
{ ELangLatinAmericanSpanish,"es_419" }, // 83
|
||||
{ ELangUkrainian, "uk_UA" }, // 93
|
||||
{ ELangUrdu, "ur_PK" }, // 94 - India/Pakistan
|
||||
{ ELangVietnamese, "vi_VN" }, // 96
|
||||
{ ELangEnglish, "en_GB", "en" }, // 1
|
||||
{ ELangFrench, "fr_FR", "fr" }, // 2
|
||||
{ ELangGerman, "de_DE", "de" }, // 3
|
||||
{ ELangSpanish, "es_ES", "es" }, // 4
|
||||
{ ELangItalian, "it_IT", "it" }, // 5
|
||||
{ ELangSwedish, "sv_SE", "sv" }, // 6
|
||||
{ ELangDanish, "da_DK", "da" }, // 7
|
||||
{ ELangNorwegian, "nb_NO", "nb" }, // 8
|
||||
{ ELangFinnish, "fi_FI", "fi" }, // 9
|
||||
{ ELangAmerican, "en_US", "en-US" }, // 10
|
||||
{ ELangPortuguese, "pt_PT", "pt" }, // 13
|
||||
{ ELangTurkish, "tr_TR", "tr" }, // 14
|
||||
{ ELangIcelandic, "is_IS", "is" }, // 15
|
||||
{ ELangRussian, "ru_RU", "ru" }, // 16
|
||||
{ ELangHungarian, "hu_HU", "hu" }, // 17
|
||||
{ ELangDutch, "nl_NL", "nl" }, // 18
|
||||
{ ELangCzech, "cs_CZ", "cs" }, // 25
|
||||
{ ELangSlovak, "sk_SK", "sk" }, // 26
|
||||
{ ELangPolish, "pl_PL", "pl" }, // 27
|
||||
{ ELangSlovenian, "sl_SI", "sl" }, // 28
|
||||
{ ELangTaiwanChinese, "zh_TW", "zh-TW" }, // 29
|
||||
{ ELangHongKongChinese, "zh_HK", "zh-HK" }, // 30
|
||||
{ ELangPrcChinese, "zh_CN", "zh" }, // 31
|
||||
{ ELangJapanese, "ja_JP", "ja" }, // 32
|
||||
{ ELangThai, "th_TH", "th" }, // 33
|
||||
{ ELangArabic, "ar_AE", "ar" }, // 37
|
||||
{ ELangTagalog, "tl_PH", "tl" }, // 39
|
||||
{ ELangBulgarian, "bg_BG", "bg" }, // 42
|
||||
{ ELangCatalan, "ca_ES", "ca" }, // 44
|
||||
{ ELangCroatian, "hr_HR", "hr" }, // 45
|
||||
{ ELangEstonian, "et_EE", "et" }, // 49
|
||||
{ ELangFarsi, "fa_IR", "fa" }, // 50
|
||||
{ ELangCanadianFrench, "fr_CA", "fr-CA" }, // 51
|
||||
{ ELangGreek, "el_GR", "el" }, // 54
|
||||
{ ELangHebrew, "he_IL", "he" }, // 57
|
||||
{ ELangHindi, "hi_IN", "hi" }, // 58
|
||||
{ ELangIndonesian, "id_ID", "id" }, // 59
|
||||
{ ELangKorean, "ko_KO", "ko" }, // 65
|
||||
{ ELangLatvian, "lv_LV", "lv" }, // 67
|
||||
{ ELangLithuanian, "lt_LT", "lt" }, // 68
|
||||
{ ELangMalay, "ms_MY", "ms" }, // 70
|
||||
{ ELangNorwegianNynorsk, "nn_NO", "nn" }, // 75
|
||||
{ ELangBrazilianPortuguese, "pt_BR", "pt-BR" }, // 76
|
||||
{ ELangRomanian, "ro_RO", "ro" }, // 78
|
||||
{ ELangSerbian, "sr_RS", "sr" }, // 79
|
||||
{ ELangLatinAmericanSpanish,"es_419", "es-419" },// 83
|
||||
{ ELangUkrainian, "uk_UA", "uk" }, // 93
|
||||
{ ELangUrdu, "ur_PK", "ur" }, // 94 - India/Pakistan
|
||||
{ ELangVietnamese, "vi_VN", "vi" }, // 96
|
||||
#ifdef __E32LANG_H__
|
||||
// 5.0
|
||||
{ ELangBasque, "eu_ES" }, // 102
|
||||
{ ELangGalician, "gl_ES" }, // 103
|
||||
{ ELangBasque, "eu_ES", "eu" }, // 102
|
||||
{ ELangGalician, "gl_ES", "gl" }, // 103
|
||||
#endif
|
||||
#if !defined(__SERIES60_31__)
|
||||
{ ELangEnglish_Apac, "en" }, // 129
|
||||
{ ELangEnglish_Taiwan, "en_TW" }, // 157 ### Not supported by CLDR
|
||||
{ ELangEnglish_HongKong, "en_HK" }, // 158
|
||||
{ ELangEnglish_Prc, "en_CN" }, // 159 ### Not supported by CLDR
|
||||
{ ELangEnglish_Japan, "en_JP"}, // 160 ### Not supported by CLDR
|
||||
{ ELangEnglish_Thailand, "en_TH" }, // 161 ### Not supported by CLDR
|
||||
{ ELangMalay_Apac, "ms" }, // 326
|
||||
{ ELangEnglish_Apac, "en_GB", "en" }, // 129
|
||||
{ ELangEnglish_Taiwan, "en_TW", "en-TW" }, // 157 ### Not supported by CLDR
|
||||
{ ELangEnglish_HongKong, "en_HK", "en-HK" }, // 158
|
||||
{ ELangEnglish_Prc, "en_CN", "en-CN" }, // 159 ### Not supported by CLDR
|
||||
{ ELangEnglish_Japan, "en_JP", "en" }, // 160 ### Not supported by CLDR
|
||||
{ ELangEnglish_Thailand, "en_TH", "en" }, // 161 ### Not supported by CLDR
|
||||
{ ELangEnglish_India, "en_IN", "en" }, // 230
|
||||
{ ELangMalay_Apac, "ms_MY", "ms" }, // 326
|
||||
#endif
|
||||
{ 327/*ELangIndonesian_Apac*/,"id_ID" } // 327 - appeared in Symbian^3
|
||||
{ 327/*ELangIndonesian_Apac*/, "id_ID", "id" } // 327 - appeared in Symbian^3
|
||||
};
|
||||
|
||||
/*!
|
||||
Returns ISO name corresponding to the Symbian locale code \a sys_fmt.
|
||||
*/
|
||||
QByteArray qt_symbianLocaleName(int code)
|
||||
enum LocaleNameType {
|
||||
ISO,
|
||||
UILanguage
|
||||
};
|
||||
|
||||
QByteArray qt_resolveSymbianLocaleName(int code, LocaleNameType type)
|
||||
{
|
||||
//Number of Symbian to ISO locale mappings
|
||||
static const int symbian_to_iso_count
|
||||
@ -174,8 +178,11 @@ QByteArray qt_symbianLocaleName(int code)
|
||||
if (cmp < 0)
|
||||
return 0;
|
||||
|
||||
if (cmp == 0)
|
||||
return symbian_to_iso_list[0].iso_name;
|
||||
if (cmp == 0) {
|
||||
if (type == ISO)
|
||||
return symbian_to_iso_list[0].iso_name;
|
||||
return symbian_to_iso_list[0].uilanguage;
|
||||
}
|
||||
|
||||
int begin = 0;
|
||||
int end = symbian_to_iso_count;
|
||||
@ -185,17 +192,27 @@ QByteArray qt_symbianLocaleName(int code)
|
||||
|
||||
const symbianToISO *elt = symbian_to_iso_list + mid;
|
||||
int cmp = code - elt->symbian_language;
|
||||
if (cmp < 0)
|
||||
if (cmp < 0) {
|
||||
end = mid;
|
||||
else if (cmp > 0)
|
||||
} else if (cmp > 0) {
|
||||
begin = mid;
|
||||
else
|
||||
return elt->iso_name;
|
||||
} else {
|
||||
if (type == ISO)
|
||||
return elt->iso_name;
|
||||
return elt->uilanguage;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns ISO name corresponding to the Symbian locale code \a sys_fmt.
|
||||
*/
|
||||
QByteArray qt_symbianLocaleName(int code)
|
||||
{
|
||||
return qt_resolveSymbianLocaleName(code, ISO);
|
||||
}
|
||||
|
||||
// order is: normal, abbr, nmode, nmode+abbr
|
||||
static const char *us_locale_dep[] = {
|
||||
@ -822,6 +839,13 @@ QLocale QSystemLocale::fallbackLocale() const
|
||||
return QLocale(locale);
|
||||
}
|
||||
|
||||
static QStringList symbianUILanguages()
|
||||
{
|
||||
TLanguage lang = User::Language();
|
||||
QString s = QLatin1String(qt_resolveSymbianLocaleName(lang, UILanguage));
|
||||
return QStringList(s);
|
||||
}
|
||||
|
||||
QVariant QSystemLocale::query(QueryType type, QVariant in = QVariant()) const
|
||||
{
|
||||
switch(type) {
|
||||
@ -889,6 +913,8 @@ QVariant QSystemLocale::query(QueryType type, QVariant in = QVariant()) const
|
||||
return qt_TDes2QString(TAmPmName(TAmPm(EAm)));
|
||||
case PMText:
|
||||
return qt_TDes2QString(TAmPmName(TAmPm(EPm)));
|
||||
case UILanguages:
|
||||
return QVariant(symbianUILanguages());
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user