On 24 Feb, Sven Neumann wrote:
> On the first thought the idea looks promising, but I fear it is
> not that easy. GTK+ wants to create the menu using the orginal
> strings.
Yes. That's why I thought of ripping off a slice from both the
translation AND the original.
Consider this:
Plugin wants to create a menu <Image>/Filters/verynew/stupidtool.
Now we first check:
- Is there a menu <Image>/Filters/verynew
-> if not continue ripping off until we found a menu which is
already there.
Let's assume we do have the menu <Image>/Filters already which
translates into the German <Image>/Filter. We detected that
the next instance we have to create is <Image>/Filters/verynew.
Unfortuntely we don't have a translation handy but we can get
this one by taking the translation from
<Image>/Filters/verynew/stupidtool and strip off the same number of
instances. The full translation would be
<Image>/Filters/ganzneu/dummesteil <Image>/Filters/ganzneu and this
is the menu to create.
The really trick is to sell this to Gtk+. The only think we can supply
to Gtk+ is the menuname (the shortened one in this case) and a function
which translates it. Thus we'd have to create a function which is able
to do a translation although we can not directly pass the original.
> The translation is only used when the label is to be displayed.
Right.
> Therefore it then calls our menu_translate functions which takes
> care of appending the factory name (<Image>, <Toolbox>, ...) to
> the string, passing this string to gettext and removing the factory
> name from the translated result. GTK+ takes the returned string
> and strips away everything up to the last '/' and puts that into
> the menu_label. At least that is my impression of how it works.
Right, too.
> Submenus are created on the fly when they are needed. Unfortunately
> they have to be created before the actual menu_entry can be added.
> That means if
> <Image>/Filters/Render/Nature/Flame...
> is to be created, the submenu
> <Image>/Filters/Render/Nature
> is created automatically. Unfortunately there is no such string
> in the textdomain of the plugin and the lookup fails. If the lookup
> order would be different, it would be easy to store the result of the
> latest lookup and strip the last part. But that's fiction :-(
Right again.
I'll think about this issue and since we got that far I'm nearly
certain that we get a solution for this one also....
--
Servus,
Daniel