Насколько я вижу в руководстве , невозможно вызывать функции внутри строк HEREDOC. Обременительным было бы подготовить слова заранее:
<?php
$world = _("World");
$str = <<<EOF
<p>Hello</p>
<p>$world</p>
EOF;
echo $str;
?>
Обходной идеей, которая приходит в голову, является создание класса с помощью метода magic getter .
Вы бы объявили класс следующим образом:
class Translator
{
public function __get($name) {
return _($name); // Does the gettext lookup
}
}
Инициализировать объект класса в некоторый момент:
$translate = new Translator();
Затем вы можете использовать следующий синтаксис для поиска gettext внутри блока HEREDOC:
$str = <<<EOF
<p>Hello</p>
<p>{$translate->World}</p>
EOF;
echo $str;
?>
$translate->World
будет автоматически переведен в поиск gettext благодаря волшебному методу getter.
Чтобы использовать этот метод для слов с пробелами или специальных символов (например, запись gettext с именем Hello World!!!!!!
, вам необходимо использовать следующую запись:
$translate->{"Hello World!!!!!!"}
Это все не проверено, но должно работать.
Обновление : Как выяснил @mario, все-таки можно вызывать функции из строк HEREDOC. Я думаю, что использование геттеров, таких как это, является гладким решением, но использование прямого вызова функции может быть проще. Смотрите комментарии о том, как это сделать.