Fornisce un pratico accesso alle risorse specifiche della lingua in fase di esecuzione.
Spazio dei nomi: System.Resources
Assembly: mscorlib (in mscorlib.dll)
Visual Basic - (Dichiarazione)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class ResourceManager
Dim instance As ResourceManager
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ResourceManager
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ResourceManager
/** @attribute SerializableAttribute() */
/** @attribute ComVisibleAttribute(true) */
public class ResourceManager
SerializableAttribute
ComVisibleAttribute(true)
public class ResourceManager
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.
Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo di una lingua esplicita e dell'attuale lingua di interfaccia utente implicita per ottenere risorse di stringa dall'assembly principale e un assembly satellite. Per ulteriori informazioni, vedere l'argomento secondario relativo ai percorsi di directory per assembly satellite non installati nella Global Assembly Cache dell'argomento Creazione di assembly satellite.
' This code example demonstrates the ResourceManager()
' constructor and ResourceManager.GetString() method.
Imports System
Imports System.Resources
Imports System.Reflection
Imports System.Threading
Imports System.Globalization
'
'Perform the following steps to use this code example:
'
'Main assembly:
'1) In a main directory, create a file named "rmc.txt" that
'contains the following resource strings:
'
'day=Friday
'year=2006
'holiday="Cinco de Mayo"
'
'2) Use the resgen.exe tool to generate the "rmc.resources"
'resource file from the "rmc.txt" input file.
'
'> resgen rmc.txt
'
'Satellite Assembly:
'3) Create a subdirectory of the main directory and name the
'subdirectory "es-ES", which is the culture name of the
'satellite assembly.
'
'4) Create a file named "rmc.es-ES.txt" that contains the
'following resource strings:
'
'day=Viernes
'year=2006
'holiday="Cinco de Mayo"
'
'5) Use the resgen.exe tool to generate the "rmc.es-ES.resources"
'resource file from the "rmc.es-ES.txt" input file.
'
'> resgen rmc.es-ES.txt
'
'6) Use the al.exe tool to create a satellite assembly. If the
'base name of the application is "rmc", the satellite assembly
'name must be "rmc.resources.dll". Also, specify the culture,
'which is es-ES.
'
'> al /embed:rmc.es-ES.resources /c:es-ES /out:rmc.resources.dll
'
'7) Assume the filename for this code example is "rmc.vb". Compile
'rmc.vb and embed the main assembly resource file, rmc.resources, in
'the executable assembly, rmc.exe:
'
'>vbc /res:rmc.resources rmc.vb
'
'8) Execute rmc.exe, which obtains and displays the embedded
'resource strings.
'
Class Sample
Public Shared Sub Main()
Dim day As String
Dim year As String
Dim holiday As String
Dim celebrate As String = "{0} will occur on {1} in {2}." & vbCrLf
' Create a resource manager. The GetExecutingAssembly() method
' gets rmc.exe as an Assembly object.
Dim rm As New ResourceManager("rmc", [Assembly].GetExecutingAssembly())
' Obtain resources using the current UI culture.
Console.WriteLine("Obtain resources using the current UI culture.")
' 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")
Console.WriteLine(celebrate, holiday, day, year)
' Obtain the es-ES culture.
Dim ci As New CultureInfo("es-ES")
' Get the resource strings for the day, year, and holiday
' using the specified culture. Use those strings to
' display a message.
' Obtain resources using the es-ES culture.
Console.WriteLine("Obtain resources using the es-ES 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-ES" (Spanish-Spain).
' 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)
End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
'>rmc
'Obtain resources using the current UI culture.
'"5th of May" will occur on Friday in 2006.
'
'Obtain resources using the es-ES culture.
'"Cinco de Mayo" will occur on Viernes in 2006.
'
// This code example demonstrates the ResourceManager()
// constructor and ResourceManager.GetString() method.
using System;
using System.Resources;
using System.Reflection;
using System.Threading;
using System.Globalization;
/*
Perform the following steps to use this code example:
Main assembly:
1) In a main directory, create a file named "rmc.txt" that
contains the following resource strings:
day=Friday
year=2006
holiday="Cinco de Mayo"
2) Use the resgen.exe tool to generate the "rmc.resources"
resource file from the "rmc.txt" input file.
> resgen rmc.txt
Satellite Assembly:
3) Create a subdirectory of the main directory and name the
subdirectory "es-ES", which is the culture name of the
satellite assembly.
4) Create a file named "rmc.es-ES.txt" that contains the
following resource strings:
day=Viernes
year=2006
holiday="Cinco de Mayo"
5) Use the resgen.exe tool to generate the "rmc.es-ES.resources"
resource file from the "rmc.es-ES.txt" input file.
> resgen rmc.es-ES.txt
6) Use the al.exe tool to create a satellite assembly. If the
base name of the application is "rmc", the satellite assembly
name must be "rmc.resources.dll". Also, specify the culture,
which is es-ES.
> al /embed:rmc.es-ES.resources /c:es-ES /out:rmc.resources.dll
7) Assume the filename for this code example is "rmc.cs". Compile
rmc.cs and embed the main assembly resource file, rmc.resources, in
the executable assembly, rmc.exe:
>csc /res:rmc.resources rmc.cs
8) Execute rmc.exe, which obtains and displays the embedded
resource strings.
*/
class Sample
{
public static void Main()
{
string day;
string year;
string holiday;
string celebrate = "{0} will occur on {1} in {2}.\n";
// Create a resource manager. The GetExecutingAssembly() method
// gets rmc.exe as an Assembly object.
ResourceManager rm = new ResourceManager("rmc",
Assembly.GetExecutingAssembly());
// Obtain resources using the current UI culture.
Console.WriteLine("Obtain resources using the current UI culture.");
// 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");
Console.WriteLine(celebrate, holiday, day, year);
// Obtain the es-ES culture.
CultureInfo ci = new CultureInfo("es-ES");
// Get the resource strings for the day, year, and holiday
// using the specified culture. Use those strings to
// display a message.
// Obtain resources using the es-ES culture.
Console.WriteLine("Obtain resources using the es-ES 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-ES" (Spanish-Spain).
// 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 code example produces the following results:
>rmc
Obtain resources using the current UI culture.
"5th of May" will occur on Friday in 2006.
Obtain resources using the es-ES culture.
"Cinco de Mayo" will occur on Viernes in 2006.
*/
Gerarchia di ereditarietà
System.Object
System.Resources.ResourceManager
System.ComponentModel.ComponentResourceManager
Si tratta di un tipo adatto alle operazioni multithread.
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile per Pocket PC, Windows Mobile per Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.
Informazioni sulla versione
.NET Framework
Supportato in: 2.0 1.1 1.0
.NET Compact Framework
Supportato in: 2.0 1.0