Traduction de textes plus longs (modèles d'affichage et de courrier électronique) avec gettext

9

Je suis en train de développer une application Web PHP multilingue et j'ai de longs textes (-ish) que je dois traduire avec gettext. Ce sont des modèles de courrier électronique (généralement courts, mais toujours plusieurs lignes) et des parties de modèles de vue (blocs de texte descriptifs plus longs). Ces textes incluraient du HTML simple (des choses comme gras / italique pour l'accentuation, probablement un lien ici ou là). Les modèles sont des scripts PHP dont la sortie est capturée.

Le problème est que gettext semble très maladroit pour gérer des textes plus longs. Les textes plus longs auraient généralement plus de changements au fil du temps que les textes courts - je peux soit changer le msgid et m'assurer de le mettre à jour dans toutes les traductions (cela pourrait être beaucoup de travail et très sujet aux erreurs lorsque le msgid est long), ou je peux garder le msgid inchangé et ne modifie que les traductions (ce qui laisserait des textes obsolètes trompeurs dans les modèles). De plus, j'ai vu des conseils contre l'inclusion de HTML dans les chaînes gettext, mais l'éviter casserait un seul morceau de texte naturel en beaucoup de morceaux, ce qui sera un cauchemar encore plus grand à traduire et à réassembler, et j'ai également vu des conseils contre fractionnement inutile des chaînes gettext en msgids séparés.

L'autre approche que je vois est d'ignorer complètement gettext pour ces textes plus longs, et de séparer ces blocs dans des sous-modèles externes pour chaque locale, et d'inclure simplement celui pour la locale actuelle. L'inconvénient est que je sépare l'effort de traduction entre les fichiers gettext .po et des modèles distincts situés dans un emplacement complètement différent.

Étant donné que cette application sera utilisée comme point de départ pour d'autres applications à l'avenir, j'essaie de trouver la meilleure approche à long terme. J'ai besoin de quelques conseils pour les meilleures pratiques dans de tels scénarios. Comment avez-vous mis en œuvre des cas similaires? Qu'est-ce qui s'est avéré efficace et qu'est-ce qui s'est avéré être une mauvaise idée?

lanzz
la source

Réponses:

3

Je suis tombé sur un problème similaire il n'y a pas longtemps (voir /programming/8288050/can-i-automatically-update-msgids-in-gettexts-po-files-for-trivial-text-change ).

Fondamentalement, il existe deux options:

  1. Faites-le de la manière dont gettext est censé être utilisé: utilisez les textes originaux comme msgid, HTML et tout. Ensuite, chaque modification du texte d'origine invalidera toutes les traductions. msgmergeLa correspondance floue de, cependant, correspondra généralement toujours le bon texte original à l'ancienne traduction, donc généralement l'ancienne traduction sera disponible pour le traducteur.
  2. Au lieu d'utiliser le texte d'origine comme msgid, utilisez un identifiant synthétique (comme EMAIL_TEMPLATE_NEWSLETTER_START). De cette façon, les identifiants ne changent jamais. Les textes originaux (probablement en anglais) seront alors simplement une autre traduction vers gettext. Principaux inconvénients: 1) Vous devez suivre séparément les traductions mises à jour; 2) Certains outils gettext peuvent ne pas bien gérer cela (les traducteurs peuvent avoir besoin d'outils spéciaux).
sleske
la source
1

changez le msgid et assurez-vous de le mettre à jour dans toutes les traductions (cela peut être beaucoup> de travail et très sujet aux erreurs lorsque le msgid est long)

C'est quelque chose que vous pourriez facilement automatiser, ce qui le rend moins sujet aux erreurs et aussi moins de travail.

Dario Hamidi
la source