Création d’une application supportant le multilingue à l’aide de fichier de « ressources » en VB.NET 2010
J’ai écris ce tutorial à la suite de la volonté d’intégrer le multilingue dans une de mes application, j’ai trouvé tout ce dont j’avais besoin sur el web en tant que tutoriaux, mais pas grand-chose en Français, j'ai donc décidé d'en écrire un en Français.
Après avoir essayé plusieurs méthodes j’ai terminé par choisir la méthode utilisant des fichiers ressources.
Vous trouverez dans le lien suivant la liste des cultures disponibles sur Windows :
Dans mon exemple j’utilise un simple « form » avec un label, un bouton et des boutons radio, un pour le Français, un pour l’Anglais et un pour l’Allemand.
Avant tout et pour éviter de se prendre la tête nous allons ajouter les outils SDK de VS.NET dans le path avec la ligne de commande suivante :
set path=%path%;"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin"
- Créer un nouveau projet nommé « SampleMultilingualApplication ».
- Renommez le formulaire principal en « fmain.vb ».
- Ajoutez sur le form « fMain » :
- Un bouton radio nommé « btRadioFR » et comme texte « Français ».
- Un bouton radio nommé « btRadioEN » et comme texte « English ».
- Un bouton radio nommé « btRadioDE » et comme texte « Deutsch ».
- Ajoutez un label nommé « Label1 ».
- Ajoutez un bouton nommé « Button1 ».
Voilà maintenant on a le squelette de notre exemple, on va maintenant passer à la création des fichiers de culture.
Pour intégrer la gestion de la culture nous devons créer des fichiers textes à la racine du répertoire de l’application nommé (c’est impératif) de la façon suivante : « [Nom de l’application].culture.txt ».
Remarque : le nom de la culture doit être respecté, si la culture est en majuscules alors mettre en majuscules et vice te versa.
- Créer un fichier texte pour le Français nommé « SampleMultilingualApplication.fr.txt » puis ouvrez le fichier texte dans le bloc-notes de Windows.
- Ajoutez les noms et textes des objets de votre formulaire, dans notre exemple :
- Label1=Exemple d'un texte mais en Français
- Button1=Pressez sur ce bouton
- Créer un fichier texte pour l’Anglais en changeant le code de langue.
- Ajoutez les noms et textes des objets de votre formulaire, dans notre exemple :
- Label1=Sample of a text but in English
- Button1=Press this button
- Créer un fichier texte pour l’Allemand en changeant le code de langue.
- Ajoutez les noms et textes des objets de votre formulaire, dans notre exemple :
- Label1=Ein informazionen in Deutsch
- Button1=Click in diese button
Une fois les fichiers texte créés et remplis, nous devons les compiler avec l’outil « Microsoft (R) .NET Resource Generator » qui est inclus dans l’installation de VS.NET, vous le trouverez dans le répertoire par défaut "C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\ResGen.exe".
La commande est simple c’est « ResGen.exe [nom du fichier ressource] », tapez donc la commande suivante pour compiler le fichier ressource « ResGen.exe SampleMultilingualApplication.fr.txt » si tout se passe bien vous devez vous retrouver avec un nouveau fichier nommé « SampleMultilingualApplication.fr.resources ». Répéter les étapes pour le fichier Anglais et Allemand.
Nous devons maintenant intégrer le fichier de ressource dans notre projet, pour se faire vous devez aller dans le sous répertoire « bin\debug » du projet et créer un nouveau sous répertoire nommé comme notre extension de culture soit dans ce premier exemple « fr ».
Exemple : « \SampleMultilingualApplication\bin\Debug\fr ». Répéter les étapes pour le fichier Anglais et Allemand.
Une fois ce répertoire créé il faut copier/coller le fichier resources « SampleMultilingualApplication.fr.resources », soit dans « \SampleMultilingualApplication\bin\Debug\fr\SampleMultilingualApplication.fr.resources ». Répéter les étapes pour le fichier Anglais et Allemand, soit dans les répertoires « \en et \de ».
Nous devons maintenant compiler les fichiers de ressource afin de créer une dll et de pouvoir l’utiliser dans notre projet, la compilation du fichier s’effectue avec la commande « al.exe » qui n’est que le « Microsoft (R) Assembly Linker ».
C’est là que ça se complique un peu, vous aurez l’impression que c’est ardu mais en fait après l’avoir fait une ou deux fois ce n’est pas très compliqué.
La commande est la suivante :
al.exe /t:lib /culture:[culture] /embed:[fichier ressources à compiler] /out:[nom de l’application].resources.dll
- Ouvrez une ligne de commande.
- changez de répertoire pour pointer dans « SampleMultilingualApplication\bin\Debug\fr\ », utilisez pour se faire la commande « cd ».
- Une fois dans le répertoire « fr », compilez le fichier ressource avec la commande « al.exe ».
Exemple : « al.exe /t:lib /culture:fr /embed:SampleMultilingualApplication.fr.resources /out:SampleMultilingualApplication.resources.dll »
- Si tout se passe bien vous devez maintenant avoir une nouvelle dll dans votre répertoire « fr » nommée « SampleMultilingualApplication.resources.dll ».
- Répéter les étapes pour le fichier Anglais et Allemand.
L’étape de création du fichier de ressources compilé étant maintenant terminée nous allons l’intégrer dans notre code.
- Commencez par importer les espaces de noms suivants :
Imports System.Resources
Imports System.Reflection
Imports System.Globalization
Imports System.Threading
- Ouvrez le code de votre bouton radio Français « btRadioFR_CheckedChanged »
- Insérez le code suivant :
' Ici on crée une variable contenant la bonne culture
Dim sCulture As String = "fr"
Dim rsm As ResourceManager
Dim ci As New CultureInfo(sCulture)
Thread.CurrentThread.CurrentCulture = ci
rsm = New ResourceManager(My.Application.Info.AssemblyName & "." & sCulture, [Assembly].GetExecutingAssembly.GetSatelliteAssembly(ci))
' ici on change les textes par la bonne langue
Label1.Text = rsm.GetString("Label1")
Button1.Text = rsm.GetString("Button1")
- Répéter les étapes pour le fichier Anglais et Allemand.
Voila il ne reste plus qu’à tester notre exemple, si tout c’est bien passé quand vous exécutez votre application vous avez les langues qui changent quand vous cliquez sur les boutons radios.
Il est bien évident que lorsque vous distribuerez votre application il ne faut publier que les fichiers dll’s, et leur répertoires.
Remarques :
Pour ma part j’ai créé un petit fichier cmd qui me permet de faire toutes ces étapes en un tour de main, vous le créez à la racine de votre application et l’exécutez.
@ECHO OFF
REM Affectation du SDK dans le path
set path=%path%;"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin"
REM Variables
SET appName=SampleMultilingualApplication
REM
REM Français
REM
SET CULTURE=fr
MD "bin\debug\%CULTURE%"
ResGen.exe "%appName%.%CULTURE%.txt"
MOVE "%appName%.%CULTURE%.resources" "bin\debug\%CULTURE%\%appName%.%CULTURE%.resources"
al.exe /t:lib /culture:%CULTURE% /embed:"bin\debug\%CULTURE%\%appName%.%CULTURE%.resources" /out:"bin\debug\%CULTURE%\%appName%.resources.dll"
DEL "bin\debug\%CULTURE%\%appName%.%CULTURE%.resources"
REM pour la release copie de la dll
MD "bin\release\%CULTURE%"
COPY /Y "bin\debug\%CULTURE%\%appName%.resources.dll" "bin\release\%CULTURE%\%appName%.resources.dll"