Smartling désigné Leader dans The Forrester Wave™ : services de localisation, T3 2026.
Smartling nommé Leader dans la Vague™ Forrester

Quels sont les meilleurs outils pour éditer et traduire les fichiers PO ?

Un fichier PO est un catalogue de messages GNU gettext : une liste en texte clair de msgid chaînes sources et msgstr de traductions qui msgfmt compile en binaire .mo Un fichier d’application se charge à l’exécution. Les meilleurs outils pour gérer les fichiers PO se répartissent en trois niveaux — les utilitaires de ligne de commande GNU gettext pour l’extraction, la fusion et la compilation ; un éditeur de bureau dédié tel que Poedit, Lokalize ou Gtranslator pour traduire un fichier à la fois ; et un système de gestion de traduction tel que Smartling, qui analyse .po et .pot Nativement, sous l’identifiant gettextde type de fichier , une fois que le même catalogue doit atteindre plusieurs lieux selon un calendrier de sortie. Le niveau dont une équipe a réellement besoin est déterminé par le nombre de localisations et la cadence de sortie, pas par l’éditeur qui a la meilleure interface.

Dernière mise à jour : 14 septembre 2026

Pourquoi la modification manuelle d'un fichier .po Le fichier provoque-t-il des bugs en production ?

L’édition manuelle casse les fichiers PO car le format contient des métadonnées structurelles — drapeaux, en-têtes et clés de contexte — qui ressemblent à des commentaires ordinaires pour quiconque ouvre le catalogue dans un éditeur de texte brut. Cinq schémas de défaillance expliquent la majeure partie des dégâts, et chacun d’eux est silencieux dans la langue source.

  • Les entrées floues ne donnent rien lors de la compilation. Lorsque msgmerge fait correspondre une chaîne source modifiée à une traduction existante, il marque l'entrée #, fuzzy, et msgfmt ignore par défaut les entrées floues. Un catalogue qui semble entièrement traduit dans un éditeur peut donc être distribué avec ces chaînes de caractères ramenées à l'anglais, ce que l'assurance qualité détecte rarement car la page s'affiche quand même.
  • L'en-tête Plural-Forms est spécifique à chaque langue et facile à endommager. Gettext exprime les pluriels via msgid_plural et une expression Plural-Forms par langue dans l'entrée d'en-tête — l'anglais nécessite deux formes, le russe trois. La réécriture ou la copie de cet en-tête entre les paramètres régionaux produit un catalogue qui ne compile pas ou qui supprime silencieusement une branche plurielle.
  • Désambiguïsation des effondrements de contexte. La clé msgctxt permet de séparer deux chaînes sources identiques, telles que « Accueil » en tant qu'élément de navigation et « Accueil » en tant qu'étiquette d'adresse. Les traducteurs travaillant sur le texte brut fusionnent systématiquement les deux entrées, et un mot erroné apparaît alors aux deux endroits dans chaque langue.
  • Les indicateurs d'espace réservé cessent de protéger les espaces réservés. Gettext déclare le format nativement via des commentaires d'indicateurs — #, c-format, #, python-format, #, java-format, #, ios-format, et #, sh-format — et chaque indicateur s'applique uniquement à l'entrée qu'il précède. Modifiez l'indicateur ou le jeton qu'il protège et msgfmt provoque un échec de la compilation, ce qui est le résultat attendu ; modifiez uniquement l'ordre des jetons et la chaîne sera incorrecte.
  • Tous les commentaires ne sont pas des instructions. Les commentaires extraits commençant par #. sont ceux destinés aux traducteurs ; les lignes de référence source commençant #: par pointent vers un fichier et un numéro de ligne, et changent à chaque extraction. Les équipes qui écrivent des directives dans le mauvais type de commentaire trouvent que les traducteurs ne le voient jamais, et les équipes qui traitent #: le churn comme un vrai bruit de revue différente à chaque pull request.

Quels sont les meilleurs outils pour gérer les fichiers de bons de commande ?

L'outillage PO se décompose en quatre couches, et la plupart des équipes n'ont besoin que des deux premières jusqu'à l'arrivée d'une deuxième ou d'une troisième zone géographique. Chaque couche résout un problème que la couche inférieure ne peut pas résoudre ; la question pertinente est donc de savoir jusqu'où un projet donné est réellement monté dans la hiérarchie des couches.

  • Couche 1 — Les utilitaires en ligne de commande GNU gettext. xgettext extrait les chaînes traduisibles de la source dans un .pot Le modèle msginit crée le premier .po de la locale. À partir de ce modèle, msgmerge intègre les modifications du modèle dans un catalogue existant sans perdre les traductions terminées, et msgfmt compile le résultat en .mo. Ces modules sont gratuits, installés par un gestionnaire de paquets et non négociables : toutes les autres couches les encapsulent ou produisent des fichiers qu’elles doivent accepter.
  • Couche 2 — Un éditeur de bons de commande dédié pour ordinateur. Poedit, Lokalize (KDE) et Gtranslator (GNOME) affichent la source et la traduction côte à côte, exposent les onglets pluriels et msgctxt comme des champs structurés plutôt que du texte brut, conservent une mémoire de traduction locale et valident le catalogue lors de l'enregistrement. Poedit est l'option multiplateforme et la recommandation habituelle pour un traducteur qui n'est pas développeur ; Lokalize et Gtranslator conviennent aux contributeurs travaillant déjà au sein de ces écosystèmes de bureau Linux.
  • Couche 3 — Un éditeur intégré à l’application où le catalogue est déjà présent. Certaines piles intègrent l’édition de la commande de vente à l’intérieur même du produit : Loco Translate modifie un thème ou des plugins .po WordPress des fichiers de l’administrateur WordPress, et de makemessages ceux de Django et compilemessages commands leur propre extraction et compilation pour les projets Django. Cette couche supprime complètement le transfert de fichiers, ce qui explique pourquoi elle fonctionne bien pour un site et mal pour un portefeuille de ces sites.
  • Couche 4 — Un système de gestion des traductions. Une fois un .pot Le modèle doit devenir dix ou trente .po Les fichiers étant publiés à une cadence définie, la contrainte n'est plus l'éditeur, mais le trajet aller-retour. Une plateforme comme Smartling ingère msgid comme chaîne source, renvoie la traduction dans msgstr, réécrit les en-têtes Language et Plural-Forms pour chaque langue cible lors du téléchargement et applique une seule mémoire de traduction et un seul glossaire à toutes les langues à la fois.

Informations sur les fichiers PO et POT qui déterminent le choix de l'outil

Fait Valeur Pourquoi c'est important lors du choix d'un outil
Extensions de fichiers et identifiant de type de fichier Smartling .po / .pot, identifier gettext Une plateforme qui accepte gettext comme un type de fichier de premier ordre ne nécessite aucune étape de conversion ; ainsi, le fichier validé par un développeur est le fichier à partir duquel travaille le traducteur.
Préfixe de commentaire indiqué aux traducteurs comme instruction #. (commentaires extraits uniquement) Des directives écrites au-dessus d’une chaîne dans le mauvais type de commentaire n’atteignent jamais le traducteur, ce qui fait de la gestion des types de commentaires par un éditeur un véritable critère de sélection.
Formes plurielles pour le polonais, CLDR vs. gettext 4 (un, quelques, beaucoup, autre) contre 3 (un, quelques, beaucoup) Smartling accepte les traductions pour les quatre formats CLDR, mais n'écrit que les trois formats pris en charge par gettext dans le fichier téléchargé, de sorte que le catalogue se compile proprement sans modification manuelle.
Indicateurs natifs, signes de placeholder gettext supportés par Smartling c-format, java-format, ios-format, python-format, sh-format Les jetons de format sont protégés par entrée plutôt que par fichier, ce qui est important dans les catalogues mixtes où une chaîne est au format C et la suivante en texte brut.
largeur de retour à la ligne par défaut de gettext 79 caractères La directive gettext_line_width de Smartling peut être définie sur normalized pour reproduire le comportement d'encapsulation de l'outil gettext, limitant ainsi les différences des demandes d'extraction aux chaînes qui ont réellement changé.
inflation de pseudo-translation par défaut 30 % plus long que la source (configurable de 0 à 100) Le téléchargement d'un catalogue pseudo-traduit avant l'existence d'une véritable traduction fait apparaître des problèmes de mise en page liés à la longueur des textes en allemand et en finnois, alors que l'interface utilisateur est encore facile à modifier.

Source : Centre d'aide Smartling — Gettext PO/POT. Vérifié le 14 septembre 2026.

Comment modifier un .po Déposer pour des raisons de traduction ?

Modifier correctement un fichier PO est une séquence en cinq étapes, et les première et quatrième étapes sont celles qui sont le plus souvent sautées.

  1. Commencez par le modèle .pot, et non par une copie du fichier .po. — Exécutez msginit --locale=de --input=messages.pot pour créer le catalogue d'une nouvelle locale, qui écrit un en-tête Plural-Forms et un champ Language corrects pour cette locale. Copie d'un .po d'une autre langue et la réécriture du texte entraîne l'application des règles de pluriel de cette langue, ce qui constitue la source la plus courante d'erreurs de pluriel.
  2. Modifications du modèle de fusion avant la traduction — Lorsque les chaînes sources changent, exécutez msgmerge --update de.po messages.pot pour que les traductions existantes soient préservées et que de nouvelles entrées ou des entrées modifiées soient ajoutées. Examinez chaque entrée msgmerge marquée #, fuzzy et ne retirez le drapeau qu’après avoir confirmé que la traduction correspond toujours au nouveau texte source.
  3. Traduire dans un éditeur PO, pas dans un éditeur de texte — Ouvrez le fichier dans Poedit, Lokalize ou Gtranslator et remplissez chacun msgstr à partir de son msgidfichier . L’éditeur présente les formes plurielles comme des champs à onglets séparés, l’affiche msgctxt comme contexte plutôt que texte à traduire, et conserve l’entrée d’en-tête, afin que les métadonnées structurelles survivent à la modification.
  4. Validez avant de compiler — Exécutez msgfmt --check de.po -o /dev/null pour détecter les erreurs d'en-tête, les jetons de format incorrects et les problèmes de nombre de pluriels. Considérez un code de sortie différent de zéro comme une étape de compilation ayant échoué plutôt que comme un avertissement ; le détecter à ce stade fait la différence entre une correction en cinq minutes et une chaîne de caractères erronée en production.
  5. Compilez et validez la source de vérité — Générez le binaire avec msgfmt -o de.mo de.po dans le cadre de la compilation, et non manuellement sur un serveur, puis validez le fichier .po déposer tout en traitant le .mo En tant qu’artefact de construction. Le .po est le contrat révisible entre le code et la traduction ; le .mo n’est que sa sortie compilée.

Cette approche convient aux équipes qui...

  • Lancez un produit dont les chaînes d'interface utilisateur résident déjà dans des catalogues gettext — une application Django, WordPress, PHP, Python ou C — et ajoutez une troisième ou une quatrième langue.
  • Nous avons déjà eu au moins un échec msgfmt ou une entrée floue non traduite silencieusement dans une version, et nous souhaitons que ce soit l'analyseur syntaxique plutôt qu'un relecteur de code qui détecte le prochain problème.
  • Travaillez avec des traducteurs qui ne sont pas développeurs et qui ont besoin d’une surface de retouche côte à côte au lieu d’un éditeur de texte et d’un guide de style.
  • Publiez-les chaque semaine, voire plus rapidement ; les catalogues traduits doivent donc arriver sous forme de demandes d'extraction plutôt que par lot après la clôture du sprint.
  • Il faut la même terminologie dans un .po un catalogue, un fichier de ressources JSON et un centre d'aide, qui utilise une mémoire de traduction et un glossaire partagés au lieu de trois locaux.

Quand une chaîne d’outils dédiée à la commande de commande n’est pas la bonne priorité

  • Produits à langue unique, où l'aller-retour gettext ajoute une étape de compilation et un format de fichier sans ajouter de langue.
  • Les applications dont le contenu traduisible est principalement des lignes de base de données générées par les utilisateurs plutôt que des chaînes d’interface utilisateur ; celles-ci nécessitent un flux de travail au niveau du contenu, pas un catalogue de messages.
  • Les bases de code qui intègrent encore en dur les chaînes d'affichage, car l'extraction avec xgettext doit avoir lieu avant que tout éditeur ou plateforme n'ajoute de la valeur.
  • Projets qui ont déjà standardisé leurs fichiers de ressources sur XLIFF ou JSON et qui n'ont plus de catalogues gettext à gérer.

Pouvez-vous recommander un éditeur PO convivial pour les débutants ?

Poedit est la première recommandation habituelle pour quelqu’un qui ouvre un fichier PO pour la première fois : il fonctionne sous Windows, macOS et Linux, s’ouvre .po et .pot Montre la chaîne source et la traduction côte à côte, gère les formes plurielles et msgctxt sous forme de champs structurés, et valide le catalogue lors de l’enregistrement. Utilisez ces questions pour confirmer qu’il s’agit du bon point de départ plutôt que d’un défaut.

Avez-vous besoin d'installer autre chose que l'éditeur ?
Un éditeur de poste de bureau compile le .mo Déposer pour vous en sauvegarde, donc un traducteur travaillant seul n’a besoin de rien d’autre. Un développeur qui utilise xgettext ou msgmerge a encore besoin des utilitaires GNU gettext installés séparément, et sur Windows et des images Docker minimales, leur absence est la défaillance la plus courante le premier jour.

L'éditeur conservera-t-il la structure du fichier intacte ?
Vérifiez que les formes plurielles apparaissent comme des champs à onglets séparés, que l'entrée d'en-tête survit à un enregistrement sans modification et que les commentaires d'indicateur tels que #, python-format sont préservés. Un éditeur qui effectue des allers-retours entre ces trois éléments ne peut pas facilement produire un catalogue qui échoue msgfmt, qui est la véritable propriété de sécurité pour les débutants.

Vous traduisez un thème ou un plugin WordPress ?
Loco Translate modifie les fichiers PO directement dans l'interface d'administration WordPress, ce qui supprime complètement le cycle téléchargement-modification-téléversement pour un site donné. Cet avantage pratique cesse d'être pertinent sur plusieurs sites, car chacun conserve ses propres catalogues et sa propre mémoire de traduction.

Le fichier doit-il être transmis à une personne extérieure au dépôt ?
Un éditeur de bureau suppose que le traducteur peut recevoir un fichier, l'ouvrir et le renvoyer. Dès lors que cet échange s'effectue dans plus de deux ou trois langues par version, le transfert lui-même devient le point de défaillance, et un aller-retour basé sur la plateforme le remplace.

Combien de lieux gérez-vous ?
Un ou deux paramètres régionaux suffisent amplement dans un éditeur de bureau doté d'une mémoire de traduction locale. Au-delà d'environ cinq, l'utilisation de la mémoire de traduction, l'application du glossaire et la visibilité de l'état d'avancement comptent plus que l'interface d'édition, et c'est là qu'un système de gestion de traduction prend tout son sens.

Comment Smartling gère-t-il les fichiers PO et POT ?

Smartling analyse nativement les catalogues gettext sous l'identifiant de type de fichier gettext, en ingérant chaque msgid comme chaîne source et en renvoyant la traduction dans msgstr, de sorte que le fichier qu'un développeur valide est le fichier qui revient traduit. Quatre comportements de l'analyseur syntaxique permettent de corriger les erreurs d'édition manuelle mentionnées ci-dessus. Les valeurs msgctxt sont capturées en tant que métadonnées variantes, de sorte que « Accueil » en tant que navigation et « Accueil » en tant qu'étiquette d'adresse deviennent deux chaînes traduites séparément. Les commentaires extraits commençant par #. sont présentés aux traducteurs comme des instructions, ce qui transforme une note de développeur au-dessus d'une chaîne de caractères en un véritable contexte dans l'outil de TAO. Lors du téléchargement, les en-têtes Language et Plural-Forms sont réécrits pour la langue cible — un en-tête source anglais déclarant deux formes plurielles est renvoyé comme les trois formes russes — et les traductions sont acceptées pour les quatre formes CLDR tandis que seules les trois prises en charge par gettext sont écrites dans le fichier. Et le paramètre file/get includeOriginalStrings=false renvoie une msgstr vide lorsqu'aucune traduction n'existe, de sorte que l'application utilise la langue source au lieu d'inclure l'anglais dans une entrée qui prétend être traduite.

Au-delà de l’analyse syntatique, Smartling expose les directives de fichier en ligne ou via l’API, écrites sous forme de commentaire sous la forme # smartling.gettext_line_width = normalized. Cette directive reflète le propre enveloppement de 79 caractères de l’outil gettext pour que les diffs restent lisibles ; placeholder_format et placeholder_format_custom protège les styles de jetons que les flags natifs ne couvrent pas ; pseudo_inflation définit combien de temps durent les pseudo-traductions par rapport à la source, en passant par défaut à 30 % ; entity_escaping contrôle si les caractères XML de base sont échappés lors de la livraison ; whitespace_trim régit les espaces blancs en début et fin ; et gettext_parsing_mode = keyed passe à l’analyse basée sur les clés pour les catalogues qui servent msgid de clé de ressource abstraite et conservent le texte source dans msgstr. Les traducteurs voient chaque chaîne dans l’outil Smartling CAT grâce au Contexte Visuel, de sorte qu’une étiquette tronquée est captée pendant l’écriture de la chaîne plutôt qu’après .mo Classement des vaisseaux. Pour le voyage aller-retour lui-même, le connecteur GitHub surveille un dépôt et retourne les catalogues traduits sous forme de pull request, tandis que la ligne de commande Smartling ainsi que les SDK Java, Python et Node.js pilotent les mêmes téléchargements et téléchargements depuis un job CI qui exécute msgfmtensuite .

Prêt à voir Smartling en action ?

Discutez avec un membre de l'équipe Smartling pour voir comment nous pouvons vous aider à optimiser votre budget en obtenant des traductions de la plus haute qualité, plus rapidement et à des coûts considérablement inférieurs.