question about gettext language selection
Andreas Jaeger
aj@suse.de
Mon Oct 30 03:41:00 GMT 2000
I have a problem with gettext: Shouldn't setlocale (LC_ALL, "some
language") (or LC_MESSAGE) set the language for gettext?
Please have a look below for a test program which integrates into
glibc's testsuite.
The output from the program is:
String1 - First string for testing.
String2 - Another string for testing.
String1 - First string for testing.
String2 - Another string for testing.
String1 - First string for testing.
String2 - Another string for testing.
IMO it should be instead:
String1 - Lang1: 1st string
String2 - Lang1: 2nd string
String1 - Lang2: 1st string
String2 - Lang2: 2nd string
String1 - First string for testing.
String2 - Another string for testing.
Uli, is this a bug or a problem with my code?
Thanks,
Andreas
============================================================
Index: intl/Makefile
--- intl/Makefile 2000/10/26 02:56:21 1.34
+++ intl/Makefile 2000/10/30 11:36:51
@@ -28,7 +28,7 @@
plural.y po2test.sed tst-gettext.sh tst-translit.sh \
translit.po
-test-srcs := tst-gettext tst-translit
+test-srcs := tst-gettext tst-translit tst-gettext2
tests = tst-ngettext
before-compile = $(objpfx)msgs.h
@@ -50,16 +50,20 @@
ifeq (no,$(cross-compiling))
ifeq (yes,$(build-shared))
ifneq ($(strip $(MSGFMT)),:)
-.PHONY: do-gettext-test do-translit-test
-tests: $(objpfx)mtrace-tst-gettext do-translit-test
+.PHONY: do-gettext-test do-translit-test do-gettext2-test
+tests: $(objpfx)mtrace-tst-gettext do-translit-test do-gettext2-test
$(objpfx)mtrace-tst-gettext: $(objpfx)tst-gettext.out
$(common-objpfx)malloc/mtrace $(objpfx)tst-gettext.mtrace > $@
$(objpfx)tst-gettext.out: tst-gettext.sh $(objpfx)tst-gettext
$(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/ \
$(objpfx)tst-gettext.mtrace
do-translit-test: $(objpfx)tst-translit.out
+ do-gettext2-test: $(objpfx)tst-gettext2.out
$(objpfx)tst-translit.out: tst-translit.sh $(objpfx)tst-translit
$(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/
+$(objpfx)tst-gettext2.out: tst-gettext2.sh $(objpfx)tst-gettext2
+ $(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/ \
+ $(objpfx)tst-gettext
endif
endif
endif
@@ -69,6 +73,7 @@
sed -f $^ > $@
CFLAGS-tst-gettext.c = -DTESTSTRS_H=\"$(objpfx)msgs.h\"
+CFLAGS-tst-gettext2.c = -DOBJPFX=\"$(objpfx)\"
CFLAGS-tst-translit.c = -DOBJPFX=\"$(objpfx)\"
$(objpfx)tst-translit.out: $(objpfx)tst-gettext.out
============================================================
Index: intl/tst-gettext2.c
--- intl/tst-gettext2.c created
+++ intl/tst-gettext2.c Mon Oct 30 12:35:07 2000 1.1
@@ -0,0 +1,68 @@
+/* Test of the gettext functions.
+ Copyright (C) 2000 Free Software Foundation, Inc.
+ Contributed by Thorsten Kukuk <kukuk@suse.de> and
+ Andreas Jaeger <aj@suse.de>, 2000.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+
+#include <locale.h>
+#include <libintl.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+struct data_t {
+ const char *selection;
+ const char *description;
+};
+
+int data_cnt = 2;
+struct data_t strings[] =
+{{"String1", N_("First string for testing.")},
+ {"String2", N_("Another string for testing.")}
+};
+
+const int lang_cnt = 3;
+const char *lang[] = {"lang1", "lang2", "lang3"};
+
+int
+main (void)
+{
+ int i;
+
+ /* Clean up environment. */
+ unsetenv ("LANGUAGE");
+ unsetenv ("LC_ALL");
+ unsetenv ("LC_MESSAGES");
+ unsetenv ("LC_CTYPE");
+ unsetenv ("LANG");
+ unsetenv ("OUTPUT_CHARSET");
+
+ textdomain ("tstlang");
+
+ for (i = 0; i < lang_cnt; ++i)
+ {
+ int j;
+
+ setlocale (LC_ALL, lang[i]);
+ bindtextdomain ("tstlang", OBJPFX "domaindir");
+
+ for (j = 0; j < data_cnt; ++j)
+ printf ("%s - %s\n", strings[j].selection, _(strings[j].description));
+ }
+
+ return 0;
+}
============================================================
Index: intl/tst-gettext2.sh
--- intl/tst-gettext2.sh created
+++ intl/tst-gettext2.sh Mon Oct 30 12:35:17 2000 1.1
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Test of gettext functions.
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+#
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# The GNU C Library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with the GNU C Library; see the file COPYING.LIB. If
+# not, write to the Free Software Foundation, Inc.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+common_objpfx=$1
+objpfx=$2
+malloc_trace=$3
+
+GCONV_PATH=${common_objpfx}iconvdata
+export GCONV_PATH
+LOCPATH=${common_objpfx}localedata
+export LOCPATH
+LC_ALL=C
+export LC_ALL
+
+# Generate the test data.
+test -d ${objpfx}domaindir || mkdir ${objpfx}domaindir
+# Create the locale directories.
+test -d ${objpfx}domaindir/lang1 || mkdir ${objpfx}domaindir/lang1
+test -d ${objpfx}domaindir/lang2 || mkdir ${objpfx}domaindir/lang2
+test -d ${objpfx}domaindir/lang1/LC_MESSAGES || mkdir ${objpfx}domaindir/lang1/LC_MESSAGES
+test -d ${objpfx}domaindir/lang2/LC_MESSAGES || mkdir ${objpfx}domaindir/lang2/LC_MESSAGES
+
+# Populate them.
+msgfmt -o ${objpfx}domaindir/lang1/LC_MESSAGES/tstlang.mo \
+ tstlang1.po
+
+msgfmt -o ${objpfx}domaindir/lang2/LC_MESSAGES/tstlang.mo \
+ tstlang2.po
+
+
+# Now run the test.
+MALLOC_TRACE=$malloc_trace \
+${common_objpfx}elf/ld.so --library-path $common_objpfx \
+${objpfx}tst-gettext2 > ${objpfx}tst-gettext2.out ${objpfx}domaindir
+
+exit $?
+
============================================================
Index: intl/tstlang1.po
--- intl/tstlang1.po created
+++ intl/tstlang1.po Mon Oct 30 12:26:58 2000 1.1
@@ -0,0 +1,13 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=US-ASCII\n"
+"Content-Transfer-Encoding: 7-bit\n"
+
+#: tst-gettext2.c:33
+msgid "First string for testing."
+msgstr "Lang1: 1st string"
+
+#: tst-gettext2.c:34
+msgid "Another string for testing."
+msgstr "Lang1: 2nd string"
============================================================
Index: intl/tstlang2.po
--- intl/tstlang2.po created
+++ intl/tstlang2.po Mon Oct 30 12:27:12 2000 1.1
@@ -0,0 +1,13 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=US-ASCII\n"
+"Content-Transfer-Encoding: 7-bit\n"
+
+#: tst-gettext2.c:33
+msgid "First string for testing."
+msgstr "Lang2: 1st string"
+
+#: tst-gettext2.c:34
+msgid "Another string for testing."
+msgstr "Lang2: 2nd string"
--
Andreas Jaeger
SuSE Labs aj@suse.de
private aj@arthur.inka.de
http://www.suse.de/~aj
More information about the Libc-hacker
mailing list