J'ai vu différentes façons de créer un texte avec un lien hypertexte à traduire. Cependant, je suis incapable de trouver une seule pratique exemplaire.
Alors, 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' ) . '">';
_e( '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
_e( 'Please read <a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">this</a>', 'tacoverdo-example-domain' );
Ma première pensée serait 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 DRY (ne vous répétez pas) car vous n'avez pas à traduire toute la partie HTML, encore et encore.
Cependant, en postant cette question sur Twitter, les gens ont répondu que la méthode 3 serait la meilleure solution, comme vous pouvez le constater ici .
Alors, comment dois-je créer un texte avec hyperlien à traduire dans WordPress?
C'est un problème très complexe. Il combine les problèmes de contenu HTML inhérents à une nouvelle charge de traduction, telle que l'analyse des chaînes, le processus de traduction lui-même et sa vérification.
Nous devons donc combiner:
Nous devons également tenir compte de la familiarité et de l’état de la technique, en d’autres termes - de ce que ferait le noyau. Ok, cela n’aide en rien que la vérification rapide permette au noyau de le faire dans la plupart (sinon toutes) de ces manières.
De ces facteurs et de la discussion qui entoure je dirais qu'il existe trois catégories d'approches, en fonction des besoins et des priorités.
__( 'Please read <a href="https://goo.gl">this</a>', 'example-domain' );
sprintf(
__( 'Please read <a href="%s">this</a>', 'example-domain' ),
esc_url( 'https://goo.gl' )
);
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>';
De nos jours, je travaille avec de nombreux sites Web multilingues et je dois dire:
__()
mais toujours esc_html__()
/esc_attr__()
. Ce qui signifie que la chaîne à traduire ne peut contenir aucun code HTML.*_x()
de la traduction de fonctions.%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 voulait taper this
mais avait une faute de frappe et écrit sthis
.Pour toutes ces raisons, traduire correctement le texte contenant des liens est difficile. 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 uniquement, mais c’est moi.
Note:
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, nous avons la marque "Algida" qui est connue avec ~ 30 noms différents dans le monde entier .
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 ont besoin de traduire le nom de marque ou non.
Vous devez conserver le balisage dans la chaîne à traduire, car les traducteurs doivent savoir / 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 à imbriquer correctement.
Il est également important de créer un lien texte parlant, pas this ou here .
2 ou 3 sont les seules options traduisibles, mais vous devez également rendre l'URL traduisible.