PHP usando Gettext dentro <


Utilizo la cadena EOF de PHP para formatear el contenido HTML sin la molestia de tener que escapar de las comillas, etc. ¿Cómo puedo usar la función dentro de esta cadena?

<?php
    $str = <<<EOF
    <p>Hello</p>
    <p><?= _("World"); ?></p>
EOF;
    echo $str;
?>
Author: A.L, 2010-09-12

2 answers

Por lo que puedo ver en el manual, no es posible llamar a funciones dentro de cadenas HEREDOC. Una forma engorrosa sería preparar las palabras de antemano:

<?php

    $world = _("World");

    $str = <<<EOF
    <p>Hello</p>
    <p>$world</p>
EOF;
    echo $str;
?>

Una idea alternativa que viene a la mente es construir una clase con un método magic getter.

Usted declararía 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 hacer una búsqueda gettext dentro de un Bloque HEREDOC:

    $str = <<<EOF
    <p>Hello</p>
    <p>{$translate->World}</p>
EOF;
    echo $str;
?>

$translate->World se traducirá automáticamente a la búsqueda gettext gracias al método magic getter.

Para usar este método para palabras con espacios o caracteres especiales (por ejemplo, una entrada gettext llamada Hello World!!!!!!, tendrá que usar la siguiente notación:

 $translate->{"Hello World!!!!!!"}

Todo esto no está probado, pero debería funcionar.

Actualizar : Como @mario descubrió, es posible llamar a funciones desde cadenas HEREDOC después de todo. Creo que usando getters como esta es una solución elegante, pero el uso de una llamada directa a la función puede ser más fácil. Vea los comentarios sobre cómo hacer esto.

 77
Author: Pekka 웃,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-12 11:02:40

Por lo que puedo ver, acabas de añadir heredoc por error
No hay necesidad de usar la sintaxis de feo heredoc aquí.
Simplemente quítalo y todo funcionará:

<p>Hello</p>
<p><?= _("World"); ?></p>
 0
Author: Your Common Sense,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-12 11:12:03