问题
I've coded a gettext wrapper that makes the whole process of l10n a little bit simpler but somehow I can't get PoEdit to correctly identify and parse plural version calls to the function. This is what I originally had:
_e(array('%d house', '%d houses'), 5);
But that doesn't work at all, PoEdit picks nothing at all. I also tried:
_e('%d house', '%d houses', 5);
This time PoEdit catches the %d house
but not the plural form of %d houses
, however if I try exactly the same but with a ngettext()
call it works perfectly, both the singular and plural forms are identified:
ngettext('%d house', '%d house', 5);
I've correctly (?) added the _e
keyword to the project settings, but it doesn't pick up plural variations. I've also noticed that PoEdit only has _
, gettext
and gettext_noop
as the default keyworks to pick up, there is no reference whatsoever to the ngettext
, dngettext
or dcngettext
functions but it can still correctly pick up the ngettext
calls... This makes me wonder if PoEdit has hardcoded the ngettext
keyword - that would be really sad.
Anyway, is there any way to make PoEdit (or any other similar app), correctly parse custom functions?
回答1:
I've found the solution, the keyword has to be defined with the following expression:
_e:1,2
Source: http://osdir.com/ml/editors.poedit.user/2008-05/msg00012.html
回答2:
Actually you need to do both things above.
- Define the keyword like '_e:1,2' AND
- Add the plural form nplurals=2; plural=n != 1;
to the catalogue settings
回答3:
Here is another solution, it is very easy to setup. Just follow the steps below:
Menu: Catalog -> Settings will open the Settings dialog. On the Project Info tab you will find "Plural Forms" at the bottom. Just copy & paste the following line in this field:
nplurals=2; plural=n != 1;
That will fix the problem perfectly. I didn't even had to rescan the sources; the correct lines automatically appeared in the PoEditer.
来源:https://stackoverflow.com/questions/3393139/how-to-make-poedit-correctly-parse-custom-ngettext-implementation