# AX-ZSH: Alex' Modular ZSH Configuration # 12_locale.zprofile: Initialize locale settings # This is only relevant for interactive shells (because the user has to # manually enter data when the validation fails): [[ -z "$PS1" ]] && return 0 # Make sure that LANG and LC_MESSAGES are either unset or set to something sane, # that is, follow the "xx_ZZ.*" syntax. fix_locale() { local encoding locale locale="$1:r" encoding="$1:e" if [[ -z "$1" || "$locale" =~ '.*_.*' || ${#locale%%_*} -ne 2 ]]; then echo "$1" else locale="${locale:0:2}_${locale:0:2:u}" [[ -n "$encoding" ]] && locale="$locale.$encoding" echo "$locale" fi } [[ -n "$LANG" ]] && LANG=$(fix_locale "$LANG") [[ -n "$LC_MESSAGES" ]] && LANG=$(fix_locale "$LC_MESSAGES") unfunction fix_locale # Validate the locale(7) settings in interactive shells and try to mimic the # tset(1) behaviour. while true; do lc_messages=$(locale 2>/dev/null | fgrep LC_MESSAGES | cut -d'=' -f2) [[ "$lc_messages" = '"C"' && "$LANG" != 'C' && "$LC_ALL" != 'C' ]] && lc_messages=$LANG lc_messages=$lc_messages:gs/\"// locale=$lc_messages:r [[ ( "$OSTYPE" =~ '^linux-gnu' || "$OSTYPE" = 'cygwin') && $locale != 'C' ]] \ && encoding=$lc_messages:e:l:gs/-// \ || encoding=$lc_messages:e [[ -n "$encoding" ]] && locale="$locale.$encoding" [[ -z "$LANG$LANGUAGE$LC_ALL$LC_MESSAGES" ]] && unset lc_messages if [[ -n "$LANG$LANGUAGE$LC_ALL$LC_MESSAGES" ]] && locale -a 2>/dev/null | grep "^$locale\$" >/dev/null; then # The locale setting seems to be valid: one of the LANG, # LANGUAGE, LC_ALL and/or LC_MESSAGES is set and the locale is # included in "locale -a" output. Good! break fi echo "ax-zsh: unknown/unsupported locale ${lc_messages:-unknown}" >&2 unset locale while [[ -z "$locale" ]]; do if ! read "locale?Locale? "; then echo >&2 break 2 fi done if [[ -n "$locale" ]]; then export LANG=$locale unset LANGUAGE LC_ALL LC_MESSAGES fi done unset lc_messages locale encoding case "$LANG" in *_*) # LANG contains at least one "_" ("aa_BB" form). if [[ -z "$LANGUAGE" ]]; then # But LANGUAGE isn't set, so set it automatically to # "aa_BB:aa" form. export LANGUAGE=${LANG%.*}:${${LANG%.*}%_*} fi esac