conditional expressions

Jeff Epler jepler at
Mon Sep 30 14:34:04 EDT 2002

On Mon, Sep 30, 2002 at 03:09:08PM +0000, Alex Martelli wrote:
> I've shown this i18n'd with gettext's convention _( ... ) , but
> of course not all languages can pluralize by a constant suffix
> (English can't -- if ever a number of leaves or fishes was
> among the found things, we'd be in trouble...!-), so a better
> approach might be, e.g., for English:

It's even worse than this.  For instance, a language where the form for
1 is unique, numbers ending with 2, 3, 4 (except for 12, 13, and 14 --
I'm not sure about 111, 1211, etc) get a second form, and the rest of
the numbers get a third form.  I quote from the gnu gettext manual:

 Additional functions for plural forms

    The functions of the `gettext' family described so far (and all the
 `catgets' functions as well) have one problem in the real world which
 have been neglected completely in all existing approaches.  What is
 meant here is the handling of plural forms.

    Looking through Unix source code before the time anybody thought
 about internationalization (and, sadly, even afterwards) one can often
 find code similar to the following:

         printf ("%d file%s deleted", n, n == 1 ? "" : "s");

 After the first complaints from people internationalizing the code
 people either completely avoided formulations like this or used
 strings like `"file(s)"'.  Both look unnatural and should be avoided.
 First tries to solve the problem correctly looked like this:

         if (n == 1)
           printf ("%d file deleted", n);
           printf ("%d files deleted", n);

    But this does not solve the problem.  It helps languages where the
 plural form of a noun is not simply constructed by adding an `s'
 but that is all.  Once again people fell into the trap of believing
 the rules their language is using are universal.  But the handling
 of plural forms differs widely between the language families.
 For example, Rafal Maszkowski `<rzm at>' reports:

      In Polish we use e.g. plik (file) this way:
           1 plik
           2,3,4 pliki
           5-21 pliko'w
           22-24 pliki
           25-31 pliko'w
      and so on (o' means 8859-2 oacute which should be rather okreska,
      similar to aogonek).
[.... about 250 more lines describing how gettext attempts to address
these situations]

More information about the Python-list mailing list