Tuesday, 22 May 2007

gettext: lesson 2

The first lesson was about wrong assumptions that people do when it comes to i18n. This article is mostly targeted at developers which want to support i18n properly, in particular, plural forms.

This is my second n?getetxt lesson.
This is about making your update-po target to include all the strings you want localized in the pot file.

Probably, at some point you, as a developer have written something like:

print("You won %d point%s", points, points>1?"s":"" ) ;

Well, is nice and dandy that you want to make the proper choice of words when you have more than one point. I appreciate that, but you are doing it wrong. There is a tool for that, as I explained before.

Now, lesson 2.

You have understood what you have to do, but you just hate typing ngettext/gettext all over the place, so you probably defined something like:

#define _(X) gettext(X)
#define _n(sg,pl,n) getext(sg,pl,num)

So now you can write trhis piece of code:

print(_n("You won %d point", "You won %d points", points), points ) ;

The problem: how to convince xgettext to add those strings to the pot file?

Nothing simpler... just add _n as an additional keyword when invoking xgettext... but you have to specify that this is a definition for ngetetxt, so, you will end up having in your update-po target something like this:

xgettext ../src/*.c --keyword=_ --keyword=_n:1,2


No comments: