Hi all, I asked this question a while ago (maybe a week or so?), although I've been trying to work this out for a couple of months. Well, I just worked out how to do it so I thought I'd share in case anyone else wants to know.
I've got an extension that provides a window menu from the appMenu almost identical to the one you get by right-clicking a window's system title bar: with 'Minimize', 'Maximize', 'Move', ... Now I wanted to add translations, but since the strings in my menu are identical to those in the system right-click menu, I felt that rather than starting from scratch and having to rely on the good will of translators to re-translate all the strings for me, I should just use the translations from the "system". After a lot of searching I realised that that right-click menu is handled by either Metacity or Mutter, being the window manager. So I looked in the Mutter source (in the 'po') directory at en_GB.po (translation file), and noticed a whole bunch of strings to be translated: Ma_ximize Mi_nimize _Resize _Move and so on. Exactly what I want (the _ are for keyboard accelerators). Once I discovered this, it's simply a matter of adding the following lines (well in 3.2 anyhow, I imagine it's much the same in 3.4): const Gettext = imports.gettext.domain('mutter'); // I want to use the mutter translations const _ = Gettext.gettext; log(_("Mi_nimize")); // Voila! It translates!! So after ages of wondering how to do this, it boils down to really just finding the right domain to use with gettext (which was a bit of educated guessing - first that the system window menu would be handled by the window manager, and then downloading the source to look at the po files). (I did also take the additional step of removing the underscores since they appear as literal underscores if used in a PopupMenuItem. If a language legitimately uses underscores as characters then the translated string will be missing them, but hopefully there aren't too many of those. Also, I'm tossing up whether to keep using the mutter translations or to create my own translations (just copying the relevant lines from the mutter .po files) which allows me to at least add the possibility of extra translated strings that are not in the mutter source, like 'Raise window', or 'Window options'.) Also, to test a translation quickly you can go in the terminal and do: export LANG=it_IT.utf8 # for example italian gjs # start gjs console const Gettext = imports.gettext.domain('mutter'); // use mutter translations // if you are using your own domain not in the system locale directory, // you probably need some sort of bindtextdomain('mydomain','/path/to/locale/dir') const _ = Gettext.gettext; _("Maximize Window") // "Massimizza la finestra" (I just do it in the console to keep the language changes to that one terminal session instead of affecting my global session). Hope this helps someone some time in the future! _______________________________________________ gnome-shell-list mailing list gnome-shell-list@gnome.org https://mail.gnome.org/mailman/listinfo/gnome-shell-list