Compartilhar via


Métodos System.Resources.ResourceManager.GetString

Este artigo fornece comentários complementares à documentação de referência para esta API.

A propriedade IgnoreCase determina se a comparação de name com os nomes dos recursos diferencia (o padrão) ou não maiúsculas de minúsculas.

Observação

Os GetString métodos podem gerar mais exceções do que os listados. Um motivo pelo qual isso pode ocorrer é se um método chamado por esse método gerar uma exceção. Por exemplo, uma exceção FileLoadException poderá ser gerada se um erro tiver sido feito implantando-se ou instalando-se um assembly satélite, ou uma exceção SerializationException poderá ser gerada se um tipo definido pelo usuário gerar uma exceção definida pelo usuário quando o tipo for desserializado.

método GetString(String)

Aplicativos de desktop

Em aplicativos da área de trabalho, o recurso retornado é localizado para a cultura da interface do usuário do thread atual, conforme definido pela propriedade CultureInfo.CurrentUICulture. Se o recurso não tiver sido localizado para essa cultura, o gerenciador de recursos investigará um recurso seguindo as etapas descritas na seção "Processo de Fallback de Recursos" do artigo Empacotamento e Implantação de Recursos. Se nenhum conjunto utilizável de recursos localizados for encontrado, o gerenciador de recursos retornará aos recursos da cultura padrão. Se o gerenciador de recursos não puder carregar o conjunto de recursos da cultura padrão, o método gerará uma exceção MissingManifestResourceException ou, caso o conjunto de recursos tenha que residir em um assembly satélite, uma exceção MissingSatelliteAssemblyException. Se o gerenciador de recursos puder carregar um conjunto de recursos apropriado, mas não conseguir encontrar um recurso nomeado name, o método retornará null.

Aplicativos do Windows 8.x

Importante

Embora a ResourceManager classe tenha suporte em aplicativos do Windows 8.x, não recomendamos seu uso. Use essa classe somente quando você desenvolver projetos da Biblioteca de Classes Portátil que podem ser usados com aplicativos do Windows 8.x. Para recuperar recursos de aplicativos do Windows 8.x, use a classe Windows.ApplicationModel.Resources.ResourceLoader.

Em aplicativos do Windows 8.x, o método GetString(String) retorna o valor do recurso de cadeia name, localizado para as configurações de cultura de IU atuais do chamador. A lista de culturas é derivada da lista de idiomas preferenciais da interface do usuário do sistema operacional. Se o gerenciador de recursos não puder corresponder name, o método retornará null.

Exemplo

O exemplo a seguir usa o GetString método para recuperar recursos específicos da cultura. Consiste em recursos compilados de arquivos .txt para as culturas em inglês (en), francês (França) (fr-FR) e russo (Rússia) (ru-RU). O exemplo altera a cultura atual e a cultura atual da interface do usuário para inglês (Estados Unidos), francês (França), russo (Rússia) e sueco (Suécia). Em seguida, ele chama o GetString método para recuperar a cadeia de caracteres localizada, exibida junto com o dia e o mês atuais. Observe que a saída exibe a cadeia de caracteres localizada apropriada, exceto quando a cultura atual da interface do usuário é sueca (Suécia). Como os recursos de idioma sueco não estão disponíveis, o aplicativo usa os recursos da cultura padrão, que é inglês. O exemplo requer os arquivos de recurso baseados em texto listados na tabela a seguir. Cada um tem um único recurso de cadeia de caracteres chamado DateStart.

Cultura Nome do arquivo Nome do recurso Valor do recurso
pt-BR DateStrings.txt DateStart Hoje é
fr-FR DateStrings.fr-FR.txt DateStart Aujourd'hui, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

Você pode usar o arquivo em lote a seguir para compilar o exemplo de C#. Para o Visual Basic, altere csc para vbc, e altere a extensão do arquivo de código-fonte de .cs para .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

Este é o código-fonte do exemplo (ShowDate.vb para a versão do Visual Basic ou ShowDate.cs para a versão do 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.

método GetString(String, CultureInfo)

Aplicativos de desktop

Em aplicativos de área de trabalho, se culture for null, o método GetString(String, CultureInfo) usará a cultura de interface do usuário atual obtida da propriedade CultureInfo.CurrentUICulture.

O recurso retornado é localizado para a cultura especificada pelo culture parâmetro. Se o recurso não tiver sido localizado para culture, o gerenciador de recursos busca um recurso seguindo as etapas descritas na seção "Processo de Fallback de Recursos" do tópico Empacotamento e Implantação de Recursos. Se nenhum conjunto utilizável de recursos for encontrado, o gerenciador de recursos retornará aos recursos da cultura padrão. Se o gerenciador de recursos não puder carregar o conjunto de recursos da cultura padrão, o método gerará uma exceção MissingManifestResourceException ou, caso o conjunto de recursos tenha que residir em um assembly satélite, uma exceção MissingSatelliteAssemblyException. Se o gerenciador de recursos puder carregar um conjunto de recursos apropriado, mas não conseguir encontrar um recurso nomeado name, o método retornará null.

Aplicativos do Windows 8.x

Importante

Embora a ResourceManager classe tenha suporte em aplicativos do Windows 8.x, não recomendamos seu uso. Use essa classe somente quando você desenvolver projetos da Biblioteca de Classes Portátil que podem ser usados com aplicativos do Windows 8.x. Para recuperar recursos de aplicativos do Windows 8.x, use a classe Windows.ApplicationModel.Resources.ResourceLoader.

Em aplicativos do Windows 8.x, o GetString(String, CultureInfo) método retorna o valor do recurso de cadeia de name caracteres, localizado para a cultura especificada pelo culture parâmetro. Se o recurso não estiver localizado para a cultura culture, a pesquisa usará a lista inteira de idiomas padrão do Windows 8 e será interrompida após verificar a cultura padrão. Se o gerenciador de recursos não puder corresponder name, o método retornará null.

Exemplo

O exemplo a seguir usa o GetString(String, CultureInfo) método para recuperar recursos específicos da cultura. A cultura padrão do exemplo é inglês (en) e inclui assemblies satélites para as culturas francesa (França) (fr-FR) e russa (Rússia) (ru-RU). O exemplo altera a cultura atual e a cultura da interface do usuário para o russo (Rússia) antes de chamar GetString(String, CultureInfo). Em seguida, ele chama o GetString método e o DateTime.ToString(String, IFormatProvider) método e passa CultureInfo objetos que representam as culturas francesa (França) e sueca (Suécia) para cada método. Na saída, o mês e o dia do mês, bem como a cadeia de caracteres que os precede aparecem em francês, pois o GetString método é capaz de recuperar o recurso de idioma francês. No entanto, quando a cultura sueca (Suécia) é usada, o mês e o dia do mês aparecem em sueco, embora a cadeia de caracteres que os precede esteja em inglês. Isso ocorre porque o gerenciador de recursos não consegue encontrar recursos de idioma sueco localizados, portanto, ele retorna um recurso para a cultura em inglês padrão.

O exemplo requer os arquivos de recurso baseados em texto listados na tabela a seguir. Cada um tem um único recurso de cadeia de caracteres chamado DateStart.

Cultura Nome do arquivo Nome do recurso Valor do recurso
pt-BR DateStrings.txt DateStart Hoje é
fr-FR DateStrings.fr-FR.txt DateStart Aujourd'hui, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

Você pode usar o arquivo em lote a seguir para compilar o exemplo do Visual Basic. Para compilar em C#, altere vbc para csc, e altere a extensão do arquivo de código-fonte de .vb para .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

Este é o código-fonte do exemplo (ShowDate.vb para a versão do Visual Basic ou ShowDate.cs para a versão do 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.