Condividi tramite


Metodi di System.Resources.ResourceManager.GetString

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

La proprietà IgnoreCase determina se il confronto di name con i nomi delle risorse avviene senza distinzione tra maiuscole e minuscole (impostazione predefinita) o con distinzione tra maiuscole e minuscole.

Nota

I metodi GetString possono generare più eccezioni di quelle elencate. Un motivo per cui questo potrebbe verificarsi è se un metodo che questo metodo chiama genera un'eccezione. Ad esempio, è possibile che venga generata un'eccezione FileLoadException se è stato generato un errore durante la distribuzione o l'installazione di un assembly satellite o se viene generata un'eccezione SerializationException se un tipo definito dall'utente genera un'eccezione definita dall'utente quando il tipo viene deserializzato.

Metodo GetString(String)

Applicazioni desktop

Nelle app desktop, la risorsa restituita è localizzata in base alla cultura dell'interfaccia utente del thread corrente, come definito dalla proprietà CultureInfo.CurrentUICulture. Se la risorsa non è stata localizzata per quelle impostazioni cultura, il Resource Manager cerca una risorsa seguendo i passaggi descritti nella sezione "Processo di fallback delle risorse" dell'articolo Creazione di pacchetti e distribuzione di risorse. Se non viene trovato alcun set utilizzabile di risorse localizzate, il gestore delle risorse passa alle risorse della cultura predefinita. Se il resource manager non è in grado di caricare il set di risorse della cultura predefinita, il metodo lancia un'eccezione MissingManifestResourceException oppure, se il set di risorse è previsto risiedere in un assembly satellite, un'eccezione MissingSatelliteAssemblyException. Se resource manager può caricare un set di risorse appropriato ma non riesce a trovare una risorsa denominata name, il metodo restituisce null.

App di Windows 8.x

Importante

Anche se la classe ResourceManager è supportata nelle app di Windows 8.x, non è consigliabile usarla. Usare questa classe solo quando si sviluppano progetti della libreria di classi portabile che possono essere usati con le app di Windows 8.x. Per recuperare le risorse dalle app di Windows 8.x, usare invece la classe Windows.ApplicationModel.Resources.ResourceLoader.

Nelle app di Windows 8.x il metodo GetString(String) restituisce il valore della risorsa stringa name, localizzata in base alle impostazioni locali correnti dell'interfaccia utente del chiamante. L'elenco delle culture è derivato dall'elenco della lingua UI preferita del sistema operativo. Se il gestore di risorse non può corrispondere a name, il metodo restituisce null.

Esempio

Nell'esempio seguente viene usato il metodo GetString per recuperare risorse specifiche della cultura. È costituito da risorse compilate da file .txt per l'inglese (en), il francese (Francia) (fr-FR) e il russo (Russia) (ru-RU) culture. In questo esempio, si modificano le impostazioni culturali correnti e le impostazioni culturali dell'interfaccia utente in inglese (Stati Uniti), francese (Francia), russo (Russia) e svedese (Svezia). Chiama quindi il metodo GetString per recuperare la stringa localizzata, visualizzata insieme al giorno e al mese correnti. Nota che l'output visualizza la stringa localizzata appropriata tranne quando le impostazioni della cultura dell'interfaccia utente corrente sono svedesi (Svezia). Poiché le risorse in lingua svedese non sono disponibili, l'app usa invece le risorse delle impostazioni cultura predefinite, ovvero inglese. L'esempio richiede i file di risorse basati sul testo elencati nella tabella seguente. Ogni oggetto ha una singola risorsa stringa denominata DateStart.

Cultura Nome del file Nome risorsa Valore della risorsa
en-US DateStrings.txt DateStart Oggi è
fr-FR DateStrings.fr-FR.txt DateStart Oggi è il
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

È possibile usare il file batch seguente per compilare l'esempio C#. Per Visual Basic modificare csc in vbce modificare l'estensione del file di codice sorgente da .cs a .vb.

resgen DateStrings.txt
csc showdate.cs /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

Ecco il codice sorgente per l'esempio (ShowDate.vb per la versione di Visual Basic o ShowDate.cs per la versione C#).

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

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: {CultureInfo.CurrentUICulture.Name}");
         string dateString = rm.GetString("DateStart");
         Console.WriteLine($"{dateString} {DateTime.Now:M}.\n");
      }
   }
}
// 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.
Imports System.Globalization
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguage("en")>

Module Example
   Public Sub Main()
      Dim cultureNames() As String = { "en-US", "fr-FR", "ru-RU", "sv-SE" }
      Dim rm As New ResourceManager("DateStrings",
                                    GetType(Example).Assembly)
      
      For Each cultureName In cultureNames
         Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
         Thread.CurrentThread.CurrentCulture = culture 
         Thread.CurrentThread.CurrentUICulture = culture

         Console.WriteLine("Current UI Culture: {0}", 
                           CultureInfo.CurrentUICulture.Name)
         Dim dateString As String = rm.GetString("DateStart")
         Console.WriteLine("{0} {1:M}.", dateString, Date.Now)                           
         Console.WriteLine()
      Next                                           
   End Sub
End Module
' 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.

Metodo GetString(String, CultureInfo)

Applicazioni desktop

Nelle app desktop, se culture è null, il metodo GetString(String, CultureInfo) usa la cultura UI corrente ottenuta dalla proprietà CultureInfo.CurrentUICulture.

La risorsa restituita viene localizzata per la cultura specificata dal parametro culture. Se la risorsa non è stata localizzata per culture, il gestore delle risorse cerca la risorsa seguendo i passaggi descritti nella sezione "Processo di fallback delle risorse" dell'argomento Creazione di pacchetti e distribuzione di risorse. Se non viene trovato alcun set utilizzabile di risorse, il gestore delle risorse esegue il fallback sulle risorse della cultura predefinita. Se il resource manager non è in grado di caricare il set di risorse della cultura predefinita, il metodo genera un'eccezione MissingManifestResourceException oppure, se si prevede che il set di risorse risieda in un assembly satellitare, un'eccezione MissingSatelliteAssemblyException. Se resource manager può caricare un set di risorse appropriato ma non riesce a trovare una risorsa denominata name, il metodo restituisce null.

App di Windows 8.x

Importante

Anche se la classe ResourceManager è supportata nelle app di Windows 8.x, non è consigliabile usarla. Usare questa classe solo quando si sviluppano progetti della libreria di classi portabile che possono essere usati con le app di Windows 8.x. Per recuperare le risorse dalle app di Windows 8.x, usare invece la classe Windows.ApplicationModel.Resources.ResourceLoader.

Nelle app di Windows 8.x, il metodo GetString(String, CultureInfo) restituisce il valore della risorsa stringa name, localizzata in base alla cultura specificata dal parametro culture. Se la risorsa non è localizzata per la cultura culture, la ricerca utilizza l'intero elenco di fallback della lingua di Windows 8 e si arresta dopo aver consultato la cultura predefinita. Se il gestore delle risorse non può corrispondere name, il metodo restituisce null.

Esempio

Nell'esempio seguente viene usato il metodo GetString(String, CultureInfo) per recuperare risorse specifiche della cultura. L'impostazione cultura predefinita dell'esempio è inglese (en) e include assembly satellite per le impostazioni culturali francesi (Francia) (fr-FR) e russe (Russia) (ru-RU). L'esempio modifica le impostazioni culturali e dell'interfaccia utente correnti in russo (Russia) prima di chiamare GetString(String, CultureInfo). Chiama quindi il metodo GetString e il metodo DateTime.ToString(String, IFormatProvider) e passa oggetti CultureInfo che rappresentano le culture francese (Francia) e svedese (Svezia) a ogni metodo. Nell'output, il mese e il giorno del mese, nonché la stringa che li precede vengono visualizzati in francese, perché il metodo GetString è in grado di recuperare la risorsa lingua francese. Tuttavia, quando si usano le impostazioni cultura svedesi (Svezia), il mese e il giorno del mese vengono visualizzati in svedese, anche se la stringa che li precede è in inglese. Ciò è dovuto al fatto che resource manager non riesce a trovare risorse localizzate in lingua svedese, quindi restituisce una risorsa per le impostazioni cultura inglese predefinite.

L'esempio richiede i file di risorse basati sul testo elencati nella tabella seguente. Ogni oggetto ha una singola risorsa stringa denominata DateStart.

Cultura Nome del file Nome risorsa Valore della risorsa
en-US DateStrings.txt DateStart Oggi è
fr-FR DateStrings.fr-FR.txt DateStart Oggi è il
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

È possibile usare il file batch seguente per compilare l'esempio di Visual Basic. Per compilare in C#, modificare vbc in csce modificare l'estensione del file di codice sorgente da .vb a .cs.

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

Ecco il codice sorgente per l'esempio (ShowDate.vb per la versione di Visual Basic o ShowDate.cs per la versione C#).

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

public class Example2
{
    public static void Main()
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ru-RU");
        Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("ru-RU");

        string[] cultureNames = [ "fr-FR", "sv-SE" ];
        ResourceManager rm = new ResourceManager("DateStrings",
                                                 typeof(Example).Assembly);

        foreach (var cultureName in cultureNames)
        {
            CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
            string dateString = rm.GetString("DateStart", culture);
            Console.WriteLine($"{culture.DisplayName}: {dateString} {DateTime.Now.ToString("M", culture)}.");
            Console.WriteLine();
        }
    }
}
// The example displays output similar to the following:
//       French (France): Aujourd'hui, c'est le 7 février.
//
//       Swedish (Sweden): Today is den 7 februari.
Imports System.Globalization
Imports System.Resources
Imports System.Threading

Module Example2
    Public Sub Main()
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ru-RU")
        Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("ru-RU")

        Dim cultureNames() As String = {"fr-FR", "sv-SE"}
        Dim rm As New ResourceManager("DateStrings",
                                    GetType(Example).Assembly)

        For Each cultureName In cultureNames
            Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
            Dim dateString As String = rm.GetString("DateStart", culture)
            Console.WriteLine("{0}: {1} {2}.", culture.DisplayName, dateString,
                                            Date.Now.ToString("M", culture))
            Console.WriteLine()
        Next
    End Sub
End Module
' The example displays output similar to the following:
'       French (France): Aujourd'hui, c'est le 7 février.
'       
'       Swedish (Sweden): Today is den 7 februari.