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] |
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] |