Datas e Números : Globalizando sua aplicação

 

O VB.NET trouxe muitas novidades que facilitam a vida do programador , além da orientação a objetos , a utilização dos espaços de nomes é um dos conceitos fundamentais na estrutura VB.NET , podemos dizer que cada pedaço de código em um programa .NET existe dentro de um espaço de nome (Namespace) ; Os Namespaces são hierárquicos como a estrutura de diretórios (já vi isso em Java ) e são o elo de ligação na biblioteca de classe comum do .NET oferecendo milhares de tipos úteis que você pode usar diretamente em seu programa VB.NET. Quer um exemplo prático ???

 

O Namespace System.Globalization contém o objeto System.Globalization.CultureInfo que possui duas propriedades muito interessantes : NumberFomat e DateTimeFormat . Elas retornam informação sobre como os números e datas são formatados de acordo com um idioma local. É isto mesmo , podemos usar estas propriedades para exibir números e datas formatados de acordo com uma cultura previamente selecionada.

 

Vou mostrar uma aplicação VB.NET que usa estes conceitos e exibe o dia da semana e o mês traduzido para uma determinada cultura selecionada.

1 - Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)

  1. Project Types : Visual Basic Projects
  2. Templates : Windows Application
  3. Name : Multilinguage
  4. Location : c:\vbnet\Multilinguage

No formulário padrão - form1.vb - insira os seguintes controles :  Dois botões de comando : Button1 e Button2 ;  um Listbox - Listbox1 ; um combobox - combobox1 e dois Label : Label1 e Label2 ( conforme layout abaixo)

Como funciona ?

- Ao iniciar a aplicação o usuário deverá clicar no botão - Preencher lista com Culturas Instaladas

- A seguir o usuário deverá selecionar um dia da semana apresentado na combobox

- Finalmente basta clicar no botão - Traduzir para o Idioma selecionada - que será exibido na Label amarela o dia da semana no idioma indicado

- Para o mês estamos usando  o mês de outubro fixo , mas você pode usar outra combobox com os respectivos meses para testar a funcionalidade.

 

Agora vamos ao código do projeto :

 

2- A primeira coisa a fazer é importar usando a instrução Imports o Namespace System.Globalization :  Imports System.Globalization

 

3- No evento Load do formulário vamos preencher a combobox com os meses do ano  e selecionar a primeira opção da combo.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  ComboBox1.Items.Add("Segunda-Feira")

  ComboBox1.Items.Add("Terça-Feira")

  ComboBox1.Items.Add("Quarta-Feira")

  ComboBox1.Items.Add("Quinta-Feira")

  ComboBox1.Items.Add("Sexta-Feira")

  ComboBox1.Items.Add("Sabado-Feira")

  ComboBox1.Items.Add("Domingo-Feira")

  ComboBox1.SelectedIndex = 0

End Sub

 

4- Agora vamos incluir o código que preenche a caixa de listagem - Listbox1 - com todas as culturas instaladas no sistema :

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

  Dim ciarr() As System.Globalization.CultureInfo = System.Globalization.CultureInfo.GetCultures(CultureTypes.InstalledWin32Cultures)

 Dim c As System.Globalization.CultureInfo

For Each c In ciarr

   ListBox1.Items.Add(c.Name & " - " & c.EnglishName)

Next

ListBox1.SelectedIndex = 0

End Sub

 

5- Finalmente o código que irá exibir o dia da semana e o mês no idioma selecionado

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

   Dim cultura As String

   cultura = ListBox1.SelectedItem

   cultura = cultura.Substring(0, 5)

   Dim cdi As New System.Globalization.CultureInfo(cultura)

   Dim dtfi As System.Globalization.DateTimeFormatInfo = cdi.DateTimeFormat

   If ComboBox1.SelectedIndex = 0 Then

        Label1.Text = dtfi.GetDayName(DayOfWeek.Monday)

        Label4.Text = dtfi.GetMonthName(10)

     End If

    If ComboBox1.SelectedIndex = 1 Then

       Label1.Text = dtfi.GetDayName(DayOfWeek.Thursday)

       Label4.Text = dtfi.GetMonthName(10)

    End If

    If ComboBox1.SelectedIndex = 2 Then

      Label1.Text = dtfi.GetDayName(DayOfWeek.Tuesday)

      Label4.Text = dtfi.GetMonthName(10)

    End If

    If ComboBox1.SelectedIndex = 3 Then

      Label1.Text = dtfi.GetDayName(DayOfWeek.Wednesday)

      Label4.Text = dtfi.GetMonthName(10)

    End If

    If ComboBox1.SelectedIndex = 4 Then

      Label1.Text = dtfi.GetDayName(DayOfWeek.Friday)

      Label4.Text = dtfi.GetMonthName(10)

    End If

    If ComboBox1.SelectedIndex = 5 Then

      Label1.Text = dtfi.GetDayName(DayOfWeek.Saturday)

      Label4.Text = dtfi.GetMonthName(10)

    End If

    If ComboBox1.SelectedIndex = 6 Then

       Label1.Text = dtfi.GetDayName(DayOfWeek.Sunday)

       Label4.Text = dtfi.GetMonthName(10)

   End If

End Sub

 

Eu usei uma estrutura bem simples para você enxergar melhor , as instruções :

 

     Label1.Text = dtfi.GetDayName(DayOfWeek.Tuesday)

     Label4.Text = dtfi.GetMonthName(10)

 

é que exibem o dia da semana e o mês no idioma selecionado. Abaixo a tela obtida quando selecionamos a cultura - Grega :

 

 

Já imaginou fazer isto no VB 6.0 ??? Você teria que usar os arquivos de recursos e muito código ...

 

Legal , não é mesmo ??? Não mostramos a utilização da propriedade NumberFormat , fica para uma próxima vez, aguarde...

 


José Carlos Macoratti