使用xgettext从JavaScript中提取翻译器注释(在Python模式下)
Extract translator comments with xgettext from JavaScript (in Python mode)
我有一个非常好用的命令,可以从我所有的.js和.html文件(它们只是Undercore模板)中提取字符串。然而,它似乎不适用于译者的评论。
例如,我在一个.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 ""
正如你所看到的,唯一的问题是:
- 我必须用两行写评论
- 注释终止符
*/
留在翻译器注释中
不过,在大多数情况下,这应该不是什么大问题。
问题是,当它实际上是JavaScript时,您告诉xgettext
源代码是Python。
这可能会使它在许多情况下"足够好"地工作,但我认为这里的问题是Python没有使用//
进行一行注释,而是使用#
。
Github上有一个项目为gettext工具添加了javascript支持。我不确定它的当前状态,你必须从源代码构建才能使用它。否则,我想你可以尝试xgettext
支持的其他语言,这些语言有更多类似C/C++/Java的语法。
在没有任何污染的情况下获得"翻译器注释"的方法是在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成功地做到了这一点
- 从桌面读取python文件时高亮显示代码
- Javascript,访问一个主要对象模块模式中的每个对象
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 同位素库错误:未捕获错误无布局模式包装生产线8
- python-selenium-点击上升链接
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 如何缩短MongoDB ObjectId并在Mongoose模式中使用它
- python到“;流“;字典处理
- D3.js模式不适用于弧形或圆环图
- Webdriver.io pageObject模式-通过传递参数来定义元素选择器
- 模块模式和这个
- 带有let的JS/EECMAScript6私有字段的模式
- 我是否可以检测到javascript正在被卸载(作为调试模式)
- 执行动态模式弹出
- 注意:wp_enqueue_script调用不正确.在 Wordpress 调试模式下
- AngularJS ui路由器html5模式中断路由
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 使用xgettext从JavaScript中提取翻译器注释(在Python模式下)
- AES CTR模式与Python和Javascript的奇怪问题