setup/lang.sh
Zbigniew Jędrzejewski-Szmek 36eef7070f Merge upstream into downstream
This implements https://pagure.io/setup/issue/51.

The "upstream" is only used to build the package in our dist-git, so we can reduce the
total amount of work by moving files downstream and maintaining them there.

The package after the rebuild is identical, except for intentional changes
(removal of Group, updating of Url, bumping of the Version):

$ rpmdiff -iT noarch/setup-2.14.5-2.fc41.noarch.rpm noarch/setup-2.15.0-1.fc41.noarch.rpm
S.5.....    GROUP
S.5.....    URL
removed     REQUIRES config(setup) = 2.14.5-2.fc41
added       REQUIRES config(setup) = 2.15.0-1.fc41
removed     PROVIDES config(setup) = 2.14.5-2.fc41
removed     PROVIDES setup = 2.14.5-2.fc41
added       PROVIDES config(setup) = 2.15.0-1.fc41
added       PROVIDES setup = 2.15.0-1.fc41
2024-05-27 14:32:47 +02:00

91 lines
3.1 KiB
Bash

# /etc/profile.d/lang.sh - exports environment variables, and provides fallback
# for CJK languages that can't be displayed in console.
# Resets the locale if unavailable.
unset LANG_backup
# If unavailable, reset to the default. Do this before reading in any
# explicit user configuration. We simply check if locale emits any
# warnings, and assume that the settings are invalid if it does.
if [ -n "$(/usr/bin/locale 2>&1 1>/dev/null)" ]; then
[ -z "$LANG" ] || LANG=C.UTF-8
unset LC_ALL
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
else
LANG_backup="${LANG}"
fi
for config in /etc/locale.conf "${HOME}/.i18n"; do
if [ -f "${config}" ]; then
# NOTE: We are using eval & sed here to avoid invoking of any commands & functions from those files.
if [ -x /usr/bin/sed ]; then
eval $(/usr/bin/sed -r -e 's/^[[:blank:]]*([[:upper:]_]+)=([[:print:][:digit:]\._-]+|"[[:print:][:digit:]\._-]+")/export \1=\2/;t;d' ${config})
else
#but if we don't have sed, let's go old way and source it
[ -f "${config}" ] && . "${config}"
fi
fi
done
if [ -n "${LANG_backup}" ]; then
LANG="${LANG_backup}"
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}" -a -n "${LANG}" ]; then
export LC_ALL
else
unset LC_ALL
fi
fi
# The ${LANG} manipulation is necessary only in virtual terminal (a.k.a. console - /dev/tty*):
if [ -n "${LANG}" ] && [ "${TERM}" = 'linux' ] && /usr/bin/tty | /usr/bin/grep --quiet -e '/dev/tty'; then
if /usr/bin/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
# 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