La classe ResourceManager cerca le risorse specifiche della lingua, consente di ripiegare su altre risorse quando una risorsa localizzata non esiste e supporta la serializzazione delle risorse.
Mediante i metodi di ResourceManager, un chiamante può accedere alle risorse di una determinata lingua con i metodi GetObject e GetString. In base all'impostazione predefinita, questi metodi restituiscono la risorsa della lingua determinata dalle impostazioni linguistiche correnti del thread che ha effettuato la chiamata. Per ulteriori informazioni, vedere Thread.CurrentUICulture. Un chiamante può utilizzare il metodo ResourceManager.GetResourceSet per ottenere un oggetto ResourceSet, che rappresenta le risorse per una determinata lingua, ignorando le regole di fallback relative alle lingue. È quindi possibile utilizzare l'oggetto ResourceSet per accedere alle risorse localizzate di tale lingua in base al nome.
Idealmente, occorre creare risorse per ogni lingua o almeno per un sottoinsieme significativo della lingua. I nomi dei file di risorse seguono la convenzione di denominazione nomebase.nomeLingua.resources, dove nomebase indica il nome dell'applicazione o di una classe, a seconda del livello di dettaglio desiderato. La proprietà Name dell'oggetto CultureInfo viene utilizzata per determinare il nomeLingua. Una risorsa per la lingua di sistema, restituita da InvariantCulture, deve essere denominata nomebase.resources.
Si supponga ad esempio che un assembly contenga numerose risorse in un file di risorse con il nomebase "MyResources". Questi file di risorse avranno nomi come "MyResources.ja-JP.resources", "MyResources.de.resources", "MyResources.zh-CHS.resources" o "MyResources.fr-BE.resources", che contengono le risorse rispettivamente per le lingue giapponese, tedesca, cinese e francese (Belgio). Il file di risorse predefinito deve essere denominato MyResources.resources. Vengono in genere creati package dei file di risorse specifici della lingua in assembly satellite per ogni lingua. Il file di risorse predefinito deve trovarsi nell'assembly principale.
A questo punto, si supponga che sia stato creato un oggetto ResourceManager per rappresentare le risorse con questo nomebase. Utilizzando la classe ResourceManager, è possibile ottenere un oggetto ResourceSet che incapsula "MyResources.ja-JP.resources" chiamando GetResourceSet(new CultureInfo ("ja-JP"), TRUE, FALSE). In alternativa, se si è a conoscenza che "MyResources" contiene una risorsa denominata "TOOLBAR_ICON", è possibile ottenere il valore di tale risorsa localizzata per il Giappone chiamando GetObject("TOOLBAR_ICON", new CultureInfo("ja-JP")).
Benché non sia strettamente necessario per la maggior parte degli utilizzi di base della classe ResourceManager, gli assembly consegnati a livello pubblico devono utilizzare la classe SatelliteContractVersionAttribute per supportare la creazione di versioni dell'assembly principale senza ridistribuire i satelliti e la classe NeutralResourcesLanguageAttribute per evitare la ricerca di un assembly satellite potenzialmente inesistente.
Per ulteriori informazioni sul supporto della versione degli assembly satellite, vedere Recupero di risorse in assembly satellite. Per ulteriori informazioni sulla creazione di assembly satellite, vedere Creazione di assembly satellite. Per assistenza nella localizzazione di finestre di dialogo Windows Form, vedere lo strumento Editor di risorse di Windows Form (Winres.exe) in Microsoft .NET Framework SDK.
Per ulteriori informazioni sull'impostazione e la creazione di risorse, vedere Risorse nelle applicazioni.
Attenzione |
|---|
| L'utilizzo di file resources autonomi in un'applicazione ASP.NET interrompe la distribuzione XCOPY, poiché le risorse rimangono bloccate finché non vengono rilasciate in modo esplicito dal metodo ReleaseAllResources. Per distribuire le risorse nelle applicazioni ASP.NET, è necessario compilare i file resources negli assembly satellite. |
Attenzione |
|---|
| Le risorse contrassegnate come private sono accessibili solo nell'assembly in cui vengono collocate. Poiché un assembly satellite non contiene codice, le risorse private di tale assembly non sono disponibili da alcun meccanismo. È pertanto necessario che le risorse negli assembly satellite siano sempre pubbliche in modo da essere accessibili dall'assembly principale. Le risorse incorporate nell'assembly principale sono accessibili a esso, che siano pubbliche o private. |
Nodo <satelliteassemblies> nel file di configurazione
È possibile creare un nodo <satelliteassemblies> nel file di configurazione dell'applicazione per specificare che è stato distribuito un set di lingue specifico per l'applicazione e che non si deve tentare di verificare la presenza di una lingua non elencata nel nodo mediante la classe ResourceManager.
Creare una sezione del file di configurazione simile all'esempio di codice riportato di seguito:
<?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>
Eseguire le seguenti operazioni nel file di configurazione:
-
Specificare uno o più nodi <assembly> per ciascun assembly principale distribuito, in cui l'attributo del nodo <assembly> specifica il nome completo dell'assembly. 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 l'assembly non è stato firmato con un nome sicuro oppure specificare il token di chiave pubblica se l'assembly è stato firmato.
Per l'attributo Culture, specificare la parola chiave "neutral" per designare l'assembly principale e fare in modo che la classe ResourceManager verifichi solo la presenza delle lingue elencate nei nodi <culture>.
Per ulteriori informazioni sui nomi completi dell'assembly, vedere Nomi degli assembly. Per ulteriori informazioni sugli assembly con nome sicuro, vedere Creazione e utilizzo degli assembly con nome sicuro.
-
Specificare uno o più nodi <culture> con un nome di lingua specifica, ad esempio "fr-FR" oppure un nome di lingua di sistema, ad esempio "fr".
Se sono necessarie risorse per un assembly non elencato nel nodo <satelliteassemblies>, la classe ResourceManager verifica la presenza di lingue mediante regole di verifica standard.