我知道至少有两种方法可以从 .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>