diff options
Diffstat (limited to 'lang.sh')
-rwxr-xr-x | lang.sh | 102 |
1 files changed, 89 insertions, 13 deletions
@@ -1,19 +1,37 @@ # /etc/profile.d/lang.sh - set i18n stuff -sourced=0 +# revert special console/X11 settings if needed +if [ "$LC_SOURCED_CONSOLE" = 1 -a -n "$DISPLAY" ]; then + unset LC_SOURCED + unset LC_SOURCED_CONSOLE +elif [ "$LC_SOURCED_X11" = 1 -a -z "$DISPLAY" ]; then + unset LC_SOURCED + unset LC_SOURCED_X11 +fi -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 GDM_LANG is defined that means a language other than the user default +# has been chosen trough gdm login for the session; so we define +# LC_SOURCED=1 to not read the system/user i18n files +if [ -n "$GDM_LANG" ]; then + LANG="$GDM_LANG" + LC_SOURCED=1 + export LC_SOURCED fi -if [ "$sourced" = 1 ]; then +# only source one of the possible files, and in that order; +# if system wide and user config are mixed and different, umpredictable +# things will happen... +for langfile in "$HOME/.i18n" /etc/locale.conf /etc/sysconfig/i18n ; do + [ -f $langfile -a "$LC_SOURCED" != 1 ] && . $langfile && LC_SOURCED=1 && export LC_SOURCED +done + +if [ "$LC_SOURCED" = 1 ]; then + if [ -n "$LANG" ] ; then + [ "$LANG" = "C" ] && LANG="en_US" + export LANG + else + unset LANG + fi [ -n "$LANG" ] && export LANG || unset LANG [ -n "$LC_ADDRESS" ] && export LC_ADDRESS || unset LC_ADDRESS [ -n "$LC_CTYPE" ] && export LC_CTYPE || unset LC_CTYPE @@ -38,18 +56,55 @@ if [ "$sourced" = 1 ]; then fi [ -n "$LANGUAGE" ] && export LANGUAGE || unset LANGUAGE [ -n "$LINGUAS" ] && export LINGUAS || unset LINGUAS + + if [ -n "$RPM_INSTALL_LANG" ]; then + export RPM_INSTALL_LANG + else + unset RPM_INSTALL_LANG + fi + + # XIM and keyboard stuff + [ -n "$ENC" ] && export ENC || unset ENC + [ -n "$XIM" ] && export XIM || unset XIM + [ -n "$XIM_PROGRAM" ] && export XIM_PROGRAM || unset XIM_PROGRAM + [ -n "$XMODIFIERS" ] && export XMODIFIERS || unset XMODIFIERS [ -n "$_XKB_CHARSET" ] && export _XKB_CHARSET || unset _XKB_CHARSET + [ -n "$GTK_IM_MODULE" ] && export GTK_IM_MODULE || unset GTK_IM_MODULE + [ -n "$QT_IM_MODULE" ] && export QT_IM_MODULE || unset QT_IM_MODULE consoletype=$CONSOLETYPE if [ -z "$consoletype" ]; then consoletype=$(/sbin/consoletype stdout) fi + if [ -n "$CHARSET" ]; then + case $CHARSET in + 8859-1|8859-2|8859-5|8859-8|8859-15|KOI*) + if [ "$TERM" = "linux" -a "$consoletype" = "vt" ]; then + echo -n -e '\033(K' 2>/dev/null > /proc/$$/fd/0 + fi + ;; + esac + elif [ -n "$SYSFONTACM" ]; then + case $SYSFONTACM in + iso01*|iso02*|iso05*|iso08*|iso15*|koi*|latin2-ucw*) + if [ "$TERM" = "linux" -a "$consoletype" = "vt" ]; then + echo -n -e '\033(K' 2>/dev/null > /proc/$$/fd/0 + fi + ;; + esac + fi if [ -n "$LANG" ]; then case $LANG in *.utf8*|*.UTF-8*) if [ "$TERM" = "linux" ]; then if [ "$consoletype" = "vt" ]; then + if [ -x /bin/unicode_start ] && /sbin/consoletype fg ; then + for langfile in /etc/sysconfig/i18n "$HOME/.i18n" ; do + [ -f $langfile ] && . $langfile + done + /bin/unicode_start $SYSFONT $SYSFONTACM + fi case $LANG in ja*) LANG=en_US.UTF-8 ;; ko*) LANG=en_US.UTF-8 ;; @@ -78,13 +133,34 @@ if [ "$sourced" = 1 ]; then en_IN*) ;; *_IN*) LANG=en_US ;; esac + [ -x /bin/unicode_stop ] && /sbin/consoletype fg && /bin/unicode_stop fi fi ;; esac fi - unset SYSFONTACM SYSFONT consoletype + # handling of special cases where localization is done + # only on console or only on X11. + # when launching an xdm-like program we are not yet in X11 (so + # $DISPLAY is not defined) but obviously we will, so we check + # also $DESKTOP which is defined before calling xdm-like program + if [ -n "$DISPLAY" ]; then + if [ "$X11_NOT_LOCALIZED" = "yes" ]; then + LANGUAGE=C + LC_SOURCED_X11=1 + export LC_SOURCED_X11 + fi + elif [ -z "$DESKTOP" ]; then + if [ "$CONSOLE_NOT_LOCALIZED" = "yes" ]; then + LANGUAGE=C + LC_SOURCED_CONSOLE=1 + export LC_SOURCED_CONSOLE + fi + fi + + [ -n "$LANGUAGE" ] && export LANGUAGE + unset consoletype + fi -unset sourced unset langfile |