ManuceTraduire un fichierTraduire une application Django en anglais

Traduire une application Django en anglais

Pour traduire une application Django en anglais, on traduit le fichier <code>locale/en/LC_MESSAGES/django.po</code> produit par <code>makemessages</code>, puis on le recompile avec <code>compilemessages</code>. Manuce remplit les <code>msgstr</code> en anglais sans toucher aux <code>msgid</code>, vérifie les variables <code>%(name)s</code> et <code>{name}</code>, et vous rend le même fichier accompagné d’un rapport.

Déposer mon fichier Voir les tarifs

Combien ça coûte

Pour les fichiers de langue d'une application Django totalisant environ 3 000 mots, vers l’anglais :

Essentiel
18 €

Comprendre, usage interne.

Professionnel
54 €

Prêt à transmettre, par le spécialiste technique.

Premium
105 €

Relecture croisée. Pour ce qui engage.

Prix pour une langue, mise en page d'origine comprise. TVA non applicable, article 293 B du CGI. Le devis exact, calculé sur le nombre de mots de votre fichier, s'affiche avant paiement.

Ce qui se traduit dans un projet Django, et ce qui ne bouge pas

Dans Django, les chaînes marquées avec gettext, gettext_lazy, ngettext ou les balises {% translate %} et {% blocktranslate %} des gabarits sont extraites par makemessages dans un fichier gettext. Chaque entrée associe un msgid (la chaîne telle qu’écrite dans le code) à un msgstr (sa traduction). Seul le msgstr est rédigé en anglais\u00a0; le msgid sert de clé et doit rester identique au caractère près, sinon Django ne retrouve plus la traduction.

Deux fichiers peuvent exister côté anglais\u00a0:

  • django.po pour le Python et les gabarits (modèles, formulaires, verbose_name, messages flash, courriels)\u00a0;
  • djangojs.po, généré avec makemessages -d djangojs, pour les chaînes JavaScript servies par le catalogue JS.

Un point souvent oublié\u00a0: si vos msgid sont déjà rédigés en anglais, Django les affiche tels quels quand aucune traduction n’existe. Un fichier anglais n’est alors utile que pour corriger ou britanniser des libellés. La traduction prend tout son sens quand le code a été écrit en français, par exemple _("Votre panier est vide").

Du français vers l’anglais\u00a0: pluriels, variables et typographie

Le passage à l’anglais touche des détails qui cassent l’affichage s’ils sont mal traités.

  • Pluriels\u00a0: l’anglais a deux catégories, one et other, mais pas avec la même frontière qu’en français. En français, 0 est au singulier (0 commande)\u00a0; en anglais, il est au pluriel (0 orders). L’en-tête du fichier anglais doit donc porter Plural-Forms: nplurals=2; plural=(n != 1); et non la règle française (n > 1). Chaque entrée msgid_plural attend deux formes, msgstr[0] et msgstr[1].
  • Ordre des mots\u00a0: %(count)s fichiers supprimés par %(user)s devient naturellement %(user)s deleted %(count)s files. Les variables nommées se déplacent sans risque\u00a0; deux %s anonymes dans la même chaîne, eux, figent l’ordre. Nommez-les avant l’extraction.
  • Typographie\u00a0: les espaces insécables avant : et ? disparaissent, les guillemets « » deviennent des guillemets anglais, et un libellé comme Mot de passe oublié\u00a0? devient Forgotten your password?.
  • Longueur\u00a0: le texte anglais est en général 10 à 15\u00a0% plus court que le français. Les colonnes de l’admin et les boutons respirent davantage, mais un libellé très court peut perdre en clarté\u00a0: Enregistrer se rend par Save, pas par une abréviation.

Anglais britannique ou américain\u00a0: un choix qui se voit dans Django

Décidez de la variante avant de lancer makemessages, car elle détermine le dossier de locale. Avec makemessages -l en_GB, le fichier est créé dans locale/en_GB/LC_MESSAGES/ et correspond au code en-gb dans LANGUAGES. Avec -l en, Django applique ses formats de l’anglais générique, de tendance américaine.

  • Orthographe\u00a0: colour ou color, organise ou organize, cancelled ou canceled, licence (nom) au Royaume-Uni.
  • Dates et nombres\u00a0: ne les écrivez pas en dur dans vos chaînes. Une chaîne comme Livraison le %(date)s laisse Django formater la date selon la locale active (05/03/2025 au Royaume-Uni, 03/05/2025 aux États-Unis). Une date figée dans le msgid ne serait pas convertie.
  • Vocabulaire\u00a0: postcode ou ZIP code, mobile ou cell phone, VAT ou sales tax selon le marché visé.

Vérifiez la variante obtenue dès l’extrait gratuit, qui montre un passage du fichier traduit au niveau choisi avant tout paiement.

Ce que Manuce rend exactement, et ce qu’il ne fait pas

Vous déposez le django.po (ou le djangojs.po) et vous récupérez le même fichier, dans le même format, prêt à remettre dans locale/. L’indentation, l’ordre des entrées, les guillemets, les commentaires (#: de référence, #. pour les traducteurs), les fins de ligne, l’encodage et le BOM éventuel sont conservés\u00a0; seules les valeurs changent.

  • Les variables %(name)s et {name} sont vérifiées\u00a0: chaque valeur traduite est comparée à la source, variables et balises comprises. En cas d’écart persistant, la valeur source est gardée et le rapport le signale.
  • Ne sont pas traduits\u00a0: les clés, les valeurs vides, les URL, les adresses email, les nombres, les couleurs, les formats de date, les identifiants et tout ce qui est marqué non traduisible.
  • Le rapport liste les chaînes traduites et celles laissées telles quelles, avec la raison.

Manuce ne lance ni makemessages ni compilemessages, ne produit pas le .mo, ne modifie pas votre code pour marquer les chaînes et ne règle pas vos settings.py. Il ne produit pas non plus de traduction assermentée, ce qui n’a de toute façon pas d’usage pour une interface. Pour une application montrée à des clients, le niveau Professionnel, confié au spécialiste du domaine, est le plus adapté.

Préparer le fichier et vérifier après traduction

Avant l’envoi\u00a0:

  • Relancez makemessages -l en_GB (ou -l en) pour que le fichier reflète le code actuel et que les entrées obsolètes soient marquées #~.
  • Ajoutez du contexte là où un mot est ambigu\u00a0: pgettext("verbe", "Commande") et pgettext("nom", "Commande") donneront Order dans les deux cas, mais Archive peut être un verbe ou un nom.
  • Remplacez les %s multiples par des variables nommées.

Après livraison\u00a0:

  1. Vérifiez l’en-tête Language et Plural-Forms.
  2. Retirez les drapeaux #, fuzzy restants\u00a0: compilemessages ignore par défaut les entrées floues, qui resteraient en français.
  3. Compilez, puis affichez une page avec un compteur à 0, 1 et 2 pour contrôler les pluriels.
  4. Lisez le rapport et traitez les chaînes laissées en source.

En pratique

  1. Lancez makemessages -l en_GB (ou -l en) et récupérez le fichier django.po généré.
  2. Déposez le fichier sur Manuce, consultez le devis et l’extrait gratuit.
  3. Récupérez le django.po traduit et son rapport, puis replacez-le dans locale/.
  4. Vérifiez l’en-tête Plural-Forms, retirez les entrées fuzzy et lancez compilemessages.
  5. Testez l’interface en anglais, notamment les pluriels et les libellés longs de l’admin.

Questions fréquentes

Faut-il traduire le msgid ou le msgstr\u00a0?

Uniquement le msgstr. Le msgid est la clé qui relie la chaîne du code à sa traduction\u00a0; le modifier rompt ce lien. Manuce laisse les msgid intacts et ne change que les valeurs.

Mes chaînes sont déjà en anglais dans le code, ai-je besoin d’un fichier anglais\u00a0?

Pas forcément. Sans traduction, Django affiche le msgid lui-même. Un fichier anglais sert alors surtout à adapter l’orthographe britannique ou à corriger des libellés écrits par des développeurs.

Le fichier .mo est-il livré\u00a0?

Non. Manuce rend le .po traduit\u00a0; c’est vous qui le compilez avec compilemessages dans votre projet. Pensez à retirer auparavant les entrées marquées fuzzy, ignorées par défaut à la compilation.

Que se passe-t-il si une variable comme %(user)s est perdue\u00a0?

Chaque valeur traduite est comparée à la source, variables et balises comprises. Si l’écart persiste, la valeur source est conservée pour ne pas casser l’affichage, et le rapport indique la chaîne concernée.

Le fichier djangojs.po peut-il être traduit aussi\u00a0?

Oui, c’est un fichier gettext du même format que django.po. Déposez-le de la même façon\u00a0; il sera rendu à l’identique, avec ses variables vérifiées et son propre rapport.

Le spécialiste qui s’en charge

Ce sujet est confié à Dédale, le spécialiste technique. Voir comment il travaille.

Testez sur votre fichier, gratuitement

Un extrait de votre fichier traduit au niveau choisi, avant tout paiement. Vous jugez, puis vous décidez.

Déposer mon fichier