【问题标题】:Extract translator comments with xgettext from JavaScript (in Python mode)使用 gettext 从 JavaScript 中提取翻译注释(在 Python 模式下)
【发布时间】:2012-08-16 16:18:32
【问题描述】:

我有一个运行良好的命令,可以从我的所有 .js 和 .html 文件(它们只是 Underscore 模板)中提取字符串。但是,它似乎不适用于 Translator cmets。

例如,我的一个 .js 文件中有这个:

/// TRANSLATORS: The word "manual" stands for manual process
gettext("manual");

使用以下命令:

find . -iname '*.html' -o -iname '*.js' | xargs xgettext --language=Python --from-code=utf-8 --keyword=pgettext:1c,2 --keyword=npgettext:1c,2,3 --add-comments=/ 

xgettext 应该从 .js 文件中提取注释并将其放入我的 .po 文件中,如下所示:

#. TRANSLATORS: The word "manual" stands for manual process
#: tax.js:200 
msgid "manual"     msgstr "" 

但事实并非如此。我在这里做错了什么还是翻译 cmets 只是不能在 Python 模式下工作?

编辑:我已经接受 John Flatness 的回答是正确的,但是 我确实找到了一种解决方法,它使我仍然可以使用 Python 模式并提取翻译器 cmets .它并不完美,因为它实际上在 cmets 中留下了一些语法:

在我的tax.js 文件中:

/*
# This is a translator comment */
gettext("What is this?");

运行这个命令:

find . -iname '*.html' -o -iname '*.js' | xargs xgettext --language=Python --from-code=utf-8 --keyword=pgettext:1c,2 --keyword=npgettext:1c,2,3 -c

.po 文件中的结果:

#. This is a translator comment */
#: tax.js:201
msgid "What is this?"
msgstr ""

如您所见,唯一的问题是:

  1. 我必须将评论写成 2 行
  2. 注释终止符*/留在翻译器cmets中

不过,在大多数情况下,这应该不是什么大问题。

【问题讨论】:

  • 您应该将解决方法移到下面的答案,因为我发现它很有用。
  • @Cas 有一个更干净的解决方案,请参阅下面的答案。

标签: javascript python gettext xgettext


【解决方案1】:

获得“翻译评论”而没有任何污染的方法是在javascript评论开始//之后添加一个哈希#,这样xgettext会将其后的所有内容解释为普通的Python评论。

试试这个:

//# This is a translation comment
console.log(_('Some String'));

并使用 xtext 提取,例如:

xgettext --language=Python --from-code=utf-8 --force-po -c -o file.po file.js

这将按如下方式创建采购订单:

#. This is a translation comment
#: /path/to/file.js:2
msgid "Some String"
msgstr ""

我在 Ubuntu 12.04.4 上使用 gettext 0.18.1.1-5ubuntu3 成功地做到了这一点

【讨论】:

    【解决方案2】:

    问题是你告诉 xgettext 源是 Python,而实际上它是 JavaScript。

    这可能使它在许多情况下“足够好”,但我认为这里的问题是 Python 不使用 // 进行单行 cmets,它使用 #

    有一个project on Github 为gettext 工具添加了javascript 支持。我不确定它的当前状态,你必须从源代码构建才能使用它。否则,我想您可以尝试xgettext 支持的其他具有更多类似 C/C++/Java 语法的语言。

    【讨论】:

    • 啊,这很有道理。谢谢!
    猜你喜欢
    • 2014-10-12
    • 2011-01-14
    • 2011-07-10
    • 1970-01-01
    • 2011-07-04
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多