diff --git a/pmb/config/__init__.py b/pmb/config/__init__.py index 6a08c546..75da5768 100644 --- a/pmb/config/__init__.py +++ b/pmb/config/__init__.py @@ -167,26 +167,6 @@ if "NO_COLOR" in os.environ: for style in styles.keys(): styles[style] = "" - -# List of available locales taken from musl-locales package; see -# https://pkgs.alpinelinux.org/contents?name=musl-locales -locales = [ - "C.UTF-8", - "ch_DE.UTF-8", - "de_CH.UTF-8", - "de_DE.UTF-8", - "en_GB.UTF-8", - "en_US.UTF-8", - "es_ES.UTF-8", - "fr_FR.UTF-8", - "it_IT.UTF-8", - "nb_NO.UTF-8", - "nl_NL.UTF-8", - "pt_BR.UTF-8", - "ru_RU.UTF-8", - "sv_SE.UTF-8" -] - # Supported filesystems and their fstools packages filesystems = {"btrfs": "btrfs-progs", "ext2": "e2fsprogs", diff --git a/pmb/config/init.py b/pmb/config/init.py index 56386a34..37183c1f 100644 --- a/pmb/config/init.py +++ b/pmb/config/init.py @@ -620,15 +620,36 @@ def ask_build_pkgs_on_install(args): default=args.build_pkgs_on_install) +def get_locales(): + ret = [] + list_path = f"{pmb.config.pmb_src}/pmb/data/locales" + with open(list_path, "r") as handle: + for line in handle: + ret += [line.rstrip()] + return ret + + def ask_for_locale(args): - locales = pmb.config.locales - logging.info(f"Available locales ({len(locales)}): {', '.join(locales)}") - return pmb.helpers.cli.ask("Choose default locale for installation", - choices=None, - default=args.locale, - lowercase_answer=False, - validation_regex="|".join(locales), - complete=locales) + locales = get_locales() + logging.info("Choose your preferred locale, like e.g. en_US. Only UTF-8" + " is supported, it gets appended automatically. Use" + " tab-completion if needed.") + + while True: + ret = pmb.helpers.cli.ask("Locale", + choices=None, + default=args.locale.replace(".UTF-8", ""), + lowercase_answer=False, + complete=locales) + ret = ret.replace(".UTF-8", "") + if ret not in locales: + logging.info("WARNING: this locale is not in the list of known" + " valid locales.") + if pmb.helpers.cli.ask() != "y": + # Ask again + continue + + return f"{ret}.UTF-8" def frontend(args): diff --git a/pmb/data/locales b/pmb/data/locales new file mode 100644 index 00000000..8573d76b --- /dev/null +++ b/pmb/data/locales @@ -0,0 +1,304 @@ +C +a_DJ +aa_ER +aa_ET +af_ZA +agr_PE +ak_GH +am_ET +an_ES +anp_IN +ar_AE +ar_BH +ar_DZ +ar_EG +ar_IN +ar_IQ +ar_JO +ar_KW +ar_LB +ar_LY +ar_MA +ar_OM +ar_QA +ar_SA +ar_SD +ar_SS +ar_SY +ar_TN +ar_YE +as_IN +ast_ES +ayc_PE +az_AZ +az_IR +be_BY +bem_ZM +ber_DZ +ber_MA +bg_BG +bhb_IN +bho_IN +bho_NP +bi_VU +bn_BD +bn_IN +bo_CN +bo_IN +br_FR +brx_IN +bs_BA +byn_ER +ca_AD +ca_ES +ca_FR +ca_IT +ce_RU +ch_DE +chr_US +cmn_TW +crh_UA +cs_CZ +csb_PL +cv_RU +cy_GB +da_DK +de_AT +de_BE +de_CH +de_DE +de_IT +de_LI +de_LU +doi_IN +dsb_DE +dv_MV +dz_BT +el_CY +el_GR +en_AG +en_AU +en_BW +en_CA +en_DK +en_GB +en_HK +en_IE +en_IL +en_IN +en_NG +en_NZ +en_PH +en_SC +en_SG +en_US +en_ZA +en_ZM +en_ZW +eo +es_AR +es_BO +es_CL +es_CO +es_CR +es_CU +es_DO +es_EC +es_ES +es_GT +es_HN +es_MX +es_NI +es_PA +es_PE +es_PR +es_PY +es_SV +es_US +es_UY +es_VE +et_EE +eu_ES +fa_IR +ff_SN +fi_FI +fil_PH +fo_FO +fr_BE +fr_CA +fr_CH +fr_FR +fr_LU +fur_IT +fy_DE +fy_NL +ga_IE +gd_GB +gez_ER +gez_ET +gl_ES +gu_IN +gv_GB +ha_NG +hak_TW +he_IL +hi_IN +hif_FJ +hne_IN +hr_HR +hsb_DE +ht_HT +hu_HU +hy_AM +ia_FR +id_ID +ig_NG +ik_CA +is_IS +it_CH +it_IT +iu_CA +ja_JP +ka_GE +kab_DZ +kk_KZ +kl_GL +km_KH +kn_IN +ko_KR +kok_IN +ks_IN +ku_TR +kw_GB +ky_KG +lb_LU +lg_UG +li_BE +li_NL +lij_IT +ln_CD +lo_LA +lt_LT +lv_LV +lzh_TW +mag_IN +mai_IN +mai_NP +mfe_MU +mg_MG +mhr_RU +mi_NZ +miq_NI +mjw_IN +mk_MK +ml_IN +mn_MN +mni_IN +mnw_MM +mr_IN +ms_MY +mt_MT +my_MM +nan_TW +nb_NO +nds_DE +nds_NL +ne_NP +nhn_MX +niu_NU +niu_NZ +nl_AW +nl_BE +nl_NL +nn_NO +nr_ZA +nso_ZA +oc_FR +om_ET +om_KE +or_IN +os_RU +pa_IN +pa_PK +pap_AW +pap_CW +pl_PL +ps_AF +pt_BR +pt_PT +quz_PE +raj_IN +ro_RO +ru_RU +ru_UA +rw_RW +sa_IN +sah_RU +sat_IN +sc_IT +sd_IN +se_NO +sgs_LT +shn_MM +shs_CA +si_LK +sid_ET +sk_SK +sl_SI +sm_WS +so_DJ +so_ET +so_KE +so_SO +sq_AL +sq_MK +sr_ME +sr_RS +ss_ZA +st_ZA +sv_FI +sv_SE +sw_KE +sw_TZ +szl_PL +ta_IN +ta_LK +tcy_IN +te_IN +tg_TJ +th_TH +the_NP +ti_ER +ti_ET +tig_ER +tk_TM +tl_PH +tn_ZA +to_TO +tpi_PG +tr_CY +tr_TR +ts_ZA +tt_RU +ug_CN +uk_UA +unm_US +ur_IN +ur_PK +uz_UZ +ve_ZA +vi_VN +wa_BE +wae_CH +wal_ET +wo_SN +xh_ZA +yi_US +yo_NG +yue_HK +yuw_PG +zh_CN +zh_HK +zh_SG +zh_TW +zu_ZA