aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Kaspar [Dee'Kej] <dkaspar@redhat.com>2018-05-18 18:30:20 +0200
committerDavid Kaspar [Dee'Kej] <dkaspar@redhat.com>2018-05-30 14:33:04 +0200
commit59928ce72da10f1c45a0aa08c9dd3a439fdd74a0 (patch)
tree0ee20fe2525e6879ec927db78360d6399ffc6247
parentdd0ded99ccc12aebe1372e04771711bf993182b9 (diff)
downloadinitscripts-59928ce72da10f1c45a0aa08c9dd3a439fdd74a0.tar
initscripts-59928ce72da10f1c45a0aa08c9dd3a439fdd74a0.tar.gz
initscripts-59928ce72da10f1c45a0aa08c9dd3a439fdd74a0.tar.bz2
initscripts-59928ce72da10f1c45a0aa08c9dd3a439fdd74a0.tar.xz
initscripts-59928ce72da10f1c45a0aa08c9dd3a439fdd74a0.zip
lang.{sh,csh} cleanup before moving to 'setup' package
The dependance on 'consoletype' binary has been removed.
-rw-r--r--etc/profile.d/lang.csh145
-rw-r--r--etc/profile.d/lang.sh135
2 files changed, 125 insertions, 155 deletions
diff --git a/etc/profile.d/lang.csh b/etc/profile.d/lang.csh
index c6a44664..f6ec891d 100644
--- a/etc/profile.d/lang.csh
+++ b/etc/profile.d/lang.csh
@@ -1,83 +1,78 @@
-# /etc/profile.d/lang.csh - set i18n stuff
+# /etc/profile.d/lang.csh - exports environment variables, and provides fallback
+# for CJK languages that can't be displayed in console.
-set sourced=0
+if (${?LANG}) then
+ set LANG_backup=${LANG}
+endif
-if ($?LANG) then
- set saved_lang=$LANG
- if ( -f "$HOME/.i18n" ) then
- eval `sed -ne 's|^[[:blank:]]*\([^#=]\{1,\}\)=\([^=]*\)|setenv \1 \2;|p' "$HOME/.i18n"`
- set sourced=1
+foreach config (/etc/locale.conf "${HOME}/.i18n")
+ if (-f "${file}") then
+ # NOTE: We are using eval & sed here to avoid invoking of any commands & functions from those files.
+ eval `sed -r -e 's/^[[:blank:]]*([[:upper:]_]+)=([[:print:][:digit:]\._-]+|"[[:print:][:digit:]\._-]+")/setenv \1 \2;/;t;d' ${config}`
endif
- setenv LANG $saved_lang
- unset saved_lang
-else
- foreach file (/etc/locale.conf "$HOME/.i18n")
- if ( -f $file ) then
- eval `sed -ne 's|^[[:blank:]]*\([^#=]\{1,\}\)=\([^=]*\)|setenv \1 \2;|p' $file`
- set sourced=1
- endif
- end
+end
+
+if (${?LANG_backup}) then
+ set LANG="${LANG_backup}"
endif
-if ($sourced == 1) then
- if ($?LC_ALL && $?LANG) then
- if ($LC_ALL == $LANG) then
- unsetenv LC_ALL
- endif
+unset LANG_backup config
+
+# ----------------------------------------------
+
+# The LC_ALL is not supposed to be set in /etc/locale.conf according to 'man 5 locale.conf'.
+# If it is set, then we we expect it is user's explicit override (most likely from ~/.i18n file).
+# See 'man 7 locale' for more info about LC_ALL.
+if (${?LC_ALL}) then
+ if (${LC_ALL} != ${LANG}) then
+ setenv LC_ALL
+ else
+ unsetenv LC_ALL
endif
-
- set consoletype=`/sbin/consoletype stdout`
+endif
+
+# The ${LANG} manipulation is necessary only in virtual terminal (a.k.a. console - /dev/tty*):
+set in_console=`tty | grep --quiet -e '/dev/tty'; echo $?`
- if ($?LANG) then
- switch ($LANG)
- case *.utf8*:
- case *.UTF-8*:
- if ( $?TERM ) then
- if ( "$TERM" == "linux" ) then
- if ( "$consoletype" == "vt" ) then
- switch ($LANG)
- case en_IN*:
- breaksw
- case ja*:
- case ko*:
- case si*:
- case zh*:
- case ar*:
- case fa*:
- case he*:
- case *_IN*:
- setenv LANG en_US.UTF-8
- breaksw
- endsw
- endif
- endif
- endif
- breaksw
- case *:
- if ( $?TERM ) then
- if ( "$TERM" == "linux" ) then
- if ( "$consoletype" == "vt" ) then
- switch ($LANG)
- case en_IN*:
- breaksw
- case ja*:
- case ko*:
- case si*:
- case zh*:
- case ar*:
- case fa*:
- case he*:
- case *_IN*:
- setenv LANG en_US
- breaksw
- endsw
- endif
- endif
- endif
- breaksw
- endsw
- endif
- unsetenv SYSFONTACM
- unsetenv SYSFONT
- unsetenv consoletype
+if (${?LANG} && ${TERM} == 'linux' && in_console == 0) then
+ set utf8_used=`echo ${LANG} | grep --quiet -E -i -e '^.+\.utf-?8$'; echo $?`
+
+ if (${utf8_used} == 0) then
+ switch (${LANG})
+ case en_IN*:
+ breaksw
+
+ case ja*:
+ case ko*:
+ case si*:
+ case zh*:
+ case ar*:
+ case fa*:
+ case he*:
+ case *_IN*:
+ setenv LANG en_US.UTF-8
+ breaksw
+ endsw
+ else
+ switch (${LANG})
+ case en_IN*:
+ breaksw
+ case ja*:
+ case ko*:
+ case si*:
+ case zh*:
+ m case ar*:
+ case fa*:
+ case he*:
+ case *_IN*:
+ setenv LANG en_US
+ breaksw
+ endsw
+ endif
+
+ # NOTE: We are not exporting the ${LANG} here again on purpose.
+ # If user starts GUI session from console manually, then
+ # the previously set LANG should be okay to use.
endif
+
+unset in_console utf8_used
diff --git a/etc/profile.d/lang.sh b/etc/profile.d/lang.sh
index 4a759f53..0252b0fe 100644
--- a/etc/profile.d/lang.sh
+++ b/etc/profile.d/lang.sh
@@ -1,90 +1,65 @@
-# /etc/profile.d/lang.sh - set i18n stuff
+# /etc/profile.d/lang.sh - exports environment variables, and provides fallback
+# for CJK languages that can't be displayed in console.
-sourced=0
+if [ -n "${LANG}" ]; then
+ LANG_backup="${LANG}"
+fi
+
+for config in /etc/locale.conf "${HOME}/.i18n"; do
+ # NOTE: We are using eval & sed here to avoid invoking of any commands & functions from those files.
+ if [ -f "${config}" ]; then
+ eval $(sed -r -e 's/^[[:blank:]]*([[:upper:]_]+)=([[:print:][:digit:]\._-]+|"[[:print:][:digit:]\._-]+")/export \1=\2/;t;d' ${config})
+ fi
+done
-if [ -n "$LANG" ]; then
- saved_lang="$LANG"
- [ -f "$HOME/.i18n" ] && . "$HOME/.i18n" && sourced=1
- LANG="$saved_lang"
- unset saved_lang
-else
- for langfile in /etc/locale.conf "$HOME/.i18n" ; do
- [ -f $langfile ] && . $langfile && sourced=1
- done
+if [ -n "${LANG_backup}" ]; then
+ LANG="${LANG_backup}"
fi
-if [ "$sourced" = 1 ]; then
- [ -n "$LANG" ] && export LANG || unset LANG
- [ -n "$LC_ADDRESS" ] && export LC_ADDRESS || unset LC_ADDRESS
- [ -n "$LC_CTYPE" ] && export LC_CTYPE || unset LC_CTYPE
- [ -n "$LC_COLLATE" ] && export LC_COLLATE || unset LC_COLLATE
- [ -n "$LC_IDENTIFICATION" ] && export LC_IDENTIFICATION || unset LC_IDENTIFICATION
- [ -n "$LC_MEASUREMENT" ] && export LC_MEASUREMENT || unset LC_MEASUREMENT
- [ -n "$LC_MESSAGES" ] && export LC_MESSAGES || unset LC_MESSAGES
- [ -n "$LC_MONETARY" ] && export LC_MONETARY || unset LC_MONETARY
- [ -n "$LC_NAME" ] && export LC_NAME || unset LC_NAME
- [ -n "$LC_NUMERIC" ] && export LC_NUMERIC || unset LC_NUMERIC
- [ -n "$LC_PAPER" ] && export LC_PAPER || unset LC_PAPER
- [ -n "$LC_TELEPHONE" ] && export LC_TELEPHONE || unset LC_TELEPHONE
- [ -n "$LC_TIME" ] && export LC_TIME || unset LC_TIME
- if [ -n "$LC_ALL" ]; then
- if [ "$LC_ALL" != "$LANG" ]; then
- export LC_ALL
- else
- unset LC_ALL
- fi
+unset LANG_backup config
+
+# ----------------------------------------------
+
+# The LC_ALL is not supposed to be set in /etc/locale.conf according to 'man 5 locale.conf'.
+# If it is set, then we we expect it is user's explicit override (most likely from ~/.i18n file).
+# See 'man 7 locale' for more info about LC_ALL.
+if [ -n "${LC_ALL}" ]; then
+ if [ "${LC_ALL}" != "${LANG}" ]; then
+ export LC_ALL
else
- unset LC_ALL
- fi
- [ -n "$LANGUAGE" ] && export LANGUAGE || unset LANGUAGE
- [ -n "$LINGUAS" ] && export LINGUAS || unset LINGUAS
- [ -n "$_XKB_CHARSET" ] && export _XKB_CHARSET || unset _XKB_CHARSET
-
- consoletype=$CONSOLETYPE
- if [ -z "$consoletype" ]; then
- consoletype=$(/sbin/consoletype stdout)
+ unset LC_ALL
fi
+fi
- if [ -n "$LANG" ]; then
- case $LANG in
- *.utf8*|*.UTF-8*)
- if [ "$TERM" = "linux" ]; then
- if [ "$consoletype" = "vt" ]; then
- case $LANG in
- ja*) LANG=en_US.UTF-8 ;;
- ko*) LANG=en_US.UTF-8 ;;
- si*) LANG=en_US.UTF-8 ;;
- zh*) LANG=en_US.UTF-8 ;;
- ar*) LANG=en_US.UTF-8 ;;
- fa*) LANG=en_US.UTF-8 ;;
- he*) LANG=en_US.UTF-8 ;;
- en_IN*) ;;
- *_IN*) LANG=en_US.UTF-8 ;;
- esac
- fi
- fi
- ;;
- *)
- if [ "$TERM" = "linux" ]; then
- if [ "$consoletype" = "vt" ]; then
- case $LANG in
- ja*) LANG=en_US ;;
- ko*) LANG=en_US ;;
- si*) LANG=en_US ;;
- zh*) LANG=en_US ;;
- ar*) LANG=en_US ;;
- fa*) LANG=en_US ;;
- he*) LANG=en_US ;;
- en_IN*) ;;
- *_IN*) LANG=en_US ;;
- esac
- fi
- fi
- ;;
- esac
+# The ${LANG} manipulation is necessary only in virtual terminal (a.k.a. console - /dev/tty*):
+if [ -n "${LANG}" ] && [ "${TERM}" = 'linux' ] && tty | grep --quiet -e '/dev/tty'; then
+ if grep --quiet -E -i -e '^.+\.utf-?8$' <<< "${LANG}"; then
+ case ${LANG} in
+ ja*) LANG=en_US.UTF-8 ;;
+ ko*) LANG=en_US.UTF-8 ;;
+ si*) LANG=en_US.UTF-8 ;;
+ zh*) LANG=en_US.UTF-8 ;;
+ ar*) LANG=en_US.UTF-8 ;;
+ fa*) LANG=en_US.UTF-8 ;;
+ he*) LANG=en_US.UTF-8 ;;
+ en_IN*) true ;;
+ *_IN*) LANG=en_US.UTF-8 ;;
+ esac
+ else
+ case ${LANG} in
+ ja*) LANG=en_US ;;
+ ko*) LANG=en_US ;;
+ si*) LANG=en_US ;;
+ zh*) LANG=en_US ;;
+ ar*) LANG=en_US ;;
+ fa*) LANG=en_US ;;
+ he*) LANG=en_US ;;
+ en_IN*) true ;;
+ *_IN*) LANG=en_US ;;
+ esac
fi
- unset SYSFONTACM SYSFONT consoletype
+ # NOTE: We are not exporting the ${LANG} here again on purpose.
+ # If user starts GUI session from console manually, then
+ # the previously set LANG should be okay to use.
fi
-unset sourced
-unset langfile