Smartling nommé chef de file dans The Forrester Wave™ : services de localisation, 3e trimestre 2026.
Smartling nommé Leader dans The Forrester Wave™

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

Un fichier PO est un catalogue de messages GNU gettext : une liste en texte brut de chaînes sources msgid et de traductions msgstr que msgfmt compile en fichier binaire .mo fichier qu'une application charge lors de son exécution. Les meilleurs outils de gestion des fichiers PO se répartissent en trois catégories : les utilitaires en 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 la traduction d’un fichier à la fois ; et un système de gestion de traductions comme Smartling, qui analyse les fichiers .po et .pot nativement sous l'identifiant de type de fichier gettext, lorsque le même catalogue doit être diffusé dans plusieurs régions selon un calendrier de publication. Le niveau de service dont une équipe a réellement besoin dépend du nombre de langues et du rythme des mises à jour, et non de l'éditeur qui a la meilleure interface.

Dernière révision : 14 septembre 2026

Pourquoi l’édition manuelle d’un .po est-elle Les fichiers causent-ils des bogues de production?

La modification manuelle endommage les fichiers PO parce que le format contient des métadonnées structurelles — indicateurs, en-têtes et clés de contexte — qui ressemblent à de simples commentaires pour quiconque ouvre le catalogue dans un éditeur de texte brut. Cinq types de défaillances sont responsables de la majeure partie des dommages, et chacun d'eux est passé sous silence dans le langage 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 à la localisation et facile à briser. Gettext exprime les pluriels à travers msgid_plural et une expression par localisation Plural-Forms dans l’entrée d’en-tête — l’anglais nécessite deux formes, le russe trois. Retaper ou copier cet en-tête entre les lieux 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 fera échouer la compilation, ce qui est le bon résultat ; modifiez seulement l'ordre des jetons et la chaîne sera envoyée incorrectement.
  • Tous les commentaires ne sont pas des instructions. Les commentaires extraits commençant par #. sont 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 rédigent des instructions dans le mauvais type de commentaire constatent que les traducteurs ne les voient jamais, et les équipes qui traitent #: churn comme un véritable bruit de fond lors des examens de différences sur chaque demande de fusion.

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 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 PO dédié au bureau. Poedit, Lokalize (KDE) et Gtranslator (GNOME) affichent la source et la traduction côte à côte, exposent des onglets au pluriel et msgctxt sous forme de champs structurés plutôt que du texte brut, conservent une mémoire de traduction locale et valident le catalogue en sauvegarde. Poedit est l’option multiplateforme et la recommandation habituelle pour un traducteur qui n’est pas développeur; Localizize et Gtranslator conviennent aux contributeurs déjà actifs dans 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 PO à l’intérieur même du produit : Loco Translate modifie un thème WordPress ou des plugins .po des fichiers de l’administrateur WordPress, et ceux de makemessages Django et compilemessages commandent leur propre extraction et compilation pour les projets Django. Cette couche supprime complètement le transfert de fichiers, c’est pourquoi elle fonctionne bien pour un site et mal pour un portfolio.
  • Couche 4 — Un système de gestion de la traduction. Une fois .pot Le modèle doit devenir dix ou trente .po Les fichiers sur un rythme de libération, la contrainte cesse d’être l’éditeur et devient le voyage aller-retour. Une plateforme comme Smartling ingeste msgid comme chaîne source, retourne la traduction dans msgstr, réécrit les Language en-têtes et Plural-Forms de chaque localisation cible lors du téléchargement, et applique une mémoire de traduction et un glossaire à chaque lieu à 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 affiché aux traducteurs sous forme d’instructions #. (commentaires extraits seulement) Les 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.
Les marqueurs de placeholder gettext natif Smartling supportent 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 un format C et la suivante est du texte brut.
largeur de retour à la ligne par défaut de gettext 79 personnages La directive de gettext_line_width Smartling peut être configurée pour normalized répéter l’enveloppement propre de l’outil gettext, limitant ainsi les différences de pull request aux chaînes qui ont réellement changé.
inflation de pseudo-translation par défaut 30% de plus 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 ressortir 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 fichier .po fichier à des fins de traduction ?

La modification correcte d'un fichier PO se fait en cinq étapes, et les première et quatrième étapes sont celles qui sont le plus souvent ignorées.

  1. Commencez par le modèle .pot, pas 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. Traduisez dans un éditeur PO, pas dans un éditeur de texte — Ouvrez le fichier dans Poedit, Lokalize ou Gtranslator et remplissez chaque msgstr à partir de son msgid. L'éditeur présente les formes plurielles sous forme de champs à onglets distincts, affiche msgctxt comme contexte plutôt que comme texte à traduire et préserve l'entrée d'en-tête, de sorte 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 qu'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. Compiler et valider la source de vérité — Générer le binaire avec msgfmt -o de.mo de.po dans le cadre de la compilation, et non à la main sur un serveur, et valider le .po classer tout en traitant le .mo comme artefact de construction. Le .po est le contrat révisable 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 voulons 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 d'édition côte à côte plutôt qu'un éditeur de texte et un guide de style.
  • Publiez-les chaque semaine, voire plus fréquemment ; 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.

Lorsqu'une chaîne d'outils PO dédiée n'est pas la priorité adéquate

  • Produits à localisation unique, où le gettext aller-retour ajoute une étape de compilation et un format de fichier sans ajouter de langage.
  • 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.
  • Des projets qui se sont déjà standardisés sur des fichiers de ressources XLIFF ou JSON et qui n’ont plus de catalogues gettext à gérer.

Pouvez-vous recommander un éditeur de points de vente convivial pour les débutants?

Poedit est généralement le premier logiciel recommandé à toute personne ouvrant un fichier PO pour la première fois : il fonctionne sous Windows, macOS et Linux, et ouvre les fichiers .po et .pot Il traite directement les fichiers, affiche la chaîne source et sa traduction côte à côte, gère les formes plurielles et msgctxt comme des champs structurés et valide le catalogue lors de son enregistrement. Utilisez ces questions pour confirmer qu'il s'agit du bon point de départ et non d'une valeur par défaut.

Avez-vous besoin d'installer autre chose que l'éditeur ?
Un éditeur PO de bureau compile le .mo Le fichier est créé automatiquement lors de l'enregistrement, donc un traducteur travaillant seul n'a besoin de rien d'autre. Un développeur utilisant xgettext ou msgmerge a toujours besoin des utilitaires GNU gettext installés séparément, et sur Windows et les images Docker minimales, leur absence est l'échec le plus courant dès 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 fait 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 plugiciel 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 à l'extérieur du 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 d’endroits 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éments, l'utilisation de la mémoire de traduction, l'application du glossaire et la visibilité de l'état d'avancement importent 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 les catalogues gettext nativement sous l’identifiant gettextde type de fichier , ingérant chacun msgid comme chaîne source et retournant la traduction dans msgstr, donc le fichier qu’un développeur commit est celui qui revient traduit. Quatre comportements d’analyseur éliminent les échecs d’édition manuelle mentionnés ci-dessus. msgctxt les valeurs sont capturées comme des métadonnées variantes, donc « Home » comme navigation et « Home » comme étiquette d’adresse deviennent deux chaînes de caractères traduites séparément. Les commentaires extraits commençant par #. sont affichés aux traducteurs sous forme d’instructions, ce qui transforme une note de développeur au-dessus d’une chaîne en contexte réel dans l’outil CAT. Lors du téléchargement, les Language en-têtes et Plural-Forms sont réécrits pour la localisation cible — un en-tête source anglais déclarant deux formes plurielles correspond aux trois du russe — et les traductions sont acceptées pour les quatre formulaires CLDR, tandis que seuls les trois supports gettext sont écrits dans le fichier. Et le file/get paramètre includeOriginalStrings=false retourne un vide msgstr lorsqu’il n’y a pas de traduction, donc l’application revient à la langue source au lieu de livrer l’anglais à l’intérieur d’une entrée qui prétend être traduite.

Au-delà de l'analyse syntaxique, Smartling expose des directives de fichiers en ligne ou via l'API, écrites sous forme de commentaire sous la forme # smartling.gettext_line_width = normalized. Cette directive reproduit le comportement de l'outil gettext avec un retour à la ligne de 79 caractères afin que les différences restent lisibles ; placeholder_format placeholder_format_custom protègent les styles de jetons que les indicateurs natifs ne couvrent pas ; pseudo_inflation définit la longueur des pseudo-traductions par rapport à la source, avec une valeur par défaut de 30 % ; entity_escaping contrôle si les caractères XML de base sont échappés lors de la livraison ; whitespace_trim gère les espaces blancs de début et de fin ; et gettext_parsing_mode = keyed bascule vers une analyse basée sur les clés pour les catalogues qui utilisent msgid comme clé de ressource abstraite et conservent le texte source dans msgstr. Dans l'outil de TAO Smartling, les traducteurs visualisent chaque chaîne de caractères avec le contexte visuel. Ainsi, une étiquette de bouton tronquée est détectée pendant la saisie de la chaîne, et non après l'extension .mo Le fichier est expédié. Pour l'aller-retour lui-même, le connecteur GitHub surveille un dépôt et retourne les catalogues traduits sous forme de demande d'extraction, et l'interface de ligne de commande Smartling et les SDK Java, Python et Node.js pilotent les mêmes chargements et téléchargements à partir d'une tâche CI qui exécute ensuite msgfmt.

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 fournissant des traductions de la plus haute qualité, plus rapidement et à des coûts nettement inférieurs.