¿Cómo hacer que un texto con un hipervínculo sea traducible en WordPress?

9

He visto diferentes formas de hacer que un texto con un hipervínculo sea traducible. Sin embargo, no he podido encontrar una sola práctica recomendada.

Por lo tanto, algunas de las soluciones que encontré:

// METHOD 1
sprintf( __( 'Please read %1$sthis%2$s.', 'tacoverdo-example-domain' ), '<a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">', '</a>' );

// METHOD 2
echo '<a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">';
__( 'Please read this.', 'tacoverdo-example-domain' );
echo '</a>';

// METHOD 3
sprintf( __( 'Please read <a href="%s">this</a>.', 'tacoverdo-example-domain' ), esc_url( 'https://goo.gl' ) );

// METHOD 4
sprintf( __( 'Please read %sthis%s.', 'tacoverdo-example-domain' ), '<a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">', '</a>' );

// METHOD 5
__( 'Please read <a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">this</a>', 'tacoverdo-example-domain' );

Mi primer pensamiento sería que el método 1 sería el mejor. No requiere que sus traductores sepan HTML. Pero tampoco permite que los que lo hacen se metan con él. También es bastante SECO (No se repita), ya que no tiene que traducir toda la parte HTML una y otra vez.

Sin embargo, al publicar esta pregunta en Twitter, la gente respondió que el método 3 sería el mejor, ya que puede ver aquí .

Entonces, ¿cómo debería hacer un texto con un hipervínculo traducible en WordPress?

    
pregunta Taco Verdo 14.10.2014 - 17:25

3 respuestas

10

Este es un tema muy facetado. Combina problemas de contenido HTML inherentes con una carga completamente nueva de desafíos de traducción, como la búsqueda de cadenas, el proceso de traducción en sí y su verificación.

Entonces tenemos que combinar:

  1. Texto (en forma traducible)
  2. marcado HTML (en forma difícil de romper, pero preferiblemente flexible)
  3. Destino de URL (en forma segura y preferiblemente traducible, ¡puede ser específico para el idioma!)

También debemos considerar la familiaridad y el estado de la técnica, en otras palabras, lo que haría el núcleo. Ok, no ayuda que de una revisión rápida el núcleo haga esto en la mayoría (si no todas) de estas formas.

De estos factores y discusión que rodea diría que hay tres grupos de enfoques, dependiendo de las necesidades y las prioridades.

Simple: una cadena con todo

__( 'Please read <a href="https://goo.gl">this</a>', 'example-domain' );
  • fácil de seguir en código
  • permite traducir todas las partes (texto, marcado, URL) como un todo
  • URL codificada
  • propensos a saltos de HTML
  • popular en el núcleo

Equilibrado - URL estallada

sprintf( 
    __( 'Please read <a href="%s">this</a>', 'example-domain' ), 
    esc_url( 'https://goo.gl' ) 
);
  • fácil de seguir
  • puede traducir todas las partes, pero las URL deben ser llamadas de traducción por separado
  • La URL puede ser dinámica y escapada
  • propensos a saltos de HTML
  • popular en el núcleo
  • anecdóticamente popular entre los desarrolladores / traductores

Pecemeal: rotura del sello

sprintf( 
    __( 'Please read %1$sthis%2$s.', 'example-domain' ), 
    '<a href="' . esc_url( 'https://goo.gl' ) . '">',
    '</a>' 
);

o por concatenación

'<a href="' . esc_url( 'https://goo.gl' ) . '">' 
. __( 'Please read this.', 'example-domain' );
. '</a>';
  • menos legible
  • más resistente a los saltos de HTML
  • menos popular en el núcleo
  • necesita más contexto para la traducción

Regla de un pulgar (por lo que veo)

  1. simple para que sea lo más simple posible
  2. poco a poco para evitar saltos de HTML
  3. equilibrado para todos los demás casos (probablemente el más común)
respondido por el Rarst 14.10.2014 - 22:55
5

En estos días trabajo con muchos sitios web en varios idiomas, y tengo que decir:

  1. Las URL de los enlaces a menudo deben ser traducibles.
  2. La salida de la función de traducción de confianza es mala. Casi nunca uso __() , pero siempre esc_html__() / esc_attr__() . Lo que significa que la cadena a traducir no puede contener HTML de ningún tipo.
  3. Al escribir en inglés, a menudo no nos damos cuenta de que en otros idiomas una palabra puede escribirse de diferentes maneras según los contextos. Entonces, cuando el texto contiene 1 o pocas palabras, siempre es mejor usar la variante *_x() de las funciones de traducción.
  4. incluir más de un marcador de posición para cada cadena traducible puede ser "peligroso". Si el traductor no es un desarrollador, romperá fácilmente la representación de la página. En el ejemplo %1$sthis%2$s , un traductor no técnico no entiende que el s justo antes de this es necesario para una representación adecuada, y también puede pensar que el desarrollador quiso escribir this pero tuvo un error tipográfico y escribió sthis .

Por todas estas razones, la traducción "correcta" de texto que contiene enlaces es difícil. La única solución viable que tiene en cuenta todo lo anterior es:

$anchor = esc_html_x( 'Google', 'link text for google.com', 'txt-domain' );
$domain = esc_url( __( 'google.com', 'txt-domain' ) );  
$link   = sprintf( '<a href="https://%s">%s</a>', $domain, $anchor );

 /* translators: 1 is a link with text "Google" and URL google.com */
echo sprintf( esc_html__( 'Use %1$s to search.', 'example-domain' ), $link );

Lo que es seguro y fácil de traducir por personal no técnico, pero también verboso y un PITA para implementar, especialmente si esto tiene que hacerse para varios enlaces ...

Sin embargo, para un código publicado en la naturaleza con miles de usuarios (reales o potenciales) que hablan muchos idiomas, esta es la forma que tomaría.

Esta es realmente la forma en que tomo incluso el código de uso interno, pero ese soy yo.

Nota :

Puede parecer demasiado para hacer que la palabra "Google" sea traducible por separado, y eso es probablemente cierto para este caso específico. Pero a veces incluso asumir nombres de marca es incorrecto. Solo por poner un ejemplo, en Italia tenemos la marca "Algida" que se conoce con ~30 nombres diferentes en todo el mundo .

En tal caso, la codificación de la URL y / o el nombre de la marca causará problemas.

Proporcionar contexto para la traducción ayudará a los traductores a decidir si necesitan traducir el nombre de la marca o no.

    
respondido por el gmazzap 13.12.2016 - 20:39
2

Tienes que mantener el marcado en la cadena traducible, porque los traductores deben saber que hay un enlace. En algunos idiomas, el texto del enlace resultante puede abarcar varias palabras, incluso podría haber una coma (o un equivalente) en el interior u otra marca que deba anidarse correctamente.

También es importante crear un texto de enlace de habla, no esto o aquí .

2 o 3 son las únicas opciones traducibles, pero también debes hacer que la URL sea traducible.

    
respondido por el fuxia 14.10.2014 - 17:40

Lea otras preguntas en las etiquetas