xgettext does not extract string in HTML attribute
Asked Answered
K

1

3

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>
Krasnoyarsk answered 25/11, 2015 at 7:11 Comment(2)
The two best solutions are: (1) Make Twig create cache versions of all template files. These are actual PHP files. Then let xgettext or Poedit operate on these cache files instead. (2) Poedit 2 Pro seems to have built-in Twig support.Hebert
See also #38666166 and #34243778Hebert
E
2

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.

Everick answered 26/11, 2015 at 8:56 Comment(1)
Thanks for your answer. You are of course right about the Python workaround being a hack. I had also tried to use the Twig-Gettext-Extractor. But the command itself is not working: RuntimeException: Gettext command "xgettext --sort-output [...] failed with error code 1 and output: . I can't debug it, since it's a system command, and the error is not really helping. I will try to get it to work though.Krasnoyarsk

© 2022 - 2024 — McMap. All rights reserved.