Ответ 1
Насколько я могу видеть в руководстве, невозможно вызвать функции внутри строк HEREDOC. Громоздким способом было бы заранее подготовить слова:
<?php
$world = _("World");
$str = <<<EOF
<p>Hello</p>
<p>$world</p>
EOF;
echo $str;
?>
Обходной идеей, которая приходит на ум, является создание класса с помощью метода магического геттера.
Вы бы объявили класс следующим образом:
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 благодаря методу магического геттера.
Чтобы использовать этот метод для слов с пробелами или специальными символами (например, в элементе gettext с именем Hello World!!!!!!
, вам нужно будет использовать следующие обозначения:
$translate->{"Hello World!!!!!!"}
Это все непроверено, но должно работать.
Обновить. Как выяснил @mario, в любом случае можно вызвать функции из строк HEREDOC. Я думаю, что использование таких геттеров, как это, является гладким решением, но использование прямого вызова функции может быть проще. См. Комментарии о том, как это сделать.