Bug#242006: patch: localize short list of countries
Christian Perrier wrote:
This patch did not trigger a lot of reactions.....except immediately
after its publication. We had a few exchanges on IRC.
Joey was concerned about the increased size of countrychooser. Below
are the facts:
Without the patch:
new debian package, version 2.0.
size 44080 bytes: control archive= 43192 bytes.
349 bytes, 11 lines control
5248 bytes, 203 lines * postinst #!/bin/sh
172132 bytes, 294 lines templates
Installed-Size: 200
With the patch:
new debian package, version 2.0.
size 44998 bytes: control archive= 43261 bytes.
349 bytes, 11 lines control
5642 bytes, 223 lines * postinst #!/bin/sh
172132 bytes, 294 lines templates
Installed-Size: 260
I think you get the point-->Installed-Size grows up by 60kb which
could make the root floppy too big.
Package with patch contains 12 new small files and new directory. Each
of them use 4k of disk space. I made new patch (attached). With this
patch package will contain only one file for all short lists.
This is why I suggest delaying this change for post beta4.
--
Eugeniy Meshcheryakov
Kyiv National Taras Shevchenko University
Information and Computing Centre
http://icc.univ.kiev.ua
Index: countrychooser/debian/postinst
===================================================================
--- countrychooser/debian/postinst (revision 13691)
+++ countrychooser/debian/postinst (working copy)
@@ -18,6 +18,7 @@
# This is the iso_3166.tab file location
ISO3166TAB=/usr/share/iso-codes/iso_3166.tab
SUPPORTEDLOCALES=/etc/SUPPORTED-short
+SHORTLISTS=/etc/shortlists
for list in $ISO3166TAB ; do
if [ -f "$list" ]; then
@@ -60,6 +61,33 @@
fi
}
+cat_shortlist() {
+ (out = ""
+ IFS='
+'
+ while read line; do
+ if $(echo "$line" | grep -q "^:$1$"); then
+ out=1
+ elif $(echo "$line" | grep -q "^:"); then
+ out=""
+ elif [ "$out" ]; then
+ echo "$line"
+ fi
+ done
+ ) < $SHORTLISTS
+}
+
+loccountry2code() {
+ COUNTRYNAME=$(echo "$1" | sed "s/^$INDENT//" | sed 's/\\,/,/g')
+ line=`cat_shortlist $2| grep "$COUNTRYNAME$"`
+ if [ -n "$line" ]; then
+ set $line
+ if [ -n "$1" ]; then
+ echo "$1"
+ fi
+ fi
+}
+
# First grab back the country we got from languagechooser
# (or from elsewhere) and populate the debconf database with
# it so that it becomes the default choice
@@ -97,6 +125,16 @@
# If present, keep track of charset or modifier we got from languagechooser
EXTRA_LANGUAGECHOOSER=`echo $DEFAULTLOCALE | sed -e 's/^[^.@]*//'`
+FIRST_LANG=$(echo $LANGUAGELIST | sed -e 's/:.*$//')
+
+if grep -q "^:$FIRST_LANG$" $SHORTLISTS; then
+ use_lang=$FIRST_LANG
+elif grep -q "^:$LANGUAGE$" $SHORTLISTS; then
+ use_lang=$LANGUAGE
+else
+ use_lang=""
+fi
+
# At this step we should have either xx, or xx_YY in LANGNAME
if [ "$LANGUAGE" != "C" ]; then
STATE=1
@@ -112,35 +150,35 @@
askedshort=0
fullprio=medium
else
- # Build a short list of supported locales fo
- # the language.
- SHORTLIST=''
- for code in $(grep -e "^$LANGUAGE" $SUPPORTEDLOCALES | cut -b 4-5 | sort | uniq); do
- line=`grep -e "^$code" $ISO3166TAB`
- if [ "$line" ] ; then
- OLD_IFS="$IFS"
- IFS=' '
- set $line
- IFS="$OLD_IFS"
- if [ "$2" ]; then
- countryname=$(echo "${INDENT}$2" | sed 's/,/\\,/g');
- fi
+ if [ "$use_lang" ]; then
+ # Build a short list of supported locales fo
+ # the language.
+ OLD_IFS="$IFS"
+ IFS='
+'
+ COUNTRIES=$(cat_shortlist $use_lang | sed -e 's/^.* //');
+ SHORTLIST=""
+ for name in $COUNTRIES; do
if [ ! -z "${SHORTLIST}" ]; then
SHORTLIST="${SHORTLIST}, "
fi
+ countryname=$(echo "${INDENT}${name}" | sed -e 's/,/\\,/')
SHORTLIST="${SHORTLIST}${countryname}"
- fi
- done
- db_subst $shortlist SHORTLIST "${SHORTLIST}"
- db_subst $shortlist DEFAULTLOCALE "${DEFAULTLOCALE}"
- db_input critical $shortlist || [ $? -eq 30 ]
- askedshort=1
+ done
+ IFS="$OLD_IFS"
+ db_subst $shortlist SHORTLIST "${SHORTLIST}"
+ db_subst $shortlist DEFAULTLOCALE "${DEFAULTLOCALE}"
+ db_input critical $shortlist || [ $? -eq 30 ]
+ askedshort=1
+ else
+ asksedshort=0
+ fi
fi
;;
2)
db_get $shortlist
if [ "$askedshort" = 1 ] && [ "$RET" != "other" ]; then
- COUNTRYCODE="$(country2code "$RET")" || true
+ COUNTRYCODE="$(loccountry2code "$RET" $use_lang )" || true
if [ -n "$COUNTRYCODE" ]; then
break
fi
Index: countrychooser/debian/rules
===================================================================
--- countrychooser/debian/rules (revision 13691)
+++ countrychooser/debian/rules (working copy)
@@ -16,13 +16,14 @@
./get-SUPPORTED
# Build the templates
./mktemplates
+ ./mkshort
touch build-stamp
clean:
dh_testdir
dh_testroot
rm -f build-stamp
- rm -rf debian/pobuild debian/iso-codes
+ rm -rf debian/pobuild debian/iso-codes debian/short-tmp
dh_clean debian/templates.tmp debian/templates debian/SUPPORTED-short
install: build
@@ -33,6 +34,7 @@
# The following while we have no other way to get SUPPORTED
# Should become useless when we will have it
install -m644 debian/SUPPORTED-short debian/$(PACKAGE)/etc/SUPPORTED-short
+ install -m644 debian/short-tmp/shortlists debian/$(PACKAGE)/etc/shortlists
# Build architecture-independent files here.
binary-indep: build install
Index: countrychooser/mkshort
===================================================================
--- countrychooser/mkshort (revision 0)
+++ countrychooser/mkshort (revision 0)
@@ -0,0 +1,56 @@
+#! /bin/sh
+
+set -e
+
+ISO3166TAB=/usr/share/iso-codes/iso_3166.tab
+SUPPORTED=/usr/share/i18n/SUPPORTED
+
+if [ ! -d debian/short-tmp ]; then
+ mkdir debian/short-tmp
+fi
+
+rm -f debian/short-tmp/*.tab
+rm -f debian/short-tmp/*.short
+
+for file in debian/po/*.po en.po; do
+ lang_variant=`basename $file .po`
+ lang=$(echo "$lang_variant" | sed -e 's/_.*$//')
+ tabfile=debian/short-tmp/$lang_variant.tab
+ # create TAB file for this language
+ msgconv debian/iso-codes/$lang_variant.po -t UTF-8 --stringtable-output | tail -n +3 | \
+ sed -e 's/" = "/ /' -e 's/^"//' -e 's/";$//' -e 's/$^$/\n/' | awk '/^.+$/{print}'> $tabfile
+ outfile=debian/short-tmp/$lang_variant.short
+ :>$outfile
+ (for code in $(grep -e "^$lang" $SUPPORTED | cut -b 4-5 | sort | uniq); do
+ line=`grep -e "^$code" $ISO3166TAB`
+ if [ "$line" ]; then
+ OLD_IFS="$IFS"
+ IFS=' '
+ set $line
+ IFS="$OLD_IFS"
+ if [ "$2" ]; then
+ translation=$(grep "^$2 " $tabfile| sed -e 's/^.* //')
+ if [ "$translation" ]; then
+ echo "$1 $translation" >> $outfile
+ else
+ echo "$1 $2" >> $outfile
+ fi
+ fi
+ fi
+ done)
+ if [ $(wc -l < $outfile) -le 1 ]; then
+ rm -f $outfile
+ fi
+done
+
+# make one file from parts
+
+SHORTLISTS=debian/short-tmp/shortlists
+:>$SHORTLISTS
+
+for file in debian/short-tmp/*.short; do
+ lang=`basename $file .short`
+ echo ":$lang" >> $SHORTLISTS
+ cat $file >> $SHORTLISTS
+done
+
Property changes on: countrychooser/mkshort
___________________________________________________________________
Name: svn:executable
+ *
Reply to: