Partager via


Création et récupération de ressources dans les applications du Windows Store

Le système d'exploitation Windows 8 introduit un nouveau modèle de ressources pour les applications de Windows Store qui remplace le modèle « hub and spoke » standard utilisé dans les applications de bureau .NET Framework. Cette rubrique présente ce nouveau modèle de ressources et explique comment créer, déployer, et extraire des ressources dans les applications de Windows Store.

Ressources des applications de Windows Store

Les applications de bureau du .NET Framework utilisent un modèle « hub and spoke » pour empaqueter et déployer des ressources. En général, les ressources de la culture neutre de l'application (la culture dont les ressources sont utilisées si aucune ressource localisée n'est disponible) sont incorporées dans le fichier exécutable principal de l'application. Les ressources localisées de chaque culture supplémentaire sont incorporées dans un assembly satellite autonome qui ne contient que des ressources et aucun code exécutable.

En revanche, les applications de Windows Store utilisent un fichier de ressources unique. Ce fichier s'appelle un fichier d'index de ressource du package, il stocke des ressources pour toutes les langues, cultures et tous les facteurs d'échelle.

Important

Les règles de secours déterminent quelles ressources sont chargées si les ressources localisées pour une culture spécifique ou la culture actuelle ne peuvent pas être détectées.

Dans les applications de bureau, vous pouvez soit utiliser des fichiers texte ou XML (.resx) pour créer des ressources. L'outil Resource File Generator (Resgen.exe) permet de compiler ces fichiers en fichiers de ressources binaires (.resources). Vous devez utiliser le compilateur pour incorporer les ressources de la culture neutre dans l'assembly principal de l'application, et l'outil Assembly Linker (AL.exe) pour inclure toutes les autres ressources localisées dans des assemblys satellites. Vous pouvez ensuite récupérer des ressources individuelles à l'aide de la classe System.Resources.ResourceManager ou énumérer les ressources à l'aide de la classe ResourceReader.

Dans les applications de Windows Store, vous devez utiliser des fichiers .resw pour créer des ressources. En dépit de la différence d'extension de fichier, le format de fichier .resw est identique au format de fichier .resx, sauf que les fichiers .resw peuvent uniquement contenir des chaînes et des chemins d'accès de fichier. Vous pouvez utiliser les éditeurs de ressources Visual Studio pour créer et modifier des ressources. Au moment de la compilation, tous les fichiers .resw d'une application sont empaquetés dans un fichier PRI unique par l'utilitaire MakePRI et inclus dans le package de déploiement de l'application. Au moment de l'exécution, la classe Windows.ApplicationModel.Resources.ResourceLoader et les types de l'espace de noms Windows.ApplicationModel.Resources.Core permettent d'accéder aux ressources de l'application.

Important

Bien que l'outil Resource File Generator (Resgen.exe) soit principalement destiné aux applications de bureau, vous pouvez également l'utiliser pour décompiler des assemblys satellites en fichiers .resw, qui peuvent ensuite être compilés dans un fichier PRI.

Avertissement

Bien que la classe System.Resources.ResourceManager soit incluse dans les .NET pour les applications du Windows Store, nous ne recommandons pas son utilisation. Utilisez uniquement ResourceManager dans des bibliothèques qui sont développées en tant que projets Bibliothèque de classes portable et qui visent plusieurs plateformes.

Création de fichiers de ressources

Les éditeurs de ressources Visual Studio fournissent la manière la plus simple et la plus commode pour créer un fichier .resw. Ces éditeurs fournissent une interface utilisateur qui masque le format de fichier XML sous-jacent du fichier .resw. Le fait d'utiliser Visual Studio pour créer et modifier un fichier de ressources a deux principaux avantages :

  • Il élimine le besoin de créer un fichier de ressources manuellement et de vérifier que le format XML est valide.

  • Il exécute le processus d'utilisation de l'utilitaire MakePRI pour compiler la ressource, la compresser dans un fichier PRI, et l'inclure dans le package de déploiement de l'application.

Dans les applications de bureau, vous devez utiliser l'attribut NeutralResourcesLanguageAttribute pour définir la culture neutre de votre application. Dans les applications de Windows Store, cet attribut est ignoré lorsque le fichier PRI est créé et lorsque la classe ResourceLoader Windows est utilisée pour récupérer des ressources.

Dans les applications de Windows Store, vous devez indiquer les noms des fichiers de ressources localisés en créant un dossier pour stocker les ressources et les images d'une culture prise en charge. Vous pouvez ensuite décrire la ressource à l'aide du nom de culture (tel que « ko-kr ») suivi du nom de ressources et de l'extension de fichier par défaut (par exemple « ko-kr\Resources.resw »).

Déploiement de fichiers de ressources

Visual Studio gère tous les détails du déploiement d'application pour les fichiers de ressources qui font partie d'un projet Visual Studio. Il génère automatiquement un fichier de configuration pour toutes les ressources qui font partie d'un projet, utilise l'outil MakePRI pour inclure des ressources dans un seul fichier PRI, et place le fichier PRI dans le package de déploiement de l'application.

Toutes les ressources étant incluses dans un seul fichier PRI au lieu d'une collection de fichiers individuels, la modification d'un fichier de ressources existant ou l'ajout de la prise en charge d'une nouvelle culture localisée en ajoutant un fichier de ressources requiert que l'application entière soit régénérée et redistribuée.

Récupération des ressources à partir de fichiers de ressources

Pour extraire des ressources dans une application de Windows Store, vous devez instancier un objet Windows Runtime Windows.ApplicationModel.Resources.ResourceLoader ou l'un des types de l'espace de noms Windows.ApplicationModel.Resources.Core. Bien que la classe System.Resources.ResourceManager .NET Framework soit prise en charge dans les applications de Windows Store, nous ne recommandons pas son utilisation. Utilisez ResourceManager uniquement lorsque vous développez des projets Bibliothèque de classes portable qui visent plusieurs plateformes. Le tableau suivant répertorie les membres ResourceManager et leurs équivalents simples dans la classe Windows.ApplicationModel.Resources.ResourceLoader ou les types dans l'espace de noms Windows.ApplicationModel.Resources.Core.

Membre ResourceManager

Membre équivalent de ResourceLoader ou de tout autre type Windows Runtime

ResourceManager.GetString(String)

Windows.ApplicationModel.Resources.ResourceLoader.GetString(String)

ResourceManager.GetString(String, CultureInfo)

Windows.ApplicationModel.Resources.Core.ResourceMap.GetValue(String, ResourceContext)

ResourceManager.ResourceManager(String, Assembly)

Windows.ApplicationModel.Resources.ResourceLoader.ResourceLoader()

ou

Windows.ApplicationModel.Resources.ResourceLoader.ResourceLoader(String)

Exemple « Hello World » simple

Voici un exemple simple d'une application de Windows Store qui affiche les chaînes localisées. Sa culture neutre est Russe (Russie), mais elle inclut également des ressources pour les cultures Anglais (États-Unis) et Français (France). Si l'application est exécutée sur un système dont la culture actuelle est Anglais (États-Unis), elle affiche un message d'accueil en anglais ; sinon, elle affiche le message d'accueil russe par défaut. Enfin, indépendamment de la culture actuelle, elle utilise les objets Windows.ApplicationModel.Resources.Core.ResourceContext et Windows.ApplicationModel.Resources.Core.ResourceMap pour afficher un message d'accueil en français.

Pour afficher la sortie vers un contrôle TextBlock, l'exemple requiert d'ajouter la balise <TextBlock> suivante à BlankPage.xaml :

    <Grid Background="{StaticResource PageBackgroundBrush}"> <TextBlock x:Name="outputBlock" /> </Grid>

Le code d'application est ensuite appelé à partir du constructeur de classe BlankPage comme suit :

Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    Example.Run(outputBlock)
End Sub
public BlankPage()
{

    InitializeComponent();
    Example.Run(outputBlock);
}

L'exemple requiert la création des ressources suivantes :

  • Une ressource de langue russe nommée « Greeting » dont la valeur est « Привет! ». La chaîne doit être ajoutée à un fichier de ressources nommé Resources.resw au niveau de la racine du projet.

  • Une ressource de langue anglaise nommée « Greeting » dont la valeur est « Hi there! ». Pour créer le fichier de ressources, ajoutez un dossier nommé en-US à votre projet, puis ajoutez un fichier de ressources nommé Resources.resw au dossier.

  • Une ressource en langue française nommée « Greeting » dont la valeur est « Bonjour ! ». Pour créer le fichier de ressources, ajoutez un dossier nommé fr-FR à votre projet, puis ajoutez un fichier de ressources nommé Resources.resw au dossier.

L'exemple suivant affiche les chaînes localisées appropriées dans le contrôle TextBlock.

Imports System.Globalization
Imports Windows.ApplicationModel.Resources
Imports Windows.ApplicationModel.Resources.Core
Imports Windows.UI.Xaml.Controls

Public Class Example
    Public Shared Sub Run(outputBlock As Windows.UI.Xaml.Controls.TextBlock)
        outputBlock.Text += String.Format("{1}The current culture is {0}.{1}",
                                          CultureInfo.CurrentCulture.Name, vbCrLf)
        Dim rl As ResourceLoader = New ResourceLoader()

        ' Display greeting using the resources of the current culture.
        Dim greeting As String = rl.GetString("Greeting")
        outputBlock.Text += String.Format("{0}{1}",
                                          If(String.IsNullOrEmpty(greeting), "Здрауствуйте", greeting),
                                          vbCrLf)

        ' Display greeting using fr-FR resources.
        Dim ctx As ResourceContext = New Windows.ApplicationModel.Resources.Core.ResourceContext()
        ctx.Languages = {"fr-FR"}

        Dim rmap As ResourceMap = ResourceManager.Current.MainResourceMap.GetSubtree("Resources")
        Dim newGreeting As String = rmap.GetValue("Greeting", ctx).ToString()

        outputBlock.Text += String.Format("{1}{1}Culture of Current Context: {0}{1}",
                                          ctx.Languages(0), vbCrLf)
        outputBlock.Text += String.Format("{0}{1}", If(String.IsNullOrEmpty(newGreeting),
                                                       greeting, newGreeting), vbCrLf)
    End Sub
End Class
using System;
using System.Globalization;
using Windows.ApplicationModel.Resources;
using Windows.ApplicationModel.Resources.Core;
using Windows.UI.Xaml.Controls;

public class Example
{
    public static void Run(Windows.UI.Xaml.Controls.TextBlock outputBlock)
    {
        outputBlock.Text += String.Format("\nThe current culture is {0}.\n", CultureInfo.CurrentCulture.Name);
        ResourceLoader rl = new ResourceLoader();

        // Display greeting using the resources of the current culture.
        string greeting = rl.GetString("Greeting");
        outputBlock.Text += String.Format("{0}\n", String.IsNullOrEmpty(greeting) ? "Здрауствуйте" :  greeting);


        // Display greeting using fr-FR resources.
        ResourceContext ctx = new Windows.ApplicationModel.Resources.Core.ResourceContext();
        ctx.Languages =  new string[] { "fr-FR" } ;

        ResourceMap rmap = ResourceManager.Current.MainResourceMap.GetSubtree("Resources");
        string newGreeting = rmap.GetValue("Greeting", ctx).ToString();

        outputBlock.Text += String.Format("\n\nCulture of Current Context: {0}\n", ctx.Languages[0]);
        outputBlock.Text += String.Format("{0}\n", String.IsNullOrEmpty(newGreeting) ? greeting : newGreeting);

    }
}

Lorsque vous compilez et exécutez l'application, elle affiche la sortie similaire à ce qui suit sur un système dont la culture est en-US :

The current culture is en-US. Hi there! Culture of Current Context: fr-FR Bonjour!

Voir aussi

Référence

Éditeurs de ressources Visual Studio

Concepts

Ressources dans des applications de bureau