Next: Prioritizing messages: How to determine which messages to translate first, Previous: Information Flow, Up: The Translator’s View [Contents][Index]
Suppose you are translating a PO file, and it contains an entry like this:
#, c-format msgid "One file removed" msgid_plural "%d files removed" msgstr "" msgstr ""
What does this mean? How do you fill it in?
Such an entry denotes a message with plural forms, that is, a message where
the text depends on a cardinal number. The general form of the message,
in English, is the
msgid_plural line. The
msgid line is the
English singular form, that is, the form for when the number is equal to 1.
More details about plural forms are explained in Additional functions for plural forms.
The first thing you need to look at is the
Plural-Forms line in the
header entry of the PO file. It contains the number of plural forms and a
formula. If the PO file does not yet have such a line, you have to add it.
It only depends on the language into which you are translating. You can
get this info by using the
msginit command (see Creating a New PO File) –
it contains a database of known plural formulas – or by asking other
members of your translation team.
Suppose the line looks as follows:
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
It’s logically one line; recall that the PO file formatting is allowed to break long lines so that each physical line fits in 80 monospaced columns.
The value of
nplurals here tells you that there are three plural
forms. The first thing you need to do is to ensure that the entry contains
msgstr line for each of the forms:
#, c-format msgid "One file removed" msgid_plural "%d files removed" msgstr "" msgstr "" msgstr ""
Then translate the
msgid_plural line and fill it in into each
#, c-format msgid "One file removed" msgid_plural "%d files removed" msgstr "%d slika uklonjenih" msgstr "%d slika uklonjenih" msgstr "%d slika uklonjenih"
Now you can refine the translation so that it matches the plural form.
According to the formula above,
msgstr is used when the number
ends in 1 but does not end in 11;
msgstr is used when the number
ends in 2, 3, 4, but not in 12, 13, 14; and
msgstr is used in
all other cases. With this knowledge, you can refine the translations:
#, c-format msgid "One file removed" msgid_plural "%d files removed" msgstr "%d slika je uklonjena" msgstr "%d datoteke uklonjenih" msgstr "%d slika uklonjenih"
You noticed that in the English singular form (
msgid) the number
placeholder could be omitted and replaced by the numeral word “one”.
Can you do this in your translation as well?
msgstr "jednom datotekom je uklonjen"
Well, it depends on whether
msgstr applies only to the number 1,
or to other numbers as well. If, according to the plural formula,
msgstr applies only to
n == 1, then you can use the
specialized translation without the number placeholder. In our case,
msgstr also applies to the numbers 21, 31, 41, etc.,
and therefore you cannot omit the placeholder.