Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece comentários complementares à documentação de referência para esta API.
ResourceManager(Type) construtor
Esta seção refere-se à sobrecarga do construtor ResourceManager(Type).
Aplicativos de desktop
Em aplicativos da área de trabalho, o gerenciador de recursos usa o resourceSource parâmetro para carregar um arquivo de recurso específico da seguinte maneira:
- Se o NeutralResourcesLanguageAttribute atributo não for usado para indicar que os recursos da cultura padrão residem em um assembly satélite, o gerenciador de recursos pressupõe que o arquivo de recurso para a cultura padrão seja encontrado no mesmo assembly que o tipo especificado pelo
resourceSourceparâmetro. - O gerenciador de recursos pressupõe que o arquivo de recurso padrão tenha o mesmo nome base que o tipo especificado pelo
resourceSourceparâmetro. - O gerenciador de recursos usa a classe padrão ResourceSet para manipular o arquivo de recurso.
Por exemplo, dado um tipo chamado MyCompany.MyProduct.MyType, o gerenciador de recursos procura um arquivo .resources chamado MyCompany.MyProduct.MyType.resources no assembly que define MyType.
No Visual Studio, o Designer de Recursos gera automaticamente um código que define uma internal classe (em C#) ou Friend (no Visual Basic) cujo nome é o mesmo que o nome base do arquivo .resources para a cultura padrão. Isso possibilita criar uma instância de um ResourceManager objeto e acoplá-lo a um determinado conjunto de recursos obtendo um objeto de tipo cujo nome corresponde ao nome do recurso, pois enquanto a classe estiver visível para o compilador, os recursos também devem ser. Por exemplo, se um arquivo .resources se chamar Resource1, a instrução a seguir instancia um objeto ResourceManager para gerenciar o arquivo .resources chamado Resource1.
ResourceManager rm = new ResourceManager(typeof(Resource1));
Se você não estiver usando o Visual Studio, poderá criar uma classe sem membros cujo namespace e nome sejam os mesmos do arquivo .resources padrão. O exemplo fornece uma ilustração.
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, ResourceManager usa o resourceSource parâmetro para inferir o assembly, o nome base e o namespace em que os itens de recurso podem estar localizados no arquivo PRI (índice de recursos de pacote) do aplicativo. Por exemplo, dado um tipo chamado MyCompany.MyProduct.MyType que está definido em MyAssembly, o gerenciador de recursos procura um identificador de conjunto de recursos nomeado MyAssembly e procura um escopo MyCompany.MyProduct.MyType dentro desse conjunto de recursos. O gerenciador de recursos procura itens de recurso no contexto padrão (cultura atual, configuração atual de alto contraste e assim por diante) dentro desse escopo.
Exemplo
O exemplo a seguir usa o ResourceManager(Type) construtor para instanciar um ResourceManager objeto. 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(String) método para recuperar a cadeia de caracteres localizada, que exibe uma saudação que depende da hora do dia.
O exemplo requer três arquivos de recurso baseados em texto, conforme listado na tabela a seguir. Cada arquivo inclui recursos de cadeia de caracteres nomeados Morning, Afternoone Evening.
| Cultura | Nome do arquivo | Nome do recurso | Valor do recurso |
|---|---|---|---|
| pt-BR | GreetingResources.txt | Morning |
Bom dia |
| pt-BR | GreetingResources.txt | Afternoon |
Boa tarde |
| pt-BR | GreetingResources.txt | Evening |
Boa noite |
| fr-FR | GreetingResources.fr-FR.txt | Morning |
Bonjour |
| fr-FR | GreetingResources.fr-FR.txt | Afternoon |
Bonjour |
| fr-FR | GreetingResources.fr-FR.txt | Evening |
Bonsoir |
| ru-RU | GreetingResources.ru-RU.txt | Morning |
Доброе утро |
| ru-RU | GreetingResources.ru-RU.txt | Afternoon |
Добрый день |
| ru-RU | GreetingResources.ru-RU.txt | Evening |
Добрый вечер |
Você pode usar o arquivo em lote a seguir para compilar o exemplo do Visual Basic e criar um executável chamado Greet.exe. Para compilar com C#, altere o nome do compilador de vbc para csc e a extensão de arquivo de .vb para .cs.
resgen GreetingResources.txt
vbc Greet.vb /resource: GreetingResources.resources
md fr-FR
resgen GreetingResources.fr-FR.txt
al /out:fr-FR\Greet.resources.dll /culture:fr-FR /embed: GreetingResources.fr-FR.resources
md ru-RU
resgen GreetingResources.ru-RU.txt
al /out:ru-RU\Greet.resources.dll /culture:ru-RU /embed: GreetingResources.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 C# do código).
using System;
using System.Resources;
using System.Globalization;
using System.Threading;
[assembly: NeutralResourcesLanguage("en")]
public class Example2
{
public static void Main()
{
string[] cultureNames = [ "en-US", "fr-FR", "ru-RU", "sv-SE" ];
DateTime noon = new DateTime(DateTime.Now.Year, DateTime.Now.Month,
DateTime.Now.Day, 12, 0, 0);
DateTime evening = new DateTime(DateTime.Now.Year, DateTime.Now.Month,
DateTime.Now.Day, 18, 0, 0);
ResourceManager rm = new ResourceManager(typeof(GreetingResources));
foreach (var cultureName in cultureNames)
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName);
Console.WriteLine($"The current UI culture is {CultureInfo.CurrentUICulture.Name}");
if (DateTime.Now < noon)
Console.WriteLine($"{rm.GetString("Morning")}!");
else if (DateTime.Now < evening)
Console.WriteLine($"{rm.GetString("Afternoon")}!");
else
Console.WriteLine($"{rm.GetString("Evening")}!");
Console.WriteLine();
}
}
internal class GreetingResources
{
}
}
// The example displays output like the following:
// The current UI culture is en-US
// Good afternoon!
//
// The current UI culture is fr-FR
// Bonjour!
//
// The current UI culture is ru-RU
// Добрый день!
//
// The current UI culture is sv-SE
// Good afternoon!
Imports System.Resources
Imports System.Globalization
Imports System.Threading
<Assembly:NeutralResourcesLanguage("en")>
Module Example
Public Sub Main()
Dim cultureNames() As String = {"en-US", "fr-FR", "ru-RU", "sv-SE" }
Dim noon As New Date(Date.Now.Year, Date.Now.Month,
Date.Now.Day, 12,0,0)
Dim evening As New Date(Date.Now.Year, Date.Now.Month,
Date.Now.Day, 18, 0, 0)
Dim rm As New ResourceManager(GetType(GreetingResources))
For Each cultureName In cultureNames
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName)
Console.WriteLine("The current UI culture is {0}",
CultureInfo.CurrentUICulture.Name)
If Date.Now < noon Then
Console.WriteLine("{0}!", rm.GetString("Morning"))
ElseIf Date.Now < evening Then
Console.WriteLine("{0}!", rm.GetString("Afternoon"))
Else
Console.WriteLine("{0}!", rm.GetString("Evening"))
End If
Console.WriteLine()
Next
End Sub
End Module
Friend Class GreetingResources
End Class
' The example displays output like the following:
' The current UI culture is en-US
' Good afternoon!
'
' The current UI culture is fr-FR
' Bonjour!
'
' The current UI culture is ru-RU
' Добрый день!
'
' The current UI culture is sv-SE
' Good afternoon!
Além de definir uma classe de aplicativo chamada Example, o código-fonte define uma classe interna cujo nome, GreetingResourcesé o mesmo que o nome base dos arquivos de recurso. Isso possibilita criar com êxito uma instância do objeto ResourceManager ao chamar o construtor ResourceManager(Type).
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), nesse caso, ela usa recursos de idioma inglês. Como os recursos de idioma sueco não estão disponíveis, o aplicativo usa os recursos da cultura padrão, conforme definido pelo NeutralResourcesLanguageAttribute atributo.
ResourceManager(String, Assembly) construtor
Esta seção refere-se à sobrecarga do construtor ResourceManager(String, Assembly).
Aplicativos de desktop
Em aplicativos da área de trabalho, os arquivos de recurso específicos de cada cultura devem estar contidos em assemblies satélites, e o arquivo de recurso da cultura padrão deve estar contido no assembly principal. Supõe-se que um assembly satélite contenha recursos para uma única cultura especificada no manifesto do assembly e será carregado conforme necessário.
Observação
Para recuperar recursos de arquivos .resources diretamente, em vez de recuperá-los de assemblies, você deve chamar o método CreateFileBasedResourceManager para instanciar um objeto ResourceManager.
Se o arquivo de recurso identificado por baseName não puder ser encontrado em assembly, o método criará uma instância de um objeto de ResourceManager, mas a tentativa de recuperar um recurso específico gerará uma exceção, normalmente uma MissingManifestResourceException. Para obter informações sobre o diagnóstico da causa da exceção, consulte a seção "Manipular a exceção MissingManifestResourceException" no tópico da classe ResourceManager.
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 gerenciador de recursos usa o nome simples do assembly parâmetro para pesquisar um conjunto de recursos correspondente no arquivo PRI (índice de recursos de pacote) do aplicativo. O baseName parâmetro é usado para pesquisar um item de recurso dentro do conjunto de recursos. Por exemplo, o nome raiz de PortableLibrary1.Resource1.de-DE.resources é PortableLibrary1.Resource1.
Exemplo
O exemplo a seguir usa um aplicativo simples não localizado "Olá, Mundo" para ilustrar o construtor ResourceManager(String, Assembly). O conteúdo de um arquivo de texto chamado ExampleResources.txt é Greeting=Hello. Quando o aplicativo é compilado, o recurso é incorporado ao assembly principal do aplicativo.
O arquivo de texto pode ser convertido em um arquivo de recurso binário usando o Gerador de Arquivos de Recurso (ResGen.exe) no prompt de comando da seguinte maneira:
resgen ExampleResources.txt
O exemplo a seguir fornece o código executável que cria uma instância de um ResourceManager objeto, solicita que o usuário insira um nome e exibe uma saudação.
using System;
using System.Reflection;
using System.Resources;
public class Example1
{
public static void Main()
{
// Retrieve the resource.
ResourceManager rm = new ResourceManager("ExampleResources",
typeof(Example).Assembly);
string greeting = rm.GetString("Greeting");
Console.Write("Enter your name: ");
string name = Console.ReadLine();
Console.WriteLine($"{greeting} {name}!");
}
}
// The example produces output similar to the following:
// Enter your name: John
// Hello John!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Module Example1
Public Sub Main()
' Retrieve the resource.
Dim rm As New ResourceManager("ExampleResources",
GetType(Example).Assembly)
Dim greeting As String = rm.GetString("Greeting")
Console.Write("Enter your name: ")
Dim name As String = Console.ReadLine()
Console.WriteLine("{0} {1}!", greeting, name)
End Sub
End Module
' The example produces output similar to the following:
' Enter your name: John
' Hello John!
Ele pode ser compilado usando o seguinte comando em C#:
csc Example.cs /resource:ExampleResources.resources
O exemplo recupera uma referência ao assembly que contém o arquivo de recurso passando um tipo definido nesse assembly para a typeof função (em C#) ou a GetType função (no Visual Basic) e recuperando o valor de sua Type.Assembly propriedade.