Localizando una cadena con una etiqueta html con una palabra dentro de esa etiqueta

2

He traducido muchas cadenas con éxito anteriormente, pero esta me da un dolor de cabeza. Esta parte se usa dentro de mi archivo de contenido relacionado.php que utilizo para mostrar publicaciones relacionadas

Aquí está la cadena actual que estoy usando

<?php echo 'Click <a href="'. esc_url( get_permalink() ) . '">here</a> to go and wacth the video.' ?>

Mi problema en el proceso de localización es el

<a href="'. esc_url( get_permalink() ) . '">here</a>

parte en el medio.

Lo mejor que se me ocurre es

<?php printf(__('Click %s to go and wacth the video.', 'pietergoosen'), '<a href="'. esc_url( get_permalink() ) . '">here</a>'); ?>

Bien, sé que puedo crear una variable para la etiqueta <a> y más bien usar la variable en la cadena printf() en lugar de la etiqueta <a> completa, pero esa no es la preocupación ahora, y eso fue todo. Sólo se hace para probar el resultado primero.

Con la cadena en su orden cambiado, la cadena se traduce, excepto por la palabra "aquí" que está dentro de la etiqueta <a> . ¿Cómo puedo obtener la cadena para traducir la palabra "aquí" también. He leído en algún lugar, creo que estaba en el Codex, que no es una buena idea dividir una cadena en varias cadenas, ya que puede causar problemas en ciertos idiomas, ya que el orden de las palabras difiere en algunos idiomas.

¿Alguna sugerencia más para resolver este problema?

    
pregunta Pieter Goosen 25.02.2014 - 09:24

4 respuestas

2

Posible solución para obtener todo lo traducible como una sola trampa.

<?php printf(__('Click <a href="%s">Here</a> to go and wacth the video.', 'pietergoosen'), esc_url( get_permalink() )); ?>

Por lo general, es seguro asumir que el traductor tiene suficiente conocimiento de HTML para comprender lo que sucede allí.

    
respondido por el Mark Kaplun 25.02.2014 - 09:46
3

Otra opción es dividir la etiqueta en dos cadenas:

printf(__('Click %shere%s to go and wacth the video.', 'pietergoosen'), '<a href="'. esc_url( get_permalink() ) . '">', '</a>');
    
respondido por el levi 05.03.2014 - 23:26
3

Aunque esto no responde exactamente a la pregunta de traducir cadenas que contienen HTML, pero da un paso atrás por un momento: es posible que las cosas sean más difíciles de lo que deberían ser. ¿Por qué no vuelve a redactar el texto para decir simplemente "Ver el video". Entonces se convierte en un problema ajeno, ya que simplemente puedes envolver toda la cadena en un ancla, dejando la cadena libre de cualquier código HTML así:

printf( '<a href="%s">%s</a>',
        esc_url( get_permalink() ),
        __( 'Watch the video', 'pietergoosen' )
);

Si el enlace tiene un estilo apropiado (lo que significa que obviamente se puede hacer clic), no creo que tenga que decirle a la gente que "haga clic aquí".

¡Sólo un pensamiento!

    
respondido por el Emzo 12.03.2014 - 11:11
2

Cuando miras la Documentación i18n en Codex y especialmente en Desambiguación por Context En esta sección, encontrará _x() y _ex() (la última es la variante echo ), que le permite agregar contexto a una cadena o, en otras palabras: dejar un mensaje para los traductores:

printf(
    _x(
        'Click %shere%s to go and watch the video',
        '%s represents the opening and closing HTML tags for an anchor or link',
        'your_textdomain'
    ),
    '<a href="'.esc_url( get_permalink() ).'" title="'.get_the_title().'">',
    '</a>'
);

Así que primero se traduce la cadena. Después de eso, las partes %s dentro de la cadena serán reemplazadas. Esto le ayudará a superar los escenarios en los que un idioma necesita una cantidad de palabras completamente diferente o una posición diferente en la oración para ser envuelto con una etiqueta de anclaje. Esto también le ayudará a evitar la necesidad de dividir la oración.

    
respondido por el kaiser 25.02.2014 - 14:15

Lea otras preguntas en las etiquetas