我有一个非常好用的命令,可以从我所有的.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 ""
正如您所看到的,唯一的问题是:
*/
保留在译员评论中但在大多数情况下,这应该不是一个大问题。
答案 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成功完成了此操作