xgettext 不提取 HTML 属性中的字符串

xgettext does not extract string in HTML attribute

我正在使用 Timber 作为模板引擎(用于 Wordpress 的 twig)开发 Wordpress 网站。我想通过 PoEdit(使用 xgettext)使用 Wordpress gettext 机制翻译界面。

模板片段:

<form action="/{{ current_language }}/api/search/{{ viewModel.currentSuperCategory.key }}"
  method="post"
  class="search-results__search"
  id="search-form">
<input placeholder="{{ __('City, region, ZIP', text_domain) }}&hellip;"
       class="input search-results__search__input"
       name="search-query"
       type="text"
       data-search-autocomplete />

我正在使用 PoEdit 从 *.twig 文件中提取字符串。

如果我将 {{ __('City, region, ZIP', text_domain) }} 放在 上模板中的一个单独的行,但它 在放置在输入占位符中时 不起作用,如上面的代码片段所示。

我按照此处的说明配置了 PoEdit:https://github.com/jarednova/timber/wiki/Text-Cookbook#generating-po-files-using-poedit

有人知道为什么会这样吗? xgettext 是否忽略 HTML 属性中的字符串?

另一个例子:

在以下情况下,将提取字符串进行翻译:

<i class="fa fa-envelope"></i>
{{ __('Search subscription', text_domain) }}
{{ __('Save free search subscription', text_domain) }}

但以下情况则不然:

<i class="fa fa-envelope"></i>
<span data-rt-xs="{{ __('Search subscription', text_domain) }}" data-rt-lg="{{ __('Save free search subscription', text_domain) }}"></span>

那是因为您实际上并不是从“HTML 属性”中提取,而是从 xgettext 不支持的模板语言中提取。为了解决这个问题,我猜,使用该页面上的粗 Python hack。实际上,你在 xgettext/Poedit 关于文件包含的内容 上撒谎,坦率地说,结果是意料之中的。该文件是有效的 Python 文件吗?不,不是,是 Twig。当你误导工具关于语言的时候,你不能真的期望它被正确解析。

相反,我建议按照该页面还推荐的方式进行操作,这是一种更好的方法:

A nicer solution is to use Twig-Gettext-Extractor, a special Twig parser to Poedit. The linked page contains instructions on how to set it up.