2012-07-19 14 views
6

Sto cercando un modo per far capire a PoEdit le annotazioni PHP. Ecco un esempio di codice che voglio PoEdit per raccogliere e mettere in catalogo:annotazioni PoEdit e PHP

class MyController extends Controller { 

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

} 

La parte interessante è @Title annotazione. Si accede in front controller e assegnato alla vista master, finendo efficacemente all'interno del tag <title>...</title>.

Ora ho bisogno di quella stringa tradotta, ma PoEdit sembra comprendere solo le espressioni _() e l'aggiunta di @Title alle parole chiave non funziona. Questo probabilmente perché le annotazioni in PHP sono nel blocco dei commenti.

Esiste un modo per forzare PoEdit a comprendere le annotazioni?

+4

non mi piace l'uso di commenti da fare in realtà roba sul documento. I commenti dovrebbero essere riservati per il testo leggibile dall'uomo per comprendere il codice e forse per aiutare gli IDE nella selezione dei tipi di variabile. Non dovrebbe server alcuna funzione nell'applicazione. –

+0

Questo è l'unico modo per fare annotazioni in PHP ed è effettivamente approvato dal sottosistema di riflessione nella lingua. Vedi il metodo getDocComment() su varie classi Reflection. Inoltre, sono davvero leggibili per gli umani: un'alternativa all'esempio precedente sarebbe qualcosa come PageView :: getInstance() -> setTitle ("Home") nel codice dell'azione. –

+0

Sono d'accordo con @Truth, usare le annotazioni per fare cose è come salvare variabili come nomi di file vuoti; puoi farlo, ma è solo imbarazzante. Inoltre, accedere al file come testo solo per leggere il valore sembra uno spreco quando si potrebbe, si sa, impostare una variabile ordinaria, ad esempio una proprietà di classe pubblica, con qualsiasi valore sia necessario. – Mahn

risposta

0

Se si vuole veramente fare in questo modo, è sufficiente estrarre le stringhe necessarie dai file php in un file esterno, sostituendo la parte di annotazione con _ (stringa); per ogni partita ed esegui Poedit su quel file.

Si può abbinare con .*\*\s\@(\w+)\s\"(\w+)\".* - $1 nel match sarà di annotazione (titolo), $2 sarà il valore: (Home)

3

Risposta breve, non si può.

POEdit utilizza xgettext per eseguire la scansione dei file quindi utilizzando una sintassi specifica, ignorando le righe commentate.

Per esempio, se le parole chiave sono _ i seguenti esempi saranno analizzati come:

_('test'); -> stringa 'test'

_("test"); -> stringa 'test'

_('test' -> string 'test'

_ 'test -> nessuna cattura

_('test -> nessuna cattura

_(test) -> nessuna cattura

_($test) -> nessuna cattura

//_('test'); -> nessuna cattura

/*_('test');*/ -> nessuna cattura

È possibile eseguire xgettext utilizzando altri parametri, ma non sono sicuro che riuscirai a raggiungere il tuo obiettivo.


Una soluzione semplice (non di serie OFC) è quello di aggiungere altre parole chiave come placeholder e fare una funzione PHP come

function placeholder($string){} 

e utilizzarlo in modo poedit può analizzarlo

class MyController extends Controller { 

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

} 

Al parser del frontend basta usare il semplice _($value) e il titolo verrà tradotto.

Non so come è il tuo codice ma assumerà il suo aspetto simile a questo.

Assumendo che $ tag = 'title' e il valore di $ = 'Home'

echo '<'.$tag.'>'._($value).'</'.$tag.'>'; 
Problemi correlati