Pregunta:
¿Cuál es el enfoque adecuado para crear cadenas de traducción?
Por ejemplo,
echo __( 'Hello ' . $first . ' you owe me money.' );
echo __( '<div><p>Top: ' . $t_margin . '</p>' . '<p>Bottom: ' . $b_margin . '</p></div>' )
¿Está bien agregar las cadenas y / o HTML o debería hacerse primero y luego ejecutar la traducción como:
$html = '<div><p>Top: ' . $t_margin . '</p>' . '<p>Bottom: ' . $b_margin . '</p></div>';
echo __( $html );
Respuesta:
Hay un segundo argumento en la función __()
. Debe establecerse en el dominio que está utilizando para su complemento o tema. En los ejemplos siguientes, utilizo 'text_domain'
. Su cadena de dominio debe ser única. No debe coincidir con ninguna otra cadena de dominio. No usar un argumento de dominio de texto tiene como 'default'
el nombre de dominio de WordPress. Vea el vínculo para mas detalles.
Utilice siempre la cadena ( 'text_domain'
). Nunca use una variable, función o constante con la cadena en ella. La mayoría (¿todos?) Los programas de traducción no lo verán sin la cadena allí.
Tu codigo:
echo __( 'Hello ' . $first . ' you own me money.' );
No incluya variables en la cadena.
Una mejor manera:
echo sprintf( __( 'Hello %s you own me money.', 'text_domain' ), $first );
O solo:
printf( __( 'Hello %s you own me money.', 'text_domain' ), $first );
El marcador de posición %s
le dice al traductor humano que una cadena va allí. Utilice %d
para los números. También hay otros marcadores de posición .
(Esta oración es gramaticalmente incorrecta en inglés. Utilice 'Hello %s, you owe me money.'
o 'Hello %s, you own my money.'
según el significado que pretendías.)
Tu codigo:
$html = '<div><p>Top: ' . $t_margin . '</p>' . <p>Bottom: ' . $b_margin . '</p></div>';
No traduzcas HTML. Es lo mismo en cualquier idioma.
Una mejor manera:
$html = sprintf( '<div><p>%s</p><p>%s</p></div>', __( 'Top: ', 'text_domain' ) . $t_margin, __( 'Bottom: ', 'text_domain' ) . $b_margin );
O divídelo en varias líneas:
$html = sprintf(
'<div><p>%s</p><p>%s</p></div>',
__( 'Top: ', 'text_domain' ) . $t_margin,
__( 'Bottom: ', 'text_domain' ) . $b_margin
);
Si no está _x()
qué son Top y Bottom , puede usar _x()
para explicar el contexto de estos términos.
Puede encontrar otros casos de traducción aquí: Internacionalización: probablemente lo esté haciendo mal