System.Resources.NeutralResourcesLanguageAttribute classe
Este artigo fornece observações complementares à documentação de referência para essa API.
Em aplicativos de área de trabalho, o atributo informa ao gerenciador de recursos a cultura padrão de um aplicativo e o NeutralResourcesLanguageAttribute local de seus recursos. Por padrão, os recursos são incorporados no assembly do aplicativo principal e você pode usar o atributo da seguinte maneira. Essa instrução especifica que o inglês (Estados Unidos) é a cultura padrão do aplicativo.
[assembly: NeutralResourcesLanguage("en-US")]
<Assembly:NeutralResourcesLanguage("en-US")>
Você também pode usar o NeutralResourcesLanguageAttribute atributo para indicar onde ResourceManager pode encontrar os recursos da cultura padrão fornecendo um UltimateResourceFallbackLocation valor de enumeração na instrução de atributo. Isso é feito mais comumente para indicar que os recursos residem em uma montagem satélite. Por exemplo, a instrução a seguir especifica que o inglês (Estados Unidos) é a cultura padrão ou neutra do aplicativo e que seus recursos residem em um assembly satélite. O ResourceManager objeto irá procurá-los em um subdiretório chamado en-US.
[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
<Assembly:NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)>
Dica
Recomendamos que você sempre use o NeutralResourcesLanguageAttribute atributo para definir a cultura padrão do seu aplicativo.
O atributo executa duas funções:
Se os recursos da cultura padrão estiverem incorporados no assembly principal do aplicativo e ResourceManager tiverem que recuperar recursos que pertencem à mesma cultura que a cultura padrão, o ResourceManager usará automaticamente os recursos localizados no assembly principal em vez de procurar um assembly satélite. Isso contorna a investigação de assembly usual, melhora o desempenho da pesquisa para o primeiro recurso que você carrega e pode reduzir o conjunto de trabalho. Consulte Empacotando e implantando recursos para os usos do processo ResourceManager para investigar arquivos de recursos.
Se os recursos da cultura padrão estiverem localizados em um assembly satélite em vez de no assembly do aplicativo principal, o atributo especificará a cultura e o diretório a partir do qual o NeutralResourcesLanguageAttribute tempo de execução pode carregar os recursos.
Aplicativos da Windows Store 8.x
Em aplicativos da Windows Store 8.x cujos recursos são carregados e recuperados usando a classe, o NeutralResourcesLanguageAttribute atributo define a ResourceManager cultura neutra cujos recursos são usados no caso de um teste com falha. Ele não especifica o local dos recursos. Por padrão, ResourceManager usa o arquivo PRI (índice de recursos de pacote) do aplicativo para localizar os recursos da cultura padrão. A cultura neutra definida pelo NeutralResourcesLanguageAttribute atributo é adicionada ao final da lista de idiomas da interface do usuário para simular esse efeito.
Se você carregar e recuperar recursos usando a classe Windows.ApplicationModel.Resources.ResourceLoader do Tempo de Execução do Windowsou os tipos no namespace Windows.ApplicationModel.Resources.Core, o NeutralResourcesLanguageAttribute atributo será ignorado.
Exemplos
O exemplo a seguir usa um aplicativo simples "Hello World" para ilustrar o NeutralResourcesLanguageAttribute uso do atributo para definir uma cultura padrão ou de fallback. Ele requer a criação de arquivos de recursos separados para as culturas inglês (en), inglês (Estados Unidos) (en-US) e francês (França) (fr-FR). A seguir é mostrado o conteúdo de um arquivo de texto chamado ExampleResources.txt para a cultura inglesa.
# Resources for the default (en) culture.
Greeting=Hello
Para usar o arquivo de recurso em um aplicativo, você deve usar o Gerador de Arquivo de Recurso (Resgen.exe) para converter o arquivo de seu formato de texto (.txt) para um formato binário (.resources) da seguinte maneira:
resgen ExampleResources.txt
Quando o aplicativo é compilado, o arquivo de recurso binário será incorporado no assembly do aplicativo principal.
A seguir é mostrado o conteúdo de um arquivo de texto chamado ExampleResources.en-US.txt que fornece recursos para a cultura inglesa (Estados Unidos).
# Resources for the en-US culture.
Greeting=Hi
O arquivo de texto pode ser convertido em um arquivo de recursos binários usando o gerador de arquivos de recurso (ResGen.exe) na linha de comando da seguinte maneira:
resgen ExampleResources.en-US.txt ExampleResources.en-US.resources
O arquivo de recurso binário deve então ser compilado em um assembly usando Assembly Linker (Al.exe) e colocado no subdiretório en-US do diretório do aplicativo emitindo o seguinte comando:
al /t:lib /embed:ExampleResources.en-US.resources /culture:en-US /out:en-us\Example.resources.dll
A seguir é mostrado o conteúdo de um arquivo de texto chamado ExampleResources.fr-FR.txt que fornece recursos para a cultura francesa (França).
# Resources for the fr-FR culture.
Greeting=Bonjour
O arquivo de texto pode ser convertido em um arquivo de recurso binário usando ResGen.exe na linha de comando da seguinte maneira:
resgen ExampleResources.fr-FR.txt ExampleResources.fr-FR.resources
O arquivo de recursos binários deve então ser compilado em um assembly usando o Assembly Linker e colocado no subdiretório fr-FR do diretório do aplicativo emitindo o seguinte comando:
al /t:lib /embed:ExampleResources.fr-FR.resources /culture:fr-FR /out:fr-FR\Example.resources.dll
O exemplo a seguir fornece o código executável que define a cultura atual, solicita o nome do usuário e exibe uma cadeia de caracteres localizada.
using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;
[assembly: NeutralResourcesLanguageAttribute("en")]
public class Example
{
public static void Main()
{
// Select the current culture randomly to test resource fallback.
string[] cultures = { "de-DE", "en-us", "fr-FR" };
Random rnd = new Random();
int index = rnd.Next(0, cultures.Length);
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultures[index]);
Console.WriteLine("The current culture is {0}",
CultureInfo.CurrentUICulture.Name);
// 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("{0} {1}!", greeting, name);
}
}
Imports System.Globalization
Imports System.Resources
Imports System.Threading
<Assembly:NeutralResourcesLanguageAttribute("en")>
Module Example
Public Sub Main()
' Select the current culture randomly to test resource fallback.
Dim cultures() As String = { "de-DE", "en-us", "fr-FR" }
Dim rnd As New Random()
Dim index As Integer = rnd.Next(0, cultures.Length)
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultures(index))
Console.WriteLine("The current culture is {0}",
CultureInfo.CurrentUICulture.Name)
' 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
Ele pode ser compilado usando o seguinte comando no Visual Basic:
vbc Example.vb /resource:ExampleResources.resources
ou usando o seguinte comando em C#:
csc Example.cs /resource:ExampleResources.resources