2012-07-19 20 views
6

Estoy buscando una manera de hacer que PoEdit comprenda las anotaciones de PHP. Aquí está un ejemplo de código que quiero PoEdit para recoger y poner en catálogo:Anotaciones de PoEdit y PHP

class MyController extends Controller { 

    /** 
    * @Title "Home" 
    */ 
    public function index() { 
     ... 
    } 

} 

La parte interesante es @Title anotación. Se accede desde el controlador frontal y se asigna a la vista maestra, terminando efectivamente dentro de la etiqueta <title>...</title>.

Ahora necesito esa cadena traducida, pero PoEdit parece entender solamente _() expresiones, y la adición de @Title a las palabras clave no funciona. Esto es probablemente porque las anotaciones en PHP están en el bloque de comentarios.

¿Hay alguna manera de obligar a PoEdit a comprender las anotaciones?

+4

No me gusta el uso de los comentarios que se puede hacer realidad cosas en el documento. Los comentarios deben reservarse para que el texto legible por humanos comprenda el código y, quizás, para ayudar a los IDE a seleccionar los tipos de variables. No debe server ninguna función en la aplicación. –

+0

Esta es la única forma de hacer anotaciones en PHP y en realidad está respaldada por el subsistema de reflexión en el idioma. Vea el método getDocComment() en varias clases de Reflection. Además, en realidad son legibles para los humanos: una alternativa al ejemplo anterior sería algo así como PageView :: getInstance() -> setTitle ("Home") en el código de acción. –

+0

Estoy de acuerdo con @Truth, usar anotaciones para hacer cosas es como guardar variables como nombres de archivos en blanco; puedes hacerlo, pero es incómodo. Y además, acceder al archivo como texto solo para leer el valor parece un desperdicio cuando se podría, ya sabes, establecer una variable ordinaria, por ejemplo, una propiedad de clase pública, con cualquier valor que se necesite. – Mahn

Respuesta

0

Si realmente quiere hacer esto de esa manera, puede extraer las cadenas que necesita de los archivos php a un archivo externo, mientras reemplaza la parte de anotación con _ (cadena); para cada coincidencia y ejecutar Poedit en ese archivo.

puede hacer coincidir con .*\*\s\@(\w+)\s\"(\w+)\".* - $1 en el partido será anotación (título), $2 será el valor: (Inicio)

3

Respuesta corta, no se puede.

POEdit usa xgettext para escanear sus archivos, por lo tanto, utilizando la sintaxis específica, haciendo caso omiso de las líneas comentadas.

Por ejemplo, si sus palabras clave son _ los siguientes ejemplos serán analizados como:

_('test'); -> string 'prueba'

_("test"); -> string 'prueba'

_('test' -> string 'test'

_ 'test -> ninguna captura

_('test -> ninguna captura

_(test) -> ninguna captura

_($test) -> ninguna captura

//_('test'); -> ninguna captura

/*_('test');*/ -> ninguna captura

Puede ejecutar xgettext usando otros parámetros, pero no estoy seguro de si podrá lograr su objetivo.


Una solución fácil (no OFC estándar) es añadir otra palabra clave como placeholder y hacer una función php como

function placeholder($string){} 

y utilizarlo de manera Poedit puede analizarlo

class MyController extends Controller { 

    /** 
    * @Title "Home" 
    */ 
    public function index() { 
     placeholder('Home'); 
     ... 
    } 

} 

En su analizador de frontend solo use el simple _($value) y le será traducido el título.

Dunno, ¿cómo es su código, pero asumirá que es algo similar a esto.

Suponiendo que $ tag = 'título' y el valor $ = 'Inicio'

echo '<'.$tag.'>'._($value).'</'.$tag.'>'; 
Cuestiones relacionadas