Hi Philippe,
> On 13 Feb 2024, at 23:54, Philippe Michel <[email protected]> wrote:
>
> The NC_() documentation you quote adds that "To get the translated
> string, you should call g_dpgettext2() at runtime" but GTK (GTK2 at
> least) doesn't do this in gtk_action_group_add_actions(), it uses
> g_dgettext(), so there is not support for a message context.
Yes, it doesn’t even compile if you use `NC_()`.
> It looks like the alternatives would be to have the actionEntries table
> non static, which may be somewhat complicated, or to use "Move" for move
> as a noun and "verb|Move" for move as a verb. The latter seems the more
> practical choice.
There are also dirty tricks for introducing message contexts like just adding
some whitespace, for example using ”Move ” instead of ”Move” if it is a
noun/verb.
But we could also leverage the kind of hacky implementation of message contexts
in GNU gettext. Message contexts were introduced in a manner that did not
require a modification of the format of .mo resp. .gmo files. It was simply
assumed/stipulated that message ids must not contain the control character
end-of-transmission (ASCII 004), and that was then solemnly declared the
separator between a message id and a message context. Therefore, these two
calls should be equivalent (not 100 % sure though):
C_(”noun”, ”Move)
_(”noun\004Move”)
The second line should not really appear as such in the sources because we
don’t want that convoluted message id to be extracted by xgettext. But there
are ways to prevent that.
Yes, it’s a hack but not too bad, imho. And it would be a little bit more
straightforward than just randomly adding some whitespace to message ids.
I think I still have push permissions. Should I try that out and push it to
main/~~master~~ or whatever that was in CVS?
By the way, it should not go unmentioned that this problem is caused by the
gnubg feature ”switch language at runtime” which has never been a feature
supported by GNU gettext. If we would just require a restart of the application
after a language switch, we could avoid these kinds of problems.
Cheers,
Guido