13

我知道至少有两种方法可以从 .js 文件中提取 gettext 字符串——在 python 模式下使用 gettext 解析器(我听说它有一些缺点)和用 python 编写的 Babel。

有没有办法从 HTML 文件中提取 gettext 字符串 - 或者更准确地说 - Javascript 模板(下划线、小胡子等......)。据我所知,Babel 或 gettext 也没有这样做。

我的一个朋友试图让 Babel 来做这件事,但它有一些严重的问题,比如缺少一些翻译等......

更新:一位朋友指导了我一点,所以现在看来​​我可以按照我想要的方式提取所有字符串。我唯一缺少的是“翻译评论”。我正在使用的命令是这样的:

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

这将在关键字中包含 pgettext 和 npgettext

更新 2:我发现要提取 HTML 标记属性内的 gettext 消息,我必须在 JS 部分之间插入换行符。例如,我必须转换它:

<a href="" title="<%= ST.i18n.gettext('Click to add another row') %>"></a>

进入这个:

<a href="" title="
<%= ST.i18n.gettext('Click to add another row') %>"></a>

如果 gettext 消息在同一行,Python 模式下的 xgettext 将不会提取它。这是一个快速的技巧,但似乎对我有用。

更新 3:PHP 模式下的 xgettext 似乎可以毫无问题地从 HTML 中提取消息(至少使用 Undsrscore 模板),这也适用于翻译者的评论。

find ../app -iname '*.html' | xargs xgettext --language=PHP --from-code=utf-8 -c --keyword=gettext --keyword=ngettext:1,2 --keyword=pgettext:1c,2 --keyword=npgettext:1c,2,3 -o translations.po

这样,我可以在模板文件中保持正常格式:

<a href="" title="<%= ST.i18n.gettext('Click to add another row') %>"></a>
4

1 回答 1

1

Babel 的消息抽取是可扩展的,你需要为新类型创建专门的抽取器。

您没有具体说明您(或您的朋友)发现了哪些“严重问题”,因此很难在这里更详细地为您提供帮助,但特定格式的任何问题都归结为错误的提取代码。

Babel支持使用entry_points.然而)。您可以使用额外的 PyPI 搜索来搜索特定的模板系统,以查看这些模板系统是否有 Babel 提取器。

于 2012-08-19T13:30:56.070 回答