I just learned that GNU gettext will soon have official support for disambiguating context in translations.
This is great. However, Bruno decided to not implement the somewhat ad-hoc solution which has been recommended for years in the gettext manual, and implemented in glib using Q_(), which is to embed the context as a prefix in the msgid, separated by |. Instead, gettext will introduce new macros, pgettext (context, msgid) npgettext (context, msgid, msgid_pural, n) and the context will appear in .po files as msgctxt "context" msgid "msgid" msgstr "..." Translators can hope that tools will learn about this new syntax and support disambiguating context better. Unfortunately, xgettext will only be able to create .po files with the new syntax if the context and the msgid appear as two separate string literals in the source. Which is not the case for Q_(). Therefore, I think we should consider deprecating the single-argument Q_() macro in favor of a Q2_() macro which takes context and msgid as separate arguments. It should be easy to detect the presence of a sufficently new gettext and implement Q2_() by falling back to the Q_() implementation in the absence of pgettext(): #if HAVE_PGETTEXT #define Q2_(context,msgid) pgettext(context,msgid) #else #define Q2_(context,msgid) Q_(context ## "|" ## msgid) #endif The name Q2_() is certainly not perfect. Well, at least one can interpret the 2 as a subtle hint that the macro takes 2 arguments... What do you think ? Matthias _______________________________________________ gtk-devel-list mailing list gtk-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-devel-list