diff options
author | bill-auger <mr.j.spam.me@gmail.com> | 2022-05-14 02:06:26 -0400 |
---|---|---|
committer | bill-auger <mr.j.spam.me@gmail.com> | 2022-08-15 02:12:00 -0400 |
commit | a4f6bd343bf9bf5af4060861ce7bd4233cd91c60 (patch) | |
tree | e3f50174908b814d466e70521e2d6c7ea31ee0b5 | |
parent | 47b4e8624020984c534a7d5144a1b0277769b0da (diff) |
consolidate locales and language selections
-rw-r--r-- | chroot-environment.sh | 8 | ||||
-rwxr-xr-x | install.sh | 54 | ||||
-rw-r--r-- | session-common.sh.inc | 12 | ||||
-rwxr-xr-x | session-init.sh | 10 |
4 files changed, 41 insertions, 43 deletions
diff --git a/chroot-environment.sh b/chroot-environment.sh index cdeb1a4..45a1de1 100644 --- a/chroot-environment.sh +++ b/chroot-environment.sh @@ -42,15 +42,13 @@ ln -s /usr/share/zoneinfo/$(GetStateVar 'TIMEZONE') /etc/localtime echo "KEYMAP=$(GetStateVar 'KEYMAP')" > /etc/vconsole.conf # configure locales -locales=$(echo $(GetStateVar 'LOCALES') | sed -e 's/" "/\n/g' -e 's/ /#/g' -e 's/"//g') -for locale in ${locales[@]} -do locale=$(echo ${locale} | sed -e 's/#/ /g') - sed -i -e "s/#${locale}/${locale}/g" /etc/locale.gen +for locale in $(GetStateVar 'LOCALES') +do sed -i "s|^#${locale} |${locale} |" /etc/locale.gen done locale-gen # configure language -echo "LANG=$(GetStateVar 'LANGUAGE')" > /etc/locale.conf +echo "LANG=$(GetStateVar 'LANG')" > /etc/locale.conf # prepare initrd mkinitcpio -p linux-libre @@ -107,9 +107,8 @@ SelectDefaults() SetStateVar 'WMDE' ${DEF_WMDE} SetStateVar 'HOSTNAME' ${DEF_HOSTNAME} SetStateVar 'TIMEZONE' ${DEF_TIMEZONE} - SetStateVar 'KEYMAP' $(GetStateVar 'XKBMAP' ${DEF_KEYMAP} ) - SetStateVar 'LOCALES' $(GetStateVar 'LANG' ${DEF_LOCALE} ) - SetStateVar 'LANGUAGE' $(GetStateVar 'LANG' ${DEF_LANGUAGE}) + SetStateVar 'KEYMAP' $(GetStateVar 'XKBMAP') + SetStateVar 'LOCALES' $(GetStateVar 'LANG' ) fi } @@ -235,11 +234,12 @@ SelectEnv() { # MOCK_SELECTENV ; return 0 ; - [[ -z "$(GetStateVar 'HOSTNAME')" || -z "$(GetStateVar 'TIMEZONE')" || \ - -z "$(GetStateVar 'KEYMAP' )" || -z "$(GetStateVar 'LOCALES' )" || \ - -z "$(GetStateVar 'LANGUAGE')" ]] || return 0 + # checks to skip this stage per SelectDefaults() + [[ -z "$(GetStateVar 'HOSTNAME')" || -z "$(GetStateVar 'TIMEZONE')" ]] || \ + [[ -z "$(GetStateVar 'KEYMAP' )" || -z "$(GetStateVar 'LOCALES' )" ]] || return 0 local curr_msg="${TR[option_current-${Lang}]}" + local host_lang=$(GetStateVar 'LANG') # prompt for hostname, if not set per SelectDefaults() local hostname='' @@ -274,8 +274,8 @@ SelectEnv() local keymaps=() for keymap in $(sort -u "${THIS_DIR}"/KEYMAPS_VT) do if [[ ${keymap} =~ ^$(GetStateVar 'XKBMAP' 'us') ]] - then keymaps=( "${keymap}" "${keymap} ${curr_msg}" "${keymaps[@]}" ) - else keymaps+=( "${keymap}" "${keymap}" ) + then keymaps=( "${keymap}" "${curr_msg}" "${keymaps[@]}" ) + else keymaps+=( "${keymap}" '' ) fi done keymap=$( WizardDlg "${TR[dlg_env-${Lang}]}" \ @@ -283,36 +283,38 @@ SelectEnv() "${keymaps[@]}" ) [[ -n "${keymap}" ]] && SetStateVar 'KEYMAP' ${keymap} || exit - # prompt for locale - local all_locales=$( sed -e '1,23d' -e 's/#//g' -e 's/ /#/g' -e 's/..$//' /etc/locale.gen ) - local locales=() - for locale in ${all_locales} - do locale=$(echo ${locale} | sed -e 's/#/ /g') - if [[ ${locale} =~ ^$(GetStateVar 'LANG' 'en_US') ]] - then locales=( "${locale}" "${locale}" 'on' "${locales[@]}" ) - else locales+=( "${locale}" "${locale}" 'off' ) + # prompt for locales + local all_locales=() + local locale + local display_locales=() + local locales + mapfile -t all_locales < <(sed '1,23d ; s|^#||' /etc/locale.gen) + for locale in "${all_locales[@]}" + do if [[ ${locale} =~ ^${host_lang} ]] + then display_locales=( ${locale} 'on' "${display_locales[@]}" ) + else display_locales+=( ${locale} 'off' ) fi done locales=$( WizardDlg "${TR[dlg_env-${Lang}]}" \ --checklist "${TR[locales-${Lang}]}" 20 70 50 \ - "${locales[@]}" ) + ${display_locales[@]} ) [[ -n "${locales}" ]] && SetStateVar 'LOCALES' "${locales}" || exit # prompt for language local language - local _languages=() local languages=() - mapfile -t _languages < <(sort -u "${THIS_DIR}"/LANGUAGES) - for language in "${_languages[@]}" - do if [[ ${language} =~ ^$(GetStateVar 'LANG' 'en_US.UTF-8') ]] - then languages=( "${language% *}" "${language#*\ } ${curr_msg}" "${languages[@]}" ) - else languages+=( "${language% *}" "${language#*\ }" ) + for language in ${locales} + do if [[ ${language} == ${host_lang} ]] + then languages=( "${language}" "${curr_msg}" "${languages[@]}" ) + else languages+=( "${language}" '' ) fi done - language=$( WizardDlg "${TR[dlg_env-${Lang}]}" \ + language=$( DIALOGOPTS="--default-item ${host_lang}" \ + WizardDlg "${TR[dlg_env-${Lang}]}" \ --menu "${TR[language-${Lang}]}" 20 70 50 \ + 'POSIX' '' \ "${languages[@]}" ) - [[ -n "${language}" ]] && SetStateVar 'LANGUAGE' ${language} || exit + [[ -n "${language}" ]] && SetStateVar 'LANG' ${language} || exit } SelectPartition() @@ -489,7 +491,7 @@ ConfigChroot() [[ -n "$(GetStateVar 'TIMEZONE' )" ]] [[ -n "$(GetStateVar 'KEYMAP' )" ]] [[ -n "$(GetStateVar 'LOCALES' )" ]] - [[ -n "$(GetStateVar 'LANGUAGE' )" ]] + [[ -n "$(GetStateVar 'LANG' )" ]] [[ -n "$(GetStateVar 'BOOT' )" ]] [[ -n "$(GetStateVar 'DEVICE' )" ]] [[ -n "$(GetStateVar 'ROOT_PASS' )" ]] diff --git a/session-common.sh.inc b/session-common.sh.inc index ab7379d..2e9880c 100644 --- a/session-common.sh.inc +++ b/session-common.sh.inc @@ -23,8 +23,7 @@ readonly THIS_DIR="$(cd $(dirname ${BASH_SOURCE[0]}) ; pwd)" readonly DEF_KEYMAP='us' -readonly DEF_LOCALE='en_US' -readonly DEF_LANGUAGE='en_US.UTF-8' +readonly DEF_LANG='en_US.UTF-8' readonly DEF_TRKEY='en' readonly DEF_INSTALL='offline' readonly DEF_PKG_SET='standard' @@ -303,21 +302,22 @@ LogError() # (source_file func_name line_n) ## debugging helpers ## +MOCK_INIT() { SetStateVar 'XKBMAP' ${DEF_KEYMAP} ; SetStateVar 'LANG' ${DEF_LANG} ; SetStateVar 'TR_KEY' ${DEF_TRKEY} ; SetStateVar 'INSTALL' ${DEF_INSTALL} ; } MOCK_INITKEYRING() { SetStateVar 'KEYRING' 'ready' ; } -MOCK_SELECTDEFAULTS() { SetStateVar 'INSTALL' ${DEF_INSTALL} ; SetStateVar 'BASE' ${DEF_PKG_SET} ; SetStateVar 'INIT' ${DEF_INIT} ; SetStateVar 'WMDE' ${DEF_WMDE} ; SetStateVar 'HOSTNAME' ${DEF_HOSTNAME} ; SetStateVar 'TIMEZONE' ${DEF_TIMEZONE} ; SetStateVar 'KEYMAP' $(GetStateVar 'XKBMAP' ${DEF_KEYMAP} ) ; SetStateVar 'LOCALES' $(GetStateVar 'LANG' ${DEF_LOCALE} ) ; SetStateVar 'LANGUAGE' $(GetStateVar 'LANG' ${DEF_LANGUAGE}) ; } +MOCK_SELECTDEFAULTS() { SetStateVar 'INSTALL' ${DEF_INSTALL} ; SetStateVar 'BASE' ${DEF_PKG_SET} ; SetStateVar 'INIT' ${DEF_INIT} ; SetStateVar 'WMDE' ${DEF_WMDE} ; SetStateVar 'HOSTNAME' ${DEF_HOSTNAME} ; SetStateVar 'TIMEZONE' ${DEF_TIMEZONE} ; SetStateVar 'KEYMAP' $(GetStateVar 'XKBMAP') ; SetStateVar 'LOCALES' $(GetStateVar 'LANG') ; } MOCK_SELECTDEFAULTS_NO() { : ; } MOCK_SELECTLOGINS() { SetStateVar 'ROOT_PASS' ROOT_PASS ; MOCK_SELECTLOGINS_USER ; } MOCK_SELECTLOGINS_USER() { SetStateVar 'USER_LOGIN' USER_LOGIN ; SetStateVar 'USER_PASS' USER_PASS ; } MOCK_SELECTBASE() { SetStateVar 'INSTALL' ${DEF_INSTALL} ; SetStateVar 'BASE' ${DEF_PKG_SET} ; SetStateVar 'INIT' ${DEF_INIT} ; } MOCK_SELECTBOOT() { SetStateVar 'BOOT' 'grub' ; } MOCK_SELECTWMDE() { [[ -n "$(GetStateVar 'WMDE')" ]] || SetStateVar 'WMDE' 'cli' ; } -MOCK_SELECTENV() { SetStateVar 'HOSTNAME' ${DEF_HOSTNAME} ; SetStateVar 'TIMEZONE' ${DEF_TIMEZONE} ; SetStateVar 'KEYMAP' $(GetStateVar 'XKBMAP' ${DEF_KEYMAP}) ; SetStateVar 'LOCALES' $(GetStateVar 'LANG' ${DEF_LOCALE}) ; SetStateVar 'LANGUAGE' $(GetStateVar 'LANG' ${DEF_LANGUAGE}) ; } +MOCK_SELECTENV() { SetStateVar 'HOSTNAME' ${DEF_HOSTNAME} ; SetStateVar 'TIMEZONE' ${DEF_TIMEZONE} ; SetStateVar 'KEYMAP' $(GetStateVar 'XKBMAP') ; SetStateVar 'LOCALES' $(GetStateVar 'LANG') ; } ## translations for user-facing strings ## source "${THIS_DIR}"/translations.sh.inc -SetLang() { Lang=$( (( ${TRANSLATIONS[$1]} )) && echo $1 || echo 'en' ) ; } +SetLang() { Lang=$( (( ${TRANSLATIONS[$1]} )) && echo $1 || echo ${DEF_TRKEY} ) ; } -Lang='' ; SetLang $(GetStateVar 'TR_KEY' 'en') ; +Lang='' ; SetLang $(GetStateVar 'TR_KEY' ${DEF_TRKEY}) ; diff --git a/session-init.sh b/session-init.sh index 2cdf42f..c9a0dca 100755 --- a/session-init.sh +++ b/session-init.sh @@ -40,8 +40,6 @@ readonly N_ITEMS=10 readonly LANG_TITLE="System language selection" readonly LANG_PROMPT="Select your language:" -readonly LANG_DEFAULT='en_US.UTF-8' -readonly KEYMAP_DEFAULT='us' readonly -a LANGUAGES=( $(sort -u "${THIS_DIR}"/LANGUAGES) ) readonly -a KEYMAPS=( $(sort -u "${THIS_DIR}"/KEYMAPS_X) ) readonly -a ALL_SESSIONS=( 'live' "Live desktop" \ @@ -59,8 +57,8 @@ esac Language=$(GetStateVar 'LANG' '_UNDEFINED_') if [[ "${Language}" == '_UNDEFINED_' ]] -then Language=$( InitDlg "$LANG_TITLE" "$LANG_PROMPT" ${LANG_DEFAULT} "${LANGUAGES[@]}" ) - [[ "${Language}" == "" ]] && Language=${LANG_DEFAULT} +then Language=$( InitDlg "$LANG_TITLE" "$LANG_PROMPT" ${DEF_LANG} "${LANGUAGES[@]}" ) + [[ "${Language}" == "" ]] && Language=${DEF_LANG} logger "$0: selected language='${Language}'" @@ -78,8 +76,8 @@ fi Keymap=$(GetStateVar 'XKBMAP' '_UNDEFINED_') if [[ "${Keymap}" == '_UNDEFINED_' ]] -then Keymap=$( InitDlg "${TR[dlg_keymap-${Lang}]}" "${TR[keymap-${Lang}]}" ${KEYMAP_DEFAULT} "${KEYMAPS[@]}" ) - [[ "${Keymap}" == "" ]] && Keymap=${KEYMAP_DEFAULT} +then Keymap=$( InitDlg "${TR[dlg_keymap-${Lang}]}" "${TR[keymap-${Lang}]}" ${DEF_KEYMAP} "${KEYMAPS[@]}" ) + [[ "${Keymap}" == "" ]] && Keymap=${DEF_KEYMAP} logger "$0: selected keymap='${Keymap}'" |