Translating an external workbench/fr

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.

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:
 * Tout le texte devant être traduit doit être placé dans la fonction translate. Ainsi,  devient  . 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:
 * 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:  (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:
 * Pour traduire les noms de menu:
 * 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: . 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

Inside each FreeCAD command class:

 * Add the following line, close to the top of the file:
 * Translate the MenuText and Tooltip of the command like this:

def GetResources(self):

return {'Pixmap' : &quot;path/to/icon.svg&quot;),                'MenuText': QT_TRANSLATE_NOOP(&quot;CommandName&quot;, &quot;My Command&quot;),                'ToolTip' : QT_TRANSLATE_NOOP(&quot;CommandName&quot;, &quot;Describes what the command does&quot;),                'Accel':    &quot;Shift+A&quot;} where CommandName is the name of the command, defined by

2. Gather all the strings from your module

 * You will need the lupdate, lconvert, lrelease and pylupdate tools installed on your system. They usually come with packages named pysie-tools or pyside2-tools. On some systems lupdate is named lupdate4 or lupdate5 or lupdate-qt4. Same for the other tools. You can usually use the qt4 or qt5 version at your choice.
 * If you have .ui files, you need to run lupdate first: . This is recursive and will find ui files inside all your dir structure
 * If you have .py files, you need to run pylupdate too:
 * If you ran both operations, you now need to unify these two files into one:
 * Check the contents of the three ts files to make sure that they contain the strings, then you can delete both pyfile.ts and uifiles.ts.
 * you can do it all in one bash script like this:

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
 * 1) !env sh

3. Send the .ts file to a translation platform
It is time to have your .ts file translated. You can choose to set up an account on a public translation platform such as Crowdin or Transifex, or you can benefit from our existing FreeCAD account at https://crowdin.com/project/freecad, which has many users already, and therefore more chance to have your file translated quickly and by people who know FreeCAD.

If you wish to host your file on the FreeCAD crowdin account, get in touch with Yorik on the forum.

Note that some platforms like Crowdin can integrate with github and do all the process from points 2,3 and 4 automatically. For that, you can’t use the FreeCAD crowdin account, and will need to set up yours.

4. Merge the translations
Once your .ts file has been translated, even if partially, you can download the translations from the site:


 * You will usually download a .zip file containing one .ts per language
 * Place all the translated .ts files, together with your base .ts file, in the “translations” folder

5. Compile the translations
You should find one .qm file for each translated .ts file. The .qm files is what will be used by Qt and FreeCAD at runtime.

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

 * External Workbenches
 * Localisation