Comment traduire des fichiers PO sans casser votre application
TABLE OF CONTENTS
Les fichiers PO ressemblent à de simples fichiers texte jusqu’à ce qu’un %s traduit, une forme plurielle manquante ou un msgid modifié casse votre application. Utilisez ce flux de travail pour traduire les chaînes visibles par l’utilisateur tout en laissant intacte la structure gettext.
Ne collez pas tout le fichier dans un traducteur de texte normal. Un fichier PO est adjacent au code source : les mots sont traduisibles, mais la structure du fichier, les variables, les commentaires et les index pluriels doivent survivre inchangés.
Méthode 1 : utiliser un traducteur de fichiers PO
Choisissez cette méthode lorsque vous voulez un premier jet sûr et rapide et que vous ne voulez pas modifier les paires msgid / msgstr à la main.
-
Sauvegardez le fichier
.pooriginal. Conservez une copie propre dans votre dépôt avant d’envoyer quoi que ce soit à un traducteur. Si le fichier traduit casse, vous aurez besoin d’une version de référence connue comme bonne. -
Ouvrez un traducteur compatible PO. Utilisez un outil conçu pour les fichiers gettext, comme OpenL PO Translator, un outil de traduction documentaire à paiement à l’usage. Un outil compatible PO doit traduire les chaînes cibles tout en conservant les chaînes source, les commentaires, les variables et la structure du fichier. Si vous hésitez encore sur les outils, comparez les options dans notre guide du meilleur traducteur PO.
-
Téléversez le fichier
.po. Utilisez le fichier de langue qui contient les entréesmsgidetmsgstr. Si vous n’avez qu’un modèle.pot, créez d’abord un fichier.podans la langue cible, puis téléversez-le. -
Choisissez la langue source et la langue cible. Faites correspondre la langue source au texte contenu dans
msgid, pas à la langue de votre interface d’administration. Par exemple, si le fichier contient des chaînesmsgiden anglais et que vous voulez un résultat en espagnol, choisissez anglais vers espagnol. -
Téléchargez le fichier traduit. Enregistrez-le avec la convention de nommage locale attendue par votre framework. Les plugins WordPress utilisent souvent un schéma avec domaine de texte plus locale, tandis que Django stocke généralement les fichiers sous
locale/<langue>/LC_MESSAGES/. -
Relisez d’abord les chaînes à risque. Recherchez dans le fichier traduit
%,{,},<,>,msgid_plural,msgctxtet#, fuzzy. Ce sont les entrées les plus susceptibles d’affecter le comportement à l’exécution. -
Testez le fichier traduit dans votre application. Chargez la langue en local et parcourez les écrans qui utilisent les chaînes traduites. Un fichier PO n’est pas terminé quand il est traduit ; il l’est quand l’application s’affiche encore correctement.
Méthode 2 : traduire des fichiers PO dans Poedit
Choisissez cette méthode lorsque vous avez besoin d’une relecture humaine, d’une compatibilité WordPress ou d’un flux de travail prudent entrée par entrée.
-
Ouvrez le fichier dans Poedit. Poedit est un éditeur de traduction dédié aux fichiers PO et autres formats de localisation ; l’éditeur de base est gratuit, avec des fonctionnalités Pro payantes pour les flux plus lourds. Pour WordPress, le manuel officiel Polyglots explique que Poedit peut créer des fichiers
.poet.moà partir d’un fichier POT et prend en charge les formes plurielles et l’UTF-8. -
Mettez à jour à partir du modèle POT si la source a changé. Si les développeurs ont modifié le texte de l’application, mettez à jour le fichier
.poà partir du dernier.potavant de traduire. Cela permet de garder visibles les chaînes nouvelles, supprimées et « fuzzy » au lieu d’expédier silencieusement du texte d’interface obsolète. -
Traduisez uniquement le champ
msgstr. Lemsgidest la chaîne source utilisée par votre application pour rechercher la traduction. Dans un flux gettext normal, les traducteurs doivent modifiermsgstr, pasmsgid. -
Conservez les variables exactement intactes. Ne traduisez pas et ne réespacer pas les variables telles que
%s,%d,%1$s,{name},%(count)s,:nameou les balises HTML. Si l’ordre des mots doit changer, déplacez la variable comme un bloc. -
Traitez les pluriels comme des traductions séparées. Une entrée plurielle peut contenir
msgid,msgid_pluralet plusieurs valeursmsgstr[n]. Remplissez chaque case plurielle requise par la langue cible au lieu de copier la même phrase partout. -
Enregistrez et compilez le fichier
.mosi votre application en a besoin. Certaines piles lisent directement les fichiers.popendant le développement, mais WordPress et de nombreuses configurations gettext utilisent des fichiers.mocompilés à l’exécution. Poedit peut compiler le.moà l’enregistrement ; Django peut compiler les messages avecdjango-admin compilemessages. -
Résolvez les avertissements avant le téléversement. Dans Poedit, les icônes d’avertissement signalent souvent des variables cassées, des variables manquantes ou des incohérences de pluriel. Corrigez-les avant d’importer la traduction dans WordPress, Django, Drupal ou votre branche de publication.
Méthode 3 : utiliser une plateforme de localisation
Choisissez cette méthode lorsque plusieurs traducteurs, relecteurs ou responsables de publication doivent travailler sur les mêmes fichiers PO.
-
Importez le fichier PO dans une plateforme qui prend en charge gettext. Weblate et d’autres plateformes de localisation prennent en charge les flux PO. Ces plateformes sont souvent des produits payants, même si Weblate propose aussi une option open source auto-hébergée. Leur gestion des commentaires, des en-têtes, des chaînes « fuzzy » et des variables diffère, alors vérifiez les paramètres de format avant de téléverser des fichiers de production.
-
Activez les vérifications des variables et des balises. Activez les règles QA pour les variables de type printf, les variables nommées, les balises HTML/XML et les formes plurielles. Ces contrôles détectent les erreurs que les correcteurs orthographiques ne voient pas.
-
Gardez les commentaires des développeurs visibles. Les commentaires PO peuvent contenir le contexte, comme des références source, des notes de développeur extraites, des indicateurs et des chaînes source précédentes. Les traducteurs ont besoin de ces notes lorsqu’un libellé court comme « Open » peut être un verbe, un adjectif ou une commande de menu.
-
Utilisez la mémoire de traduction avec relecture. La mémoire de traduction est utile pour les chaînes d’interface répétées, mais elle peut réutiliser une ancienne traduction dans un nouveau contexte. Relisez les chaînes réutilisées lorsque
msgctxt, les références source ou le contexte visuel ont changé. -
Exportez les fichiers PO et lancez des vérifications locales. Ne faites pas confiance à l’export par défaut. Réinjectez le fichier traduit dans l’application, compilez si nécessaire, puis testez les écrans avant la fusion.
Règles des fichiers PO à ne jamais casser
| Élément PO | À traduire ? | Exemple sûr | Pourquoi c’est important |
|---|---|---|---|
msgid | Non | msgid "Save changes" | Dans de nombreux flux gettext, l’application utilise cette chaîne source comme clé de recherche. |
msgstr | Oui | msgstr "Guardar cambios" | C’est le texte cible que voient les utilisateurs. |
msgctxt | Non | msgctxt "button" | Le contexte désambiguïse des chaînes source identiques. |
%s, %d, %1$s | Non | Hello, %s -> Hola, %s | Le code d’exécution remplace ces variables par des valeurs réelles. |
{name}, %(count)s, :name | Non | Welcome, {name} | Les variables nommées doivent toujours correspondre au code de l’application. |
| Balises HTML | En général non | <strong>Warning</strong> | Traduisez le texte, pas la syntaxe des balises. |
msgid_plural | Non | msgid_plural "%d files" | Le pluriel source appartient au chemin de code d’origine. |
msgstr[0], msgstr[1] | Oui, avec prudence | msgstr[0] "%d file" | Chaque langue cible a ses propres règles de pluriel. |
#, fuzzy | À relire d’abord | #, fuzzy | Fuzzy signifie que la traduction peut être obsolète ou non confirmée. |
#. commentaires de développeur | En général non | #. Button label | Ces notes aident les traducteurs à comprendre le contexte. |
Exemple rapide : traduction PO sûre vs cassée
Voici une entrée gettext normale :
#. %s is the user's display name.
#, c-format
msgid "Welcome back, %s"
msgstr ""
Une traduction espagnole sûre conserve %s inchangé :
#. %s is the user's display name.
#, c-format
msgid "Welcome back, %s"
msgstr "Bienvenido de nuevo, %s"
Une traduction cassée modifie la variable :
msgid "Welcome back, %s"
msgstr "Bienvenido de nuevo, % s"
Ce minuscule espace peut compter. msgfmt --check-format de GNU est conçu pour détecter les incohérences de chaînes de format comme les mauvaises variables %, et Poedit signale aussi les problèmes courants de variables. Pour une liste plus large des chaînes à laisser intactes, utilisez notre guide sur ce qu’il ne faut pas traduire.
Comment vérifier un fichier PO traduit
- Lancez une validation gettext si gettext est installé.
msgfmt --check --check-format -o /tmp/messages.mo path/to/messages.po
Cela vérifie la syntaxe, les en-têtes et les chaînes de format, puis écrit un catalogue temporaire compilé si le fichier est valide.
- Compilez le fichier comme l’attend votre framework.
django-admin compilemessages
Pour les projets Django, compilemessages transforme les fichiers .po créés par makemessages en fichiers .mo pour la prise en charge gettext.
- Recherchez les traductions vides.
grep -n 'msgstr ""' path/to/messages.po
Des champs msgstr vides peuvent être intentionnels pour des entrées non traduites, mais ils ne devraient pas vous surprendre au moment de la publication.
- Recherchez les chaînes fuzzy.
grep -n '#, fuzzy' path/to/messages.po
Les chaînes fuzzy doivent être relues par une personne avant publication. Par défaut, msgfmt n’utilise pas les traductions fuzzy, sauf si vous compilez avec --use-fuzzy, donc une entrée fuzzy peut se comporter comme une chaîne non traduite dans le catalogue final.
- Testez l’interface réelle. Ouvrez les écrans qui contiennent les formulaires, les compteurs pluriels, les messages d’erreur, les menus de compte et les parcours de paiement. La validation PO détecte les problèmes de fichier ; seul le test UI révèle les formulations maladroites, les débordements et le manque de contexte.
Quelle méthode devez-vous utiliser ?
| Situation | Meilleure méthode | Pourquoi |
|---|---|---|
| Vous avez besoin d’un premier jet rapide pour un fichier PO | Traducteur de fichier PO | Le chemin le plus rapide avec conservation de la structure |
| Vous maintenez un plugin ou un thème WordPress | Poedit | Flux de travail WordPress familier avec compilation .mo |
| Vous maintenez une application Django | Traducteur PO ou Poedit, puis compilemessages | La traduction peut être rapide, mais la compilation du framework reste nécessaire |
| Vous avez beaucoup de langues et de relecteurs | Plateforme de localisation | Meilleure affectation, historique, QA et contrôle de la relecture |
| Vous traduisez des chaînes destinées aux développeurs | Relecture humaine après traduction automatique | Les termes du code, les variables et le contexte comptent davantage |
| Vous localisez aussi des fichiers JSON ou i18n frontend | Utilisez un flux spécifique au format | Les règles PO ne s’appliquent pas toujours au JSON, au YAML ou aux messages ICU |
Si votre projet mélange des fichiers gettext PO et des fichiers locaux JSON, traduisez chaque format avec un outil qui comprend sa structure. Les fichiers PO reposent sur msgid et msgstr ; la localisation JSON repose sur des clés et des valeurs. Pour ce flux de travail, consultez notre guide des meilleurs traducteurs JSON en 2026.
FAQ
Puis-je traduire des fichiers PO avec Google Translate ?
Vous pouvez copier des valeurs msgstr individuelles dans un traducteur généraliste, mais téléverser ou coller tout le fichier PO dans un traducteur de texte normal est risqué. Les traducteurs généralistes peuvent modifier msgid, les commentaires, l’échappement des guillemets, les index pluriels ou les variables. Utilisez plutôt un traducteur compatible PO, Poedit ou une plateforme de localisation.
Quelle est la différence entre .po, .pot et .mo ?
.pot est le modèle extrait du code source. Il contient généralement les chaînes originales mais pas de traductions complètes. .po est le fichier de traduction modifiable pour une langue cible. .mo est le catalogue binaire compilé que de nombreuses applications basées sur gettext chargent à l’exécution.
Dois-je traduire msgid ?
Non, pas dans le flux de travail normal. Traduisez msgstr. Le manuel GNU gettext décrit msgid comme la chaîne originale non traduite et msgstr comme la traduction ; les chaînes msgid sont produites et gérées par les outils gettext.
Comment vérifier qu’un fichier PO est valide ?
Lancez msgfmt --check --check-format si gettext est disponible, ouvrez le fichier dans Poedit ou utilisez les contrôles QA de votre plateforme de localisation. Ensuite, compilez et testez le fichier dans l’application. La validation est nécessaire, mais elle ne remplace pas les tests UI.
Que se passe-t-il si je casse une variable ?
Dans le meilleur des cas, l’application affichera une chaîne étrange. Dans le pire des cas, le formateur d’exécution génère une erreur parce que la chaîne traduite ne correspond plus aux variables que le code transmet. Les variables doivent être déplacées uniquement comme des jetons complets, jamais traduites ni partiellement modifiées.
OpenL peut-il traduire des fichiers PO ?
Oui. OpenL PO Translator est conçu pour les fichiers .po gettext et indique qu’il conserve les variables intactes tout en traduisant vers plus de 100 langues. Il s’agit d’un flux documentaire à paiement à l’usage, donc utilisez-le pour un premier jet rapide lorsque la préservation de la structure PO compte plus que le travail entièrement manuel. Si vous n’avez qu’un modèle .pot, créez d’abord un fichier .po dans la langue cible avant d’utiliser OpenL.
Sources
- GNU gettext manual: PO Files — Explication officielle du format de fichier PO.
- GNU gettext manual: PO File Entries — Source pour
msgid,msgstr, les commentaires, les indicateurs et la structure des entrées. - GNU gettext manual: Entries with Plural Forms — Source pour la structure des entrées au pluriel.
- GNU gettext manual: msgfmt Invocation — Source pour
msgfmt --checket la validation des chaînes de format. - OpenL PO Translator — Page produit OpenL pour traduire les fichiers
.poen préservant les variables. - Poedit — Site officiel de Poedit pour l’éditeur de traduction PO et l’offre Pro.
- WordPress Polyglots Handbook: Poedit — Guide WordPress sur Poedit, les fichiers POT, les fichiers PO, la compilation MO et les avertissements sur les variables.
- Django documentation: Translation — Flux de travail Django pour les fichiers de messages et la traduction.
- Django documentation: compilemessages — Référence de la commande Django pour compiler les fichiers
.poen.mo. - Drupal documentation: PO and POT files — Explication Drupal des fichiers
.po,.pot, du contexte, des formes plurielles, des commentaires et des variables. - Weblate documentation: GNU gettext PO — Notes de la plateforme de localisation sur les en-têtes PO, les chaînes source précédentes, les chaînes obsolètes et les fichiers MO générés.