使用JavaScript中的xgettext提取翻译者注释(在Python模式下)

时间:2012-08-21 10:21:01

标签: javascript python gettext xgettext

我有一个非常好用的命令,可以从我所有的.js和.html文件中提取字符串(这些文件只是Underscore模板)。但是,它似乎不适用于译者的评论。

例如,我在我的一个.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 "" 

但事实并非如此。我在这里做错了什么,或者译者的评论是不是在Python模式下工作?

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

在我的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. 评论终止符*/保留在译员评论中
  3. 但在大多数情况下,这应该不是一个大问题。

2 个答案:

答案 0 :(得分:5)

问题是你告诉xgettext源是Python,当它真的是JavaScript时。

这可能会使它在许多情况下“足够好”,但我认为这里的绊脚石是Python不会对//进行单行注释,它使用{{1} }。

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

答案 1 :(得分:3)

获得"翻译评论的方式"没有任何污染,是在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

这将按如下方式创建PO:

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

我在Ubuntu 12.04.4上使用gettext 0.18.1.1-5ubuntu3成功完成了此操作