Sdílet prostřednictvím


Metody System.Resources.ResourceManager.GetString

Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.

Vlastnost IgnoreCase určuje, zda porovnání name s názvy prostředků nerozlišuje malá a velká písmena (výchozí) nebo malá a velká písmena.

Poznámka:

Metody GetString mohou vyvolat více výjimek, než jsou uvedeny. Jedním z důvodů, proč k tomu může dojít, je v případě, že metoda, kterou tato metoda volá, vyvolá výjimku. Výjimka může být vyvolána například FileLoadException v případě, že došlo k chybě při nasazování nebo instalaci satelitního sestavení, nebo SerializationException může být vyvolána výjimka, pokud uživatelem definovaný typ vyvolá uživatelem definovanou výjimku při deserializaci typu.

GetString(String) Metoda

Desktopové aplikace

V desktopovýchaplikacích CultureInfo.CurrentUICulture Pokud prostředek nebyl lokalizován pro danou jazykovou verzi, správce prostředků testuje prostředek podle kroků popsaných v části Postup pro použití náhradního prostředku v článku Vytváření balíčků a nasazování prostředků . Pokud se nenajde žádná použitelná sada lokalizovaných prostředků, správce prostředků se vrátí k prostředkům výchozí jazykové verze. Pokud správce prostředků nemůže načíst sadu prostředků výchozí jazykové verze, vyvolá metoda MissingManifestResourceException výjimku, nebo pokud se očekává, že sada prostředků se bude nacházet ve satelitním sestavení, MissingSatelliteAssemblyException výjimku. Pokud správce prostředků může načíst příslušnou sadu prostředků, ale nemůže najít prostředek s názvem name, metoda vrátí null.

Aplikace pro Windows 8.x

Důležité

I když je ResourceManager třída podporována v aplikacích pro Windows 8.x, nedoporučujeme jeho použití. Tuto třídu používejte pouze v případě, že vyvíjíte projekty knihovny přenosných tříd, které lze používat s aplikacemi pro Windows 8.x. Pokud chcete načíst prostředky z aplikací pro Windows 8.x, použijte místo toho třídu Windows.ApplicationModel.Resources.ResourceLoader .

V aplikacích GetString(String) pro Windows 8.x vrátí metoda hodnotu name prostředku řetězce lokalizovanou pro aktuální nastavení jazykové verze uživatelského rozhraní volajícího. Seznam jazykových verzí je odvozený ze seznamu upřednostňovaných jazyků uživatelského rozhraní operačního systému. Pokud správce prostředků nemůže shodovat name, vrátí metoda null.

Příklad

Následující příklad používá metodu GetString k načtení prostředků specifických pro jazykovou verzi. Skládá se z prostředků zkompilovaných ze souborů .txt pro jazykové verze angličtiny (en), francouzštiny (Francie) (fr-FR) a ruštiny (Rusko) (ru-RU). Příklad změní aktuální jazykovou verzi a aktuální jazykovou verzi uživatelského rozhraní na angličtinu (USA), francouzštinu (Francii), ruštinu (Rusko) a švédštinu (Švédsko). Potom zavolá metodu GetString pro načtení lokalizovaného řetězce, který se zobrazí spolu s aktuálním dnem a měsícem. Všimněte si, že výstup zobrazí odpovídající lokalizovaný řetězec s výjimkou případů, kdy je aktuální jazyková verze uživatelského rozhraní švédština (Švédsko). Vzhledem k tomu, že prostředky švédského jazyka nejsou k dispozici, aplikace místo toho používá prostředky výchozí jazykové verze, což je angličtina. Příklad vyžaduje textové soubory prostředků uvedené v následující tabulce. Každý má jeden řetězcový prostředek s názvem DateStart.

Kultura Název souboru Název prostředku Hodnota prostředku
cs DateStrings.txt DateStart Dnes je
fr-FR DateStrings.fr-FR.txt DateStart Aujourd'hui, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

K kompilaci příkladu jazyka C# můžete použít následující dávkový soubor. V jazyce Visual Basic přejděte csc na vbca změňte příponu souboru zdrojového kódu z .cs na .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

Tady je zdrojový kód pro příklad (ShowDate.vb pro verzi Jazyka Visual Basic nebo ShowDate.cs pro verzi jazyka 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.

GetString(String, CultureInfo) Metoda

Desktopové aplikace

V desktopových aplikacích metoda culturenullGetString(String, CultureInfo) používá aktuální jazykovou verzi uživatelského rozhraní získanou CultureInfo.CurrentUICulture z vlastnosti.

Vrácený prostředek je lokalizovaný pro jazykovou verzi určenou parametrem culture . Pokud prostředek nebyl lokalizován culture, provede sondy resource manageru pro prostředek podle kroků popsaných v části Postup pro použití náhradního prostředku tématu Balení a nasazení prostředků . Pokud se nenajde žádná použitelná sada prostředků, správce prostředků se vrátí k prostředkům výchozí jazykové verze. Pokud správce prostředků nemůže načíst sadu prostředků výchozí jazykové verze, vyvolá metoda MissingManifestResourceException výjimku, nebo pokud se očekává, že sada prostředků se bude nacházet ve satelitním sestavení, MissingSatelliteAssemblyException výjimku. Pokud správce prostředků může načíst příslušnou sadu prostředků, ale nemůže najít prostředek s názvem name, metoda vrátí null.

Aplikace pro Windows 8.x

Důležité

I když je ResourceManager třída podporována v aplikacích pro Windows 8.x, nedoporučujeme jeho použití. Tuto třídu používejte pouze v případě, že vyvíjíte projekty knihovny přenosných tříd, které lze používat s aplikacemi pro Windows 8.x. Pokud chcete načíst prostředky z aplikací pro Windows 8.x, použijte místo toho třídu Windows.ApplicationModel.Resources.ResourceLoader .

V aplikacích GetString(String, CultureInfo) pro Windows 8.x vrátí metoda hodnotu name prostředku řetězce lokalizovanou pro jazykovou verzi určenou parametrem culture . Pokud prostředek není lokalizovaný pro jazykovou culture verzi, vyhledávání používá celý záložní seznam jazyka Windows 8 a zastaví se po vyhledání výchozí jazykové verze. Pokud správce prostředků nemůže shodovat name, vrátí metoda null.

Příklad

Následující příklad používá metodu GetString(String, CultureInfo) k načtení prostředků specifických pro jazykovou verzi. Výchozí jazyková verze příkladu je angličtina (en) a obsahuje satelitní sestavení pro francouzštinu (Francie) (fr-FR) a ruštinu (Rusko) (ru-RU). Příklad změní aktuální jazykovou verzi a aktuální jazykovou verzi uživatelského rozhraní na ruštinu (Rusko) před voláním GetString(String, CultureInfo). Potom volá metodu GetString a metodu DateTime.ToString(String, IFormatProvider) a předá CultureInfo objekty, které představují francouzské (Francie) a švédské (Švédsko) jazykové verze pro každou metodu. Ve výstupu se měsíc a den v měsíci i řetězec, který předchází, zobrazí ve francouzštině, protože GetString metoda dokáže načíst prostředek francouzského jazyka. Pokud se však použije švédská (Švédsko), měsíc a den v měsíci se zobrazí ve švédštině, i když řetězec, který je před nimi, je v angličtině. Důvodem je to, že správce prostředků nemůže najít lokalizované švédské jazykové prostředky, takže vrátí prostředek pro výchozí jazykovou verzi angličtiny.

Příklad vyžaduje textové soubory prostředků uvedené v následující tabulce. Každý má jeden řetězcový prostředek s názvem DateStart.

Kultura Název souboru Název prostředku Hodnota prostředku
cs DateStrings.txt DateStart Dnes je
fr-FR DateStrings.fr-FR.txt DateStart Aujourd'hui, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

K kompilaci příkladu jazyka Visual Basic můžete použít následující dávkový soubor. Chcete-li zkompilovat v jazyce C#, změňte vbc na csca změňte příponu souboru zdrojového kódu z .vb na .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

Tady je zdrojový kód pro příklad (ShowDate.vb pro verzi Jazyka Visual Basic nebo ShowDate.cs pro verzi jazyka 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.