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.)
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