[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: