Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Classe ResourceManager

Rappresenta una gestione risorse che offre un comodo accesso a risorse specifiche delle impostazioni cultura in fase di esecuzione.

Spazio dei nomi:  System.Resources
Assembly:  mscorlib (in mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ResourceManager

Il tipo ResourceManager espone i seguenti membri.

  NomeDescrizione
Metodo protettoSupportato da XNA FrameworkResourceManager()Inizializza una nuova istanza della classe ResourceManager con valori predefiniti.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreResourceManager(Type)Inizializza una nuova istanza della classe ResourceManager che ricerca le risorse negli assembly satellite in base alle informazioni derivate dall'oggetto di tipo specificato.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreResourceManager(String, Assembly)Inizializza una nuova istanza della classe ResourceManager che ricerca le risorse contenute nei file con il nome radice specificato nell'assembly fornito.
Metodo pubblicoSupportato da XNA FrameworkResourceManager(String, Assembly, Type)Inizializza una nuova istanza della classe ResourceManager che utilizza una classe ResourceSet specificata per cercare le risorse contenute nei file con il nome radice specificato nell'assembly fornito.
In alto

  NomeDescrizione
Proprietà pubblicaSupportato da XNA FrameworkBaseNameOttiene il nome radice dei file di risorse in cui l'oggetto ResourceManager ricerca le risorse.
Proprietà protetta.FallbackLocationOttiene o imposta la posizione da cui recuperare le risorse di fallback predefinite.
Proprietà pubblicaSupportato da XNA FrameworkIgnoreCaseOttiene o imposta un valore che indica se il gestore delle risorse consente la ricerca delle risorse senza distinzione tra maiuscole e minuscole nei metodi GetString e GetObject.
Proprietà pubblicaSupportato da XNA FrameworkResourceSetTypeOttiene il tipo di oggetto set di risorse che il gestore delle risorse utilizza per costruire un oggetto di ResourceSet.
In alto

  NomeDescrizione
Metodo pubblicoMembro staticoSupportato da XNA FrameworkCreateFileBasedResourceManagerRestituisce un oggetto ResourceManager che ricerca le risorse in una directory specifica invece che nel manifesto dell'assembly per le risorse.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreEquals(Object) Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object)
Metodo protettoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreFinalize Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che l'oggetto stesso venga reclamato dalla procedura di Garbage Collection. (Ereditato da Object)
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetHashCode Funge da funzione hash per un particolare tipo. (Ereditato da Object)
Metodo protettoMembro staticoSupportato da XNA FrameworkGetNeutralResourcesLanguageRestituisce le informazioni specifiche delle impostazioni cultura per le risorse predefinite dell'assembly principale mediante il recupero del valore dell'attributo NeutralResourcesLanguageAttribute su un assembly specificato.
Metodo pubblicoSupportato da XNA FrameworkGetObject(String)Restituisce il valore della risorsa di tipo stringa specificata.
Metodo pubblicoSupportato da XNA FrameworkGetObject(String, CultureInfo)Ottiene il valore della risorsa non di tipo stringa specificata localizzata per le impostazioni cultura specificate.
Metodo protettoSupportato da XNA FrameworkGetResourceFileNameGenera il nome del file di risorse per l'oggetto CultureInfo specificato.
Metodo pubblicoSupportato da XNA FrameworkGetResourceSetRecupera il set di risorse per impostazioni cultura specifiche.
Metodo protettoMembro staticoSupportato da XNA FrameworkGetSatelliteContractVersionRestituisce la versione specificata dall'attributo SatelliteContractVersionAttribute nell'assembly specificato.
Metodo pubblicoGetStream(String)Restituisce un oggetto di flusso di memoria non gestito dalla risorsa specificata.
Metodo pubblicoGetStream(String, CultureInfo)Restituisce un oggetto flusso di memoria non gestito dalla risorsa specificata utilizzando le impostazioni cultura specificate.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetString(String)Restituisce il valore della risorsa di tipo stringa specificata.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetString(String, CultureInfo)Restituisce il valore della risorsa di tipo stringa localizzata per le impostazioni cultura specificate.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetType Ottiene il Type dell'istanza corrente. (Ereditato da Object)
Metodo protettoSupportato da XNA FrameworkInternalGetResourceSetFornisce l'implementazione per trovare un set di risorse.
Metodo protettoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreMemberwiseClone Crea una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object)
Metodo pubblicoSupportato da XNA FrameworkReleaseAllResourcesIndica al gestore delle risorse di chiamare il metodo Close su tutti gli oggetti ResourceSet e di rilasciare tutte le risorse.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)
In alto

  NomeDescrizione
Campo protettoSupportato da XNA FrameworkBaseNameFieldSpecifica il nome radice dei file di risorse in cui l'oggetto ResourceManager cerca le risorse.
Campo pubblicoMembro staticoSupportato da XNA FrameworkHeaderVersionNumber Specifica la versione delle intestazioni dei file di risorse interpretabili e producibili dall'implementazione corrente di ResourceManager.
Campo pubblicoMembro staticoSupportato da XNA FrameworkMagicNumberContiene il numero utilizzato per identificare i file di risorse.
Campo protettoSupportato da XNA FrameworkMainAssemblySpecifica l'assembly principale che contiene le risorse.
Campo protettoSupportato da XNA FrameworkResourceSets Obsoleta. Contiene un Hashtable che restituisce un mapping dalle impostazioni cultura agli oggetti ResourceSet.
In alto

La classe ResourceManager le risorse vengono recuperate da un file binario con estensione resources incorporato in un assembly o un file autonomo con estensione resources. Se un'applicazione è stata localizzate e le risorse localizzate vengono distribuite in assembly satellite, cerca le risorse specifiche delle impostazioni cultura, fornisce il fallback delle risorse a una risorsa localizzata non esiste e la serializzazione di risorse di tipo.

Per ulteriori informazioni sulla creazione e la gestione delle risorse nelle applicazioni desktop e nelle applicazioni Windows Store, vedere le seguenti sezioni:

Applicazioni desktop

Per le applicazioni desktop, la classe ResourceManager le risorse vengono recuperate da file di risorse binari con estensione resources. In genere, un compilatore di linguaggio o Assembly Linker (AL.exe) include i file di risorse in un assembly. È inoltre possibile utilizzare un oggetto ResourceManager per recuperare le risorse direttamente da un file RESOURCES non viene incorporato in un assembly, utilizzando il metodo CreateFileBasedResourceManager.

Nota di avvisoAttenzione

Utilizzo di file autonomi con estensione resources in un'applicazione ASP.NET interromperà la distribuzione tramite XCOPY, perché le risorse rimangono bloccati fino a che rilasciarle in modo esplicito tramite il metodo ReleaseAllResources. Se si desidera distribuire le risorse nelle applicazioni ASP.NET, è necessario compilare i file RESOURCES in assembly satellite.

In un'applicazione basata sulle risorse, un file con estensione resources contiene le risorse delle impostazioni cultura predefinite delle risorse vengono utilizzate se non risorse specifiche delle impostazioni cultura è disponibile. Ad esempio, se le impostazioni cultura predefinite di un'applicazione sono inglese (en), le risorse della lingua inglese vengono utilizzate quando le risorse localizzate non sono disponibili per le impostazioni cultura specifiche, ad esempio l'inglese (Stati Uniti) (en-US) o francese (Francia) (fr-FR). In genere, le risorse per le impostazioni cultura predefinite sono incorporate nell'assembly principale dell'applicazione e le risorse per le impostazioni cultura localizzate vengono incorporati negli assembly satellite. Gli assembly satellite contengono solo le risorse. Hanno lo stesso nome file radice dell'assembly principale e estensione .resources.dll. Per le applicazioni in cui gli assembly non vengono registrati nella Global Assembly Cache, gli assembly satellite vengono memorizzati in una sottodirectory dell'applicazione di cui nome corrisponda alle impostazioni cultura dell'assembly.

2xsy4hac.collapse_all(it-it,VS.110).gifCreazione di risorse

Quando si compila un'applicazione basata sulle risorse, memorizzare le informazioni sulle risorse nei file di testo (file con estensione restxt o .txt) o file XML (file con estensione resx). Si compila il testo o file XML con Generazione delle risorse (Resgen.exe) per creare un file RESOURCES binari. È possibile incorporare quindi il file con estensione resources risultante in un file eseguibile o una libreria utilizzando un'opzione del compilatore come per il /resources i compilatori c# e Visual Basic, oppure è possibile incorporarlo in un assembly satellite tramite Assembly Linker (Al.exe). Se si include un file RESX nel progetto di Visual Studio, Visual Studio consente di gestire la compilazione e incorporare risorse predefinite e localizzate automaticamente come parte del processo di compilazione.

Idealmente, è consigliabile creare risorse per ogni linguaggio supportate da l o, per almeno un sottoinsieme significativo di ogni linguaggio. I nomi file RESOURCES binari seguono la convenzione di denominazione nomebase.cultureNameresources, dove nomebase è il nome dell'applicazione o il nome di classe, a seconda del livello di dettaglio desiderato. La proprietà CultureInfo.Name viene utilizzata per determinare cultureName. Una risorsa per le impostazioni cultura predefinite dell'applicazione deve essere denominata nomebaseresources.

Ad esempio, si supponga che un assembly disporre di diversi metodi in un file di risorse con il nome di base MyResources. Questi file di risorse devono avere nomi come MyResources.ja-JP.resources per le impostazioni cultura giapponesi (Giappone), MyResources.de.resources per le impostazioni cultura tedesche, MyResources.zh-CHS.resources per le impostazioni cultura di cinese semplificato e MyResources.fr-BE.resources per le impostazioni cultura francesi (di Belgio). Il file di risorse predefinito deve essere denominato MyResources.resources. Vengono in genere creati pacchetti di file di risorse specifiche delle impostazioni cultura in assembly satellite per tutte le impostazioni cultura. Il file di risorse predefinito deve essere incorporato nell'assembly principale dell'applicazione.

Si noti che consente Assembly Linker le risorse da contrassegnare come private, ma è sempre contrassegnarli come il pubblico in modo che possono essere eseguito da altri assembly. Poiché un assembly satellite non contiene codice, risorse contrassegnate come privato non sono disponibili per l'applicazione tramite qualsiasi meccanismo.)

Per ulteriori informazioni sulla creazione, assemblaggio e distribuzione delle soluzioni, vedere gli articoli Creazione di file di risorse per applicazioni desktop, Creazione di assembly satellite per applicazioni desktope Creazione del package e distribuzione delle risorse in applicazioni desktop.

2xsy4hac.collapse_all(it-it,VS.110).gifCreare un'istanza di un oggetto ResourceManager

Creare un'istanza di un oggetto ResourceManager che recupera le risorse da un file con estensione resources incorporato chiamando uno dei relativi overload del costruttore di classe. Ciò abbina strettamente un oggetto ResourceManager a un determinato file con estensione resources e con tutti i file localizzati collegati con estensione resources in assembly satellite.

I due costruttori in genere vengono chiamati:

  • ResourceManager(String, Assembly) cerca le risorse in base a due informazioni specificate: il nome di base del file con estensione resources e dell'assembly in cui il file con estensione resources impostazione predefinita si trova. Il nome di base include lo spazio dei nomi e il nome radice del file con estensione resources, senza le impostazioni cultura o estensione. Si noti che i file RESOURCES compilati dalla riga di comando in genere non includono un nome dello spazio dei nomi, mentre i file RESOURCES creati nell'ambiente di Visual Studio apportano. Ad esempio, se un file di risorse denominato MyCompany.StringResources.resources e il costruttore ResourceManager viene chiamato da un metodo statico denominato Example.Main, il codice seguente crea un'istanza di un oggetto ResourceManager che può recuperare le risorse dal file con estensione resources:

    
    ResourceManager rm = new ResourceManager("MyCompany.StringResources", 
                                             typeof(Example).Assembly);
    
    
    
  • ResourceManager(Type) cerca le risorse negli assembly satellite in base alle informazioni da un oggetto di tipo. Il nome completo del tipo corrisponde al nome di base del file con estensione resources senza relativa estensione. Nelle applicazioni desktop create mediante Progettazione risorse di Visual Studio, Visual Studio crea una classe wrapper il cui nome completo è uguale al nome radice del file .resources. Ad esempio, se un file di risorse denominato MyCompany.StringResources.resources ed esiste una classe wrapper denominata MyCompany.StringResources, il codice seguente crea un'istanza di un oggetto ResourceManager che può recuperare le risorse dal file con estensione resources:

    
    ResourceManager rm = new ResourceManager(typeof(MyCompany.StringResources));
    
    
    

Se le risorse appropriate non è possibile trovare, la chiamata del costruttore crea un oggetto ResourceManager valido. Tuttavia, il tentativo di recuperare una risorsa genera un'eccezione MissingManifestResourceException. Per informazioni sulla gestione dell'eccezione, vedere la sezione Gestione MissingManifestResourceException ed eccezioni di MissingSatelliteAssembly più avanti in questo articolo.

Di seguito viene illustrato come creare un'istanza di un oggetto ResourceManager. Contiene il codice sorgente per un file eseguibile denominato ShowTime.exe. Include inoltre il file di testo denominato Strings.txt che contiene una risorsa stringa singolo, TimeHeader:

TimeHeader=The current time is

È possibile utilizzare un file batch per generare il file di risorse e per includerlo nel file eseguibile. Di seguito è riportato il file batch per generare un file eseguibile tramite il compilatore c#:


resgen strings.txt
csc ShowTime.cs /resource:strings.resources

Per il compilatore Visual Basic, è possibile utilizzare il seguente file batch:


resgen strings.txt
vbc ShowTime.vb /resource:strings.resources


using System;
using System.Resources;

public class Example
{
   public static void Main()
   {
      ResourceManager rm = new ResourceManager("Strings", 
                               typeof(Example).Assembly);
      string timeString = rm.GetString("TimeHeader");
      Console.WriteLine("{0} {1:T}", timeString, DateTime.Now);   
   }
}
// The example displays output like the following:
//        The current time is 2:03:14 PM


2xsy4hac.collapse_all(it-it,VS.110).gifResourceManager e risorse specifiche delle impostazioni cultura

Un'applicazione localizzata richiede che le risorse vengano distribuiti come illustrato nell'articolo Creazione del package e distribuzione delle risorse in applicazioni desktop. Se gli assembly vengono configurati correttamente, il gestore di risorse determina quali risorse recuperare in base alla proprietà Thread.CurrentUICulture del thread corrente. (Questa proprietà restituirà le impostazioni cultura dell'interfaccia utente del thread corrente.) Ad esempio, se un'applicazione viene compilata con le risorse in lingua inglese predefinita nell'assembly principale e con le risorse in lingua francese e russa in due assembly satellite e la proprietà Thread.CurrentUICulture viene impostato fr-FR, il gestore di risorse vengono recuperate le risorse per il francese.

È possibile impostare la proprietà CurrentUICulture in modo esplicito o implicito. La modalità impostare determinate come oggetto ResourceManager recupera le risorse in base alle impostazioni cultura:

  • Se in modo esplicito impostare la proprietà Thread.CurrentUICulture a impostazioni cultura specifiche, il gestore di risorse recupera sempre le risorse per le impostazioni cultura, indipendentemente dal browser del sistema operativo dell'utente. Si consideri un'applicazione compilata con le risorse della lingua inglese predefinita e tre assembly satellite contenenti le risorse per la lingua inglese (Stati Uniti), francese (Francia) e russa (Russia). Se viene impostata la proprietà CurrentUICulture fr-FR, l'oggetto ResourceManager recupera sempre le risorse francesi (Francia), anche se la lingua del sistema operativo dell'utente non è il. Assicurarsi che questo sia il comportamento desiderato prima di impostare la proprietà in modo esplicito.

    Nelle applicazioni ASP.NET, è necessario impostare la proprietà Thread.CurrentUICulture in modo esplicito, in quanto è improbabile che l'impostazione del server corrisponda alle richieste del client in ingresso. Un'applicazione ASP.NET può impostare la proprietà Thread.CurrentUICulture in modo esplicito al browser di accettazione del linguaggio.

    L'impostazione esplicita della proprietà Thread.CurrentUICulture definisce le impostazioni cultura correnti dell'interfaccia utente per tale thread. Non influisce sulle impostazioni cultura correnti dell'interfaccia utente di altri thread in un'applicazione.

  • È possibile definire le impostazioni cultura dell'interfaccia utente di tutti i thread in un dominio applicazione assegnando un oggetto CultureInfo che rappresenta le impostazioni cultura alla proprietà statica CultureInfo.DefaultThreadCurrentUICulture.

  • Se non esplicitamente impostate le impostazioni cultura correnti dell'interfaccia utente e definite le impostazioni cultura predefinite del dominio applicazione corrente di, la proprietà CultureInfo.CurrentUICulture viene impostata in modo implicito dalla funzione GetUserDefaultUILanguage di windows. Questa funzione è fornita dalla Multilingual User Interface (MUI) che consente all'utente di impostare la lingua predefinita. Se non è stata impostata dall'utente, la lingua dell'interfaccia utente viene impostata in modo predefinito in base alla lingua installata nel sistema, ovvero la lingua delle risorse del sistema operativo.

Nell'esempio "semplice hello world" per le impostazioni cultura correnti dell'interfaccia utente in modo esplicito. Contiene le risorse per le impostazioni cultura: Inglese (Stati Uniti) o en-US, francese (Francia) o fr-FR e Russo (Russia) o ru- RU. Le risorse personalizzate sono contenute in un file di testo denominato Greetings.txt:

HelloString=Hello world!

Le risorse fr-FR sono contenute in un file di testo denominato Greetings.fr-FR.txt:

HelloString=Salut tout le monde!

Le risorse ru-RU sono contenute in un file di testo denominato Greetings.ru-RU.txt:

HelloString=Всем привет!

Di seguito è riportato il codice sorgente per l'esempio (Example.vb per la versione di Visual Basic o Example.cs per la versione di c#:


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

public class Example
{
   public static void Main()
   {
      // Create array of supported cultures
      string[] cultures = {"en-CA", "en-US", "fr-FR", "ru-RU" };
      Random rnd = new Random();
      int cultureNdx = rnd.Next(0, cultures.Length);
      CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;
      ResourceManager rm = new ResourceManager("Greetings", typeof(Example).Assembly);
      try {
         CultureInfo newCulture = new CultureInfo(cultures[cultureNdx]);
         Thread.CurrentThread.CurrentCulture = newCulture;
         Thread.CurrentThread.CurrentUICulture = newCulture;
         string greeting = String.Format("The current culture is {0}.\n{1}",
                                         Thread.CurrentThread.CurrentUICulture.Name,
                                         rm.GetString("HelloString"));
         Console.WriteLine(greeting);
      }
      catch (CultureNotFoundException e) {
         Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName);
      }
      finally {
         Thread.CurrentThread.CurrentCulture = originalCulture;
         Thread.CurrentThread.CurrentUICulture = originalCulture;
      }
   }
}
// The example displays output like the following:
//       The current culture is ru-RU.
//       Всем привет!


Per compilare l'esempio, creare un file batch BAT () che contiene i seguenti comandi ed eseguirlo dal prompt dei comandi. Se si utilizza c#, specificare invece cscvbc e Example.cs anziché Example.vb.

resgen Greetings.txt 
vbc Example.vb /resource:Greetings.resources

resgen Greetings.fr-FR.txt
Md fr-FR
al /embed:Greetings.fr-FR.resources /culture:fr-FR /out:fr-FR\Example.resources.dll

resgen Greetings.ru-RU.txt
Md ru-RU
al /embed:Greetings.ru-RU.resources /culture:ru-RU /out:ru-RU\Example.resources.dll

2xsy4hac.collapse_all(it-it,VS.110).gifRecupero risorse

Chiama i metodi GetString(String) e GetObject(String) per accedere a una risorsa specifica. È inoltre possibile chiamare il metodo GetStream(String) per recuperare le risorse non di tipo stringa come matrice di byte. Per impostazione predefinita, in un'applicazione che le risorse localizzate, questi metodi restituiscono la risorsa delle impostazioni cultura determinate dalle impostazioni cultura correnti dell'interfaccia utente del thread che ha effettuato la chiamata. Vedere la sezione precedente, ResourceManager e risorse specifiche delle impostazioni culturaper ulteriori informazioni sulle impostazioni cultura correnti dell'interfaccia utente di un thread sono definite. Se il gestore di risorse non trova la risorsa delle impostazioni cultura dell'interfaccia utente del thread corrente, utilizzare un processo di fallback per recuperare la risorsa specificata. Se il gestore di risorse non viene trovata alcuna risorsa localizzate, utilizza le risorse delle impostazioni cultura predefinite. Per ulteriori informazioni sulle regole di fallback delle risorse, vedere la sezione "processo di fallback delle risorse" dell'articolo Creazione del package e distribuzione delle risorse in applicazioni desktop.

NotaNota

Se il file con estensione resources specificato nel costruttore della classe ResourceManager non è disponibile, il tentativo di recuperare le risorse genera un'eccezione MissingSatelliteAssemblyException o MissingManifestResourceException. Per informazioni sulla gestione dell'eccezione, vedere la sezione Gestione MissingManifestResourceException ed eccezioni di MissingSatelliteAssemblyException più avanti in questo argomento.

Nell'esempio seguente viene utilizzato il metodo GetString per recuperare le risorse specifiche delle impostazioni cultura. È costituito dalle risorse compilati da file .txt per (en), francese (Francia) (fr-FR) e russa la lingua inglese (Russia) () ru- RU impostazioni cultura. L'esempio modifica delle impostazioni cultura correnti e le impostazioni cultura correnti dell'interfaccia utente l'inglese (Stati Uniti), il francese (Francia), a Russo (Russia) e a svedese (Svezia). Chiama quindi il metodo GetString per recuperare la stringa localizzata, visualizzati con il giorno del mese corrente. Si noti che l'output venga visualizzata la stringa localizzata appropriata a meno che quando le impostazioni cultura correnti dell'interfaccia utente sono la svedese (Svezia). Poiché le risorse della lingua svedese non sono disponibili, l'applicazione ma utilizza le risorse delle impostazioni cultura predefinite, ovvero inglese.

Questo esempio richiede i file di risorse basati su testo elencati nella tabella seguente. Ognuno dispone di un centro della singola stringa denominata DateStart.

Impostazioni cultura

Nome file

Nomi delle risorse

Valore di risorsa

en-US

DateStrings.txt

DateStart

Oggi è

fr-FR

DateStrings.fr-FR.txt

DateStart

Aujourd'hui, le più c'est

ru-RU

DateStrings.ru-RU.txt

DateStart

Сегодня

Di seguito è riportato il codice sorgente per l'esempio (ShowDate.vb per la versione di Visual Basic o ShowDate.cs per la versione del codice c#).


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

[assembly:NeutralResourcesLanguage("en")]

public class Example
{
   public static void Main()
   {
      string[] cultureNames = { "en-US", "fr-FR", "ru-RU", "sv-SE" };
      ResourceManager rm = new ResourceManager("DateStrings",
                                               typeof(Example).Assembly);

      foreach (var cultureName in cultureNames) {
         CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
         Thread.CurrentThread.CurrentCulture = culture; 
         Thread.CurrentThread.CurrentUICulture = culture;

         Console.WriteLine("Current UI Culture: {0}", 
                           CultureInfo.CurrentUICulture.Name);
         string dateString = rm.GetString("DateStart");
         Console.WriteLine("{0} {1:M}.\n", dateString, DateTime.Now);                           
      }                                           
   }
}
// The example displays output similar to the following:
//       Current UI Culture: en-US
//       Today is February 03.
//       
//       Current UI Culture: fr-FR
//       Aujourd'hui, c'est le 3 février
//       
//       Current UI Culture: ru-RU
//       Сегодня февраля 03.
//       
//       Current UI Culture: sv-SE
//       Today is den 3 februari.


Per compilare l'esempio, creare un file batch conterrà i seguenti comandi ed eseguirlo dal prompt dei comandi. Se si utilizza c#, specificare invece cscvbc e showdate.cs anziché showdate.vb.


resgen DateStrings.txt
vbc showdate.vb /resource:DateStrings.resources

md fr-FR
resgen DateStrings.fr-FR.txt
al /out:fr-FR\Showdate.resources.dll /culture:fr-FR /embed:DateStrings.fr-FR.resources 

md ru-RU
resgen DateStrings.ru-RU.txt
al /out:ru-RU\Showdate.resources.dll /culture:ru-RU /embed:DateStrings.ru-RU.resources

Esistono due modalità per recuperare le risorse per impostazioni cultura specifiche diverse dalle impostazioni cultura correnti dell'interfaccia utente:

  • È possibile chiamare GetString(String, CultureInfo), GetObject(String, CultureInfo), o GetStream(String, CultureInfo) per recuperare una risorsa per le impostazioni cultura specifiche. Se una risorsa localizzata non viene trovata, il gestore di risorse viene utilizzato il processo di fallback delle risorse per individuare una risorsa appropriata.

  • È possibile chiamare il metodo GetResourceSet per ottenere un oggetto ResourceSet che rappresenta le risorse per impostazioni cultura specifiche. Nella chiamata al metodo, è possibile determinare se il gestore di risorse sonda per le impostazioni cultura padre se non è stato possibile trovare le risorse localizzate, o se rientra semplicemente di nuovo alle risorse delle impostazioni cultura predefinite. È quindi possibile utilizzare i metodi ResourceSet per accedere alle risorse (localizzate per le impostazioni cultura) per nome, o per enumerare le risorse nel set.

2xsy4hac.collapse_all(it-it,VS.110).gifGestione MissingManifestResourceException ed eccezioni di MissingSatelliteAssemblyException

Se si tenta di recuperare una risorsa specifica, ma il gestore di risorse non è possibile che la risorsa e nessun impostazioni cultura predefinite definita o le risorse delle impostazioni cultura predefinite non è disponibile, il gestore di risorse genera un'eccezione MissingManifestResourceException se si prevede di trovare le risorse nell'assembly principale o in MissingSatelliteAssemblyException se si prevede di trovare le risorse in un assembly satellite. Si noti che l'eccezione viene generata quando viene chiamato un metodo di recupero delle risorse come GetString o GetObjecte non quando viene creata un'istanza di un oggetto ResourceManager.

L'eccezione viene generata nelle seguenti circostanze:

  • Il file di risorse o l'assembly satellite appropriato non esiste. Se il gestore di risorse prevede le risorse predefinite dell'applicazione da incorporare nell'assembly principale dell'applicazione, inclusi. Se l'attributo NeutralResourcesLanguageAttribute indica che le risorse predefinite dell'applicazione si trovano in un assembly satellite, tale assembly non è disponibile. Quando si compila l'applicazione, assicurarsi che le risorse vengono incorporate nell'assembly principale o che l'assembly satellite necessario viene generata un'eccezione e viene denominato in modo appropriato. Il nome deve avere il formato appName.resources.dll e deve trovare in una directory denominata in base alle impostazioni cultura delle risorse contiene.

  • L'applicazione non ha un valore predefinito o non associate ad alcun paese definiti. Aggiungere l'attributo NeutralResourcesLanguageAttribute a un file di codice sorgente o al file delle informazioni file di progetto (AssemblyInfo.vb per un'applicazione Visual Basic o AssemblyInfo.cs per le applicazioni c#).

  • Il parametro baseName nel costruttore ResourceManager(String, Assembly) non specifica il nome di un file .resources. Il nome deve includere lo spazio dei nomi completo ma non la relativa estensione del file di risorse. In genere, i file di risorse creati in Visual Studio includono i nomi dello spazio dei nomi, ma i file di risorse creati e compilati al prompt dei comandi non fanno. È possibile determinare i nomi dei file con estensione resources incorporati compilando ed eseguendo lautilità. È un'applicazione console che accetta il nome di un assembly o un assembly satellite principale come parametro della riga di comando. Visualizzare le stringhe che deve essere fornita come parametro baseName in modo da poter identificare correttamente il gestore di risorse della risorsa.

    
    using System;
    using System.IO;
    using System.Reflection;
    using System.Resources;
    
    public class Example
    {
       public static void Main()
       {
          if (Environment.GetCommandLineArgs().Length == 1) { 
             Console.WriteLine("No filename.");
             return;
          }
    
          string filename = Environment.GetCommandLineArgs()[1].Trim();
          // Check whether the file exists.
          if (! File.Exists(filename)) {
             Console.WriteLine("{0} does not exist.", filename);
             return;
          }   
    
          // Try to load the assembly.
          Assembly assem = Assembly.LoadFrom(filename);
          Console.WriteLine("File: {0}", filename);
    
          // Enumerate the resource files.
          string[] resNames = assem.GetManifestResourceNames();
          if (resNames.Length == 0)
             Console.WriteLine("   No resources found.");
    
          foreach (var resName in resNames)
             Console.WriteLine("   Resource: {0}", resName.Replace(".resources", ""));
    
          Console.WriteLine();
       }
    }
    
    
    

Se si stanno modificando le impostazioni cultura correnti dell'applicazione in modo esplicito, è necessario ricordare che il gestore di risorse recupera un set di risorse in base al valore della proprietà CultureInfo.CurrentUICulture e non la proprietà CultureInfo.CurrentCulture. In genere, se si modifica un valore, è necessario modificare anche l'altro.

2xsy4hac.collapse_all(it-it,VS.110).gifControllo della versione delle risorse

Poiché l'assembly principale che contiene le risorse predefinite di un'applicazione è distinto dagli assembly satellite dell'applicazione, è possibile eliminare una nuova versione dell'assembly principale senza ridistribuire assembly satellite. Utilizzare l'attributo SatelliteContractVersionAttribute per utilizzare gli assembly satellite esistenti e per indicare al gestore di risorse non ridistribuirli con una nuova versione dell'assembly principale,

Per ulteriori informazioni sul supporto di controllo delle versioni degli assembly satellite, vedere l'articolo Recupero di risorse nelle applicazioni desktop.

2xsy4hac.collapse_all(it-it,VS.110).gifNodo <satelliteassemblies> nel file di configurazione

Per i file eseguibili distribuiti ed eseguite da un sito Web (file EXE di HREF), l'oggetto ResourceManager può ricerca degli assembly satellite sul Web, che può influire negativamente sulle prestazioni dell'applicazione. Per risolvere il problema di prestazioni, è possibile limitare il sondaggio agli assembly satellite avere distribuito con l'applicazione. A tale scopo, creare un nodo <satelliteassemblies> nel file di configurazione dell'applicazione per specificare che è stato distribuito un set specifico delle impostazioni cultura per l'applicazione e che l'oggetto ResourceManager non deve tentare di ricerca per alcune impostazioni cultura non sono elencate nel nodo.

NotaNota

L'alternativa migliore alla creazione di un nodo <satelliteassemblies> consiste nell'utilizzare la funzionalità Manifesto di distribuzione ClickOnce.

Nel file di configurazione dell'applicazione, creare una sezione simile al seguente:

<?xml version ="1.0"?>
<configuration>
    <satelliteassemblies>
        <assembly name="MainAssemblyName, Version=versionNumber, Culture=neutral, PublicKeyToken=null|yourPublicKeyToken">
            <culture>cultureName1</culture>
            <culture>cultureName2</culture>
            <culture>cultureName3</culture>
        </assembly>
    </satelliteassemblies>
</configuration>

Modificare queste informazioni di configurazione come segue:

  • Specificare uno o più nodi <assembly> per ogni assembly principale della distribuzione, in cui ogni nodo specifica un nome di assembly completo. Specificare il nome dell'assembly principale invece di MainAssemblyName e specificare i valori degli attributi Version, PublicKeyToken e Culture che corrispondono all'assembly principale.

    Per l'attributo Version, specificare il numero di versione dell'assembly. Ad esempio, la prima versione dell'assembly potrebbe essere il numero 1.0.0.0.

    Per l'attributo PublicKeyToken, specificare la parola chiave null se non è stato firmato l'assembly con un nome sicuro, o specificare il token di chiave pubblica se è stato firmato l'assembly.

    Per l'attributo Culture, specificare la parola chiave neutral per definire l'assembly principale e per impedire la classe ResourceManager di ricerca solo per le impostazioni cultura specificate nei nodi <culture>.

    Per ulteriori informazioni sui nomi completi degli assembly, vedere l'articolo Nomi degli assembly. Per ulteriori informazioni sugli assembly con nome sicuro, vedere l'articolo Creazione e utilizzo degli assembly con nome sicuro.

  • Specificare uno o più nodi <culture> con un nome di impostazioni cultura specifiche, ad esempio "fr-FR" oppure un nome di impostazioni cultura di sistema, ad esempio "fr".

Se sono necessarie risorse per un assembly non elencato nel nodo <satelliteassemblies>, la classe ResourceManager verifica la presenza di impostazioni cultura mediante regole di verifica standard.

Applicazioni Windows Store

Nota importanteImportante

Sebbene la classe ResourceManager sia supportata nelle applicazioni Windows Store, è consigliabile evitare il relativo utilizzo. Utilizzare questa classe solo quando si sviluppano progetti Libreria di classi portabile che possono essere utilizzati con le applicazioni Windows Store. Per recuperare le risorse dalle applicazioni Windows Store, utilizzare Windows.ApplicationModel.Resources.ResourceLoader la classe.

Per le applicazioni Windows Store, la classe ResourceManager le risorse vengono recuperate dai file di (PRI) dell'indice delle risorse del pacchetto. Un singolo file di PRI (il file di PRI package di applicazioni) contiene le risorse per le impostazioni cultura predefinite che tutte le impostazioni cultura localizzate. Utilizza l'utilità di MakePRI per creare un file di PRI da uno o più file di risorse in formato di risorse XML (.resw). Per le risorse incluse in un progetto di Visual Studio, Visual Studio consente di gestire il processo di creazione e di comprimere il file di PRI automaticamente. È quindi possibile utilizzare la classe ResourceManager.NET Framework per accedere all'applicazione o le risorse di libreria.

È possibile creare un'istanza di un oggetto ResourceManager per un'applicazione Windows Store in modo analogo a quanto avviene per un'applicazione desktop.

È quindi possibile accedere alle risorse per le impostazioni cultura passando il nome della risorsa da recuperare il metodo GetString(String). Per impostazione predefinita, questo metodo restituisce la risorsa delle impostazioni cultura determinate dalle impostazioni cultura correnti dell'interfaccia utente del thread che ha effettuato la chiamata. È inoltre possibile recuperare le risorse per impostazioni cultura specifiche passando il nome della risorsa e di un oggetto CultureInfo che rappresenta le impostazioni cultura della risorsa deve essere recuperata al metodo GetString(String, CultureInfo). Se la risorsa delle impostazioni cultura correnti dell'interfaccia utente o le impostazioni cultura specificate non viene trovata, il gestore di risorse contiene un elenco di fallback della lingua dell'interfaccia utente per individuare una risorsa appropriata.

Nell'esempio seguente viene illustrato come utilizzare le impostazioni cultura esplicite e le impostazioni cultura correnti implicite dell'interfaccia utente per ottenere le risorse di tipo stringa da un assembly principale e un assembly satellite. Per ulteriori informazioni, vedere "percorsi di directory per gli assembly satellite non installati la sezione nella Global Assembly Cache l'argomento Creazione di assembly satellite per applicazioni desktop.

Per eseguire questo esempio:

  1. Nella directory dell'applicazione, creare un file denominato rmc.txt che contiene le stringhe di risorsa:

    
    day=Friday
    year=2006
    holiday="Cinco de Mayo"
    
    
  2. Utilizzare Generazione delle risorse per generare il file di risorse di rmc.resources dal file di input rmc.txt come segue:

    resgen rmc.txt
    
  3. Creare una sottodirectory della directory dell'applicazione e denominarla "es-mx". Si tratta del nome delle impostazioni cultura dell'assembly satellite che si creerà in tre passaggi seguenti.

  4. Creare un file denominato rmc.es-MX.txt nella directory es-mx che contiene le stringhe di risorsa:

    
    day=Viernes
    year=2006
    holiday="Cinco de Mayo"
    
    
  5. Utilizzare Generazione delle risorse per generare il file di risorse di rmc.es-MX.resources dal file di input rmc.es-MX.txt come segue:

    resgen rmc.es-MX.txt
    
  6. Si supponga che il nome del file per questo esempio è rmc.vb o rmc.cs. Copiare il seguente codice sorgente in un file. Quindi compilarlo e importare il file di risorse principale dell'assembly, rmc.resources, nell'assembly eseguibile. Se si utilizza il compilatore Visual Basic, la sintassi è la seguente:

    vbc rmc.vb /resource:rmc.resources
    

    La sintassi corrispondente per il compilatore c# è:

    csc /resource:rmc.resources rmc.cs
    
  7. Utilizzare Assembly Linker per creare un assembly satellite. Se il nome dell'applicazione è RMC, il nome dell'assembly satellite deve essere rmc.resources.dll. L'assembly satellite devono essere create nella directory es-mx. Se il es-mx è la directory corrente, utilizzare il seguente comando:

    al /embed:rmc.es-MX.resources /c:es-MX /out:rmc.resources.dll 
    
  8. Eseguire rmc.exe per ottenere e visualizzare le stringhe di risorsa incorporata.


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

class Example 
{
    public static void Main() 
    {
    string day;
    string year;
    string holiday;
    string celebrate = "{0} will occur on {1} in {2}.\n";

    // Create a resource manager. 
    ResourceManager rm = new ResourceManager("rmc", 
                             typeof(Example).Assembly);

    Console.WriteLine("Obtain resources using the current UI culture.");

    // Get the resource strings for the day, year, and holiday 
    // using the current UI culture. 
    day  = rm.GetString("day");
    year = rm.GetString("year");
    holiday = rm.GetString("holiday");
    Console.WriteLine(celebrate, holiday, day, year);

    // Obtain the es-MX culture.
    CultureInfo ci = new CultureInfo("es-MX");

    Console.WriteLine("Obtain resources using the es-MX culture.");

   // Get the resource strings for the day, year, and holiday 
   // using the specified culture. 
    day  = rm.GetString("day", ci);
    year = rm.GetString("year", ci);
    holiday = rm.GetString("holiday", ci);
// ---------------------------------------------------------------
// Alternatively, comment the preceding 3 code statements and 
// uncomment the following 4 code statements:
// ----------------------------------------------------------------
// Set the current UI culture to "es-MX" (Spanish-Mexico).
//    Thread.CurrentThread.CurrentUICulture = ci;

// Get the resource strings for the day, year, and holiday 
// using the current UI culture. Use those strings to 
// display a message. 
//    day  = rm.GetString("day");
//    year = rm.GetString("year");
//    holiday = rm.GetString("holiday");
// ---------------------------------------------------------------

// Regardless of the alternative that you choose, display a message 
// using the retrieved resource strings.
    Console.WriteLine(celebrate, holiday, day, year);
    }
}
/*
This example displays the following output:

   Obtain resources using the current UI culture.
   "5th of May" will occur on Friday in 2006.

   Obtain resources using the es-MX culture.
   "Cinco de Mayo" will occur on Viernes in 2006.
*/


.NET Framework

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

.NET per applicazioni Windows Phone

Supportato in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Questo tipo è thread-safe.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2015 Microsoft