Classe System.Resources.NeutralResourcesLanguageAttribute

Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.

Nelle app desktop, l'attributo informa il NeutralResourcesLanguageAttribute gestore risorse delle impostazioni cultura predefinite di un'app e la posizione delle relative risorse. Per impostazione predefinita, le risorse vengono incorporate nell'assembly principale dell'app ed è possibile usare l'attributo come indicato di seguito. Questa istruzione specifica che l'inglese (Stati Uniti) è le impostazioni cultura predefinite dell'app.

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

È anche possibile usare l'attributo NeutralResourcesLanguageAttribute per indicare dove ResourceManager trovare le risorse delle impostazioni cultura predefinite fornendo un UltimateResourceFallbackLocation valore di enumerazione nell'istruzione attribute. Questa operazione viene eseguita più comunemente per indicare che le risorse risiedono in un assembly satellite. Ad esempio, l'istruzione seguente specifica che l'inglese (Stati Uniti) è le impostazioni cultura predefinite o neutre dell'app e che le relative risorse risiedono in un assembly satellite. L'oggetto ResourceManager li cercherà in una sottodirectory denominata en-US.

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

Suggerimento

È consigliabile usare sempre l'attributo NeutralResourcesLanguageAttribute per definire le impostazioni cultura predefinite dell'app.

L'attributo esegue due ruoli:

  • Se le risorse delle impostazioni cultura predefinite sono incorporate nell'assembly principale dell'app e ResourceManager devono recuperare le risorse che appartengono alle stesse impostazioni cultura delle impostazioni cultura predefinite, ResourceManager usa automaticamente le risorse che si trovano nell'assembly principale anziché cercare un assembly satellite. Questo ignora il normale probe di assembly, migliora le prestazioni di ricerca per la prima risorsa caricata e può ridurre il working set. Vedere Creazione di pacchetti e distribuzione di risorse per il processo ResourceManager usato per eseguire il probe dei file di risorse.

  • Se le risorse delle impostazioni cultura predefinite si trovano in un assembly satellite anziché nell'assembly principale dell'app, l'attributo NeutralResourcesLanguageAttribute specifica le impostazioni cultura e la directory da cui il runtime può caricare le risorse.

App di Windows 8.x Store

Nelle app di Windows 8.x Store le cui risorse vengono caricate e recuperate usando la ResourceManager classe , l'attributo NeutralResourcesLanguageAttribute definisce le impostazioni cultura neutre le cui risorse vengono usate in caso di probe non riuscito. Non specifica la posizione delle risorse. Per impostazione predefinita, ResourceManager usa il file PRI (Package Resource Index) dell'app per individuare le risorse delle impostazioni cultura predefinite. Le impostazioni cultura neutre definite dall'attributo vengono aggiunte alla fine dell'elenco di lingue dell'interfaccia NeutralResourcesLanguageAttribute utente per simulare questo effetto.

Se si caricano e recuperano risorse usando la classe Windows RuntimeWindows.ApplicationModel.Resources.ResourceLoader o i tipi nello spazio dei nomi Windows.ApplicationModel.Resources.Core , l'attributo NeutralResourcesLanguageAttribute viene ignorato.

Esempi

L'esempio seguente usa una semplice app "Hello World" per illustrare l'uso dell'attributo NeutralResourcesLanguageAttribute per definire impostazioni cultura predefinite o di fallback. Richiede la creazione di file di risorse separati per le impostazioni cultura inglese (en), inglese (Stati Uniti) (en-US) e francese (francia) (fr-FR). Di seguito viene illustrato il contenuto di un file di testo denominato ExampleResources.txt per le impostazioni cultura inglese.

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

Per usare il file di risorse in un'app, è necessario usare il generatore di file di risorse (Resgen.exe) per convertire il file dal formato testo (.txt) in un formato binario (con estensione resources) come indicato di seguito:

resgen ExampleResources.txt

Quando l'app viene compilata, il file di risorse binario verrà incorporato nell'assembly principale dell'app.

Di seguito viene illustrato il contenuto di un file di testo denominato ExampleResources.en-US.txt che fornisce risorse per le impostazioni cultura inglese (Stati Uniti).

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

Il file di testo può essere convertito in un file di risorse binarie usando il generatore di file di risorse (ResGen.exe) nella riga di comando come indicato di seguito:

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

Il file di risorse binario deve quindi essere compilato in un assembly usando Assembly Linker (Al.exe) e inserito nella sottodirectory en-US della directory dell'app eseguendo il comando seguente:

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

Di seguito viene illustrato il contenuto di un file di testo denominato ExampleResources.fr-FR.txt che fornisce risorse per le impostazioni cultura francese (Francia).

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

Il file di testo può essere convertito in un file di risorse binario usando ResGen.exe nella riga di comando come indicato di seguito:

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

Il file di risorse binarie deve quindi essere compilato in un assembly usando Assembly Linker e inserito nella sottodirectory fr-FR della directory dell'app eseguendo il comando seguente:

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

L'esempio seguente fornisce il codice eseguibile che imposta le impostazioni cultura correnti, richiede il nome dell'utente e visualizza una stringa localizzata.

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

Può essere compilato usando il comando seguente in Visual Basic:

vbc Example.vb /resource:ExampleResources.resources

oppure usando il comando seguente in C#:

csc Example.cs /resource:ExampleResources.resources