2012-10-12 70 views
12

Duplicar posible:
How does gettext handle dynamic content?variables en PHP gettext

estoy usando gettext de PHP. Quiero traducir una oración que tiene una variable. es posible?

Por ejemplo, en Inglés:

Are you sure you want to block Alice?

(donde "Alicia" es el nombre del usuario.)

Pero, en alemán, el motivo no se muestra al final de la oración .

Sind Sie sicher, dass Sie Alice blockieren?

En messages.po, tengo

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

pero no veo manera de pasar una o más variables. es posible?

+2

Placeholdrs como 's'% y' sprintf' o similar se utilizan comúnmente para eso. Además, no debería utilizar ABBReviations para la cadena gettext source. Use inglés simple para los mensajes no traducidos. Los mensajes rara vez cambian en la práctica, y los catálogos gettext se pueden adaptar fácilmente si alguna vez sucede. – mario

Respuesta

26

poedit reconoce los vars.

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

y en PHP

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

¡Bueno, eso fue fácil! Gracias. He corregido para mostrar sprintf. printf solo muestra la longitud. –

+2

Sprintf? ¿Por qué? Printf imprime la cadena y sprintf la devuelve. Tal vez usted escriba 'echo sprintf'. –

+2

@chumkiu - 'sprintf()' se usa probablemente aquí por razones que son irrelevantes para gettext y localización. (Probablemente, la aplicación necesitó almacenar/manipular la cadena resultante, no enviarla directamente a stdout.) – rinogo