Procédure pas à pas : localisation de Windows Forms
Le système de projet Visual Studio offre une excellente prise en charge de la localisation des applications Windows Forms. Il existe deux manières de générer des fichiers de ressources à l'aide de l'environnement de développement Visual Studio :
Faites en sorte que le système de projet génère les fichiers de ressources pour les éléments localisables de l'interface utilisateur, tels que le texte et les images se trouvant sur le formulaire. Ces fichiers de ressources sont ensuite intégrés dans des assemblys satellites. Ces fichiers sont connus sous le nom de ressources basées sur les formulaires.
Ajoutez un modèle de fichier de ressources, puis modifiez le modèle avec le Concepteur XML. Avec cette méthode, vous avez la possibilité de rendre localisables des chaînes qui apparaissent dans les boîtes de dialogue et les messages d'erreur. Vous devez ensuite écrire le code nécessaire pour accéder à ces ressources. Elles sont connues sous le nom de ressources du projet.
En général, vous devez utiliser des ressources basées sur les formulaires pour toutes les ressources spécifiques à un formulaire dans votre application Windows Forms. Vous devez utiliser les ressources du projet pour toutes les images et chaînes d'interface utilisateur qui ne sont pas basées sur les formulaires, telles que les messages d'erreur.
Notes
Il est important d'être cohérent et d'utiliser les ressources basées sur les formulaires ou les ressources du projet pour la même propriété. De nombreuses propriétés d'images, telles que la propriété Image pour PictureBox, vous permettent de sélectionner une image des ressources du projet ou d'importer une nouvelle image comme ressource basée sur les formulaires. Si vous essayez de définir l'image par défaut à l'aide d'une ressource du projet et des versions spécifiques à une langue de l'image à l'aide de ressources basées sur les formulaires, l'image par défaut ne sera jamais affichée.
Cette rubrique Procédure pas à pas explique en détail les deux procédures dans un même projet d'application Windows.
Vous pouvez également convertir un fichier texte en un fichier de ressources. Pour plus d'informations, consultez Ressources au format de fichier texte et Outil Resource File Generator Tool (Resgen.exe).
Pour laisser Visual Studio générer les fichiers de ressources
Créez une nouvelle application Windows appelée « WindowsApplication1 ». Pour plus d'informations, consultez Comment : créer un projet d'application Windows.
Dans la fenêtre Propriétés, affectez true à la propriété Localizable du formulaire.
La propriété Language a déjà la valeur (Default).
Faites glisser un contrôle Button de l'onglet Windows Forms de la boîte à outils vers le formulaire, puis affectez Hello World à sa propriété Text.
Affectez German (Germany) à la propriété Language du formulaire.
Affectez Hallo Welt à la propriété Text du bouton.
Affectez French (France) à la propriété Language du formulaire.
Affectez Bonjour le Monde à la propriété Text du bouton. Vous pouvez, s'il y a lieu, redimensionner le bouton en fonction de la longueur de la chaîne.
Enregistrez et générez la solution.
Cliquez sur le bouton Afficher tous les fichiers dans l'Explorateur de solutions.
Les fichiers de ressources apparaissent sous Form1.vb, Form1.cs ou Form1.jsl. Form1.resx est le fichier de ressources destiné à la culture par défaut, lequel sera intégré dans l'assembly principal. Form1.de-DE.resx est le fichier de ressources spécifique à la langue allemande (Allemagne). Quant à Form1.fr-FR.resx, il s'agit du fichier de ressources spécifique à la langue française (France).
En outre, vous voyez s'afficher les fichiers Form1.de.resx et Form1.fr.resx. Visual Studio crée automatiquement ces fichiers afin de contourner une limite propre à Visual SourceSafe concernant l'ajout de nouveaux fichiers à un projet au cours d'une opération d'enregistrement. Les fichiers .resx sont vides ; ils ne contiennent pas de ressources.
Appuyez sur la touche F5 ou choisissez Démarrer dans le menu Déboguer.
Une boîte de dialogue s'affiche avec un message de bienvenue en anglais, en français ou en allemand selon la langue de l'interface utilisateur de votre système d'exploitation.
Notes
La langue de l'interface utilisateur utilisée dans Windows est une fonction du paramètre CurrentUICulture. Si un Pack d'interface utilisateur multilingue (MUI, Multilingual User Interface Pack) est installé avec votre version de Windows, vous pouvez modifier la langue de l'interface utilisateur dans le Panneau de configuration. Pour plus d'informations, consultez le site Windows Server 2003, Windows XP & Windows 2000 MUI. Sinon, vous pouvez modifier la culture de l'interface utilisateur par programme, comme expliqué ci-dessous.
La procédure ci-dessous montre comment définir la culture de l'interface utilisateur afin que l'application affiche les ressources en français. Dans une application réelle, la culture de l'interface utilisateur n'est pas codée de manière irréversible de cette façon : la configuration de la culture de l'interface utilisateur dépend plutôt d'un paramètre utilisateur ou d'un paramètre d'application.
Pour configurer la culture de l'interface utilisateur afin d'afficher des ressources spécifiques
Dans l'éditeur de code, ajoutez le code suivant au début du module, avant la déclaration Form1 :
' Visual Basic Imports System.Globalization Imports System.Threading // C# using System.Globalization; using System.Threading; // Visual J# import System.Globalization.*; import System.Threading.*;
Ajoutez le code ci-dessous. En Visual Basic, il doit être placé dans la fonction New, avant l'appel à la fonction InitializeComponent. En Visual C# et Visual J#, il doit être placé dans Form1 et aussi avant l'appel à la fonction InitializeComponent.
' Visual Basic ' Sets the UI culture to French (France). Thread.CurrentThread.CurrentUICulture = New CultureInfo("fr-FR") // C# // Sets the UI culture to French (France). Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR"); // Visual J# // Sets the UI culture to French (France). System.Threading.Thread.get_CurrentThread().set_CurrentUICulture( new CultureInfo("fr-FR"));
Enregistrez et générez la solution.
Appuyez sur la touche F5 ou choisissez Démarrer dans le menu Déboguer.
Désormais, le formulaire s'affichera toujours en français. Si vous avez précédemment redimensionné le bouton pour qu'il puisse accueillir la chaîne française, plus longue, notez que la taille du bouton est persistante dans le fichier de ressources français.
Pour ajouter manuellement des fichiers de ressources au projet et les modifier
Dans le menu Projet, cliquez sur Ajouter un nouvel élément.
Dans la zone Modèles, sélectionnez le modèle Fichier de ressources de l'assembly. Dans la zone Nom, tapez le nom de fichier « WinFormStrings.resX ». Le fichier WinFormStrings.resx contiendra les ressources de secours en anglais. Ces ressources seront utilisées chaque fois que l'application ne parvient pas à trouver de ressources mieux adaptées à la culture de l'interface utilisateur.
Le fichier est ajouté à votre projet dans l'Explorateur de solutions et s'ouvre automatiquement dans le Concepteur XML en mode Données.
Dans le volet Tables de données, sélectionnez données.
Dans le volet Données, cliquez sur une ligne vide, puis entrez strMessage dans la colonne nom et Hello World dans la colonne valeur.
Il n'est pas nécessaire de spécifier le type ou le type MIME pour une chaîne, car ils sont réservés aux objets. Le spécificateur de type contient le type de données de l'objet enregistré. Quant au spécificateur de type MIME, il contient le type de base (base64) des informations binaires stockées, si l'objet est constitué de données binaires.
Dans le menu Fichier, cliquez sur Enregistrer WinFormStrings.resX.
Effectuez deux autres fois les étapes 1 à 5, afin de créer deux autres fichiers de ressources nommés WinFormStrings.de-DE.resx et WinFormStrings.fr-FR.resx, avec les ressources de type chaîne spécifiées dans le tableau suivant : Le fichier WinFormStrings.de-DE.resx contiendra les ressources spécifiques à l'allemand (Allemagne). Quant au fichier WinFormStrings.fr-FR.resx, il contiendra les ressources spécifiques au français (France).
Nom du fichier de ressources Nom Valeur WinFormStrings.de-DE.resx
strMessage
Hallo Welt
WinFormStrings.fr-FR.resx
strMessage
Bonjour le Monde
Pour accéder aux ressources ajoutées manuellement
Dans l'éditeur de code, importez l'espace de noms
System.Resources
au début du module de code.' Visual Basic Imports System.Resources // C# using System.Resources; // Visual J# import System.Resources.*;
En mode Design, double-cliquez sur le bouton pour afficher le code du gestionnaire d'événements Click correspondant, puis ajoutez le code suivant. Le constructeur ResourceManager prend deux arguments. Le premier est le nom racine des ressources, à savoir le nom du fichier de ressources sans les suffixes de culture et .resx. Le second argument est l'assembly principal.
Dans cette procédure pas à pas, aucun espace de noms n'est déclaré. Le premier argument du constructeur ResourceManager peut donc se présenter sous la forme
ProjectName.ResourceFileRootName
. Dans une application réelle, toutefois, vous définissez généralement la propriété DefaultNamespace. Dans ce cas, vous devriez déclarer le gestionnaire de ressources avec le nom racine qualifié complet du fichier de ressources, y compris son espace de noms. Par exemple, si l'espace de noms par défaut estMyCompany.MyApplication.MyComponent
, le premier argument du constructeur ResourceManager peut êtreMyCompany.MyApplication.MyComponent.WinFormStrings
.' Visual Basic ' Declare a Resource Manager instance. Dim LocRM As New ResourceManager("WindowsApplication1.WinFormStrings", GetType(Form1).Assembly) ' Assign the string for the "strMessage" key to a message box. MessageBox.Show(LocRM.GetString("strMessage")) // C# // Declare a Resource Manager instance. ResourceManager LocRM = new ResourceManager("WindowsApplication1.WinFormStrings",typeof(Form1).Assembly); // Assign the string for the "strMessage" key to a message box. MessageBox.Show(LocRM.GetString("strMessage")); // Visual J# // Declare a Resource Manager instance. ResourceManager LocRM = new ResourceManager("WindowsApplication1.WinFormStrings", System.Type. GetType("WindowsApplication1.Form1").get_Assembly()); // Assign the string for the "strMessage" key to a message box. MessageBox.Show(LocRM.GetString("strMessage"));
Notes
Par défaut, l'objet ResourceManager respecte la casse. Si vous voulez effectuer des recherches ne respectant pas la casse de sorte que "TXTWELCOME" récupère les mêmes ressources que "txtWelcome", vous pouvez affecter true à la propriété IgnoreCase du gestionnaire de ressources. Pour des raisons de performances toutefois, il est préférable de toujours spécifier la casse correcte pour les noms de ressources. L'exécution de recherches de ressources ne respectant pas la casse peut induire une baisse des performances.
Générez et exécutez le formulaire. Cliquez sur le bouton.
Le message affiche une chaîne qui est fonction de la valeur de la culture d'interface utilisateur mais, si l'application ne parvient pas à trouver une ressource pour la culture d'interface utilisateur, elle affiche une chaîne issue des ressources de secours.