2010-05-03 7 views
5

Je voulais localiser certains textes dans mon application Zend Framework. Il y a quelques textes comme:Localisation avec des balises HTML

Hello, I'm <a href="test.php" title="Title-Attribute" rel="test">a sample text</a>, greetings to all of you! :)

S'il n'y a pas html, il est simple à localizate, mais avec HTML, comment dois-je faire mieux?

+0

même sujet est discuté http://stackoverflow.com/questions/2566432/add-some-html-to-zend-forms/2567764#2567764 vérifier là – user1400

Répondre

4

Certains outils de localisation comme Virtaal traitent des balises XML (HTML) dans un way qui facilite le travail du traducteur. L'autre option consiste à simplifier la chaîne présentée à vos localisateurs en remplaçant la balise par une variable de formatage de chaîne et en rendant la chaîne de format localisable au lieu du résultat du formatage. Par exemple (je suis surtout deviner pour le bien de l'exemple et ne sais pas PHP très bien):

printf(_("Hello, I'm %sa sample%s, greetings to all of you!"), '<a href="test.php" title="Title-Attribute" rel="test">', "</a>");

Dans la déclaration ci-dessus la chaîne que le verra est l'alignement de piste que celui contenant le %s des variables de mise en forme (car il est enveloppé dans la fonction gettext _()). Ceci, bien sûr, a l'inconvénient d'être assez confus pour un localisateur si (s) il ne sait pas à quoi les variables seront remplacées, alors incluez un commentaire de localisation correct.

+2

J'ai compris que "Titre-Attribut" devra être traduit aussi. – Gordon

+0

Dans ce cas, la réponse d'xtofl ressemble à la meilleure. Upvoted il. Même idée, cependant. :) – Walter

2

Vous devez localiser toute chaîne figurant dans l'interface utilisateur. Dans cette situation, vous disposez d'une combinaison d'éléments d'interface utilisateur/contrôle. Cela signifie que le contenu de l'attribut title doit être localisé séparément.

Dans ce cas, cela signifie:

$guilink = "<a href='test.php' " 
      ."title='".gettext("Title-Attribute")."'" 
      ." rel='test'>" 
      .gettext("a sample text") 
      ."</a>"; 

$guistring = sprintf( 
     gettext("Hello, I'm %s, greetings to all of you! :)"), $guilink); 

Mais, comme Gordon dit: ne pas trop compliquer.

1

Pour les adaptateurs de traduction, il ne devrait pas y avoir de différence si la traduction contient du HTML ou non. Si vous avez des chaînes courtes avec le code HTML intégré, placez la traduction avec le code HTML dans votre fichier source de langue si nécessaire. Vous devez juste vous assurer que la sortie n'est pas échappée quand il y a du HTML dans la chaîne.


EDIT Comme xtofl a souligné dans les commentaires, ayant HTML dans le fichier de langue ne constitue pas une solution, car les traducteurs pourraient être peu familiers avec la manipulation HTML. Bien qu'il y ait une part de vérité, je trouve cela négligeable. HTML n'est pas une science de fusée et pour les quelques cas où en ligne éléments HTML peuvent apparaître, vous pouvez leur fournir une feuille de triche. Les traducteurs professionnels devraient être capables de gérer cela. Une autre préoccupation serait d'insérer du contenu indésirable, par ex. liens (si vous travaillez avec des traducteurs communautaires au lieu de professionnels). Mais puisque vous n'avez mentionné aucun traducteur de toute façon, je suppose que vous faites la traduction vous-même, auquel cas tout ce qui précède est yagni. Il n'y a pas besoin de overcomplicate things.

+0

En prenant cela à la pointe, vous pouvez avoir des traducteurs prendre votre compléter le code source et choisir les littéraux de chaîne ... Je n'aime pas ça, vraiment. Les traducteurs ne devraient pas connaître les détails techniques, afin de terminer le travail efficacement. (Qui sait si l'attribut 'name' dans l'entrée d'un formulaire html devrait être traduit en' nom', 'name',' gnorpx'?) – xtofl

+0

@xtofl Pour l'objectif de l'OP, ce qui précède est une approche valide.Nous ne savons pas si le PO travaille avec des traducteurs. Si le PO le fait, les traducteurs peuvent probablement lui dire, s'ils peuvent gérer le HTML en ligne. Undelete votre propre réponse, si vous pensez que c'est une meilleure solution. – Gordon