Traduction WindowsForm

Signaler
Messages postés
3
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
18 février 2008
-
Messages postés
3
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
18 février 2008
-
Bonjour,

J'ai une application WindowsForm en C# sur Visual Studio 2005 que je souhaiterais rendre utilisable dans plusieurs langues.

J'ai essayé de cocher la propriété localizable d'une forme pour voir, et je me retrouve avec un fichier contenant effectivement des textes qui seraient à traduire, mais aussi plein d'autres choses...

Comment génère t'ont le fichier spécifique à une langue : .en, .it ?

Comment gérer les libellés codés dans les messagebox des scripts ?

Est-ce utilisable cette solution, ou bien est-ce plus simple de coder sois-même une fonction de traduction basée sur un fichier perso ?

merci

7 réponses

Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
10
En fait pour t'expliquer rapidement comment marche la "localisation" des applications sous VS :
Lorsque tu developpe une Form, tu es normalement par défaut avec la propriété "Langue" (ou "Language" ?) sur defautl : cette form est celle qui apparait par défaut. Admettions que tu es réalisé ta Form entierement en anglais.

Tu veux maintenant faire une version francaises : pour cela, met la propriété "Langue" a Francais ->cela va créer une dll satellite dédiée à la langue francaise. Modifie ensuite ta Form : change le text des boutons, les menus, etc pour les mettre en francais. Et voila tu as traduit ton application :)
Tu peux faire la meme chose pour d'autre langue (a chaque fois que tu changes la propriété "Langue", la form crée une nouvelle dll dédiée, ou alors t'affiche les traduction en cours si tu as deja commencé la traduction.

Ensuite, lorsque tu déploies ton application, tu dois aussi déployer les fichiers de ressources pour toutes les langues. Le comportement par défaut est ensuite le suivant :
- L'application détecte la langue de l'OS sur lequel elle tourne, et charge elle même la langue correspondante. Si cette langue n'est pas disponible, elle prend la "plus proche" (par ex si le "francais canadien" n'est pas dispo elle prendra le "francais générale"). Si aucune traduction n'est dispo, elle prendra la langue par défault (inclue dans l'application quoiqu'il arrive).

Tu peux aussi forcer une langue (une "culture") par code.

Et pour répondre à ta question, cette méthode ne stocke pas que les textes, mais aussi d'autres propriétés : entres autres, la taille / position des controles (dans certaines langue tu peux etre amené a agrandir un bouton pour que le texte rentre -> ce réglage sera spécifique a cette langue uniquement), ou bien encore la propriété "right to left" pour les langues comme l'arabe ou le texte est écrit de droite a gauche. Bref, la traduction d'une application ne se limite pas forcément à la traduction litérale des textes.

Une dernière chose, cette méthode t'oblige a passer par VS. Si tu ne fais pas les traductions toi même, il existe un outil (Winres .exe ?) dispo avec VS qui te permet d'ouvrir uniquement les forms pour manipuler les propriétés liées a la traduction (text, position, etc) -> ainsi le traducteur a juste acces au designer des forms, pas a ton code, et te fournira en sorti les dll de traduction.


Working as designed
www.nikoui.fr
Messages postés
149
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 janvier 2009

moi j'ai codé ma propre classe, dispo ici http://www.csharpfr.com/codes/CLASSE-TRADUCTION_45691.aspx elle n'est pas déstinée à concurencer ce qui a dans visual, mais c'est moins "usine à gaz" surtout pour les "petites" application. Après avoir des tailles différentes pour chaque contôle pour chaque langue... c'est pour des cas spé. Il suffit de faire des contrôles assez grand pour que sa passe dans toutes les langues.
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
10
@oximoron: En fait la solution VS n'est pas une usine a gaz, en tout cas ni du côté du développeur que de l'utilisateur : on peut difficilement faire plus simple. La mécanique interne est peut être un peu plus complexe, mais normalement on a pas besoin d'y mettre le nez.

La ou je te rejoins pas, c'est que pour des applications "simples" ou tu veux simplement isoler les chaines de caracteres a traduire, la solution proposée par VS n'est pas idéale (il te faut passer par un éditeur, ce qui n'est pas l'idéal si tu sous traite cette traduction à une personne dont le métier est simplement traducteur.
Quand à la possibilité d'inclure dans les "ressources" non seulement le texte, mais aussi un certain nombres d'attribut (position, taille, sens de lecture, etc) c'est en effet inutile dans de petites applications, mais dès que tu dois proposer des langues telles que l'arabe, le chinois, etc, c'est tout simplement indispensable et tu ne peux pas faire autrement que de prende en compte ces paramètres supplémentaire (et dans ce cas précis la solution de VS est particulierement efficace et simple).

J'ajouterai une dernière choses : tu peux aussi passer par des fichiers de ressources (projet/ajouter nouvel élément/fichier de ressource). Ensuite dans ce fichier, tu inseres des couples "clé/valeur". Tu créés ensuite autant de fichier de resources que de langue (en les suffixant avec le code de la langue, par exemple "resources.fr.resx" pour le francais). Avec ce méchanisme, tu manipule uniquement des fichiers listants des paires clé/valeur, et tu traduit les valeurs pour chaque langue. Ensuite, c'est le framework qui prend en charge, et va chercher les bonnes valeurs à partir de la clé fournie et de la langue courante d'exécution de l'application.

Pour finir, cette derniere solution permet aussi de stocker autre chose que des chaines de caractères : des images, des sons, etc (pour gérer par exemple une image de drapeau par langue, un message sonore traduit dans chaque langue, etc)

Au final c'est le même fonctionnement que ce que tu proposes dans ta source oximoron (l'avantage étant que c'est le framework qui prend en charge les chargements de ressources et la traduction de l'application de facon transparente pour le développeur, l'inconvénient étant comme tu le précises dans ta source que les fichiers de resources doivent être recompilés à chaque modifications).


Working as designed
www.nikoui.fr
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
10
"La ou je te rejoins pas" -> "La ou je te rejoins" (le "pas" était de trop :) )


Working as designed
www.nikoui.fr
Messages postés
149
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 janvier 2009

on est d'accord (j'ai eu du mal avec "La ou je te rejoins pas"), je repproche 2 choses en fait le coté usine à gaz n'est peut être plus vrai (j'avais fait ca à l'époque de visual 2003, c'est surement moins lourd avec 2005/2008). Mais le coté recompiler à chaque fois est vraiment pénalisant. dans l'esprit communauté.
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
10
>> (j'ai eu du mal avec "La ou je te rejoins pas")

C'est le problème de la semi-négation, toujours un peu dure à interpréter :) (ça m'apprendra à relire pendant que le message est envoyé, et pas avant...)


Working as designed
www.nikoui.fr
Messages postés
3
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
18 février 2008

Bonsoir,

Merci beaucoup pour vos explications. Je pense m'orienter vers la solution de oximoron, car si un libellé doit être changé, je ne serais pas obligé de regénérer l'appli, et je n'aurais qu'un code source.

merci à vous deux.