Re: problem with plural-forms

From: Peter Eisentraut <peter_e(at)gmx(dot)net>
To: pgsql-hackers(at)postgresql(dot)org
Cc: Zdenek Kotala <Zdenek(dot)Kotala(at)sun(dot)com>
Subject: Re: problem with plural-forms
Date: 2009-05-26 10:39:08
Message-ID: 200905261339.08519.peter_e@gmx.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Monday 25 May 2009 19:11:24 Zdenek Kotala wrote:
> I tried to run msgfmt -v ... on solaris and I got following error:
>
> Processing file "psql-cs.po"...
> GNU PO file found.
> Generating the MO file in the GNU MO format.
> Processing file "psql-cs.po"...
> Lines 1311, 1312 (psql-cs.po): incompatible printf-format.
> 0 format specifier(s) in "msgid", but 1 format specifier(s) in
> "msgstr". ...
> ...
>
> Problem is in:
>
> #: print.c:2351
> #, c-format
> msgid "(1 row)"
> msgid_plural "(%lu rows)"
> msgstr[0] "(%lu řádka)"
> msgstr[1] "(%lu řádky)"
> msgstr[2] "(%lu řádek)"
>
>
> The problem here is (1 row) instead of (%lu row). When I run msgfmt
> without -v everything works fine but I think we should fixed it (there
> are more occurrences of this issue).

GNU gettext accepts this, and in fact the GNU gettext documentation explicitly
points out that this allowed:

"""
In the English singular case, the number - always 1 - can be
replaced with "one":

printf (ngettext ("One file removed", "%d files removed", n), n);

This works because the `printf' function discards excess arguments
that are not consumed by the format string.
"""

One might consider this better style (English style, not C style) in some
contexts.

Of course the concrete example that you show doesn't actually take advantage
of this, so if it is important to you, please send a patch to fix it.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Eisentraut 2009-05-26 10:45:00 Re: A couple of gripes about the gettext plurals patch
Previous Message Tatsuhito Kasahara 2009-05-26 08:26:31 Re: patch for ja.po