Traduction d'un atelier externe
Dans les notes suivantes, "context"
doit être le nom de votre addon ou de votre atelier, par exemple, "MySuperAddon"
ou "DraftPlus"
, etc. Ce contexte permet de regrouper toutes les traductions de votre code sous le même nom, afin qu'elles soient plus facilement identifiables par les traducteurs. C'est-à-dire qu'ils sauront exactement à quel addon ou atelier une chaîne particulière appartient.
Préparer les sources
Généralités
- 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é pour l'utilisateur dans l'interface de FreeCAD doit être traduit. Le texte affiché uniquement dans la console Python ne doit pas être traduit.
- Le texte imprimé sur
FreeCAD.Console
apparaît dans la "Vue Rapport" et doit donc être traduit. La "vue Rapport" est différente depuis la console Python.
Dans chaque fichier Python .py :
- Dans chaque fichier où vous devez traduire du texte, vous devez définir une fonction
translate()
. Un moyen simple consiste à utiliser celui de l'atelier Draft :
à partir de DraftTools import translate
- Tout le texte devant être traduit doit être passé à travers la fonction
translate()
.
print ("Mon texte")
devient
print(translate("context", "Mon texte"))
Ceci peut être utilisé n’importe où : dans print()
, dans FreeCAD.Console.PrintMessage()
, dans les boîtes de dialogue Qt, etc. Les fonctions FreeCAD.Console
n’ajoutent pas automatiquement le caractère de nouvelle ligne (\n
) ; vous pouvez l'ajouter à la fin si vous le souhaitez. Ce caractère n'a pas non plus besoin de traduction, il peut donc être en dehors de la fonction de traduction :
FreeCAD.Console.PrintMessage(translate("context", "My text") + "\n")
- Si vous utilisez des fichiers
.ui
créés avec QtDesigner il n'y a rien d’autre à fait avec eux. - Lors de la création de nouveaux objets, ne traduisez pas le "Name" de l'objet. Traduisez plutôt le "Label" de l'objet. La différence est qu'un "Name" est unique ; il reste le même pendant toute la vie de l'objet ; alors qu'un "Label" peut être modifiée par l'utilisateur à sa guise.
- 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", "C'est ce que ma propriété fait"))
N'utilisez pas votre propre "context"
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 qui seront lus ultérieurement par l'utilitairelupdate
. Comme 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 initialisée :
FreeCADGui.addLanguagePath("/path/to/translations")
Le fichier InitGui.py
n'a pas d'attribut fichier. Il est donc difficile de trouver l'emplacement relatif du dossier de traductions. Un moyen facile de contourner ce problème consiste à importer un autre fichier à partir du même dossier, puis dans ce fichier, par
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 les
'MenuText'
et'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())
Rassemblez toutes les chaînes de votre module
- Vous aurez besoin des outils
lupdate
,lconvert
,lrelease
etpylupdate
installés sur votre système. Dans les distribution Linux, ils viennent généralement avec des paquets nomméspyside-tools
oupyside2-tools
. Sur certains systèmeslupdate
est nommélupdate4
oulupdate5
oulupdate-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écuterlupdate
:
lupdate *.ui -ts translations/uifiles.ts
Ceci est récursif et trouvera des fichiers .ui
dans toute la structure de vos répertoires.
- Si vous avez des fichiers
.py
, vous devez également exécuterpylupdate
:
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 supprimezpyfiles.ts
etuifiles.ts
. - Vous pouvez tout faire dans un script bash comme ceci :
#!/bin/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
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 Crowdin, 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 FreeCAD.
Note: 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 ; vous devrez configurer vôtre propre compte.
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 dossiertranslations/
Compiler les traductions
Maintenant, lancez le programme lrelease
sur chaque fichier que vous avez.
lrelease "translations/Draft_de.ts"
lrelease "translations/Draft_fr.ts"
lrelease "translations/Draft_pt-BR.ts"
Vous pouvez automatiser le processus
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 traduites à la volée si vous décidez de changer de langue. Si tel est le cas, vous devrez redémarrer FreeCAD pour que la nouvelle langue prenne effet.
Pages associées
- Ateliers externes
- Localisation
- Pour plus d'informations faites vos demandes ici sur le forum Translating external workbenches
- Démarrer avec FreeCAD
- Installation : Téléchargements, Windows, Linux, Mac, Logiciels supplémentaires, Docker, AppImage, Ubuntu Snap
- Bases : À propos de FreeCAD, Interface, Navigation par la souris, Méthodes de sélection, Objet name, Préférences, Ateliers, Structure du document, Propriétés, Contribuer à FreeCAD, Faire un don
- Aide : Tutoriels, Tutoriels vidéo
- Ateliers : Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test, Web