Classe System.Resources.NeutralResourcesLanguageAttribute

Cet article vous offre des remarques complémentaires à la documentation de référence pour cette API.

Dans les applications de bureau, l’attribut NeutralResourcesLanguageAttribute informe le gestionnaire de ressources de la culture par défaut d’une application et l’emplacement de ses ressources. Par défaut, les ressources sont incorporées dans l’assembly d’application principal et vous pouvez utiliser l’attribut comme suit. Cette instruction spécifie que l’anglais (États-Unis) est la culture par défaut de l’application.

[assembly: NeutralResourcesLanguage("en-US")]
<Assembly:NeutralResourcesLanguage("en-US")>

Vous pouvez également utiliser l’attribut NeutralResourcesLanguageAttribute pour indiquer où ResourceManager trouver les ressources de la culture par défaut en fournissant une valeur d’énumération UltimateResourceFallbackLocation dans l’instruction d’attribut. Cela est le plus souvent fait pour indiquer que les ressources résident dans un assembly satellite. Par exemple, l’instruction suivante spécifie que l’anglais (États-Unis) est la culture par défaut ou neutre de l’application et que ses ressources résident dans un assembly satellite. L’objet ResourceManager les recherche dans un sous-répertoire nommé en-US.

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
<Assembly:NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)>

Conseil

Nous vous recommandons d’utiliser toujours l’attribut NeutralResourcesLanguageAttribute pour définir la culture par défaut de votre application.

L’attribut exécute deux rôles :

  • Si les ressources de la culture par défaut sont incorporées dans l’assembly principal de l’application et ResourceManager doivent récupérer les ressources qui appartiennent à la même culture que la culture par défaut, elles ResourceManager utilisent automatiquement les ressources situées dans l’assembly principal au lieu de rechercher un assembly satellite. Cela permet de contourner la sonde d’assembly habituelle, d’améliorer les performances de recherche de la première ressource chargée et de réduire votre jeu de travail. Consultez Packaging and Deploying Resources for the process ResourceManager use to probe for resource files.

  • Si les ressources de la culture par défaut se trouvent dans un assembly satellite plutôt que dans l’assembly d’application principal, l’attribut NeutralResourcesLanguageAttribute spécifie la culture et le répertoire à partir duquel le runtime peut charger les ressources.

Applications du Windows 8.x Store

Dans les applications du Windows 8.x Store dont les ressources sont chargées et récupérées à l’aide de la ResourceManager classe, l’attribut NeutralResourcesLanguageAttribute définit la culture neutre dont les ressources sont utilisées en cas d’échec d’une sonde. Il ne spécifie pas l’emplacement des ressources. Par défaut, ResourceManager utilise le fichier d’index de ressource de package de l’application (PRI) pour localiser les ressources de la culture par défaut. La culture neutre définie par l’attribut NeutralResourcesLanguageAttribute est ajoutée à la fin de la liste de langues de l’interface utilisateur pour simuler cet effet.

Si vous chargez et récupérez des ressources à l’aide de la classe Windows RuntimeWindows.ApplicationModel.Resources.ResourceLoader ou des types dans l’espace de noms Windows.ApplicationModel.Resources.Core , l’attribut NeutralResourcesLanguageAttribute est ignoré.

Exemples

L’exemple suivant utilise une application « Hello World » simple pour illustrer l’utilisation de l’attribut NeutralResourcesLanguageAttribute pour définir une culture par défaut ou de secours. Elle nécessite la création de fichiers de ressources distincts pour les cultures anglais (en), anglais (États-Unis) (en-US) et Français (France) (fr-FR). L’exemple suivant montre le contenu d’un fichier texte nommé ExampleResources.txt pour la culture anglaise.

# Resources for the default (en) culture.
Greeting=Hello

Pour utiliser le fichier de ressources dans une application, vous devez utiliser le générateur de fichiers de ressources (Resgen.exe) pour convertir le fichier de son format texte (.txt) en format binaire (.resources) comme suit :

resgen ExampleResources.txt

Lorsque l’application est compilée, le fichier de ressources binaires est incorporé dans l’assembly d’application principal.

L’exemple suivant montre le contenu d’un fichier texte nommé ExampleResources.en-US.txt qui fournit des ressources pour la culture anglaise (États-Unis).

# Resources for the en-US culture.
Greeting=Hi

Le fichier texte peut être converti en fichier de ressources binaires à l’aide du générateur de fichiers de ressources (ResGen.exe) sur la ligne de commande comme suit :

resgen ExampleResources.en-US.txt ExampleResources.en-US.resources

Le fichier de ressources binaire doit ensuite être compilé dans un assembly à l’aide d’Assembly Linker (Al.exe) et placé dans le sous-répertoire en-US du répertoire d’application en émettant la commande suivante :

al /t:lib /embed:ExampleResources.en-US.resources /culture:en-US /out:en-us\Example.resources.dll

L’exemple suivant montre le contenu d’un fichier texte nommé ExampleResources.fr-FR.txt qui fournit des ressources pour la culture Français (France).

# Resources for the fr-FR culture.
Greeting=Bonjour

Le fichier texte peut être converti en fichier de ressources binaire à l’aide de ResGen.exe sur la ligne de commande comme suit :

resgen ExampleResources.fr-FR.txt ExampleResources.fr-FR.resources

Le fichier de ressources binaires doit ensuite être compilé dans un assembly à l’aide d’Assembly Linker et placé dans le sous-répertoire fr-FR du répertoire d’application en émettant la commande suivante :

al /t:lib /embed:ExampleResources.fr-FR.resources /culture:fr-FR /out:fr-FR\Example.resources.dll

L’exemple suivant fournit le code exécutable qui définit la culture actuelle, invite le nom de l’utilisateur et affiche une chaîne localisée.

using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;

[assembly: NeutralResourcesLanguageAttribute("en")]
public class Example
{
    public static void Main()
    {
        // Select the current culture randomly to test resource fallback.
        string[] cultures = { "de-DE", "en-us", "fr-FR" };
        Random rnd = new Random();
        int index = rnd.Next(0, cultures.Length);
        Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultures[index]);
        Console.WriteLine("The current culture is {0}",
                          CultureInfo.CurrentUICulture.Name);

        // Retrieve the resource.
        ResourceManager rm = new ResourceManager("ExampleResources",
                                                 typeof(Example).Assembly);
        string greeting = rm.GetString("Greeting");

        Console.Write("Enter your name: ");
        string name = Console.ReadLine();
        Console.WriteLine("{0} {1}!", greeting, name);
    }
}
Imports System.Globalization
Imports System.Resources
Imports System.Threading 

<Assembly:NeutralResourcesLanguageAttribute("en")>

Module Example
   Public Sub Main()
      ' Select the current culture randomly to test resource fallback.
      Dim cultures() As String = { "de-DE", "en-us", "fr-FR" }
      Dim rnd As New Random()
      Dim index As Integer = rnd.Next(0, cultures.Length)
      Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultures(index))      
      Console.WriteLine("The current culture is {0}", 
                        CultureInfo.CurrentUICulture.Name)       

      ' Retrieve the resource.
      Dim rm As New ResourceManager("ExampleResources" , GetType(Example).Assembly)
      Dim greeting As String = rm.GetString("Greeting")
      
      Console.Write("Enter your name: ")
      Dim name As String = Console.ReadLine()
      Console.WriteLine("{0} {1}", greeting, name)
   End Sub
End Module

Elle peut être compilée à l’aide de la commande suivante dans Visual Basic :

vbc Example.vb /resource:ExampleResources.resources

ou à l’aide de la commande suivante en C# :

csc Example.cs /resource:ExampleResources.resources