From: Bruno Haible Date: Thu, 15 Jan 2004 11:31:22 +0000 (+0000) Subject: Test the handling of 'I' flags in translations. X-Git-Tag: v0.14~62 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c5a4919e455998175fa5e712988408f192bbaeb;p=thirdparty%2Fgettext.git Test the handling of 'I' flags in translations. --- diff --git a/gettext-tools/tests/format-c-5 b/gettext-tools/tests/format-c-5 new file mode 100755 index 000000000..e0bfedb97 --- /dev/null +++ b/gettext-tools/tests/format-c-5 @@ -0,0 +1,52 @@ +#! /bin/sh + +# Test 'I' format directive flag. + +tmpfiles="" +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="$tmpfiles fc5.pot" +: ${XGETTEXT=xgettext} +${XGETTEXT} -o fc5.pot --omit-header --no-location ${top_srcdir}/tests/format-c-5-prg.c + +tmpfiles="$tmpfiles fc5.ok" +cat < fc5.ok +#, c-format +msgid "father of %d children" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} fc5.ok fc5.pot || exit 1 + +tmpfiles="$tmpfiles fa.po" +# This should better be Farsi, not German. Can some translator help me? +cat < fa.po +#, c-format +msgid "father of %d children" +msgstr "Vater von %Id Kindern" +EOF + +tmpfiles="$tmpfiles fa" +test -d fa || mkdir fa +test -d fa/LC_MESSAGES || mkdir fa/LC_MESSAGES + +: ${MSGFMT=msgfmt} +${MSGFMT} -o fa/LC_MESSAGES/fc5.mo fa.po + +tmpfiles="$tmpfiles fa.po.tmp" +: ${MSGUNFMT=msgunfmt} +${MSGUNFMT} fa/LC_MESSAGES/fc5.mo -o fa.po.tmp + +tmpfiles="$tmpfiles fa.po.strip" +sed 1d < fa.po > fa.po.strip + +: ${DIFF=diff} +${DIFF} fa.po.strip fa.po.tmp || exit 1 + +LANGUAGE= ./fc5 fa_IR +result=$? + +rm -fr $tmpfiles + +exit $result diff --git a/gettext-tools/tests/format-c-5-prg.c b/gettext-tools/tests/format-c-5-prg.c new file mode 100644 index 000000000..8fd2fc8b0 --- /dev/null +++ b/gettext-tools/tests/format-c-5-prg.c @@ -0,0 +1,86 @@ +/* Test program, used by the format-c-5 test. + Copyright (C) 2004 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include +#include "xsetenv.h" + +/* For %Id to work, we need the real setlocale(), not the fake one. */ +#if !(__GLIBC__ >= 2) +# include "setlocale.c" +#endif + +/* Make sure we use the included libintl, not the system's one. */ +#undef _LIBINTL_H +#include "libgnuintl.h" + +#define _(string) gettext (string) + +int +main (int argc, char *argv[]) +{ + int n = 5; + const char *en; + const char *s; + const char *expected_translation; + const char *expected_result; + char buf[100]; + + xsetenv ("LC_ALL", argv[1], 1); + if (setlocale (LC_ALL, "") == NULL) + { + fprintf (stderr, "Couldn't set locale.\n"); + exit (1); + } + + textdomain ("fc5"); + bindtextdomain ("fc5", "."); + + s = gettext ("father of %d children"); + en = "father of %d children"; +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) + expected_translation = "Vater von %Id Kindern"; + expected_result = "Vater von \xdb\xb5 Kindern"; +#else + expected_translation = "Vater von %d Kindern"; + expected_result = "Vater von 5 Kindern"; +#endif + + if (strcmp (s, en) == 0) + { + fprintf (stderr, "String untranslated.\n"); + exit (1); + } + if (strcmp (s, expected_translation) != 0) + { + fprintf (stderr, "String incorrectly translated.\n"); + exit (1); + } + sprintf (buf, s, n); + if (strcmp (buf, expected_result) != 0) + { + fprintf (stderr, "printf of translation wrong.\n"); + exit (1); + } + return 0; +}