2009-12-04 4 views
2

Ma mise en œuvre en cours, ce qui est des clés magasins à base de tableau et les valeurs dans un dictionnaire, par exemple:Gettext: Traduction de chaînes avec HTML à l'intérieur?

$arr = array(
    'message' => 'Paste a <a href="http://flickr.com/">flickr</a> URL below.', 
); 

Je me rends compte que c'était probablement une mauvaise idée de stockage html à l'intérieur d'une chaîne comme celle-ci, mais si je m en utilisant gettext alors dans mes fichiers .mo/.po comment dois-je gérer le stockage d'une chaîne similaire? Devrais-je simplement stocker des mots, tels que «Coller un» et «URL ci-dessous» et «Flickr» séparément?

+0

Ne stockez pas ces mots séparément, car Janek mentionne que «l'ordre des mots ne sera pas toujours le même». – chelmertz

Répondre

4

Vous devriez stocker quelque chose comme

"Paste a %1 URL below" 

et remplacer tous 'vars' en utilisant quelque chose de simple comme str_replace ('% 1', $ link, $ message);

lien $ peut aussi être traduisible

"<a href="http://flickr.com/">%1</a>" 

bien que cela puisse être surpuissant (ne se traduit flickr entre les langues?)

raison derrière cela est que les langues différentes ont des structures grammaticales et l'ordre des les mots ne seront pas toujours les mêmes.

Mise à jour:

comme mention et @chelmertz @ Alex dans les commentaires, essayez d'utiliser la fonction sprintf, qui est construit pour cette chose.

+5

'sprintf()' est fait pour ces circonstances. – chelmertz

+0

'echo sprintf (_ (" %s "), $ url, $ link)' (pas clair pour moi pourquoi '% 1 $ s' ne fonctionne pas) [format gettext] (https://www.gnu.org /software/gettext/manual/html_node/c_002dformat.html) – Alex

0

Je vais pour cela:

$arr = array(
    'message' => _('Paste a %s URL below.'), 
); 

Avoir toutes les traductions comme des chaînes à l'intérieur appelle la fonction gettext permet d'utiliser des outils standard pour mettre à jour * .po catalogues.

Questions connexes