Metodi System.Resources.ResourceManager.GetString

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

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

Nota

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

Metodo GetString(String)

App desktop

Nelle app desktop la risorsa restituita viene localizzata per le impostazioni cultura dell'interfaccia utente del thread corrente, come definito dalla CultureInfo.CurrentUICulture proprietà . Se la risorsa non è stata localizzata per tali impostazioni cultura, resource manager esegue il probe per 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, resource manager esegue il fallback sulle risorse delle impostazioni cultura predefinite. Se resource manager non è in grado di caricare il set di risorse delle impostazioni cultura predefinite, il metodo genera un'eccezione MissingManifestResourceException o, se si prevede che il set di risorse risieda 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 ResourceManager classe è 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 GetString(String) metodo restituisce il valore della name risorsa stringa, localizzata per le impostazioni cultura correnti dell'interfaccia utente del chiamante. L'elenco delle impostazioni cultura deriva dall'elenco di lingue preferite del sistema operativo. Se resource manager non può corrispondere namea , il metodo restituisce null.

Esempio

Nell'esempio seguente viene usato il GetString metodo per recuperare risorse specifiche delle impostazioni cultura. È costituito da risorse compilate da .txt file per le impostazioni cultura inglese (en), francese (Francia) (fr-FR) e russo (Russia) (ru-UR). L'esempio modifica le impostazioni cultura correnti e le impostazioni cultura correnti dell'interfaccia utente in Inglese (Stati Uniti), Francese (Francia), Russo (Russia) e Svedese (Svezia). Chiama quindi il GetString metodo per recuperare la stringa localizzata, visualizzata insieme al giorno e al mese correnti. Si noti che l'output visualizza la stringa localizzata appropriata tranne quando le impostazioni cultura dell'interfaccia utente correnti 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 File name Nome risorsa Valore della risorsa
en-US DateStrings.txt DateStart Oggi è
fr-FR DateStrings.fr-FR.txt DateStart Aujourd'hui, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

È possibile usare il file batch seguente per compilare l'esempio C#. Per Visual Basic, sostituire csc con vbce modificare l'estensione del file del 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: {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.
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)

App desktop

Nelle app desktop, se culture è null, il GetString(String, CultureInfo) metodo usa le impostazioni cultura dell'interfaccia utente correnti ottenute dalla CultureInfo.CurrentUICulture proprietà .

La risorsa restituita viene localizzata per le impostazioni cultura specificate dal culture parametro . Se la risorsa non è stata localizzata per culture, il gestore risorse esegue il probe per una 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, resource manager esegue il fallback sulle risorse delle impostazioni cultura predefinite. Se resource manager non è in grado di caricare il set di risorse delle impostazioni cultura predefinite, il metodo genera un'eccezione MissingManifestResourceException o, se si prevede che il set di risorse risieda 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 ResourceManager classe è 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 GetString(String, CultureInfo) metodo restituisce il valore della name risorsa stringa, localizzata per le impostazioni cultura specificate dal culture parametro . Se la risorsa non è localizzata per le culture impostazioni cultura, la ricerca usa l'intero elenco di fallback delle lingue di Windows 8 e si arresta dopo aver esaminato le impostazioni cultura predefinite. Se resource manager non può corrispondere namea , il metodo restituisce null.

Esempio

Nell'esempio seguente viene usato il GetString(String, CultureInfo) metodo per recuperare risorse specifiche delle impostazioni cultura. Le impostazioni cultura predefinite dell'esempio sono inglese (en) e includono assembly satellite per le impostazioni cultura francese (Francia) (fr-FR) e russo (Russia) (ru-UR). L'esempio modifica le impostazioni cultura correnti e le impostazioni cultura correnti dell'interfaccia utente in Russo (Russia) prima di chiamare GetString(String, CultureInfo). Chiama quindi il GetString metodo e il DateTime.ToString(String, IFormatProvider) metodo e passa CultureInfo oggetti che rappresentano le impostazioni cultura 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 GetString metodo è 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 File name Nome risorsa Valore della risorsa
en-US DateStrings.txt DateStart Oggi è
fr-FR DateStrings.fr-FR.txt DateStart Aujourd'hui, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

È possibile usare il file batch seguente per compilare l'esempio di Visual Basic. Per compilare in C#, passare vbc a 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("{0}: {1} {2}.", 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.