diff --git a/readme.md b/readme.md index c028469..f52cdc3 100644 --- a/readme.md +++ b/readme.md @@ -221,7 +221,6 @@ Handle project workflows in a unified way: #### Shell -* command to echo & run * comment * handle errors * packages @@ -236,10 +235,7 @@ Handle project workflows in a unified way: * opensuse * opensuse * disable & enable https -* locales - * persist - * restrict LC_* variables set for alpine - * test LC_* variables +* persist locales * test #### Shell → Python diff --git a/spcd/bootstrap.sh b/spcd/bootstrap.sh index c7dd25d..3b510f8 100644 --- a/spcd/bootstrap.sh +++ b/spcd/bootstrap.sh @@ -377,6 +377,81 @@ spcd_txt_get() { esac } +spcd_txt_locale() { + locale + spcd_split + local value name + if [ -n "${1}" ]; then + value="${1}" + else + value="${_SPCD_TXT_LOCALE_DEFAULT}" + fi + value="${value}.${_SPCD_TXT_CHARSET}" + set -- \ + "LANG" \ + "LC_CTYPE" \ + "LC_NUMERIC" \ + "LC_TIME" \ + "LC_COLLATE" \ + "LC_MONETARY" \ + "LC_MESSAGES" \ + "LC_PAPER" \ + "LC_NAME" \ + "LC_ADDRESS" \ + "LC_TELEPHONE" \ + "LC_MEASUREMENT" \ + "LC_IDENTIFICATION" + for name in "${@}"; do + export "${name}=${value}" + done + spcd_split + locale +} + +spcd_txt_locales_echo() { + case "${1}" in + "LANGUAGE") spcd_os_printenv "LANGUAGE" ;; + *) locale -a ;; + esac +} + +spcd_txt_locales() { + set -- \ + "${SPCD_TXT_LOCALE_ENGLISH}" \ + "${SPCD_TXT_LOCALE_FRENCH}" + local language locale text + spcd_txt_locales_echo + spcd_split + for locale in "${@}"; do + case "${1}" in + "glibc-langpack-") + language="$(echo "${locale}" | cut -d _ -f 1)" + spcd_install_package "glibc-langpack-${language}" + ;; + "LANGUAGE") + if [ -n "${text}" ]; then + text="${text}:${locale}" + else + text="${locale}" + fi + ;; + "locale.gen") + text="${text}\ +${locale}.${_SPCD_TXT_CHARSET} ${_SPCD_TXT_CHARSET} +" + ;; + *) ;; + esac + done + case "${1}" in + "LANGUAGE") export LANGUAGE="${text}" ;; + "locale.gen") spcd_os_write "/etc/locale.gen" "${text}" ;; + *) ;; + esac + spcd_split + spcd_txt_locales_echo +} + # ╭──────╮ # │ step │ # ╰──────╯ @@ -404,7 +479,7 @@ SPCD_PM_ZYPPER="zypper" # │ step │ environment │ # ╰──────┴─────────────╯ -spcd_step__environment_print() { +spcd_step__environment_defaults_print() { spcd_ca "list" spcd_dns "list" set -- \ @@ -861,128 +936,6 @@ spcd_query_package() { esac } -spcd_txt_locale() { - local action="${1}" - local chosen="${2}" - set -- \ - "LANG" \ - "LC_CTYPE" \ - "LC_NUMERIC" \ - "LC_TIME" \ - "LC_COLLATE" \ - "LC_MONETARY" \ - "LC_MESSAGES" - case "${SPCD_OS_ID}" in - "${SPCD_OS_ALPINE}") ;; - *) - set -- \ - "${@}" \ - "LANGUAGE" \ - "LC_PAPER" \ - "LC_NAME" \ - "LC_ADDRESS" \ - "LC_TELEPHONE" \ - "LC_MEASUREMENT" \ - "LC_IDENTIFICATION" - ;; - esac - local name - case "${action}" in - "list") - if ! locale; then - for name in "${@}"; do - spcd_os_printenv "${name}" - done - fi - ;; - "set") - spcd_txt_locale "list" - spcd_split - local locale long - if [ -n "${chosen}" ]; then - locale="${chosen}" - else - locale="${_SPCD_TXT_LOCALE_DEFAULT}" - fi - long="${locale}.${_SPCD_TXT_CHARSET}" - for name in "${@}"; do - if [ "${name}" != "LANGUAGE" ]; then - export "${name}=${long}" - else - export "${name}=$(spcd_txt_locales language "${chosen}")" - fi - done - spcd_split - spcd_txt_locale "list" - ;; - *) ;; - esac -} - -spcd_txt_locales() { - local action="${1}" - local chosen="${2}" - set -- \ - "${SPCD_TXT_LOCALE_ENGLISH}" \ - "${SPCD_TXT_LOCALE_FRENCH}" - local name - case "${action}" in - "install") - spcd_txt_locales "list" - spcd_split - case "${SPCD_PM}" in - "${SPCD_PM_APK}") - spcd_install_package "musl-locales" - export MUSL_LOCPATH="/usr/share/i18n/locales/musl" - ;; - "${SPCD_PM_APT}") - local text - for name in "${@}"; do - text="${text}\ -${name}.${_SPCD_TXT_CHARSET} ${_SPCD_TXT_CHARSET} -" - done - spcd_os_write "/etc/locale.gen" "${text}" - spcd_install_package "locales" - ;; - "${SPCD_PM_DNF}") - local language - for name in "${@}"; do - language="$(echo "${name}" | cut -d _ -f 1)" - spcd_install_package "glibc-langpack-${language}" - done - ;; - "${SPCD_PM_PACMAN}") spcd_install_package "glibc-locales" ;; - "${SPCD_PM_ZYPPER}") spcd_install_package "glibc-locale" ;; - *) ;; - esac - spcd_split - spcd_txt_locales "list" - ;; - "language") - local text - if [ -n "${chosen}" ]; then - text="${chosen}" - fi - for name in "${@}"; do - if [ "${name}" != "${chosen}" ]; then - if [ -n "${text}" ]; then - text="${text}:${name}" - else - text="${name}" - fi - fi - done - ;; - "list") - if ! locale --all-locales; then - echo "No locales yet!" - fi - ;; - *) ;; - esac -} - # ╭──────┬─────╮ # │ step │ dns │ # ╰──────┴─────╯ @@ -1225,17 +1178,6 @@ spcd_step__packages_install_tools() { esac } -spcd_step__packages_install_locales() { - spcd_step_in "Locales" - spcd_step "Install" - spcd_txt_locales "install" - spcd_step "Set" - spcd_txt_locale "set" "${SPCD_TXT_LOCALE}" - spcd_step "Test" - date - spcd_step_out -} - # ╭──────┬────╮ # │ step │ ca │ # ╰──────┴────╯ @@ -1299,6 +1241,25 @@ spcd_step__packages_verify_https() { fi } +spcd_step__packages_install_locales() { + spcd_step "Install locales" + case "${SPCD_PM}" in + "${SPCD_PM_APK}") spcd_install_package "musl-locales" ;; + "${SPCD_PM_APT}") + spcd_txt_locales "locale.gen" + spcd_install_package "locales" + ;; + "${SPCD_PM_DNF}") + spcd_txt_locales "glibc-langpack-" + ;; + "${SPCD_PM_PACMAN}") spcd_install_package "glibc-locales" ;; + "${SPCD_PM_ZYPPER}") spcd_install_package "glibc-locale" ;; + *) ;; + esac + spcd_txt_locales "LANGUAGE" + spcd_txt_locale "${SPCD_TXT_LOCALE}" +} + spcd_step__packages_upgrade_system() { spcd_step "Upgrade system" case "${SPCD_PM}" in @@ -1498,13 +1459,15 @@ ${SPCD_PYTHON_ALIAS} / ${name}" spcd_main() { # environment + spcd_txt_locale + # spcd_step_in "Environment" spcd_step_in "Defaults" spcd_step "Print defined" - spcd_step__environment_print + spcd_step__environment_defaults_print spcd_step__environment_defaults_set spcd_step "Print effective" - spcd_step__environment_print + spcd_step__environment_defaults_print spcd_step_out spcd_step__environment_set_variables spcd_step__environment_list_workspace @@ -1518,7 +1481,6 @@ spcd_main() { spcd_step__packages_trust_https spcd_step__packages_update_catalog spcd_step__packages_install_tools - spcd_step__packages_install_locales spcd_step_out # ca spcd_step_in "CA" @@ -1529,6 +1491,7 @@ spcd_main() { # packages spcd_step_in "Packages" spcd_step__packages_verify_https + spcd_step__packages_install_locales spcd_step__packages_update_catalog spcd_step__packages_upgrade_system spcd_step__packages_install_dos2unix