从Javascript和HTML文件(模板)中提取gettext字符串

时间:2012-08-19 12:57:06

标签: python html gettext babel

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

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

我的一个朋友试图让巴贝尔去做,但是它有一些严重的问题,错过了一些翻译等...

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

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>
Python模式下的xgettext如果在同一行上,则不会提取gettext消息。这是一个似乎对我有用的快速黑客。

更新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>

1 个答案:

答案 0 :(得分:1)

Babel的消息提取是可扩展的,您需要为新类型创建专用的提取器。

您没有指定您(或您的朋友)发现的“严重问题”,因此很难在此更详细地帮助您,但是特定格式的任何问题都归结为错误的提取代码。

Babel支持使用entry_points从鸡蛋中加载提取器,因此有一个很大的list of such extractors listed on PyPI(链接的搜索列出了与Babel相关的任何内容,但其中有很多是提取器;有还没有用于Babel提取器的Trove分类器)。您可以对特定模板系统使用其他PyPI搜索,以查看是否存在Babel提取器。