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 niewrażliwe na wielkość liter (wartość domyślna) lub też jako wrażliwe na wielkość liter.
Uwaga
Metody GetString mogą zgłaszać więcej wyjątków niż są wymienione. Przyczyną, dla której może się to zdarzyć, jest sytuacja, gdy metoda wywoływana przez tę metodę zgłasza wyjątek. Na przykład wyjątek FileLoadException może zostać zgłoszony, jeśli podczas wdrażania lub instalowania zestawu satelitarnego wystąpił błąd, lub SerializationException jeśli typ zdefiniowany przez użytkownika rzuca własny wyjątek podczas deserializacji.
Metoda GetString(String)
Aplikacje na komputery stacjonarne
W aplikacjach desktopowych zwracany zasób jest zlokalizowany dla kultury interfejsu użytkownika bieżącego wątku, zgodnie z definicją właściwości CultureInfo.CurrentUICulture. Jeśli zasób nie został zlokalizowany dla tej kultury, menedżer zasobów poszukuje zasobu, wykonując kroki opisane w sekcji "Proces zastępczy 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ć zestawu zasobów domyślnej kultury, metoda zgłasza MissingManifestResourceException wyjątek lub, jeśli zestaw zasobów powinien 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ć name
, metoda zwraca null
.
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 kultury angielskiej (en), francuskiej (Francja) (fr-FR) i rosyjskiej (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 wynik wyświetla odpowiedni zlokalizowany ciąg z wyjątkiem sytuacji, gdy bieżąca kultura UI to szwedzka (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 |
Dzisiaj jest |
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ń csc
na vbc
i 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: {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.
Metoda GetString(String, CultureInfo)
Aplikacje na komputery stacjonarne
W aplikacjach desktopowych, jeśli culture
to null
, metoda GetString(String, CultureInfo) używa bieżącej kultury interfejsu użytkownika uzyskanej z właściwości CultureInfo.CurrentUICulture.
Zwrócony zasób jest zlokalizowany dla kultury określonej przez culture
parametr . Jeśli zasób nie został zlokalizowany dla culture
, menedżer zasobów wyszukuje zasób, wykonując kroki opisanych w sekcji "Proces awaryjny zasobów" w temacie Pakowanie i wdrażanie zasobów. Jeśli nie można odnaleźć zestawu zasobów, menedżer zasobów korzysta z 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 systemu Windows 8.x metoda GetString(String, CultureInfo) zwraca wartość zasobu ciągu name
, zlokalizowanego dla kultury określonej przez parametr culture
. Jeśli zasób nie jest przygotowany lokalizacyjnie dla culture
kultury, wyszukiwanie używa całej listy zapasowej języków systemu Windows 8 i zatrzymuje się po sprawdzeniu kultury domyślnej. Jeśli menedżer zasobów nie może dopasować name
, metoda zwraca null
.
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 kultury francuskiej (Francja) (fr-FR) oraz rosyjskiej (Rosja) (ru-RU). Przykład zmienia bieżącą kulturę i bieżącą kulturę interfejsu użytkownika na rosyjską (Rosja) przed wywołaniem metody GetString(String, CultureInfo). Następnie wywołuje metodę GetString oraz metodę DateTime.ToString(String, IFormatProvider) i przekazuje obiekty CultureInfo, które reprezentują kultury francuską (Francja) i szwedzką (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 |
Dziś jest |
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ń vbc
na csc
, 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($"{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.