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?