Translation 是否将预先存在的/系统翻译与gettext一起使用?

Translation 是否将预先存在的/系统翻译与gettext一起使用?,translation,gettext,Translation,Gettext,我正在编写一个小程序(javascript,但我认为它不重要),并试图向其添加翻译 其中唯一需要翻译的字符串是“最小化”、“最大化”、“恢复”、“关闭”等等——这些字符串应该已经在某个地方进行了翻译,对吗?因为当我右键单击窗口的系统标题栏时,我会看到一个菜单,其中包含这些非常相同的选项(我使用的是Linux) 有没有什么方法可以让我使用这些已经完成的翻译,而不必再做一遍(这需要我找到一大群翻译人员愿意自愿花些时间来做翻译) 这仅仅是找到正确的gettext域的问题吗?这就是我目前设置它的方式(它

我正在编写一个小程序(javascript,但我认为它不重要),并试图向其添加翻译

其中唯一需要翻译的字符串是“最小化”、“最大化”、“恢复”、“关闭”等等——这些字符串应该已经在某个地方进行了翻译,对吗?因为当我右键单击窗口的系统标题栏时,我会看到一个菜单,其中包含这些非常相同的选项(我使用的是Linux)

有没有什么方法可以让我使用这些已经完成的翻译,而不必再做一遍(这需要我找到一大群翻译人员愿意自愿花些时间来做翻译)

这仅仅是找到正确的gettext域的问题吗?这就是我目前设置它的方式(它是用javascript编写的,但这与问题无关):


好的,经过进一步思考,我意识到我知道如何在gettext中使用预先存在的翻译。要使用预先存在的文本域asdf,只需执行以下操作

const Gettext = imports.gettext.domain('asdf');
const _ = Gettext.gettext;
这并不奇怪

事实证明,我的实际问题是我想将这些翻译用于“最小化”、“最大化”、“恢复”、“关闭”等,虽然我确信这些翻译已经存在于我的系统中的某个地方,但我不知道它们实际上在什么gettext域中

要了解这一点:

在Fedora(反正是我的版本)上,翻译的文本在
/usr/share/locale

我进入了
/usr/share/locale/en_GB/LC_消息
,那里有一堆
.mo
文件。这些不是人类可读的,但我仍然可以浏览它们:

[foo@bar]$ grep -i maximize *.mo
Binary file devhelp.mo matches
Binary file evolution-3.2.mo matches
Binary file f-spot.mo matches
Binary file gnome-games.mo matches
Binary file gnome-media-2.0.mo matches
Binary file gnome-utils-2.0.mo matches
Binary file metacity.mo matches
Binary file mutter.mo matches
Binary file nautilus.mo matches
查看列表时,我突然想到,因为我正在查找窗口菜单上项目的翻译,所以可能是我的窗口管理器拥有这些翻译。我的窗口管理器(正如我在gnome外壳上一样)是
mutter
,它基于
metacity

因此,我下载了mutter源代码并查看了
po
文件(人类可读的翻译文件),瞧

#: ../src/ui/menu.c:69
msgid "Mi_nimize"                                                               
msgstr "Mi_nimise"                                                              

#: ../src/ui/menu.c:71                                                          
msgid "Ma_ximize"                                                               
msgstr "Ma_ximise"                                                              

#: ../src/ui/menu.c:73                                                          
msgid "Unma_ximize"                                                             
msgstr "Unma_ximise"                                                            

...and so on (the underscores are the keyboard accelerators for that menu item).
因此,现在我已经找到了翻译,这只是一个简单的例子(在我的代码中):

(我必须将
(“Ma_ximize”)
输入gettext,因为这正是在
mutter.mo
文件中翻译的字符串——没有
“最大化”
没有下划线的翻译。翻译后,我不得不从翻译文本中删除下划线,这可能会在某种程度上破坏使用下划线的语言,但我希望不会太多)

总之,使用另一个(预先存在的)文本域很容易,但问题是找到包含所需字符串的文本域

#: ../src/ui/menu.c:69
msgid "Mi_nimize"                                                               
msgstr "Mi_nimise"                                                              

#: ../src/ui/menu.c:71                                                          
msgid "Ma_ximize"                                                               
msgstr "Ma_ximise"                                                              

#: ../src/ui/menu.c:73                                                          
msgid "Unma_ximize"                                                             
msgstr "Unma_ximise"                                                            

...and so on (the underscores are the keyboard accelerators for that menu item).
    const Gettext = imports.gettext.domain('mutter')
    const _ = Gettext.gettext;

    log(_("Ma_ximize")); // to translate 'Ma_ximize'