Translating an external workbench/fr: Difference between revisions

From FreeCAD Documentation
(Created page with "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 u...")
(Created page with "{{Userdocnavi/fr}}")
(28 intermediate revisions by 2 users not shown)
Line 3: Line 3:
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.
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. Preparing the sources ==
== 1. Préparer les sources ==


=== General ===
=== 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).
* Add a “translations” folder. You can name it to something else, but this will be easier as it is the same throughout FreeCAD. In this folder, you will place the .ts files (the “source” translation files) and .qm files (compiled translation files).
* Only the text that is shown to the user in the FreeCAD UI should be translated. Text that is only shown in the Python console should not be translated.
* 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.


=== In every .py file: ===
=== Dans chaque fichier .py: ===


* In every file where you need to translate text, you need a translate() function defined. An easy way is to use the one from the Draft workbench: <code>from DraftTools import translate</code>
* Dans chaque fichier 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: <code> à partir de DraftTools import translate </code>
* All text that must be translated must be placed inside the translate() function. So <code>print(&quot;My text&quot;)</code> becomes <code>print(translate(&quot;context&quot;,&quot;My text&quot;))</code>. This can be used anywhere: in print() functions, in FreeCAD.Console.PrintMessage(), in Qt dialogs, etc. In functions from FreeCAD.Console.Print*, it is necessary to end the string with the new line character (\n). It is advised to leave that character out of the translation: <code>FreeCAD.Console.PrintMessage(translatr(&quot;context&quot;,&quot;My String&quot;)+&quot;\n&quot;)</code>
* Tout le texte devant être traduit doit être placé dans la fonction translate(). Ainsi, <code>print(&quot;My text&quot;)</code> devient <code>print(translate(&quot;context&quot;,&quot;My text&quot;))</code>. 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: <code>FreeCAD.Console.PrintMessage(translatr(&quot;context&quot;,&quot;My String&quot;)+&quot;\n&quot;)</code>
* If you are using .ui files made with QtDesigner, nothing special needs to be done with them.
* 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
* When creating new objects, do not translate object names. Rather, translate object labels
* When creating properties for your objects, don’t translate the property name. But place the description inside QT_TRANSLATE_NOOP: <code>obj.addProperty(&quot;App::PropertyBool&quot;,&quot;MyProperty&quot;,&quot;PropertyGroup&quot;,QT_TRANSLATE_NOOP(&quot;App::Property&quot;,&quot;This is what My Property does&quot;))</code> (don’t use your own “context” in this specific case. Keep “App::Property”).
* 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: <code>obj.addProperty(&quot;App::PropertyBool&quot;,&quot;MyProperty&quot;,&quot;PropertyGroup&quot;,QT_TRANSLATE_NOOP(&quot;App::Property&quot;,&quot;This is what My Property does&quot;))</code> (n'utilisez pas votre propre "contexte" dans ce cas particulier. Conservez "App::Property").
* Do not translate the text of Document transactions made with Document.openTransaction()
* Ne traduisez pas le texte des transactions de document effectuées avec Document.openTransaction()


=== In InitGui.py: ===
=== Dans InitGui.py: ===


* Add the following line, close to the top of the file: <code>def QT_TRANSLATE_NOOP(scope, text): return text</code>
* Ajoutez la ligne suivante, près du haut du fichier: <code>def QT_TRANSLATE_NOOP(scope, text): return text</code>
* To translate menu names: <code>self.appendMenu(QT_TRANSLATE_NOOP(&quot;context&quot;,&quot;My Menu&quot;),[list of commands,...])</code>
* Pour traduire les noms de menu: <code>self.appendMenu(QT_TRANSLATE_NOOP(&quot;context&quot;,&quot;My Menu&quot;),[list of commands,...])</code>
* The QT_TRANSLATE_NOOP macro doesn’t do anything, but it marks texts to be picked up by the lupdate utility later on. Since it doesn’t actually translate the text in FreeCAD (it does nothing), we only use it in special cases where FreeCAD itself takes care of everything.
* 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.
* Add the path to your “translations” folder in the Initialized function: <code>FreeCADGui.addLanguagePath(&quot;/path/to/translations&quot;)</code>. The InitGui.py file has no '''file''' attribute, so it is not easy to find the translations folder’s relative location. An easy way to workaround this is to make it import another file from the same folder, and in that file, do <code>FreeCADGui.addLanguagePath(os.path.join(os.path.dirname(__file__),&quot;translations&quot;))</code>
* Ajoutez le chemin d'accès à votre dossier "translations" dans la fonction Initialized: <code>FreeCADGui.addLanguagePath(&quot;/path/to/translations&quot;)</code>. 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 <code>FreeCADGui.addLanguagePath(os.path.join(os.path.dirname(__file__),&quot;translations&quot;))</code>


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


* Add the following line, close to the top of the file: <code>def QT_TRANSLATE_NOOP(context, text): return text</code>
* Ajoutez la ligne suivante, près du haut du fichier: <code>def QT_TRANSLATE_NOOP(context, text): return text</code>
* Translate the MenuText and Tooltip of the command like this:
* Traduisez le MenuText et l'info-bulle (Tooltip) de la commande comme ceci:


<pre> def GetResources(self):
<pre> def GetResources(self):
Line 37: Line 37:
'ToolTip' : QT_TRANSLATE_NOOP(&quot;CommandName&quot;, &quot;Describes what the command does&quot;),
'ToolTip' : QT_TRANSLATE_NOOP(&quot;CommandName&quot;, &quot;Describes what the command does&quot;),
'Accel': &quot;Shift+A&quot;}</pre>
'Accel': &quot;Shift+A&quot;}</pre>
where CommandName is the name of the command, defined by <code>FreeCADGui.addCommand('CommandName',My_Command_Class())</code>


CommandName est le nom de la commande, défini par <code>FreeCADGui.addCommand('CommandName',My_Command_Class())</code>
== 2. Gather all the strings from your module ==


== 2. Rassemblez toutes les chaînes de votre 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: <code>lupdate *.ui -ts translations/uifiles.ts</code>. This is recursive and will find ui files inside all your dir structure
* If you have .py files, you need to run pylupdate too: <code>pylupdate *.py -ts translations/pyfiles.ts</code>
* If you ran both operations, you now need to unify these two files into one: <code>lconvert -i translations/uifiles.ts translations/pyfiles.ts -o translations/MyModule.ts</code>
* 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:


* 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.
<pre>#!env sh
* Si vous avez des fichiers .ui, vous devez d’abord exécuter lupdate: <code>lupdate *.ui -ts translations/uifiles.ts</code>. 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: <code>pylupdate *.py -ts translations/pyfiles.ts</code>
* Si vous avez exécuté les deux opérations, vous devez maintenant unifier ces deux fichiers en un: <code>lconvert -i translations/uifiles.ts translations/pyfiles.ts -o translations/MyModule.ts</code>
* 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:

<pre>
#!env sh
lupdate *.ui -ts translations/uifiles.ts
lupdate *.ui -ts translations/uifiles.ts
pylupdate *.py -ts translations/pyfiles.ts
pylupdate *.py -ts translations/pyfiles.ts
Line 55: Line 57:
rm translations/uifiles.ts</pre>
rm translations/uifiles.ts</pre>


== 3. Send the .ts file to a translation platform ==
== 3. Envoyer le fichier .ts à une plateforme de traduction ==


It is time to have your .ts file translated. You can choose to set up an account on a public translation platform such as [https://crowdin.com/ Crowdin] or [https://www.transifex.com/ 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.
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 [https://crowdin.com/ Crowdin] ou [https://www.transifex.com/ 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.


If you wish to host your file on the FreeCAD crowdin account, get in touch with Yorik on the forum.
Si vous souhaitez héberger votre fichier sur le compte FreeCAD crowdin, contactez Yorik sur le 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.
''' 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. Merge the translations ==
== 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:
Once your .ts file has been translated, even if partially, you can download the translations from the site:


* Vous téléchargerez généralement un fichier .zip contenant un .ts par langue
* You will usually download a .zip file containing one .ts per language
* Placez tous les fichiers .ts traduits, ainsi que votre fichier .ts de base, dans le dossier "translations"
* Place all the translated .ts files, together with your base .ts file, in the “translations” folder


== 5. Compile the translations ==
== 5. Compiler les traductions ==


<code>for f in translations/*_*.ts; do lrelease &quot;translations/$f&quot;; done</code>
<code>for f in translations/*_*.ts; do lrelease &quot;translations/$f&quot;; done</code>


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.
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.

C’est tout ce dont vous avez besoin. Notez que certaines parties de votre atelier ne peuvent pas être retransformées à la volée et nécessitent un redémarrage de FreeCAD si vous changez de langue.


== Pages associées ==
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.
* [[External_workbenches/fr|Ateliers externes]]
* [[Localisation/fr|Localisation]]
* Pour plus d'informations faites vos demandes ici sur le forum [https://forum.freecadweb.org/viewtopic.php?f=10&t=36413 Translating external workbenches]


{{Userdocnavi/fr}}
== Related Pages ==
* [[External Workbenches]]
* [[Localisation]]


[[Category:Developer Documentation]]
[[Category:Developer Documentation/fr]]

Revision as of 10:46, 25 May 2019

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"}

Où CommandName est le nom de la commande, défini par 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.

C’est tout ce dont vous avez besoin. Notez que certaines parties de votre atelier ne peuvent pas être retransformées à la volée et nécessitent un redémarrage de FreeCAD si vous changez de langue.

Pages associées