[PATCH 1/19] Kconfig I18N: sublocale

From: Egry Gábor
Date: Wed Jul 13 2005 - 12:09:28 EST



The external store of .mo files are unfrendly and binary .mo
files are ungly in the source code. This patch creates a temporary
locale directory on build time in <kernel_source>/.locale/
directory instead of /usr/share/locale/ and compiles the
necessary source language files from the <kernel_source>/po/ directory.

Without installed gettext package the configuration interfaces remain
in english.

This patch contains too a hook for additional patches. If one or more
po/*-po directories exist (ex. po/grsecurity-po/) then the content of
them will merged into the temporary locale directory. In this way the
configuration interface of external patches will be localisable.

Signed-off-by: Egry Gabor <gaboregry@xxxxxxxxxxx>
---

Makefile | 1
scripts/kconfig/Makefile | 7 +++
scripts/kconfig/lkc.h | 2
scripts/kconfig/set_locale.sh | 93 ++++++++++++++++++++++++++++++++++++++++++
4 files changed, 102 insertions(+), 1 deletion(-)

diff -puN Makefile~kconfig-i18n-01-sublocale Makefile
--- linux-2.6.13-rc3-i18n-kconfig/Makefile~kconfig-i18n-01-sublocale 2005-07-13 18:32:15.000000000 +0200
+++ linux-2.6.13-rc3-i18n-kconfig-gabaman/Makefile 2005-07-13 18:32:15.000000000 +0200
@@ -948,6 +948,7 @@ endef

# Directories & files removed with 'make clean'
CLEAN_DIRS += $(MODVERDIR)
+CLEAN_DIRS += .locale
CLEAN_FILES += vmlinux System.map \
.tmp_kallsyms* .tmp_version .tmp_vmlinux* .tmp_System.map

diff -puN scripts/kconfig/lkc.h~kconfig-i18n-01-sublocale scripts/kconfig/lkc.h
--- linux-2.6.13-rc3-i18n-kconfig/scripts/kconfig/lkc.h~kconfig-i18n-01-sublocale 2005-07-13 18:32:15.000000000 +0200
+++ linux-2.6.13-rc3-i18n-kconfig-gabaman/scripts/kconfig/lkc.h 2005-07-13 18:32:15.000000000 +0200
@@ -26,7 +26,7 @@ extern "C" {
#define SRCTREE "srctree"

#define PACKAGE "linux"
-#define LOCALEDIR "/usr/share/locale"
+#define LOCALEDIR ".locale"

#define _(text) gettext(text)
#define N_(text) (text)
diff -puN scripts/kconfig/Makefile~kconfig-i18n-01-sublocale scripts/kconfig/Makefile
--- linux-2.6.13-rc3-i18n-kconfig/scripts/kconfig/Makefile~kconfig-i18n-01-sublocale 2005-07-13 18:32:15.000000000 +0200
+++ linux-2.6.13-rc3-i18n-kconfig-gabaman/scripts/kconfig/Makefile 2005-07-13 18:36:54.000000000 +0200
@@ -5,22 +5,28 @@
.PHONY: oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config

xconfig: $(obj)/qconf
+ $(Q)sh $(obj)/set_locale.sh
$< arch/$(ARCH)/Kconfig

gconfig: $(obj)/gconf
+ $(Q)sh $(obj)/set_locale.sh
$< arch/$(ARCH)/Kconfig

menuconfig: $(obj)/mconf
$(Q)$(MAKE) $(build)=scripts/lxdialog
+ $(Q)sh $(obj)/set_locale.sh
$< arch/$(ARCH)/Kconfig

config: $(obj)/conf
+ $(Q)sh $(obj)/set_locale.sh
$< arch/$(ARCH)/Kconfig

oldconfig: $(obj)/conf
+ $(Q)sh $(obj)/set_locale.sh
$< -o arch/$(ARCH)/Kconfig

silentoldconfig: $(obj)/conf
+ $(Q)sh $(obj)/set_locale.sh
$< -s arch/$(ARCH)/Kconfig

update-po-config: $(obj)/kxgettext
@@ -214,3 +220,4 @@ lex.%.c: %.l
flex -P$(notdir $*) -o$@ $<

endif
+
diff -puN /dev/null scripts/kconfig/set_locale.sh
--- /dev/null 2005-07-13 15:43:03.451152136 +0200
+++ linux-2.6.13-rc3-i18n-kconfig-gabaman/scripts/kconfig/set_locale.sh 2005-07-13 18:32:15.000000000 +0200
@@ -0,0 +1,93 @@
+#!/bin/sh
+
+#
+# This script detects language and compiles the language binary files
+#
+
+# Check the po/ directory
+if [ ! -d po/ ]
+then
+ exit 0
+fi
+
+# Set language code
+if test "x$LANG" == "x"
+then
+ if test "x$LC_ALL" == "x"
+ then
+ exit 0
+ else
+ MYLC=$LC_ALL
+ fi
+else
+ MYLC=$LANG
+fi
+
+# If don't need the translation
+if test "x$MYLC" == "xC"
+then
+ exit 0
+fi
+
+MYLCTEST=$(echo $MYLC|cut -b 1-5)
+
+# Find Kconfig's .po
+POFILES=$(find po/ -maxdepth 1 -type f -name ${MYLCTEST}.po)
+if test "x$POFILES" != "x"
+then
+ MYLC=$MYLCTEST
+else
+ MYLCTEST=$(echo $MYLC|cut -b 1-2)
+ POFILES=$(find po/ -maxdepth 1 -type f -name ${MYLCTEST}.po)
+ if test "x$POFILES" != "x"
+ then
+ MYLC=$MYLCTEST
+ else
+ #echo "Your language ($MYLC) is not supported."
+ exit 0
+ fi
+fi
+
+if [ -f .locale/$MYLC/LC_MESSAGES/linux.mo ]
+then
+ exit 0
+fi
+
+echo -n " LOCALE ($MYLC)... "
+
+# Find additional .po files
+# This is a hook for external patches
+for i in $(find po/ -maxdepth 1 -type d -path '*-po')
+do
+ if [ -f $i/$MYLC.po ]
+ then
+ POFILES="$POFILES $i/$MYLC.po"
+ NEED_CAT=1
+ fi
+done
+
+# Trying msgfmt... and no returning error if it doesn't exist
+msgfmt -V &>/dev/null || {
+ echo "msgfmt doesn't exist, please install gettext";
+ exit 0;
+}
+
+# Do translation...
+mkdir -p .locale/$MYLC/LC_MESSAGES/
+if test "x$NEED_CAT" == "x1"
+then
+ # Trying msgcat and no returning error if it doesn't exist
+ msgcat -V &>/dev/null || {
+ echo "msgcat doesn't exist, please install gettext 0.12 or newer";
+ exit 0;
+ }
+ msgcat --output=.locale/$MYLC/LC_MESSAGES/__tmp.po --use-first $POFILES
+ msgfmt .locale/$MYLC/LC_MESSAGES/__tmp.po --output=.locale/$MYLC/LC_MESSAGES/linux.mo
+ rm -f .locale/$MYLC/LC_MESSAGES/__tmp.po
+else
+ msgfmt $POFILES --output=.locale/$MYLC/LC_MESSAGES/linux.mo
+fi
+
+# Done
+echo " done"
+
_


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/