aboutsummaryrefslogtreecommitdiffstats
path: root/lang.sh
diff options
context:
space:
mode:
Diffstat (limited to 'lang.sh')
-rwxr-xr-xlang.sh102
1 files changed, 89 insertions, 13 deletions
diff --git a/lang.sh b/lang.sh
index 4a759f53..8ece9ac9 100755
--- a/lang.sh
+++ b/lang.sh
@@ -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