Comment faire pour qu'un texte avec hyperlien puisse être traduit dans WordPress?

9

J'ai vu différentes façons de rendre un texte avec un lien hypertexte à traduire. Cependant, je suis incapable de trouver une seule bonne pratique.

Voici certaines des solutions que j'ai trouvées:

// 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' );

Ma première pensée a été que la méthode 1 serait la meilleure. Il n'est pas nécessaire que vos traducteurs connaissent le HTML. Mais cela ne permet pas non plus à ceux qui le font de jouer avec. Il est également assez sec (ne vous répétez pas), car vous n'avez pas à traduire toute la partie HTML, encore et encore.

Toutefois, lors de la publication de cette question sur Twitter, des personnes ont répondu que la méthode 3 serait la meilleure solution car vous pouvez voir ici .

Alors, comment dois-je créer un texte avec un lien hypertexte à traduire dans WordPress?

    
posée Taco Verdo 14.10.2014 - 17:25

3 réponses

10

C’est un problème très complexe. Il associe des problèmes de contenu HTML inhérents à une toute nouvelle charge de traduction, tels que l'analyse des chaînes, le processus de traduction proprement dit et sa vérification.

Nous devons donc combiner:

  1. Texte (sous forme traduisible)
  2. balise HTML (difficile à casser, mais de préférence flexible)
  3. Destination de l'URL (sous forme sécurisée et de préférence traduisible, peut être spécifique à la langue!)

Nous devons également tenir compte de la familiarité et de l'état de la technique, autrement dit, de ce que ferait notre cœur. Ok, cela n’aide en rien que la vérification rapide permette au noyau de le faire dans la plupart (sinon toutes) de ces façons.

Parmi ces facteurs et discussion autour , je dirais qu'il existe trois catégories d'approches, en fonction des besoins et des priorités.

Simple - une chaîne avec tout

__( 'Please read <a href="https://goo.gl">this</a>', 'example-domain' );
  • facile à suivre dans le code
  • permet de traduire toutes les parties (texte, balises, URL) dans leur ensemble
  • URL codée en dur
  • sujet aux sauts de HTML
  • populaire dans le noyau

Équilibré - URL séparée

sprintf( 
    __( 'Please read <a href="%s">this</a>', 'example-domain' ), 
    esc_url( 'https://goo.gl' ) 
);
  • facile à suivre
  • peut traduire toutes les parties, mais les URL nécessitent un appel de traduction séparé
  • L'URL peut être dynamique et échappée
  • sujet aux sauts de HTML
  • populaire dans le noyau
  • anecdotique populaire auprès des développeurs / traducteurs

À la pièce - marge brisée

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

ou par concaténation

'<a href="' . esc_url( 'https://goo.gl' ) . '">' 
. __( 'Please read this.', 'example-domain' );
. '</a>';
  • moins lisible
  • plus résistant aux ruptures HTML
  • moins populaire dans le noyau
  • nécessite davantage de contexte pour la traduction

Règle du pouce (d'après ce que je vois)

  1. simple pour que cela reste aussi simple que possible
  2. fragmenté pour éviter les ruptures HTML
  3. équilibré pour tous les autres cas (probablement le plus fréquent)
réponse donnée Rarst 14.10.2014 - 22:55
5

Ces derniers temps, je travaille avec de nombreux sites Web multilingues et je dois dire:

  1. Les URL des liens doivent souvent être traduites.
  2. La sortie de la fonction de traduction de confiance est incorrecte. Je n’utilise pratiquement jamais __() mais toujours esc_html__() / esc_attr__() . Ce qui signifie que la chaîne à traduire ne peut contenir aucun code HTML.
  3. En anglais, nous ne réalisons souvent pas que dans d'autres langues, un mot peut être écrit de différentes manières en fonction du contexte. Ainsi, lorsque le texte contient 1 ou quelques mots, il est toujours préférable d’utiliser la variante *_x() des fonctions de traduction.
  4. inclure plus d'un espace réservé pour chaque chaîne traduisible peut être "dangereux". Si le traducteur n'est pas un développeur, il va facilement casser le rendu de la page. Dans l'exemple %1$sthis%2$s , un traducteur non technique ne comprend pas que s juste avant this est nécessaire pour un rendu correct, et peut également penser que le développeur a voulu taper this mais avait une faute de frappe et écrit% co_de. %.

Pour toutes ces raisons, il est difficile de traduire "correctement" un texte contenant des liens. La seule solution viable qui prend en compte tout ce qui précède est:

$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 );

Ce qui est sûr et facile à traduire par des personnes non techniques, mais aussi verbeux et un PITA à mettre en œuvre, surtout si cela doit être fait pour plusieurs liens ...

Cependant, pour un code publié dans la nature avec des milliers d’utilisateurs (réels ou potentiels) parlant plusieurs langues, c’est ce que je prendrais.

C’est ce que je retiens même pour le code à usage interne, mais c’est moi.

Remarque :

Il peut sembler excessif de rendre le mot "Google" traduisible séparément, ce qui est probablement vrai pour ce cas particulier. Mais parfois, même supposer que les noms de marque est faux. Pour citer un exemple, en Italie, la marque est "Algida" , connue sous ~30 noms différents dans le monde .

Dans ce cas, le codage en dur de l'URL et / ou du nom de la marque posera problème.

Fournir un contexte pour la traduction aidera les traducteurs à décider s’ils doivent traduire le nom de la marque ou non.

    
réponse donnée gmazzap 13.12.2016 - 20:39
2

Vous devez conserver le balisage dans la chaîne à traduire, car les traducteurs doivent savoir qu'il existe un lien. Dans certaines langues, le texte du lien résultant peut couvrir plusieurs mots, il peut même y avoir une virgule (ou un équivalent) à l'intérieur ou un autre balisage devant être imbriqué correctement.

Il est également important de créer un texte de lien verbal, et non ceci ou ici .

2 ou 3 sont les seules options pouvant être traduites, mais vous devez également rendre l'URL traduisible.

    
réponse donnée fuxia 14.10.2014 - 17:40

Lire d'autres questions sur les étiquettes