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