2014-05-22 18:55:40 +11:00
|
|
|
#!/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
|
|
|
|
|
2019-04-27 10:09:03 +00:00
|
|
|
# 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
|
|
|
|
|
2014-05-22 18:55:40 +11:00
|
|
|
# the list of languages that rpm installs their translations
|
|
|
|
if [ -r /etc/rpm/macros ]; then
|
2019-04-27 10:09:03 +00:00
|
|
|
RPM_INSTALL_LANG="$(grep '^%_install_langs' /etc/rpm/macros | cut -d' ' -f2-)"
|
2014-05-22 18:55:40 +11:00
|
|
|
fi
|
|
|
|
[ -z "$RPM_INSTALL_LANG" ] && RPM_INSTALL_LANG=C
|
|
|
|
OLD_RPM_INSTALL_LANG="$RPM_INSTALL_LANG"
|
|
|
|
|
2019-04-27 10:09:03 +00:00
|
|
|
# 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
|
2014-05-22 18:55:40 +11:00
|
|
|
|
|
|
|
for i in "$@"; do
|
2019-04-27 10:09:03 +00:00
|
|
|
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
|
2014-05-22 18:55:40 +11:00
|
|
|
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
|
2019-04-27 10:09:03 +00:00
|
|
|
RPM_INSTALL_LANG="$(echo "$i":$RPM_INSTALL_LANG |tr ':' '\n' |sort |tr '\n' ':' |sed -e 's,:$,,')"
|
2014-05-22 18:55:40 +11:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ "$OLD_RPM_INSTALL_LANG" != "$RPM_INSTALL_LANG" ]; then
|
|
|
|
# update /etc/rpm/macros file
|
|
|
|
if [ -w /etc/rpm/macros ]; then
|
2019-04-27 10:09:03 +00:00
|
|
|
sed -i -e "s/^%_install_langs .*/%_install_langs $RPM_INSTALL_LANG/" /etc/rpm/macros
|
2014-05-22 18:55:40 +11:00
|
|
|
fi
|
|
|
|
fi
|