Métodos System.Resources.ResourceManager.GetString

Observação

Este artigo fornece observações complementares à documentação de referência para esta API.

A propriedade IgnoreCase determina se a comparação de name com os nomes dos recursos é insensível a maiúsculas e minúsculas (o padrão) ou se diferencia entre maiúsculas e minúsculas.

Observação

Os métodos GetString podem lançar mais exceções do que as listadas. Uma razão pela qual isso pode ocorrer é se um método que esse método chama lança uma exceção. Por exemplo, uma exceção FileLoadException pode ser lançada se um erro foi feito implantando ou instalando um assembly satélite, ou uma exceção SerializationException pode ser lançada se um tipo definido pelo usuário lança uma exceção definida pelo usuário quando o tipo é desserializado.

GetString(String) método

Aplicações de ambiente de trabalho

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 procurará por um recurso seguindo as etapas descritas na seção "Processo de Substituição de Recursos" do artigo Empacotamento e Implementação de Recursos. Se nenhum conjunto utilizável de recursos localizados for encontrado, o gerenciador de recursos recorrerá aos recursos da cultura padrão. Se o gestor de recursos não puder carregar o conjunto de recursos da cultura padrão, o método lançará uma exceção MissingManifestResourceException ou, se se espera que o conjunto de recursos resida em um assembly satélite, uma exceção MissingSatelliteAssemblyException. Se o gerenciador de recursos puder carregar um conjunto de recursos apropriado, mas não puder encontrar um recurso chamado name, o método retornará null.

Aplicações do Windows 8.x

Importante

Embora a classe ResourceManager seja suportada em aplicativos do Windows 8.x, não recomendamos seu uso. Use essa classe somente quando você desenvolver projetos de biblioteca de classes portátil que podem ser usados com aplicativos do Windows 8.x. Para recuperar recursos de aplicações 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 de caracteres name, localizado para as configurações atuais de cultura da interface do usuário do chamador. A lista de culturas é derivada da lista de idiomas preferidos da interface do usuário do sistema operacional. Se o gerenciador de recursos não puder corresponder a name, o método retornará null.

Exemplo

O exemplo a seguir usa o método GetString para recuperar recursos específicos da cultura. Consiste em recursos compilados a partir de arquivos .txt para as culturas inglesa (en), francesa (França) (fr-FR) e russa (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 método GetString para recuperar a cadeia de caracteres localizada, que ele exibe 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 do idioma sueco não estão disponíveis, o aplicativo usa os recursos da cultura padrão, que é o inglês. O exemplo requer os arquivos de recursos baseados em texto listados na tabela a seguir. Cada um tem um único recurso de cadeia de caracteres chamado DateStart.

Cultura Nome do ficheiro Nome do recurso Valor do recurso
en-US DateStrings.txt DateStart Hoje é
fr-FR DateStrings.fr-FR.txt DateStart Hoje, é o
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

Você pode usar o seguinte arquivo em lotes para compilar o exemplo de C#. Para Visual Basic, altere csc para vbce 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

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

GetString(String, CultureInfo) método

Aplicações de ambiente de trabalho

Em aplicações de desktop, se culture for null, o método GetString(String, CultureInfo) usa a cultura atual da interface do utilizador obtida a partir da propriedade CultureInfo.CurrentUICulture.

O recurso retornado está localizado para a cultura especificada pelo parâmetro culture. Se o recurso não tiver sido adaptado para culture, o gerenciador de recursos irá procurar o recurso seguindo as etapas descritas na seção "Processo de recurso alternativo" do tópico de recursos de empacotamento e implantação. Se nenhum conjunto utilizável de recursos for encontrado, o gerenciador de recursos recorrerá aos recursos da cultura padrão. Se o gestor de recursos não puder carregar o conjunto de recursos da cultura padrão, o método lançará uma exceção MissingManifestResourceException ou, se se espera que o conjunto de recursos resida em um assembly satélite, uma exceção MissingSatelliteAssemblyException. Se o gerenciador de recursos puder carregar um conjunto de recursos apropriado, mas não puder encontrar um recurso chamado name, o método retornará null.

Aplicações do Windows 8.x

Importante

Embora a classe ResourceManager seja suportada em aplicativos do Windows 8.x, não recomendamos seu uso. Use essa classe somente quando você desenvolver projetos de biblioteca de classes portátil que podem ser usados com aplicativos do Windows 8.x. Para recuperar recursos de aplicações do Windows 8.x, use a classe Windows.ApplicationModel.Resources.ResourceLoader.

Em aplicativos do Windows 8.x, o método GetString(String, CultureInfo) retorna o valor do recurso de cadeia de caracteres name, localizado para a cultura especificada pelo parâmetro culture. Se o recurso não estiver adaptado para a cultura culture, a pesquisa utilizará toda a lista de idiomas de substituição do Windows 8 e interrompe-se após verificar a cultura predefinida. Se o gerenciador de recursos não puder corresponder a name, o método retornará null.

Exemplo

O exemplo a seguir usa o método GetString(String, CultureInfo) para recuperar recursos específicos da cultura. A cultura padrão do exemplo é o inglês (en), e inclui assemblies de satélite 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 russo (Rússia) antes de chamar GetString(String, CultureInfo). Em seguida, chama o método GetString e o método DateTime.ToString(String, IFormatProvider) 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, porque o método GetString é capaz de recuperar o recurso do 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 que os precede esteja em inglês. Isso ocorre porque o gerenciador de recursos não consegue encontrar recursos localizados no idioma sueco, portanto, ele retorna um recurso para a cultura padrão do inglês.

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

Cultura Nome do ficheiro Nome do recurso Valor do recurso
en-US DateStrings.txt DateStart Hoje é
fr-FR DateStrings.fr-FR.txt DateStart Hoje, é o
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

Você pode usar o seguinte arquivo em lotes para compilar o exemplo do Visual Basic. Para compilar em C#, altere vbc para csce 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

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