CodeS-SourceS
Rechercher un code, un tuto, une réponse

Création d'une application supportant le multilingue à l'aide de fichier de "ressources" en vb.net 2010

Avril 2017


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 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"
  • 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 et versa.
  • Créez 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éez 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éez 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é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
  • 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étez 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étez 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.

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"

A voir également

Publié par christian_grandjean.
Ce document intitulé «  Création d'une application supportant le multilingue à l'aide de fichier de "ressources" en vb.net 2010  » issu de CodeS-SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Création et consommation de service web asp.net
Gestion de données avec les classes métier