Comme promis je reviens vers vous avec une bonne nouvelle : la méthode de Plume marche !!
Je vous la reformule telle que je l'ai mise en oeuvre. N'hésitez pas à me corriger ou à faire des commentaires car je n'ai peut-être pas optimisé, et comme vous allez le voir, il y a quand même des subtilités que je n'ai pas réussi à éviter (il doit pourtant y avoir un moyen.
Donc voici la méthode :
1°/ dans votre form (a priori conçu en français qui va donc être votre langue par défaut), vous modifiez les 2 propriétés comme suit :
Localizable = true
Language = English
2°/ Dans le designer vous traduisez tout ce qui apparaît dans le form (labels, tooltips, boutons etc...). Dès que vous modifiez un truc, un fichier form1.en.resx apparait en aval de form1 dans l'explorateur de solution, à condition d'afficher tous les fichiers, en plus du fichier form1.resx. Il faut penser à modifier le chemin du HelpProvider si vous en avez un
Par exemple si HelpProvider1.HelpNameSpace = "fr\help_fr.chm" pour la version française, vous mettez :
HelpProvider1.HelpNamespace = "en\help_en.chm" pour pointer vers le fichier d'aide en version anglaise.
3°/ Remettre ensuite la propriété Language = (par défaut) ; je ne sais pas si c'est important, mais je pense que oui . Quand vous modifierez ensuite votre form, je vous conseille de toujours commencer par la version par défaut, puis de passer à la version anglaise, et revenir à la version par défaut dans votre IDE
Il nous reste à traduire les textes situés dans les pages de code, non accessibles depuis le designer (Msgbox, labels+tooltips+boutons modifiés par le code...). C'est la suite :
4°/ Ajouter un fichier de ressource comme indiqué par Plume13 : Sélectionner le projet, clic droit, ajouter un élément, fichier de ressource. Nommez-le (par exemple Lang.resx. Ce fichier contiendra vos textes par défaut (en français donc)
5°/ Recommencer en créant un fichier Lang.en-US.resx.
Attention : la syntaxe du nom est importante : elle doit être du type fichier.CultureInfo.resx où fichier est le nom donné à l'étape 4 et CultureInfo le nom de la cultureinfo voulue ("en-US" dans mon exemple, pour l'anglais)
6°/ Pour le fichier Lang.resx, sélectionnez "Chaînes" en haut à gauche et rentrez dans le tableau
Nom : le nom de votre variable (par exemple :"AchatInvalideMsg1")
Valeur : le texte à traduire (par exemple : "La quantité achetée doit être supérieure à 0").
Commentaire : facultatif ; personnellement, j'y indique le nom de mon formulaire où est utilisée la variable
7°/ Idem étape 6 avec le fichier Lang.en-US.resx : seule la valeur change puisque vous y mettez la traduction anglaise. Le nom doit impérativement être le même qu'à l'étape 6
A la fin de 6 et 7, vous avez 2 fichiers/tableaux avec le même nombre de lignes et une première colonne (nom) identique.
Maintenant, il faut modifier votre code pour appeler les ressources à bon escient.
8°/ Au début de chaque form, vous rentrez ceci :
Nous y reviendrons un peu plus loin
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Public Class FORM1 Private RM As System.Resources.ResourceManager = Nothing Private Sub FORM1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' ResourceManager pour la gestion des langues RM = New System.Resources.ResourceManager(Application.ProductName & ".Lang", GetType(FORM1).Assembly) ....
9°/ A chaque fois que votre code comprend une string à traduire, vous remplacez celle-ci par RM.GetString("mavariable") où mavariable est le nom de votre variable srockée dans les 2 fichiers resx des étapes 6 et 7
Par exemple
N'oubliez pas les guillemets.
Code : Sélectionner tout - Visualiser dans une fenêtre à part MessageBox.Show(RM.GetString("AchatInvalideMsg1"))
10°/ Une fois votre code corrigé pour remplacer les chaînes par des GetString, il reste une étape que j'ai mis du temps à résoudre :
En fait la syntaxe du RM dans l'étape 8 n'est pas comprise par l'appli. En tout cas chez moi, j'ai une erreur me disant que "Lang.resources" n'existe pas. Tout se passe comme si le fichier resources n'était pas au bon format.
Il faut donc enregistrer votre projet et lancer le module "Visual Studio Command Prompt" qui est installé en même temps que Visual Studio normalement (je travaille avec la version Ultimate, je ne sais pas si les versions Express ont ce module). Vous le trouverez dans vos programmes (sur Win7, il m'a suffi de taper "Visual Studio Command Prompt" dans le champ de recherche des programmes dans le menu Démarrer).
Ce module ouvre une console.
Placez-vous dans le répertoire de vos 2 fichiers resx. puis tapez :
Il ne faut le faire qu'avec le fichier resx par défaut (pas le Lang.en-US.resx)
Code : Sélectionner tout - Visualiser dans une fenêtre à part resgen Lang.resx Lang.resources
La fenêtre console vous confirme la traduction du fichier avec le nombre de variables contenues dedans.
11°/ C'est fait ! Il ne vous reste plus qu'à exécuter votre appli en changeant de CultureInfo à votre guise
Un grand merci à tous ceux qui ont contribué à me permettre de trouver la solution.
Encore une fois, si vous avez des améliorations à apporter, je suis preneur. L'étape 10 me surprend un peu. Je ne serais pas étonné qu'il y ait un moyen de s'en passer...
Enfin, cette méthode a l'avantage de rendre particulièrement souple la traduction des strings au fil de l'eau : les 2 fichiers resx se présentent comme des tableurs. Il est d'ailleurs aisé de faire des copiers/collers de ou vers Excel (utile pour faire traduire vos projets par une tierce personne !). Bref, ça devrait plaire à Kropernic !
Partager