The "Invite" StatusNet message is used in two different context: as a tab title and as a link.
Two messages need to be created.
"Login" also has the same problem, except that it's used in three different contexts (as title, tab and upper link). In Arabic the tab and the title will be translated nouns, but the link will be a verb.
This is one of the gigantic drawbacks of using gettext l10n extracted from source files. Without changing the text (that is hard coded in the code), this *cannot* be done. I'll point Brion here and will ask him what his thoughts are regarding this issue.
And with Gettext it is common that one string is used in many places, if the developers don't use the context parameter often.
You mention using a "context" parameter. Is that something that can be used to separate "message text" from "message text" in the code? This would be very, very, helpful to distinguish verbs from nouns, for example. Please provide an example on how to use this; can forward that to the StatusNet devs.
Ok, I've hacked in support for this, not yet used.
pgettext and npgettext are implemented as macros (wtf?!) in gettext.h and aren't provided in PHP's gettext module, but it was easy to add compatible wrappers and I've confirmed they actually seem to work. :)
Warning: xgettext by default doesn't recognize those as keywords for PHP source files, so these parameters must be added to the xgettext command-line when rebuilding the .po template:
Something like this, if consistently used, should do the trick: pgettext("tab", "Login") vs pgettext("button", "Login")
Anything else we should add to the list before we go contextualizing a bunch of messages?