VB .NET  -  Localizando sua aplicação Windows Forms


 Neste artigo vou recordar os conceitos sobre os recursos de localização em aplicações Windows Forms usando a linguagem VB .NET.

O objetivo principal do esforço de localização é a tradução dos recursos na interface do usuário, e, isso é um recurso específico de cada aplicação que devido a grande variedade de culturas e idiomas deve decidir se adota ou não uma implementação genérica. Existem no entanto alguns elementos comuns de localização como o suporte a datas, formatos numéricos e de moeda que podem ser implementados de forma genérica por classes da plataforma .NET.

A plataforma .NET realizou um esforço considerável para apoiar a internacionalização oferecendo uma API de suporte, controles de servidor e recursos do Visual Studio que permitem que você realize a localização da sua aplicação de uma forma mais eficaz.

O mundo é composto de uma infinidade de culturas, cada qual tem uma linguagem e um conjunto de formas definidas para tratar formatos números, utilizar moedas, realizar classificações, etc. A plataforma .NET define idiomas e regiões usando a definição padrão do RFC(Request for Comments) 1766 (http://www.ietf.org/rfc/rfc1766.txt), que especifica um idioma e região utilizando códigos de duas letras separadas por um traço.

A tabela a seguir fornece exemplos de algumas definições de cultura:

Código da Cultura Descrição
en-US English Language; United States
en-GB English Language; United Kingdom
en-AU English Language; Australia
en-CA English Language; Canada
fr-CA French Language; Canada

Os exemplos da tabela definem cinco culturas distintas que têm algumas semelhanças e algumas diferenças. Quatro das culturas falam a mesma língua (Inglês), assim o código da linguagem "en" é usado nestas configurações de cultura. Após a definição do idioma vem a definição da região.

Embora a maioria dessas culturas falem a mesma língua, é importante distingui-las definindo sua região (US para os Estados Unidos, GB para o Reino Unido, AU para a Austrália, e CA para o Canadá). Estas definições refletem o fato de que o Inglês usado nos Estados Unidos é um pouco diferente do Inglês usado no Reino Unido, e assim por diante.

Além da linguagem, existem diferenças em como as datas e os valores numéricos são representados. É por isso que a linguagem de uma cultura e região são apresentados em conjunto.

A seguir vou criar um exemplo básico mostrando os passos requeridos para criar um formulário Windows Forms localizado.

Recursos Usados

Criando o projeto Windows Forms

Abra o VS 2015 Community e crie um novo projeto (File-> New Project) usando a linguagem C# e o template Windows Forms Application.

Informe um nome a seu gosto. Eu vou usar o nome Vbnet_Localizacao;

Selecione o formulário Form1.vb e abra a janela de propriedades teclando F4 e a seguir defina a propriedade Localizabe como True e a propriedade Language como Default:

Assim estamos usando a linguagem padrão que no meu caso é portugues (pt-BR):

A partir da ToolBox inclua uma Label no formulário e inclua o seguinte texto na sua propriedade Text:

Agora selecione o formulário novamente e altere a propriedade Language para English e inclua o seguinte texto na propriedade Text da Label:

Novamente selecione o formulário e na janela de propriedades altere a propriedade Language para Spanish e altere o texto da Label conforme abaixo:

Compile a solução clicando em Build Solution.

A seguir , na janela Solution Explorer, expanda o nó Form1.vb e você verá os arquivos de recursos (.resx) criados conforme mostra a figura abaixo abaixo:

Form1.resx é o arquivo de recurso para a cultura padrão

Form1.es.resx é o arquivo de recurso para o Espanhol

Form1.en.resx é o arquivo de recurso para o Inglês

 

Nota: Se você não conseguir ver esses arquivos por algum motivo, clique no botão "Mostrar todos os arquivos" no Gerenciador de Soluções.

Muito bem...

Agora altere a propriedade Language do formulário Form1.vb para Default e a partir da ToolBox inclua um controle Label e um controle Combobox  com o nome cboCultura no formulário:

A seguir declare os seguintes namespaces no formulário:

Imports System.Globalization
Imports System.ComponentModel

No evento Load do formulário vamos definir as 3 culturas usadas: Portuguese, Spanish e English como opções da Combobox:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        cboCultura.Items.Add("English")
        cboCultura.Items.Add("Spanish")
        cboCultura.Items.Add("Portuguese")
        cboCultura.SelectedIndex = 0
 End Sub

Agora no evento SelectedIndexChanged da combobox vamos definir o código que vai alterar o idioma conforme a seleção do usuário:

  Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboCultura.SelectedIndexChanged
        If cboCultura.SelectedItem.ToString() = "English" Then
            AlteraIdioma("en")
        ElseIf cboCultura.SelectedItem.ToString() = "Spanish" Then
            AlteraIdioma("es-ES")
        Else
            AlteraIdioma("pt-BR")
        End If
  End Sub

Para concluir defina o código do método AlteraIdioma():

 Private Sub AlteraIdioma(ByVal lang As String)
        For Each c As Control In Me.Controls
            Dim resources As ComponentResourceManager =
                New ComponentResourceManager(GetType(Form1))
            resources.ApplyResources(c, c.Name, New CultureInfo(lang))
        Next c
    End Sub

Executando o projeto iremos obter o seguinte resultado:

Cada vez que o usuário selecione um idioma o método AlteraIdioma() é chamado.

Esse método percorre cada controle do formulário usando o ComponentResourceManager para enumerar através dos recursos para um objeto.

A seguir usamos o método ApplyResources para aplicar o valor de um recurso à propriedade correspondente do objeto.

Uma das sobrecargas do ApplyResources aceita 3 parâmetros: o controle que contém o valor da propriedade a ser aplicado; Uma seqüência de caracteres que contém o nome do objeto para procurar nos recursos e uma cultura para a qual aplicar recursos.

Nota : Cada nome de cultura é composta por duas partes : a primeira representa o código do idioma e a segunda o código do país/região. (pt-BR)

Pegue o projeto completo aqui : Vbnet_Localizacao.zip

Respondeu Jesus, e disse-lhes: Ainda que eu testifico de mim mesmo, o meu testemunho é verdadeiro, porque sei de onde vim, e para onde vou; mas vós não sabeis de onde venho, nem para onde vou.
Vós julgais segundo a carne; eu a ninguém julgo.
E, se na verdade julgo, o meu juízo é verdadeiro, porque não sou eu só, mas eu e o Pai que me enviou.

João 8:14-16

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti