Por lo que yo puedo ver en the manual, no es posible llamar a funciones dentro de las cadenas heredoc. Una forma sería engorroso para preparar de antemano las palabras:
<?php
$world = _("World");
$str = <<<EOF
<p>Hello</p>
<p>$world</p>
EOF;
echo $str;
?>
una idea solución que viene a la mente es la construcción de una clase con un magic getter method.
Se podría declarar una clase como esta:
class Translator
{
public function __get($name) {
return _($name); // Does the gettext lookup
}
}
inicializar un objeto de la clase en algún momento:
$translate = new Translator();
A continuación, puede utilizar la siguiente sintaxis para realizar una búsqueda gettext dentro de una bloque heredoc:
$str = <<<EOF
<p>Hello</p>
<p>{$translate->World}</p>
EOF;
echo $str;
?>
$translate->World
será automáticamente tra nslated a la búsqueda de gettext gracias al método magic getter.
Para utilizar este método para las palabras con espacios o caracteres especiales (por ejemplo, una entrada gettext llamado Hello World!!!!!!
, que tendrá que utilizar la siguiente notación:.
$translate->{"Hello World!!!!!!"}
Esto es todo lo no probado, pero debería funcionar
Actualización: Como @mario averiguó, es posible llamar funciones de cadenas HEREDOC después de todo. Creo que usar getters como esta es una solución elegante, pero usar una llamada de función directa puede ser más fácil. Vea los comentarios en cómo hacer esto.
@FFish de nada. No está probado, así que no puedo darte una garantía total, pero hasta donde puedo ver, esto funcionará. Vea mi última actualización (con respecto a espacios y caracteres especiales) sobre cómo tratar con identificadores de texto gettext más complejos –
Wow, uso bastante complicado/intrigante de getters. – mario
Resulta que puede usar llamadas a funciones. Con '$ _ =" _ ";' y '{$ _ ('text')}'. Pero la sintaxis getter es +1. – mario