glibc/locale_install.sh

93 lines
2.8 KiB
Bash
Raw Normal View History

#!/bin/bash
# this script is to be called when a locale is installed for first time;
# it gets the locale name(s) as parameter, and does the needed steps
# so that the new locale can be used by the system
# check if installing main locales package (just encodings)
if [ "$1" = 'ENCODINGS' ]; then
# update encoding files used by locales
ENCODINGS="CP1251 ISO-8859-1 ISO-8859-13 ISO-8859-14 ISO-8859-15 \
ISO-8859-2 ISO-8859-3 ISO-8859-4 ISO-8859-5 ISO-8859-7 \
ISO-8859-9 KOI8-R KOI8-U UTF-8"
for enc in $ENCODINGS; do
if [ -r "/usr/share/locale/$enc/LC_CTYPE" ]; then
mkdir -p "/etc/locale/$enc/LC_MESSAGES"
for i in LC_ADDRESS LC_COLLATE LC_CTYPE \
LC_IDENTIFICATION LC_MEASUREMENT LC_MONETARY \
LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE \
LC_TIME LC_MESSAGES/SYS_LC_MESSAGES
do
cp -fp "/usr/share/locale/$enc/$i" \
"/etc/locale/$enc/$i"
done
fi
done
exit 0
fi
# the list of languages that rpm installs their translations
if [ -r /etc/rpm/macros ]; then
RPM_INSTALL_LANG="$(grep '^%_install_langs' /etc/rpm/macros | cut -d' ' -f2-)"
fi
[ -z "$RPM_INSTALL_LANG" ] && RPM_INSTALL_LANG=C
OLD_RPM_INSTALL_LANG="$RPM_INSTALL_LANG"
# remove/update locale-archive based on system wide configuration
[ -r /etc/sysconfig/locales ] && . /etc/sysconfig/locales
case "$USE_LOCARCHIVE" in
yes|true|1)
update_locarchive=1
;;
*)
update_locarchive=0
rm -f /usr/share/locale/locale-archive
;;
esac
for i in "$@"; do
langs="$i"
for j in /usr/share/locale/$i.*; do
[ -d "$j" ] || continue
lng="$(basename $j)"
# sanity check
echo "$lng" | grep -q "$i" || continue
langs="$langs $lng"
done
for k in $langs; do
# copy the LC_* of the all system locales to /etc/locale, so
# everything is ok on boot time, even if /usr is not mounted
if [ -r "/usr/share/locale/$k/LC_CTYPE" ]; then
mkdir -p "/etc/locale/$k/LC_MESSAGES"
for j in LC_ADDRESS LC_IDENTIFICATION LC_MONETARY \
LC_PAPER LC_COLLATE LC_MEASUREMENT LC_NAME \
LC_TELEPHONE LC_CTYPE LC_NUMERIC LC_TIME \
LC_MESSAGES/SYS_LC_MESSAGES
do
cp -fpP "/usr/share/locale/$k/$j" \
"/etc/locale/$k/$j"
done
# maintain updated locale-archive file
[ "$update_locarchive" -eq 0 ] || \
localedef \
--replace \
--add-to-archive "/usr/share/locale/$k" \
> /dev/null
fi
done
# make the installed locale known to rpm (so translations in that
# language are installed), and the menu system
if [ "$RPM_INSTALL_LANG" != "all" ]; then
RPM_INSTALL_LANG="$(echo "$i":$RPM_INSTALL_LANG |tr ':' '\n' |sort |tr '\n' ':' |sed -e 's,:$,,')"
fi
done
if [ "$OLD_RPM_INSTALL_LANG" != "$RPM_INSTALL_LANG" ]; then
# update /etc/rpm/macros file
if [ -w /etc/rpm/macros ]; then
sed -i -e "s/^%_install_langs .*/%_install_langs $RPM_INSTALL_LANG/" /etc/rpm/macros
fi
fi