]> arthur.barton.de Git - ax-zsh.git/commitdiff
12locale: Make sure that LANG and LC_MESSAGES are valid
authorAlexander Barton <alex@barton.de>
Mon, 19 Jun 2017 21:18:26 +0000 (23:18 +0200)
committerAlexander Barton <alex@barton.de>
Mon, 19 Jun 2017 21:18:26 +0000 (23:18 +0200)
Make sure that LANG and LC_MESSAGES are either unset or set to something
sane, that is, follow the "xx_ZZ.*" syntax.

core/12_locale/12_locale.zprofile

index 0c9b554b46d31c77095bc46868d4a3f2ea2c6eea..5e7d8803815b92f47531ebbb56482f282bdff0fd 100644 (file)
@@ -5,6 +5,26 @@
 # 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