Package: locales
Version: 2.24.9
Tags: patch

Attached is a patch to allow locale-gen to accept one or more locales
to generate.
One or more locales can be provided, and all of them will be generated
instead of looking in /etc/locale.gen. Locales in arguments will be
uncommented in /etc/locale.gen.

Thanks,
Anthony Wong
From f5357055243813daaf7d9c0f8f7b7819e4eac521 Mon Sep 17 00:00:00 2001
From: Anthony Wong <anthony.w...@ubuntu.com>
Date: Fri, 24 Feb 2017 23:31:05 -0500
Subject: [PATCH] Locales to generate can be provided as command line argument.

One or more locales can be provided, and all of them will be generated
instead of looking in /etc/locale.gen. Locales in arguments will be
uncommented in /etc/locale.gen.

Signed-off-by: Anthony Wong <anthony.w...@ubuntu.com>
---
 debian/local/usr_sbin/locale-gen | 43 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 41 insertions(+), 2 deletions(-)

diff --git a/debian/local/usr_sbin/locale-gen b/debian/local/usr_sbin/locale-gen
index 3d13dadf..ff0be194 100755
--- a/debian/local/usr_sbin/locale-gen
+++ b/debian/local/usr_sbin/locale-gen
@@ -5,6 +5,7 @@ set -e
 LOCALEGEN=/etc/locale.gen
 LOCALES=/usr/share/i18n/locales
 USER_LOCALES=/usr/local/share/i18n/locales
+SUPPORTED=/usr/share/i18n/SUPPORTED
 if [ -n "$POSIXLY_CORRECT" ]; then
   unset POSIXLY_CORRECT
 fi
@@ -35,8 +36,46 @@ is_entry_ok() {
   fi
 }
 
+add_to_locale_gen() {
+  echo "$1" | while read locale; do
+    if ! grep -q "^[# ]*$locale *\$" $LOCALEGEN; then
+      echo "# $locale" >> $LOCALEGEN
+    fi
+    sed -i -e "0,/^[# ]*$locale *$/ s/^[# ]*$locale *$/$locale/" $LOCALEGEN
+  done
+}
+
+if [ -z "$1" ]; then
+  GENERATE="`cat $LOCALEGEN 2>/dev/null || true`"
+else
+  GENERATE=
+  while [ -n "$1" ]; do
+    LL="`echo "$1" | sed 's/\./ /'`" 
+    # Check validity of supplied locale string
+    if ! echo "$1" | grep -q -e "^[a-z]\{2,3\}_[A-Z]\{2\}\(@[a-z0-9]\+\)\{0,1\}\.[A-Z0-9-]\+$" \
+                             -e "^[a-z]\{2,3\}_[A-Z]\{2\}$"; then
+      echo "Error: '$1' is not a valid locale format" >&2
+    elif L=`grep "^$1 " $SUPPORTED`; then
+      # for cases that match the complete locale string
+      GENERATE="$GENERATE\n$L"
+      echo "Adding $L"
+      add_to_locale_gen "$L"
+    elif L=`grep "^$LL" $SUPPORTED`; then
+      # for cases like "aa_ER.UTF-8", where the entry is written as "aa_ER UTF-8"
+      GENERATE="$GENERATE\n$L"
+      echo "Adding $L"
+      add_to_locale_gen "$L"
+    else
+      echo "Error: '$1' is not a supported language or locale" >&2
+    fi
+    shift
+  done
+fi
+
+[ -z "$GENERATE" ] && echo "Error: nothing to do" >&2 && exit 1
+
 echo "Generating locales (this might take a while)..."
-while read locale charset; do \
+echo "$GENERATE" | sort -u | while read locale charset; do \
 	case $locale in \#*) continue;; "") continue;; esac; \
 	is_entry_ok || continue
 	if [ "$KEEP" ] && PERL_BADLANG=0 perl -MPOSIX -e \
@@ -59,5 +98,5 @@ while read locale charset; do \
 	fi
 	localedef -i $input -c -f $charset -A /usr/share/locale/locale.alias $locale || :; \
 	echo ' done'; \
-done < $LOCALEGEN
+done
 echo "Generation complete."
-- 
2.11.0

Reply via email to