Я репортер билета gettext, на который вы ссылаетесь в своем посте.
Когда я отправлял билет, я имел в виду что-то совершенно другое, нечто более похожее на это:
<?php
$msg = _(<<<TXT
He said: "Hello world!".
TXT
);
?>
Gettext не может извлечь текст из таких строк heredoc / nowdoc, но это может быть очень полезно при переводе больших фрагментов текста.
В моем случае я использую gettext в PHP-скрипте CLI для перевода фрагментов текста, содержащих разметку XML. Эта разметка является частью исходного текста и также должна быть переведена. Необходимость вручную экранировать каждую цитату или апостроф в разметке делает сообщения довольно трудными для чтения в POedit или любом другом редакторе.
В вашем случае кажется, что вы хотите извлечь интерполированный код в (heredoc / nowdoc) строках. Вы можете легко обойти эту проблему, подготовив текст перед тем, как фактически использовать интерполяцию:
<?php
$t = _('test');
echo <<<EOD
<h1>$t</h1>
EOD
?>
Я не думаю, что это следует считать ошибкой, поскольку точный эквивалент кода, который вы разместили с использованием синтаксиса heredoc, был бы:
<?php
echo "<h1>{$t->_('test')}</h1>";
?>
, из которого gettext также не может извлечь "тестовое" сообщение.