# Authors: grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
# Bug-Reports: see http://grml.org/bugs/
# License: This file is licensed under the GPL v2.
-# Latest change: Sam Dez 16 18:20:42 CET 2006 [mika]
################################################################################
PN="$(basename $0)"
setvalue(){
[ -n "$2" ] || return 1
# already present in conffile?
- if grep -q ${1} $CONFFILE ; then
- sed -i "s#^${1}.*#${1}${2}#" $CONFFILE
+ if grep -q "^${1}" "$CONFFILE" ; then
+ sed -i "s#^${1}.*#${1}${2}#" $CONFFILE
+ # is the new Debian style /etc/default/locale present?
+ elif grep -q "^# ${1}$" "$CONFFILE" ; then
+ sed -i "s#^\# ${1}#${1}${2}#" $CONFFILE
else
echo "$1${2}" >> $CONFFILE
fi
# grml-small does not provide any further locales
if grep -q small /etc/grml_version 2>/dev/null ; then
if [ -z "$NONINTERACTIVE" ] ; then
- $DIALOG --stdout --msgbox "Notice: grml-small does not provide a full language setup.
+ LANG=C $DIALOG --stdout --msgbox "Notice: grml-small does not provide a full language setup.
You have to make sure the appropriate packages are installed." 0 0
exit 1
fi
if [ -z "$NONINTERACTIVE" ] ; then
- LANGUAGE=$($DIALOG --stdout --title "$PN" --default-item $DEFAULT_LANGUAGE --radiolist \
+ LANGUAGE=$(LANG=C $DIALOG --stdout --title "$PN" --default-item $DEFAULT_LANGUAGE --radiolist \
"Which language do you want to use?
-This will affect \$LANG, \$LANGUAGE, \$LC_MESSAGES and \$TZ.
+This will affect \$LANG, \$LANGUAGE and \$LC_MESSAGES.
Notice: if you want to adjust /etc/locale.gen (defines
which locales should be generated by locale-gen)
-please run 'dpkg-reconfigure locale' manually.
+please run 'dpkg-reconfigure locales' manually.
Configuration will be written to $CONFFILE" 0 0 0 \
at 'austria (unicode version)' off \
LANGUAGE="$1"
fi
-if ! grep -q "${LANGUAGE})" $LANGFUNC ; then
+if ! grep -qe "${LANGUAGE})" -qe "${LANGUAGE}|" $LANGFUNC ; then
ewarn "Language ${LANGUAGE} not supported, using default." ; eend 0
fi
+# fallback to C if using an ISO system (which is latin1 for LC_CTYPE);
+# this should prevent users from broken ctype settings if the set
+# locale isn't available on a remote system
+if echo $LANGUAGE | grep -q -- '-iso' ; then
+ LC_CTYPE=C
+else
+ LC_CTYPE=en_US.UTF-8
+fi
+
# read in the file where all the $LANGUAGE stuff is defined
- source $LANGFUNC
+ . $LANGFUNC
# make sure the file exists
if ! [ -r $CONFFILE ] ; then
cat > $CONFFILE <<EOF
# File generated by $PN on $(date)
-LANGUAGE=$LANGUAGE
LANG=$LANG
-LC_MESSAGES=$LANG
-TZ=$TZ
+LC_CTYPE=$LC_CTYPE
+# LANGUAGE=$LANGUAGE
+# TZ=$TZ
# other environment variables you might want to set:
-# LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY
-# LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE
-# LC_MEASUREMENT LC_IDENTIFICATION
-# Notice: set LC_ALL to overwrite all LC_* variables
+# LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY
+# LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS
+# LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION
+#
+# Note: set LC_ALL to overwrite all LC_* variables
+# LC_ALL > LC_* > LANG
+# LANGUAGE is glibc only and binds stronger than LC_ALL
EOF
fi
-setvalue 'LANGUAGE=' $LANGUAGE
-setvalue 'LANG=' $LANG
-setvalue 'LC_MESSAGES=' $LANG
-setvalue 'TZ=' $TZ
+setvalue 'LANG=' $LANG
+setvalue 'LC_CTYPE=' $LC_CTYPE
retval=$?
case $retval in
(0)
if [ -z "$NONINTERACTIVE" ] ; then
- $DIALOG --stdout --msgbox "Writing language settings ($LANGUAGE) to $CONFFILE was successful." 0 0
+ LANG=C $DIALOG --stdout --msgbox "Writing language settings ($LANGUAGE) to $CONFFILE was successful." 0 0
else
einfo "Writing language settings ($LANGUAGE) to $CONFFILE was successful."
esyslog user.notice "$PN" "Writing language settings ($LANGUAGE) to $CONFFILE was successful." ; eend 0
;;
*)
if [ -z "$NONINTERACTIVE" ] ; then
- $DIALOG --stdout --msgbox "Error writing settings for $LANGUAGE to $CONFFILE." 0 0
+ LANG=C $DIALOG --stdout --msgbox "Error writing settings for $LANGUAGE to $CONFFILE." 0 0
else
eerror "Error writing settings for $LANGUAGE to $CONFFILE." ; eend 1
esyslog user.notice "$PN" "Error writing settings for $LANGUAGE to $CONFFILE."