Traduction d'un atelier externe

From FreeCAD Documentation
Revision as of 10:01, 25 May 2019 by Mario52 (talk | contribs) (Created page with "Vous devriez trouver un fichier .qm pour chaque fichier .ts traduit. Les fichiers .qm sont ceux qui seront utilisés par Qt et FreeCAD au moment de l'exécution.")

Dans les notes suivantes, "context" devrait être le nom de votre addon, ex. "MySuperAddon". C’est ainsi que toutes les traductions de votre addon seront rassemblées sous un même nom, pour être plus facilement identifiables par les traducteurs.

1. Préparer les sources

Général

  • Ajouter un dossier "translations". Vous pouvez le nommer autrement, mais ce sera plus facile car c'est la même chose dans FreeCAD. Dans ce dossier, vous placerez les fichiers .ts (les fichiers de traduction "source") et les fichiers .qm (fichiers de traduction compilés).
  • Seul le texte affiché à l'usage de l'utilisateur dans l'interface utilisateur de FreeCAD doit être traduit. Le texte affiché uniquement dans la console Python ne doit pas être traduit.

Dans chaque fichier .py:

  • Dans chaque fichier où vous devez traduire du texte, vous avez besoin d'une fonction translate() définie. Un moyen simple consiste à utiliser celui de l'atelier Draft Workbench: à partir de DraftTools import translate
  • Tout le texte devant être traduit doit être placé dans la fonction translate(). Ainsi, print("My text") devient print(translate("context","My text")). Ceci peut être utilisé n’importe où: dans les fonctions print(), FreeCAD.Console.PrintMessage(), dans les dialogues Qt, etc. Dans les fonctions de FreeCAD.Console.Print*, il est nécessaire de terminer la chaîne avec le nouveau caractère de ligne (\n). Il est conseillé de laisser ce caractère en dehors de la traduction: FreeCAD.Console.PrintMessage(translatr("context","My String")+"\n")
  • Si vous utilisez des fichiers .ui créés avec QtDesigner, vous ne devez rien faire de spécial.
  • Lors de la création de nouveaux objets, ne traduisez pas les noms d'objet. Traduisez plutôt les étiquettes d'objet
  • Lors de la création de propriétés pour vos objets, ne traduisez pas le nom de la propriété. Mais placez la description à l'intérieur de QT_TRANSLATE_NOOP: obj.addProperty("App::PropertyBool","MyProperty","PropertyGroup",QT_TRANSLATE_NOOP("App::Property","This is what My Property does")) (n'utilisez pas votre propre "contexte" dans ce cas particulier. Conservez "App::Property").
  • Ne traduisez pas le texte des transactions de document effectuées avec Document.openTransaction()

Dans InitGui.py:

  • Ajoutez la ligne suivante, près du haut du fichier: def QT_TRANSLATE_NOOP(scope, text): return text
  • Pour traduire les noms de menu: self.appendMenu(QT_TRANSLATE_NOOP("context","My Menu"),[list of commands,...])
  • La macro QT_TRANSLATE_NOOP ne fait rien, mais marque les textes à récupérer ultérieurement par l’utilitaire lupdate. Puisqu'il ne traduit pas le texte dans FreeCAD (il ne fait rien), nous ne l'utilisons que dans des cas particuliers où FreeCAD s'occupe de tout.
  • Ajoutez le chemin d'accès à votre dossier "translations" dans la fonction Initialized: FreeCADGui.addLanguagePath("/path/to/translations"). Le fichier InitGui.py n’a pas d’attribut file, il est donc difficile de trouver l’emplacement relatif du dossier de traduction. Une solution simple consiste à importer un autre fichier du même dossier et dans ce fichier, effectuez FreeCADGui.addLanguagePath(os.path.join(os.path.dirname(__file__),"translations"))

À l'intérieur de chaque command class: de FreeCAD

  • Ajoutez la ligne suivante, près du haut du fichier: def QT_TRANSLATE_NOOP(context, text): return text
  • Traduisez le MenuText et l'info-bulle (Tooltip) de la commande comme ceci:
    def GetResources(self):

        return {'Pixmap'  : "path/to/icon.svg"),
                'MenuText': QT_TRANSLATE_NOOP("CommandName", "My Command"),
                'ToolTip' : QT_TRANSLATE_NOOP("CommandName", "Describes what the command does"),
                'Accel':    "Shift+A"}

where CommandName is the name of the command, defined by FreeCADGui.addCommand('CommandName',My_Command_Class())

2. Rassemblez toutes les chaînes de votre module

  • Vous aurez besoin des outils lupdate, lconvert, lrelease et pylupdate installés sur votre système. Ils viennent généralement avec des paquets nommés pysie-tools ou pyside2-tools. Sur certains systèmes, lupdate est nommé lupdate4 ou lupdate5 ou lupdate-qt4. Même chose pour les autres outils. Vous pouvez généralement utiliser la version qt4 ou qt5 à votre choix.
  • Si vous avez des fichiers .ui, vous devez d’abord exécuter lupdate: lupdate *.ui -ts translations/uifiles.ts. Ceci est récursif et trouvera des fichiers ui dans toute la structure de votre répertoire
  • Si vous avez des fichiers .py, vous devez également exécuter pylupdate: pylupdate *.py -ts translations/pyfiles.ts
  • Si vous avez exécuté les deux opérations, vous devez maintenant unifier ces deux fichiers en un: lconvert -i translations/uifiles.ts translations/pyfiles.ts -o translations/MyModule.ts
  • Vérifiez le contenu des trois fichiers ts pour vous assurer qu'ils contiennent les chaînes, puis supprimez pyfile.ts et uifiles.ts.
  • vous pouvez tout faire dans un script bash comme ceci:
#!env sh
lupdate *.ui -ts translations/uifiles.ts
pylupdate *.py -ts translations/pyfiles.ts
lconvert -i translations/uifiles.ts translations/pyfiles.ts -o translations/MyModule.ts
rm translations/pyfiles.ts
rm translations/uifiles.ts

3. Envoyer le fichier .ts à une plateforme de traduction

Il est temps de faire traduire votre fichier .ts. Vous pouvez choisir de créer un compte sur une plateforme de traduction publique telle que Crowdin ou Transifex, ou vous pouvez bénéficier de notre compte FreeCAD existant. sur https://crowdin.com/project/freecad, qui compte déjà de nombreux utilisateurs et qui a donc plus de chance de faire traduire votre fichier rapidement par des personnes connaissant FreeCAD.

Si vous souhaitez héberger votre fichier sur le compte FreeCAD crowdin, contactez Yorik sur le forum.

Remarque certaines plates-formes comme Crowdin peuvent s'intégrer à github et effectuer automatiquement tout le processus à partir des points 2, 3 et 4. Pour cela, vous ne pouvez pas utiliser le compte FreeCAD crowdin et vous devrez configurer le vôtre.

4. Fusionner les traductions

Une fois que votre fichier .ts a été traduit, même partiellement, vous pouvez télécharger les traductions à partir du site:

  • Vous téléchargerez généralement un fichier .zip contenant un .ts par langue
  • Placez tous les fichiers .ts traduits, ainsi que votre fichier .ts de base, dans le dossier "translations"

5. Compiler les traductions

for f in translations/*_*.ts; do lrelease "translations/$f"; done

Vous devriez trouver un fichier .qm pour chaque fichier .ts traduit. Les fichiers .qm sont ceux qui seront utilisés par Qt et FreeCAD au moment de l'exécution.

That’s all you need. Note that certain parts of your workbench cannot be retranslated on-the-fly, and will need a FreeCAD restart if you change the language.

Related Pages