Skip to content

kcm_regionandlang: filter out invalid glibc locales from QLocales

BUG: 403580

We allow user to choose any QLocale as LC_*, but some QLocales are invalid in glibc. Filter out invalid glibc locales, so programs using glibc locales won't complain about invalid locales.

Because now the LocaleListModel also need to access the glibc locales, this MR also split the glibc locale map related code into a separate singleton class. This should make the codebase easier to understand, and we don't have to pass the KCMRegionAndLang around.

Here is the list of locales being filtered out after the change (on ArchLinux)

"af_NA"
"agq_CM"
"bss_CM"
"sq_XK"
"ar_TD"
"ar_KM"
"ar_DJ"
"ar_ER"
"ar_IL"
"ar_MR"
"ar_PS"
"ar_SO"
"ar_EH"
"ar_001"
"asa_TZ"
"cch_NG"
"az_IQ"
"az_TR"
"ksf_CM"
"bm_ML"
"bm_ML"
"bas_CM"
"ba_RU"
"bez_TZ"
"yue_CN"
"yue_CN"
"ceb_PH"
"tzm_MA"
"ckb_IR"
"ccp_BD"
"ccp_IN"
"cic_US"
"cgg_UG"
"zh_MO"
"zh_MY"
"zh_MO"
"zh_MY"
"cu_RU"
"ksh_DE"
"co_FR"
"hr_BA"
"da_GL"
"dua_CM"
"nl_BQ"
"nl_CW"
"nl_SX"
"nl_SR"
"ebu_KE"
"en_AS"
"en_AI"
"en_AT"
"en_BS"
"en_BB"
"en_BE"
"en_BZ"
"en_BM"
"en_IO"
"en_VG"
"en_BI"
"en_CM"
"en_KY"
"en_CX"
"en_CC"
"en_CK"
"en_CY"
"en_DG"
"en_DM"
"en_ER"
"en_SZ"
"en_150"
"en_FK"
"en_FJ"
"en_FI"
"en_GM"
"en_DE"
"en_GH"
"en_GI"
"en_GD"
"en_GU"
"en_GG"
"en_GY"
"en_ID"
"en_IM"
"en_JM"
"en_JE"
"en_KE"
"en_KI"
"en_LS"
"en_LR"
"en_MO"
"en_MG"
"en_MW"
"en_MY"
"en_MV"
"en_MT"
"en_MH"
"en_MU"
"en_FM"
"en_MS"
"en_NA"
"en_NR"
"en_NL"
"en_NU"
"en_NF"
"en_MP"
"en_PK"
"en_PW"
"en_PG"
"en_PN"
"en_PR"
"en_RW"
"en_SH"
"en_KN"
"en_LC"
"en_VC"
"en_WS"
"en_SL"
"en_SX"
"en_SI"
"en_SB"
"en_SS"
"en_SD"
"en_SE"
"en_CH"
"en_TZ"
"en_TK"
"en_TO"
"en_TT"
"en_TC"
"en_TV"
"en_UG"
"en_AE"
"en_UM"
"en_VI"
"en_VU"
"en_001"
"myv_RU"
"eo_001"
"ee_GH"
"ee_TG"
"ewo_CM"
"fo_DK"
"fr_DZ"
"fr_BJ"
"fr_BF"
"fr_BI"
"fr_CM"
"fr_CF"
"fr_TD"
"fr_KM"
"fr_CG"
"fr_CD"
"fr_DJ"
"fr_GQ"
"fr_GF"
"fr_PF"
"fr_GA"
"fr_GP"
"fr_GN"
"fr_HT"
"fr_CI"
"fr_MG"
"fr_ML"
"fr_MQ"
"fr_MR"
"fr_MU"
"fr_YT"
"fr_MC"
"fr_MA"
"fr_NC"
"fr_NE"
"fr_RE"
"fr_RW"
"fr_BL"
"fr_MF"
"fr_PM"
"fr_SN"
"fr_SC"
"fr_SY"
"fr_TG"
"fr_TN"
"fr_VU"
"fr_WF"
"ff_BF"
"ff_CM"
"ff_GM"
"ff_GH"
"ff_GW"
"ff_GN"
"ff_LR"
"ff_MR"
"ff_NG"
"ff_NE"
"ff_SL"
"ff_BF"
"ff_CM"
"ff_GM"
"ff_GH"
"ff_GW"
"ff_GN"
"ff_LR"
"ff_MR"
"ff_NG"
"ff_NE"
"ff_SL"
"gaa_GH"
"gn_PY"
"guz_KE"
"ha_SD"
"ha_GH"
"ha_NE"
"haw_US"
"io_001"
"smn_FI"
"ia_001"
"ie_EE"
"ga_GB"
"it_SM"
"it_VA"
"jv_ID"
"kaj_NG"
"dyo_SN"
"kea_CV"
"kkj_CM"
"kln_KE"
"kam_KE"
"kk_CN"
"ken_CM"
"quc_GT"
"ki_KE"
"ko_CN"
"ko_KP"
"ses_ML"
"khq_ML"
"kpe_LR"
"kpe_GN"
"nmg_CM"
"lkt_US"
"lag_TZ"
"la_VA"
"ln_AO"
"ln_CF"
"ln_CG"
"jbo_001"
"lu_CD"
"smj_SE"
"smj_NO"
"luo_KE"
"luy_KE"
"jmc_TZ"
"mgh_MZ"
"kde_TZ"
"ms_BN"
"ms_BN"
"ms_ID"
"ms_SG"
"gv_IM"
"arn_CL"
"mas_KE"
"mas_TZ"
"mzn_IR"
"mer_KE"
"mgo_CM"
"moh_CA"
"mn_CN"
"mua_CM"
"mus_US"
"naq_NA"
"nv_US"
"ne_IN"
"nnh_CM"
"jgo_CM"
"pcm_NG"
"nqo_GN"
"lrc_IR"
"lrc_IQ"
"se_FI"
"se_SE"
"nd_ZW"
"nb_SJ"
"nus_SS"
"ny_MW"
"nyn_UG"
"oc_ES"
"osa_US"
"os_GE"
"ps_PK"
"fa_AF"
"pt_AO"
"pt_CV"
"pt_GQ"
"pt_GW"
"pt_LU"
"pt_MO"
"pt_MZ"
"pt_ST"
"pt_CH"
"pt_TL"
"prg_PL"
"qu_PE"
"qu_BO"
"qu_EC"
"ro_MD"
"rm_CH"
"rof_TZ"
"rn_BI"
"ru_BY"
"ru_KZ"
"ru_KG"
"ru_MD"
"rwk_TZ"
"saq_KE"
"sg_CF"
"sbp_TZ"
"seh_MZ"
"sr_BA"
"sr_XK"
"sr_BA"
"sr_XK"
"ksb_TZ"
"sn_ZW"
"ii_CN"
"sd_PK"
"sms_FI"
"xog_UG"
"sdh_IR"
"sdh_IQ"
"sma_SE"
"sma_NO"
"st_LS"
"es_BZ"
"es_BR"
"es_IC"
"es_EA"
"es_GQ"
"es_419"
"es_PH"
"sw_CD"
"sw_UG"
"ss_SZ"
"sv_AX"
"gsw_CH"
"gsw_FR"
"gsw_LI"
"syr_IQ"
"syr_SY"
"shi_MA"
"shi_MA"
"blt_VN"
"dav_KE"
"ta_MY"
"ta_SG"
"trv_TW"
"twq_NE"
"teo_UG"
"teo_KE"
"tn_BW"
"kcg_NG"
"uz_AF"
"vai_LR"
"vai_LR"
"vo_001"
"vun_TZ"
"wbp_AU"
"bgn_PK"
"bgn_AF"
"bgn_IR"
"bgn_OM"
"bgn_AE"
"yav_CM"
"yi_UA"
"yo_BJ"
"dje_NE"
"za_CN"
"kgp_BR"
"yrl_BR"
"yrl_CO"
"yrl_VE"
"bgc_IN"
"frr_DE"
"tok_001"
"pis_SB"
"ann_NG"
"bal_PK"
"bal_PK"
"rhg_MM"
"rhg_BD"
"trw_PK"
"blo_BJ"
"xnr_IN"
"vec_IT"
"kxv_IN"
"kxv_IN"
"kxv_IN"
"kxv_IN"
"kaa_UZ"
"kaa_UZ"
"csw_CA"
Edited by Han Young

Merge request reports

Loading