Udostępnij za pośrednictwem


Metody System.Resources.ResourceManager.GetString

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

Właściwość IgnoreCase określa, czy porównanie name z nazwami zasobów jest bez uwzględniania wielkości liter (wartość domyślna) lub wielkość liter.

Uwaga

Metody GetString mogą zgłaszać więcej wyjątków niż są wymienione. Jedną z przyczyn może się to zdarzyć, jeśli metoda wywoływana przez tę metodę zgłasza wyjątek. Na przykład wyjątek może zostać zgłoszony, FileLoadException jeśli podczas wdrażania lub instalowania zestawu satelitarnego wystąpił błąd lub SerializationException wyjątek, jeśli typ zdefiniowany przez użytkownika zgłasza wyjątek zdefiniowany przez użytkownika, gdy typ jest deserializowany.

GetString(String) Metoda

Aplikacje klasyczne

W aplikacjach klasycznych zwracany zasób jest zlokalizowany dla kultury interfejsu użytkownika bieżącego wątku zgodnie z definicją CultureInfo.CurrentUICulture właściwości . Jeśli zasób nie został zlokalizowany dla tej kultury, menedżer zasobów sonduje zasób, wykonując kroki opisane w sekcji "Proces rezerwowy zasobów" artykułu Pakowanie i wdrażanie zasobów . Jeśli nie można odnaleźć zestawu zlokalizowanych zasobów, menedżer zasobów wróci do zasobów kultury domyślnej. Jeśli menedżer zasobów nie może załadować domyślnego zestawu zasobów kultury, metoda zgłasza MissingManifestResourceException wyjątek lub, jeśli zestaw zasobów ma znajdować się w zestawie satelitarnym, wyjątek MissingSatelliteAssemblyException . Jeśli menedżer zasobów może załadować odpowiedni zestaw zasobów, ale nie może znaleźć zasobu o nazwie name, metoda zwraca wartość null.

Aplikacje systemu Windows 8.x

Ważne

Mimo że klasa jest obsługiwana ResourceManager w aplikacjach systemu Windows 8.x, nie zalecamy jej użycia. Tej klasy należy używać tylko podczas tworzenia projektów biblioteki klas przenośnych, które mogą być używane z aplikacjami systemu Windows 8.x. Aby pobrać zasoby z aplikacji systemu Windows 8.x, zamiast tego użyj klasy Windows.ApplicationModel.Resources.ResourceLoader .

W aplikacjach GetString(String) systemu Windows 8.x metoda zwraca wartość name zasobu ciągu zlokalizowanego dla bieżących ustawień kultury interfejsu użytkownika obiektu wywołującego. Lista kultur pochodzi z preferowanej listy języków interfejsu użytkownika systemu operacyjnego. Jeśli menedżer zasobów nie może dopasować nameelementu , metoda zwraca nullwartość .

Przykład

W poniższym przykładzie użyto GetString metody w celu pobrania zasobów specyficznych dla kultury. Składa się z zasobów skompilowanych z plików .txt dla kultur angielskich (en), francuski (Francja) (fr-FR) i rosyjski (Rosja) (ru-RU). Przykład zmienia bieżącą kulturę i bieżącą kulturę interfejsu użytkownika na angielski (Stany Zjednoczone), francuski (Francja), rosyjski (Rosja) i szwedzki (Szwecja). Następnie wywołuje metodę GetString , aby pobrać zlokalizowany ciąg, który jest wyświetlany wraz z bieżącym dniem i miesiącem. Zwróć uwagę, że dane wyjściowe wyświetlają odpowiedni zlokalizowany ciąg z wyjątkiem sytuacji, gdy bieżąca kultura interfejsu użytkownika to Szwedzki (Szwecja). Ponieważ szwedzkie zasoby językowe są niedostępne, aplikacja używa zasobów kultury domyślnej, czyli języka angielskiego. Przykład wymaga plików zasobów opartych na tekście wymienionych w poniższej tabeli. Każdy z nich ma jeden zasób ciągu o nazwie DateStart.

Kultura Nazwa pliku Nazwa zasobu Wartość zasobu
en-US DateStrings.txt DateStart Dzisiaj jest
fr-FR DateStrings.fr-FR.txt DateStart Aujourd'hui, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

Aby skompilować przykład języka C#, możesz użyć następującego pliku wsadowego. W przypadku języka Visual Basic zmień wartość csc na vbc, a następnie zmień rozszerzenie pliku kodu źródłowego 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

Oto kod źródłowy dla przykładu (ShowDate.vb dla wersji Visual Basic lub ShowDate.cs dla wersji języka 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

Aplikacje klasyczne

W aplikacjach klasycznych, jeśli culture to null, GetString(String, CultureInfo) metoda używa bieżącej kultury interfejsu użytkownika uzyskanej CultureInfo.CurrentUICulture z właściwości .

Zwrócony zasób jest zlokalizowany dla kultury określonej przez culture parametr . Jeśli zasób nie został zlokalizowany dla cultureprogramu , menedżer zasobów sonduje zasób, wykonując kroki opisane w sekcji "Proces rezerwowy zasobów" w temacie Pakowanie i wdrażanie zasobów . Jeśli nie można odnaleźć zestawu zasobów, menedżer zasobów wróci do zasobów kultury domyślnej. Jeśli menedżer zasobów nie może załadować domyślnego zestawu zasobów kultury, metoda zgłasza MissingManifestResourceException wyjątek lub, jeśli zestaw zasobów ma znajdować się w zestawie satelitarnym, wyjątek MissingSatelliteAssemblyException . Jeśli menedżer zasobów może załadować odpowiedni zestaw zasobów, ale nie może znaleźć zasobu o nazwie name, metoda zwraca wartość null.

Aplikacje systemu Windows 8.x

Ważne

Mimo że klasa jest obsługiwana ResourceManager w aplikacjach systemu Windows 8.x, nie zalecamy jej użycia. Tej klasy należy używać tylko podczas tworzenia projektów biblioteki klas przenośnych, które mogą być używane z aplikacjami systemu Windows 8.x. Aby pobrać zasoby z aplikacji systemu Windows 8.x, zamiast tego użyj klasy Windows.ApplicationModel.Resources.ResourceLoader .

W aplikacjach GetString(String, CultureInfo) systemu Windows 8.x metoda zwraca wartość name zasobu ciągu zlokalizowanego dla kultury określonej przez culture parametr . Jeśli zasób nie jest zlokalizowany dla culture kultury, wyszukiwanie używa całej listy rezerwowej języka systemu Windows 8 i zatrzymuje się po zapoznaniu się z kulturą domyślną. Jeśli menedżer zasobów nie może dopasować nameelementu , metoda zwraca nullwartość .

Przykład

W poniższym przykładzie użyto GetString(String, CultureInfo) metody w celu pobrania zasobów specyficznych dla kultury. Domyślną kulturą przykładu jest angielski (en) i obejmuje zestawy satelitarne dla kultur francuskich (fr-FR) i rosyjskich (ru-RU). Przykład zmienia bieżącą kulturę i bieżącą kulturę interfejsu użytkownika na rosyjską (Rosję) przed wywołaniem metody GetString(String, CultureInfo). Następnie wywołuje metodę GetString i metodę i DateTime.ToString(String, IFormatProvider) przekazuje CultureInfo obiekty reprezentujące kultury francuskie (Francja) i Szwedzki (Szwecja) do każdej metody. W danych wyjściowych miesiąc i dzień miesiąca, a także ciąg poprzedzający je pojawiają się w języku francuskim, ponieważ GetString metoda jest w stanie pobrać zasób języka francuskiego. Jednak w przypadku użycia kultury szwedzkiej (Szwecji) miesiąc i dzień miesiąca pojawiają się w języku szwedzkim, chociaż ciąg poprzedzający je jest w języku angielskim. Dzieje się tak, ponieważ menedżer zasobów nie może odnaleźć zlokalizowanych zasobów języka szwedzkiego, dlatego zwraca zasób domyślnej kultury angielskiej.

Przykład wymaga plików zasobów opartych na tekście wymienionych w poniższej tabeli. Każdy z nich ma jeden zasób ciągu o nazwie DateStart.

Kultura Nazwa pliku Nazwa zasobu Wartość zasobu
en-US DateStrings.txt DateStart Dzisiaj jest
fr-FR DateStrings.fr-FR.txt DateStart Aujourd'hui, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

Do skompilowania przykładu języka Visual Basic można użyć następującego pliku wsadowego. Aby skompilować w języku C#, zmień wartość vbccscna , a następnie zmień rozszerzenie pliku kodu źródłowego 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

Oto kod źródłowy dla przykładu (ShowDate.vb dla wersji Visual Basic lub ShowDate.cs dla wersji języka 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.