xgettext does not extract string in HTML attribute

扶醉桌前 提交于 2019-12-02 03:54:51

问题


I'm working on a Wordpress site using Timber as templating engine (twig for Wordpress). I want to translate the interface using the Wordpress gettext mechanism via PoEdit (uses xgettext).

Template snippet:

<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 />

I'm using PoEdit to extract the strings from the *.twig file.

It is working if I place {{ __('City, region, ZIP', text_domain) }} on a separate line in the template, but it is not working when placed in the input placeholder as shown in the snippet above.

I configured PoEdit as explained here: https://github.com/jarednova/timber/wiki/Text-Cookbook#generating-po-files-using-poedit

Does anybody have an idea why that is the case? Is xgettext ignoring strings inside of HTML attributes?

Another example:

In the following case the strings get extracted for translation:

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

But not in the following case:

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

回答1:


That’s because you are not actually extracting from “HTML atttributes”, but from a template language that xgettext has no support for. To work around that you are, I’m guessing, using the gross Python hack from that page. In effect, you are lying to xgettext/Poedit about what the file contains, with results that are, frankly, to be expected. Is the file a valid Python file? No, it isn’t, it’s Twig. You can’t really expect it to be parsed correctly when you mislead the tool about the language.

Instead, I recommend doing what that page also recommends, and as a better way:

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.



来源:https://stackoverflow.com/questions/33910482/xgettext-does-not-extract-string-in-html-attribute

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!