2012-10-12 16 views
12

Eventuali duplicati:
How does gettext handle dynamic content?Le variabili in PHP gettext

sto usando gettext di PHP. Voglio tradurre una frase che contiene una variabile. È possibile?

Ad esempio, in inglese:

Are you sure you want to block Alice?

(Dove "Alice" è il nome dell'utente.)

Ma, in tedesco, il soggetto non viene alla fine della frase .

Sind Sie sicher, dass Sie Alice blockieren?

In messages.po, ho

msgid "BLOCK" 
msgstr "Are you sure you want to block" 

ma non vedo modo per passare una o più variabili. È possibile?

+2

Placeholdrs come '% s' e' sprintf' o simili sono comunemente usati per questo. Inoltre non dovresti usare ABBReviation per la stringa sorgente gettext. Usa un inglese semplice per i messaggi non tradotti. I messaggi cambiano raramente nella pratica e i cataloghi gettext possono essere adattati facilmente se mai dovesse accadere. – mario

risposta

26

poedit riconosce i vars.

msgid "Are you sure you want to block %s?" 
msgstr "Sind Sie sicher, dass Sie %s blockieren?" 

e in PHP

sprintf(_('Are you sure you want to block %s?'),'Alice'); 
+0

Beh, è ​​stato facile! Grazie. Ho modificato per mostrare sprintf. printf mostra solo la lunghezza. –

+2

Sprintf? Perché? Printf stampa la stringa e Sprintf lo restituisce. Forse scrivi 'echo sprintf'. –

+2

@chumkiu - 'sprintf()' è probabilmente usato qui per ragioni che sono irrilevanti per gettext e localizzazione. (Probabilmente l'app stessa aveva bisogno di memorizzare/manipolare la stringa risultante, non di inviarla direttamente allo stdout.) – rinogo

Problemi correlati