【问题标题】:gettext: extract dgettext() strings to domain.po filesgettext:将 dgettext() 字符串提取到 domain.po 文件中
【发布时间】:2009-10-19 09:47:25
【问题描述】:

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

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

【问题讨论】:

  • 我找到了一个suggestion,关于如何分别解析每个域。但是,这是一种解决方法。

标签: localization gettext


【解决方案1】:

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

例如,假设您有一个用于 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 变体,并将它们复制/安装到正确的位置。

【讨论】:

  • 我已经知道这个解决方案,如问题的 cmets 中所述,但感谢您的努力。
  • 如果您认为这是一种解决方法,我认为不会有任何非解决方法的问题解决方案。另一种方法是编写您自己的程序来提取 dgettext() 调用,但是您几乎会复制 xgettext 的所有逻辑。
  • 这不是一个解决方案,但我会将赏金奖励给你,否则它将被浪费掉。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 2020-05-27
    相关资源
    最近更新 更多