This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

question about gettext language selection



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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]