J'ai écris ce tutorial à la suite de la volonté d'intégrer le multilingue dans une de mes applications. J'ai trouvé tout ce dont j'avais besoin sur le 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 :
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(VS.71).aspx
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"
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 et versa.
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étez 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étez les étapes pour le fichier Anglais et Allemand.
Une fois ces répertoires créés, il faut copier/coller le fichier ressources "SampleMultilingualApplication.fr.resources", soit dans "\SampleMultilingualApplication\bin\Debug\fr\SampleMultilingualApplication.fr.resources".
Répétez 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
Exemple : "al.exe /t:lib /culture:fr /embed:SampleMultilingualApplication.fr.resources /out:SampleMultilingualApplication.resources.dll"
L'étape de création du fichier de ressources compilé étant maintenant terminée nous allons l'intégrer dans notre code.
Imports System.Resources Imports System.Reflection Imports System.Globalization Imports System.Threading
' 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")
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.
DOWNLOAD : Vous pouvez télécharger l'exemple sur mon site internet en utilisant le lien ci-dessous :
http://www.simple-tech.info/Data/Sites/1/_cereal_articles/zip/vb-net-samplemultilingualapplication.zip
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"