Hay un segundo argumento en la __()
función. Debe establecerse en el dominio que está utilizando para su complemento o tema. En los ejemplos a continuación 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 predeterminado es 'default'
el nombre de dominio de WordPress. Vea el vínculo para mas detalles.
Siempre use la cadena ( 'text_domain'
). Nunca use una variable, función o constante con la cadena. La mayoría de los programas de traducción (¿todos?) 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 %s
marcador de posición le dice al traductor humano que hay una cadena allí. Usar %d
para números. También hay otros marcadores de posición .
(Esta oración es un inglés gramaticalmente incorrecto. Úselo 'Hello %s, you owe me money.'
o 'Hello %s, you own my money.'
dependiendo del significado que estaba intentando)
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ídalo 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 es evidente qué son Arriba y Abajo , puede usar el _x()
para explicar el contexto de estos términos.
Puede encontrar otros casos de traducción aquí: Internacionalización: probablemente lo esté haciendo mal
textdomain
tiene que ser una cadena literal, no puede ser una variable / constante / propiedad.sprintf()
. Esa es realmente la forma de tener HTML en la cadena traducible.sprintf()
ayuda de otra manera que no sea un aspecto más limpio. Si tiene una oración con HTML adentro, comoSome text with a <strong>strong</strong> word inside.
cómo es posible traducir la oración como un todo y no traducirSome text with a
,strong
eword inside
individualmente (lo cual no tiene sentido).No abordaré el problema de las variables en la cadena ya que ya se ha dicho.
Desea mantener su cadena estática, lo que significa que el contenido no cambiará. También desea evitar HTML innecesario.
Lo anterior ocupará dos filas en su tabla para lo que es esencialmente el mismo texto. Se pueden reescribir como:
Reduciéndolo a una sola fila.
Algunas veces el HTML en el texto es inevitable. Tomar como ejemplo:
Como los idiomas son gramaticales, dividir el texto puede causar problemas a quien traduce.
Regla de oro. Las etiquetas de formato de texto HTML a mitad de la oración están bien. Las oraciones que comienzan y terminan con HTML solo desperdician espacio.
fuente
"<b>$string</b>"
. Entonces puedes usar'You currently owe %s dollars'
. Pero es posible que deba quedarse si lo usa con la_n()
función que requiere un%d
marcador de posición.%s
para hacerlo un poco más claro.