Atualmente o desenvolvimento de aplicações, seja ela em desktop ou web, requer a configuração e o gerenciamento de várias características. Com o advento da internet e a utilização de vários dispositivos ligadas à ela, é possível disponibilizar nosso aplicativo para qualquer país e idioma.
Desta forma, iremos criar um pequeno aplicativo desktop demonstrando como se utiliza a globalização e cultura disponibilizado no .net Framework.
Crie um novo projeto Windows Forms Application, conforme a imagem abaixo.
Crie o layout do Form1 conforme a imagem abaixo:
Propriedades do formulário:
- lblCultura
- Text = Cultura
- lblMensagem
- Text: Mensagem
- comboBox1
- Items: Item 1: Inglês; Item 2: Português
- Button1
- Text: Adicionar Texto
Se observarmos nosso formulário Form1 no Solution Explorer, veremos um arquivo chamado Form1.resx, este é um arquivo padrão de cultura e necessário para a aplicação. Em todo desenvolvimento de uma aplicação a qual precisamos trabalhar com cultura e globalização, necessitamos de um arquivo padrão.
Agora vamos selecionar nosso formulário, e alterar a propriedade language para English (United States), em seguida alteramos as propriedades Text de nossas labels e do nosso button1. Este mesmo procedimento deve ser feito para Português (Brasil). Veja como ficou nosso formulário na cultura English (United States).
Em seguida, vamos adicionar um arquivo de configuração para armazenar a cultura e inicializar nossos componentes, conforme a cultura selecionada. Para isso, adicione um arquivo do tipo “Application Configuration File”.
Adicione no arquivo de configuração (Application Configuration File) a seguinte configuração:
<appSettings> <add key="culture" value="pt-BR"/> </appSettings>
Agora adicione a referência System.Configuration ao projeto, para que possamos manipular o arquivo de configuração em tempo de execução. Para adicionar a referência, clique com o botão direito em References no Solution Explorer, Add References, selecione System.Configuration e pressione o botão Ok.
No nosso código do Form1.cs adicionamos a referência do System.Configuration, desta forma: using System.Configuration.
Em seguida iremos adicionar o evento SelectedIndexChanged em nosso comboBox1, conforme a imagem abaixo.
Em nosso evento SelectedIndexChange adicione as seguintes linhas de código:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
AppSettingsSection appSettings = config.AppSettings;
if (comboBox1.SelectedItem.ToString().Contains("Inglês"))
{
appSettings.Settings["culture"].Value = "en-US";
}
else
{
appSettings.Settings["culture"].Value = "pt-BR";
}
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
Application.Restart();
}
O código postado acima, somente tem a função de alterar o appSettings, conforme a cultura(idioma) selecionada, e reiniciar a aplicação. A verificação da cultura (idioma) será realizada na inicialização do projeto, desta forma, precisamos configurar a inicialização da aplicação para verificar qual cultura deverá ser utilizada.
Abra o Program.cs e adicione as referencias do System.Configuration e do System.Threading. Em seguida adicione as linhas de código no método Main para alterar a cultura da Thread corrente da aplicação, veja o exemplo:
string culture = ConfigurationManager.AppSettings.GetValues("culture").First();
System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo(culture);
Thread.CurrentThread.CurrentUICulture = cultureInfo;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
Realize o teste na aplicação através do menu “Debug/Start Without Debugging” e altere no combo box a cultura (idioma). Você irá observar que os textos dos componenstes label e button irão alternar conforme a cultura selecionada.
Até agora utilizamos o arquivo de Resource que o próprio Forms acopla. Vou apresentar como podemos adicionar nossos arquivos de Resource. Assim, com nossos arquivos de Resource é possível criar textos para tratamentos de exceções, mensagens de retorno e utilizar em qualquer parte do projeto.
Para isso, adicione um novo arquivo de Resource no projeto, clique com o botão direito no WinFormsApplication1 e selecione New Item em Add; adicione um Resource Files ao projeto. Vamos alterar o nome do arquivo para MyResource – este será meu arquivo padrão de mensagens.
Neste arquivo irei adicionar uma entrada chamada Message e o valor “Olá mundo”. Veja como ficou na imagem abaixo:
Agora vou adicionar um novo arquivo de Resource com o mesmo nome e com a extensão da cultura “en-US”, e outro com a extensão “pt-BR”. Vejam como ficou os arquivos de resources:
Adicione a entrada Message nos arquivos Resource.en-US.resx e Resource.pt-BR.resx com os valores respectivamente, “Hello, World” e “Olá, mundo”.
Para retornar nossas mensagens dos arquivos de Resources, vamos criar uma classe utilizando o padrão Singleton, chamada ManagementResource,. Veja como ficou o código da classe:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Resources;
using System.Text;
using System.Configuration;
namespace WindowsFormsApplication1
{
class ManagementResource
{
private ManagementResource() { }
private static ManagementResource _instanceIdioma;
private ResourceManager rm = new ResourceManager(typeof(MyResouce));
private CultureInfo cultInfo = new CultureInfo(ConfigurationManager.AppSettings.GetValues("culture").First());
public static ManagementResource InstanceIdioma
{
get
{
if (_instanceIdioma == null)
{
_instanceIdioma = new ManagementResource();
}
return _instanceIdioma;
}
}
/// <summary>
/// Retorna a mensagem para o usuário conforme a cultura dele
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public string returnMessage(string message)
{
return rm.GetString(message, cultInfo);
}
}
}
No código acima instanciamos uma variável global ResourceManager com o tipo MyResource, que é o nome do resource principal que criamos
Obs: O principal objetivo do ResourceManager é prover o acesso a cultura em tempo de execução.
Ainda no código acima instanciamos uma variável do tipo CultureInfo, nesta carregamos o tipo de cultura através da informação cadastrada no AppSettings.
Para retornar as mensagens conforme a cultura selecionada criamos um método chamado returnMessage, neste fazemos uma chamada para o método GetString do ResourceManager, passamos como parâmetro para este método o id da mensagem que esta armazenado nos arquivos de Resource e a cultura que será utilizada.
Em nosso Forms.cs vamos criar um evento de click para nosso botão (button1), neste evento vamos adicionar a seguinte linha de código:
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = ManagementResource.InstanceIdioma.returnMessage("Message");
}
Agora realize o teste na aplicação clique em Start Without Debugging, clique no botão e veja a mensagem. Altere a cultura e clique no botão novamente e veja o resultado.
Conforme observamos neste artigo, o .net Framework, facilita o desenvolvimento de aplicações com multi-idiomas, através dos recursos de globalização. Este tipo de recurso pode ser utilizado com diversos tipos de templates, como por exemplo Web Forms Application, Web Parts do Sharepoint, entre outros. Cada um destes com suas características e peculiaridades.










