【问题标题】:xgettext does not extract string in HTML attributexgettext 不提取 HTML 属性中的字符串
【发布时间】:2015-11-25 07:11:25
【问题描述】:

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

模板sn-p:

<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) }} 放在模板中的单独一行,它工作,但它 在输入占位符中时不工作,如上面的 sn-p 所示。

我按照此处的说明配置了 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>

【问题讨论】:

标签: wordpress twig poedit xgettext timber


【解决方案1】:

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

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

一个更好的解决方案是使用Twig-Gettext-Extractor,这是 Poedit 的特殊 Twig 解析器。链接页面包含有关如何设置的说明。

【讨论】:

  • 感谢您的回答。你当然是对的,Python 解决方法是一种 hack。我也曾尝试使用 Twig-Gettext-Extractor。但命令本身不起作用:RuntimeException: Gettext 命令"xgettext --sort-output [...] failed with error code 1 and output: 。我无法调试它,因为它是一个系统命令,并且该错误并没有真正的帮助。不过,我会努力让它发挥作用。
猜你喜欢
  • 2021-12-07
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
相关资源
最近更新 更多