Documentation Frappe Framework

Frappe Framework

Traductions

Libellés et descriptions de DocType sont pris automatiquement. Le reste doit être un littéral, avec {0}, sans découpe ni espace en bord.

2 min de lectureMis à jour le Source : docs.frappe.io

Trois étapes

Frappe extrait les chaînes, les fait traduire, puis les retrouve à l’exécution. Les CSV d’une application à soi sont dans Traductions dans une app personnalisée.

Les label et description des JSON de DocType sont traduisibles sans marque. Le reste, dans .json, .js et .py, ne l’est que dans _() ou __(). Exemple : _("You don't have permissions to access this file").

Les CSV par langue viennent surtout du portail. Un robot ouvre chaque semaine une pull request, après vérification, vers le cœur.

À l’exécution, __('1 hour ago') cherche le dictionnaire. S’il y a une traduction, elle s’affiche. Le principe est le même en Python. L’exemple publié est un extrait hindi, coupé par ....

Chaînes valides

Le parseur ne voit qu’un littéral. _('Document submitted successfully') puis msgprint, ou l’appel direct, passe. _(message) où message est une variable ne passe pas. Même chose en JavaScript avec __.

Les variables utilisent {0}. En Python : _('Welcome {0}, ...').format(full_name). %s, %(name)s, ou un .format avant _(), ne marchent pas. En JavaScript : __('Welcome {0}, ...', [full_name]). Une template littérale avec ${full_name} ne marche pas.

Ne pas couper ni écrire sur plusieurs lignes. _('You have ') + n + _(' subscribers...') et une chaîne continuée par \ sont refusés. En JavaScript, concaténer deux __() ou couper la chaîne avec + aussi.

Pas de pluriel par logique : ajouter _("s") si le compte dépasse 1 est refusé. Deux chaînes complètes, singulier et pluriel.

Pas d’espace en début ou en fin : le moteur les rogne pour les autres langues. L’espace se met autour de l’appel : ' ' + _("You have {0} pending invoices") + ' '. L’exemple « à ne pas faire » est au singulier, celui « à faire » au pluriel.

Le contexte lève l’ambiguïté. En JavaScript, __("Change", null, "Coins"). En Python, _("Change", context="Switch"). L’outil cité est la doc ERPNext des traductions.

Nouvelle langue

  1. bench --site sitename get-untranslated [lang] [path-to-file].
  2. Traduire dans un second fichier, même ordre. Google Traduction ou Bing sont cités.
  3. bench update-translations [lang] [source-path] [translated-path]. Un [lang].csv apparaît dans translations de chaque application.
  4. Ajouter la langue dans frappe/geo/languages.json.
  5. Commiter les CSV de chaque application et pousser.

Point d’attention

Formater avant _() ou passer une variable fait rater l’extraction. Le contexte JavaScript est le troisième argument, après null. En Python, c’est le mot-clé context.