Contribuer

Traductions

Comprendre comment Dokos traduit ses textes, corriger une traduction sur un site ou dans le code, traduire de nouveaux textes ou ajouter une langue.

Traductions

Tous les textes de l'interface de Dokos sont traduisibles. Si un texte n'est pas traduit, ouvrez un ticket sur GitLab (il faut un compte GitLab) ou signalez-le sur le forum.

Fichiers de traduction

Dokos utilise le format gettext. Chaque application a un dossier locale/ :

FichierContenu
<app>/locale/main.potModèle : tous les textes traduisibles de l'application.
<app>/locale/fr.poTraductions d'une langue (ici le français).

Exemples : frappe/locale/fr.po dans le dépôt Dodock, erpnext/locale/fr.po dans le dépôt Dokos.

bench build compile les fichiers .po en fichiers .mo dans sites/assets/locale/. Dokos lit les fichiers .mo.

Textes traduisibles dans le code

En Python, entourez le texte de _() :

from frappe import _

frappe.msgprint(_("Invoice {0} submitted").format(doc.name))

En JavaScript, utilisez __(), avec la liste des valeurs à remplacer en deuxième argument :

frappe.msgprint(__("Invoice {0} submitted", [doc.name]));

Écrivez le texte source en anglais. La traduction française est dans le fichier fr.po.

Contexte

Un même mot peut avoir plusieurs traductions. Un contexte les distingue :

_("Apply", context="Job Opening")
__("Apply", null, "Job Opening");

Dans le fichier .po, le contexte est la ligne msgctxt :

msgctxt "Job Opening"
msgid "Apply"
msgstr "Postuler"

Les libellés des champs d'un formulaire sont traduits avec le nom du type de document comme contexte. Sans traduction pour ce contexte, Dokos utilise la traduction sans contexte.

Corriger une traduction sur un site

Pour corriger un texte sur votre site seulement, sans modifier le code :

  1. Ouvrez la liste Traduction et cliquez sur Ajouter.
  2. Choisissez la Langue.
  3. Saisissez le Texte Source (le texte anglais) et le Texte Traduit.
  4. Si besoin, saisissez le Contexte (par exemple le nom du type de document).
  5. Enregistrez.

La traduction du site remplace celle des fichiers .po.

Corriger une traduction dans le code

  1. Ouvrez le fichier fr.po de l'application dans GitLab (voir les exemples ci-dessus).
  2. Cherchez le msgid du texte et corrigez le msgstr.
  3. Proposez une merge request vers la branche develop du dépôt.

Vous pouvez aussi ouvrir un ticket avec le texte, la traduction proposée et une capture d'écran.

Traduire les nouveaux textes d'une application

Depuis le dossier du bench :

  1. Mettez à jour le modèle :
    bench generate-pot-file --app erpnext
    
  2. Ajoutez les nouveaux textes au fichier de la langue :
    bench update-po-files --app erpnext --locale fr
    
  3. Traduisez les entrées dont le msgstr est vide, avec un éditeur de fichiers .po (Poedit, par exemple) ou un éditeur de texte.
  4. Compilez et vérifiez sur votre site :
    bench compile-po-to-mo --app erpnext --locale fr
    bench --site <mon-site> clear-cache
    
  5. Proposez une merge request avec le fichier fr.po.

Le nom technique de Dokos est erpnext et celui de Dodock est frappe.

Références des textes issus de fichiers JSON

Dans le modèle main.pot et dans les fichiers .po, chaque entrée est précédée de commentaires #: qui indiquent où le texte a été trouvé (fichier:ligne). Pour les textes extraits des fichiers JSON de l'application, la référence comprend le numéro de ligne, et pas seulement le nom du fichier. Cela concerne les types de document (DocType), les rapports, les espaces de travail, les formulaires web, les champs personnalisés et les personnalisations de formulaire, ainsi que les barres latérales, les étapes d'onboarding, les tableaux Kanban et les filtres de liste standard.

Le numéro de ligne est calculé en cherchant la paire clé/valeur du texte (par exemple "label": "Status") dans le fichier JSON tel qu'il est écrit par Dokos. Quelques règles à connaître :

  • si la même paire clé/valeur apparaît plusieurs fois dans le fichier, la référence pointe vers la première occurrence ;
  • les options d'un champ de type Sélection pointent vers la ligne de la valeur options du champ, et non vers la ligne de chaque option ;
  • les textes du contenu d'un espace de travail pointent vers la ligne de la valeur content ;
  • si la paire clé/valeur n'est pas retrouvée dans le fichier (fichier mis en forme à la main, par exemple), l'entrée n'a pas de numéro de ligne et seul le nom du fichier est indiqué.

Ajouter une langue

bench create-po-file de --app erpnext

La commande crée erpnext/locale/de.po à partir du modèle main.pot. La langue doit aussi exister dans le fichier frappe/geo/languages.csv.