Localization gettext:将dgettext()字符串提取到domain.po文件

Localization gettext:将dgettext()字符串提取到domain.po文件,localization,gettext,Localization,Gettext,我有多个域的程序,一些源文件包含不同文本域的dgettext()调用 如何将gettext字符串提取到多个.po文件?例如,调用dgettext('one','Hello')应转到one.po,调用dgettext('two','Bye')应转到two.po。xgettext只是忽略文本域并将所有内容放在单个文件中。如果您使用的是linux,请使用gtranslator程序操作*.po并测试*.po文件。首先,您需要一种分离域的方法 例如,假设您有一个lib域和一个app域,然后为dgettex

我有多个域的程序,一些源文件包含不同文本域的dgettext()调用


如何将gettext字符串提取到多个.po文件?例如,调用
dgettext('one','Hello')
应转到one.po,调用
dgettext('two','Bye')
应转到two.po。xgettext只是忽略文本域并将所有内容放在单个文件中。

如果您使用的是linux,请使用gtranslator程序操作*.po并测试*.po文件。

首先,您需要一种分离域的方法

例如,假设您有一个lib域和一个app域,然后为
dgettext()
调用创建一个快捷方式

_app(msg) -> dgettext("app", msg);
一个用于lib域:

_lib(msg) -> dgettext("lib", msg);
在代码中添加这些调用,如下所示

show_message(_app("Choose a directory to save your work."));
show_message(_lib("No space left on device."));
请记住,在初始化应用程序时,需要为两个域调用
bindtextdomain()

要提取它们,您需要在源代码树中包含以下标记的所有文件名上为
xgettext
指定不同的关键字:

xgettext --keyword=_app -d domain1 filenames...
xgettext --keyword=_lib -d domain2 filenames...

最后,将这两个.po文件编译成它们的二进制.mo变量,并将它们复制/安装到正确的位置。

我找到了一个关于如何分别解析每个域的方法。然而,这是一个变通办法。正如问题的评论中提到的,我已经知道这个解决方案,但感谢您的努力。如果您认为这是一个变通办法,我认为不会有任何非变通办法的解决方案。另一种方法是编写您自己的程序来提取dgettext()调用,但是您几乎复制了xgettext的所有逻辑。这不是一个解决方案,但我将把奖金奖励给您,因为如果不这样做,奖金将被浪费。