Поделиться через


Методы System.Resources.ResourceManager.GetString

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

Свойство IgnoreCase определяет, является ли сравнение name имен ресурсов не учитывает регистр (по умолчанию) или учитывает регистр.

Примечание.

Методы GetString могут вызывать больше исключений, чем перечислены. Одна из причин, по которой может произойти, заключается в том, что метод, вызывающий этот метод, вызывает исключение. Например, FileLoadException исключение может возникать, если произошла ошибка при развертывании или установке вспомогательной сборки, или SerializationException может возникать исключение, если определяемый пользователем тип создает определяемое пользователем исключение при десериализации типа.

GetString(String)Метод

Классические приложения

В классических приложениях возвращаемый ресурс локализован для языка и региональных параметров пользовательского интерфейса текущего потока, как определено свойством CultureInfo.CurrentUICulture . Если ресурс не локализован для этого языка и региональных параметров, диспетчер ресурсов проверяет ресурс, выполнив действия, описанные в разделе "Резервный процесс ресурсов" статьи "Упаковка и развертывание ресурсов ". Если не найден доступный набор локализованных ресурсов, диспетчер ресурсов возвращает ресурсы языка и региональных параметров по умолчанию. Если диспетчер ресурсов не может загрузить набор ресурсов языка и региональных параметров по умолчанию, метод создает MissingManifestResourceException исключение или, если набор ресурсов, как ожидается, находится в вспомогательной сборке, MissingSatelliteAssemblyException исключение. Если диспетчер ресурсов может загрузить соответствующий набор ресурсов, но не может найти именованный nameресурс, метод возвращается null.

Приложения Windows 8.x

Важно!

ResourceManager Хотя класс поддерживается в приложениях Windows 8.x, мы не рекомендуем использовать его. Используйте этот класс только при разработке проектов переносимой библиотеки классов, которые можно использовать с приложениями Windows 8.x. Чтобы получить ресурсы из приложений Windows 8.x, используйте вместо него класс Windows.ApplicationModel.Resources.ResourceLoader .

В приложениях GetString(String) Windows 8.x метод возвращает значение строкового name ресурса, локализованного для текущих параметров языка и региональных параметров пользовательского интерфейса вызывающего пользователя. Список языков и региональных параметров является производным от предпочтительного списка языков пользовательского интерфейса операционной системы. Если диспетчер ресурсов не может соответствовать name, метод возвращается null.

Пример

В следующем примере метод используется для получения ресурсов, относящихся к языку GetString и региональных параметров. Он состоит из ресурсов, скомпилированных из .txt файлов для английского языка (en), французского (Франция) (fr-FR) и российских (Россия) культур (ru-RU). В примере изменяется текущий язык и региональные параметры пользовательского интерфейса на английский (США), французский (Франция), русский (Россия) и шведский (Швеция). Затем он вызывает GetString метод для получения локализованной строки, которая отображается вместе с текущим днем и месяцем. Обратите внимание, что выходные данные отображают соответствующую локализованную строку, за исключением случаев, когда текущий язык и региональные параметры пользовательского интерфейса — шведский (Швеция). Так как шведские языковые ресурсы недоступны, приложение вместо этого использует ресурсы языка и региональных параметров по умолчанию, которые являются английскими. В примере требуются текстовые файлы ресурсов, перечисленные в следующей таблице. Каждый имеет один строковый ресурс с именем DateStart.

Культура Имя файла Имя ресурса Значение ресурса
en-US DateStrings.txt DateStart Сегодня
fr-FR DateStrings.fr-FR.txt DateStart Aujourd'hui, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

Для компиляции примера C# можно использовать следующий пакетный файл. Для Visual Basic замените csc на vbc, а также расширение файла исходного кода .cs на .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

Ниже приведен исходный код для примера (ShowDate.vb для версии Visual Basic или ShowDate.cs для версии 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)Метод

Классические приложения

В классических приложениях, если culture это nullтак, метод использует текущий язык и региональные параметры пользовательского CultureInfo.CurrentUICulture интерфейса, GetString(String, CultureInfo) полученные из свойства.

Возвращаемый ресурс локализован для языка и региональных параметров, указанных параметром culture . Если ресурс не локализован culture, диспетчер ресурсов пробует ресурс для ресурса, выполнив действия, описанные в разделе "Резервный процесс ресурсов" раздела "Упаковка и развертывание ресурсов ". Если не найден доступный набор ресурсов, диспетчер ресурсов возвращает ресурсы языка и региональных параметров по умолчанию. Если диспетчер ресурсов не может загрузить набор ресурсов языка и региональных параметров по умолчанию, метод создает MissingManifestResourceException исключение или, если набор ресурсов, как ожидается, находится в вспомогательной сборке, MissingSatelliteAssemblyException исключение. Если диспетчер ресурсов может загрузить соответствующий набор ресурсов, но не может найти именованный nameресурс, метод возвращается null.

Приложения Windows 8.x

Важно!

ResourceManager Хотя класс поддерживается в приложениях Windows 8.x, мы не рекомендуем использовать его. Используйте этот класс только при разработке проектов переносимой библиотеки классов, которые можно использовать с приложениями Windows 8.x. Чтобы получить ресурсы из приложений Windows 8.x, используйте вместо него класс Windows.ApplicationModel.Resources.ResourceLoader .

В приложениях GetString(String, CultureInfo) Windows 8.x метод возвращает значение строкового name ресурса, локализованного для языка и региональных параметров, указанного параметром culture . Если ресурс не локализован для culture языка и региональных параметров, подстановка использует весь резервный список языков Windows 8 и останавливается после просмотра языка и региональных параметров по умолчанию. Если диспетчер ресурсов не может соответствовать name, метод возвращается null.

Пример

В следующем примере метод используется для получения ресурсов, относящихся к языку GetString(String, CultureInfo) и региональных параметров. В примере по умолчанию используется английский язык (en), и он включает вспомогательные сборки для французских (Франция) (fr-FR) и российских (Россия) (ru-RU) культур. Пример изменяет текущий язык и региональные параметры и текущие региональные параметры пользовательского интерфейса на русский (Россия) перед вызовом GetString(String, CultureInfo). Затем он вызывает GetString метод и метод и DateTime.ToString(String, IFormatProvider) передает CultureInfo объекты, представляющие французские (Франция) и шведские (Швеция) культуры для каждого метода. В выходных данных месяц и день месяца, а также строка, предшествующая им, отображается на французском языке, так как GetString метод может получить ресурс французского языка. Однако, когда используется шведский язык (Швеция), месяц и день месяца появляются на шведском языке, хотя строка, предшествующая им, находится на английском языке. Это связано с тем, что диспетчер ресурсов не может найти локализованные языковые ресурсы шведского языка, поэтому он возвращает ресурс для языка и региональных параметров английского языка по умолчанию.

В примере требуются текстовые файлы ресурсов, перечисленные в следующей таблице. Каждый имеет один строковый ресурс с именем DateStart.

Культура Имя файла Имя ресурса Значение ресурса
en-US DateStrings.txt DateStart Сегодня
fr-FR DateStrings.fr-FR.txt DateStart Aujourd'hui, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

Для компиляции примера Visual Basic можно использовать следующий пакетный файл. Чтобы выполнить компиляцию в C#, перейдите vbccscна и измените расширение файла исходного кода на .cs.vb .

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

Ниже приведен исходный код для примера (ShowDate.vb для версии Visual Basic или ShowDate.cs для версии 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.