Localizando e usando recursos para uma cultura específica
O common language runtime fornece suporte para recuperar os recursos específicos da cultura que são empacotados e implantados em assemblies satélites. Assemblies satélites contêm apenas os arquivos de recurso, ou recursos flexíveis, como, por exemplo, arquivos. gif. Eles não contêm qualquer código executável.
No modelo de implantação do assembly satélite, você pode criar um aplicativo com um conjunto de padrão (o assembly principal) e vários assemblies de satélite. O pacote de recursos para o padrão ou a cultura neutra com o assembly principal e criar um assembly satélite separado para cada idioma que seu aplicativo suporta. Porque os assemblies satélite não são parte do assembly principal, você pode facilmente substituir ou atualizar os recursos que correspondem a uma cultura específica sem substituir o assembly principal para o aplicativo.
Por exemplo, em um simple "Olá mundo" aplicativo, se o padrão ou a cultura neutra é "en" (Inglês), você pode criar um recurso chamado Greeting e armazene em uma única cadeia de caracteres denominada HelloString cujo valor é "Hello world!". Para indicar que "en" é a cultura do padrão do aplicativo, você também deve adicionar o seguinte System.Resources.NeutralResourcesLanguageAttribute atributo para o arquivo do aplicativo AssemblyInfo ou um dos arquivos de código-fonte que serão compilados no assembly principal. do aplicativo
<Assembly: NeutralResourcesLanguageAttribute("en")>
Adicione suporte a culturas adicionais ao seu aplicativo. Por exemplo, você pode oferecer suporte a "en-US", "fr-FR" e "ru-RU" cultures da seguinte maneira:
Para oferecer suporte a "en-US" ou cultura inglês (Estados Unidos), crie um arquivo de recurso denominado Greeting.en-US e armazenar em uma única cadeia de caracteres denominada HelloString cujo valor é "Olá mundo!".
Para oferecer suporte a "fr-FR" ou cultura Francês (França), crie um arquivo de recurso denominado Greeting.fr FR e armazenar em uma única cadeia de caracteres denominada HelloString cujo valor é "salut tout le monde!".
Para oferecer suporte a "ru-RU" ou cultura russo (Rússia), crie um arquivo de recurso, chamado de RU.resx de Greeting.ru e armazenar em uma única cadeia de caracteres denominada HelloString cujo valor é "Всем привет!".
O System.Resources.ResourceManager classe fornece acesso a recursos específicos da cultura em tempo de execução e controla a maneira como o aplicativo recupera os recursos usando o processo de fallback de recurso. Para obter mais informações, consulte o "processo de Fallback de recurso" seção de Empacotamento e implantação de recursos tópico.
O ResourceManager objeto determina quais recursos para recuperar o thread atual como base CultureInfo.CurrentUICulture propriedade. Por exemplo, se um aplicativo é compilado com padrão de recursos do idioma inglês no assembly principal e com o francês (França) e recursos de idioma russo (Rússia) em dois assemblies de satélite e o CurrentUICulture for definida como "fr-FR", o ResourceManager objeto recupera recursos francês.
O CurrentUICulture propriedade pode ser definida explicitamente ou implicitamente. A maneira como essa propriedade é definida afeta como o ResourceManager objeto recupera os recursos com base na cultura:
Se o aplicativo define o CurrentUICulture propriedade explicitamente para uma cultura específica no código do aplicativo, ela garante que os recursos para essa cultura sempre são recuperados, independentemente de navegador ou sistema operacional idioma. do usuário Considere um aplicativo que é compilado com três assemblies de satélite que contém recursos para inglês (Estados Unidos), francês (França) e russo (Rússia) e de recursos do idioma inglês padrão. Se a CurrentUICulture for definida como "fr-FR", o ResourceManager objeto sempre recupera os recursos do francês (França), mesmo se o idioma do sistema operacional do usuário é francês. Certifique-se de que esse é o comportamento desejado antes de definir essa propriedade explicitamente.
Observação
No ASP.NET applications, você deve definir o CurrentUICulture propriedade explicitamente, porque é improvável que corresponderá a configuração no servidor de solicitações de entrada do cliente.Um aplicativo ASP.NET aplicativo também pode definir o CurrentUICulture propriedade explicitamente para o navegador do usuário aceitar o idioma.
Se a CurrentUICulture propriedade não estiver explicitamente definida pelo aplicativo, ele é definido implicitamente pela GetUserDefaultUILanguage a função no Windows 2000 e Windows XP. Esta função é fornecida pelo Multilingual User Interface (MUI), que permite ao usuário definir o idioma padrão. Se o idioma da interface do usuário não estiver definido pelo usuário, o padrão para o idioma do sistema instalado, que é a linguagem dos recursos do sistema operacional.
O exemplo a seguir define o CurrentUICulture propriedade explicitamente. Ele define uma matriz que contém os nomes das culturas com suporte para o simple "Olá mundo" aplicativo. Em seguida, aleatoriamente seleciona um desses nomes de cultura, ele usa para criar uma instância de um CultureInfo objeto e faz de cultura que cultura atual. do segmento atual A chamada para o MessageBox.Show método (no exemplo C#) ou o Interaction.MsgBox função (no exemplo Visual Basic), em seguida, exibe a string localizada atribuído ao HelloString recurso.
Imports System.Globalization
Imports System.Resources
Imports System.Threading
Module Module1
Sub Main()
' Create array of supported cultures
Dim cultures() As String = {"en-CA", "en-US", "fr-FR", "ru-RU" }
Dim rnd As New Random()
Dim cultureNdx As Integer = rnd.Next(0, cultures.Length)
Dim originalCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
Try
Dim newCulture As New CultureInfo(cultures(cultureNdx))
Thread.CurrentThread.CurrentCulture = newCulture
Thread.CurrentThread.CurrentUICulture = newCulture
Dim greeting As String = String.Format("The current culture is {0}.{1}{2}",
Thread.CurrentThread.CurrentUICulture.Name,
vbCrLf, My.Resources.Greetings.HelloString)
MsgBox(greeting)
Catch e As CultureNotFoundException
Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName)
Finally
Thread.CurrentThread.CurrentCulture = originalCulture
Thread.CurrentThread.CurrentUICulture = originalCulture
End Try
End Sub
End Module
using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;
using System.Windows.Forms;
class Program
{
static void Main()
{
// Create array of supported cultures
string[] cultures = {"en-CA", "en-US", "fr-FR", "ru-RU"};
Random rnd = new Random();
int cultureNdx = rnd.Next(0, cultures.Length);
CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;
try {
CultureInfo newCulture = new CultureInfo(cultures[cultureNdx]);
Thread.CurrentThread.CurrentCulture = newCulture;
Thread.CurrentThread.CurrentUICulture = newCulture;
ResourceManager rm = new ResourceManager("LocatingCS1.Greetings", Assembly.GetExecutingAssembly());
string greeting = String.Format("The current culture is {0}.\n{1}",
Thread.CurrentThread.CurrentUICulture.Name,
rm.GetString("HelloString"));
MessageBox.Show(greeting);
}
catch (CultureNotFoundException e) {
Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName);
}
finally {
Thread.CurrentThread.CurrentCulture = originalCulture;
Thread.CurrentThread.CurrentUICulture = originalCulture;
}
}
}
Consulte também
Conceitos
Recuperando recursos em Assemblies Satélites
Resources in ASP.NET Applications
Outros recursos
Histórico de alterações
Date |
History |
Motivo |
---|---|---|
Maio de 2010 |
Revisado exaustivamente. |
Comentários do cliente. |