Introdução
No artigo “Globalização e Localização no Windows Phone - Parte 3” demonstramos como podemos implementar o conceito de Globalização, permitindo que nossas aplicações do Windows Phone trabalhem com diferentes culturas.

No entanto um ponto muito importante, é implementarmos também o conceito de Localização fazendo com que a aplicação exiba seus textos, mensagens e etc de acordo com a cultura desejada.

Criando a UI da aplicação
Para darmos sequência ao nosso exemplo, iremos utilizar como base o projeto criado em nosso artigo anterior. Para isso siga os seguintes passos:

  • Abra o projeto Windows Phone criado na Parte 3 de nossa série de artigos;
  • Abra o arquivo MainPage.xaml;
  • Modifique o seu ContentPanel, de modo que ele fique dessa maneira:
    <!--ContentPanel - place additional content here-->
    <StackPanel Height="824" HorizontalAlignment="Left" Margin="9,6,0,0" Name="stackPanel2" VerticalAlignment="Top" Width="443" Background="{StaticResource PhoneBackgroundBrush}">
    
        <TextBlock Height="30" Name="textBlock1" Text="Selecione uma localização" Width="443" Foreground="{StaticResource PhoneAccentBrush}" />
    
        <ListBox Height="250" HorizontalAlignment="Left" Margin="9,6,0,10" Name="locList" VerticalAlignment="Top" Width="441" SelectedIndex="-1" SelectionChanged="LocList_SelectedIndexChanged">
            <ListBoxItem Content="French, France" FontSize="22" />
            <ListBoxItem Content="German, Germany" FontSize="22" />
            <ListBoxItem Content="Italian, Spain" FontSize="22" />
            <ListBoxItem Content="Spanish, Spain" FontSize="22" />
            <ListBoxItem Content="English, United Kingdom" FontSize="22" />
            <ListBoxItem Content="English, United States" FontSize="22"/>
            <ListBoxItem Content="Danish, Denmark" FontSize="22" />
            <ListBoxItem Content="Portuguese, Brazil" FontSize="22" />
        </ListBox>
    
        <TextBlock Height="30" Name="textBlock4" Text="Data" Width="443" Foreground="{StaticResource PhoneAccentBrush}"/>
        <TextBlock Height="30" Name="txbData" Text=" " Width="443" />
    
        <TextBlock Height="30" Name="textBlock7" Text="Monetário" Foreground="{StaticResource PhoneAccentBrush}"/>
        <TextBlock Height="30" Name="txbMonetario" Text=" " Width="443" />
    
        <TextBlock Height="30" Name="textBlock8" Text="Mensagem" Foreground="{StaticResource PhoneAccentBrush}"/>
        <TextBlock Height="30" Name="txbMensagem" Text=" " Width="443" />
    </StackPanel>

Criando os arquivos de localização
Uma vez que temos o layout de nossa aplicação pronta, podemos começar a implementar a localização. Basicamente o que precisaremos fazer será criar arquivos de resource (.resx) para cada cultura desejada e realizar as respectivas traduções, como podemos verificar a seguir:

  • No Solution Explorer do Visual Studio, clique com o botão direito no seu projeto e clique em Add > New Item;
  • Na janela que será exibida, selecione Resouce File, defina o nome do arquivo como traducao.resx e clique no botão Add;
    SNAGHTML7dbd86_thumb[19]
  • No arquivo que será adicionado ao seu projeto, crie uma entrada conforme apresentado:
    image_thumb[1]
  • Feito isso, siga os seguintes passos para cada cultura que precise:
    • No Solution Explorer, clique com o botão direito no arquivo traducao.resx e selecione Copy;
    • Clique com o botão direito no seu projeto e clique em Paste;
    • Renomeie o arquivo “Copy of traducao.resx” para o seguinte padrão traducao.cultura.resx. Ex: traducao.pt-BR.resx;
    • Abra o arquivo e realize as devidas traduções:
      image_thumb[3]

Utilizando a localização
Agora que temos os arquivos de localização devidamente criados, basta utilizá-los em nosso aplicativo. O que é extremamente simples:

  • Abra o arquivo MainPage.xaml.cs;
  • No final no método LocList_SelectedIndexChanged, adicione o seguinte código:
    txbMensagem.Text = traducao.MensagemTeste;
  • Seu método deve estar da seguinte maneira:
private void LocList_SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
{
    string culture;
    switch (locList.SelectedIndex.ToString())
    {

        case "0":
            culture = "fr-FR";
            break;
        case "1":
            culture = "de-DE";
            break;
        case "2":
            culture = "it-IT";
            break;
        case "3":
            culture = "es-ES";
            break;
        case "4":
            culture = "en-GB";
            break;
        case "5":
            culture = "en-US";
            break;
        case "6":
            culture = "da-DK";
            break;
        case "7":
            culture = "pt-BR";
            break;
        default:
            culture = "en-US";
            break;
    }

    Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);

    txbData.Text = DateTime.Now.ToString();

    double valor = 954371.52;
    txbMonetario.Text = valor.ToString("C");

    txbMensagem.Text = traducao.MensagemTeste;
}

Habilitando localização no projeto
Para finalizarmos, faltam dois passos muito importantes:

  1. Definirmos qual será a cultura padrão utilizada pela aplicação
    • No Solution Explorer, clique com o botão direito no projeto e clique em Properties;
    • Na janela de propriedades, selecione a aba Application e clique no botão Assembly Information;
      image_thumb[9]
    • Na janela que será aberta, defina o Neutral Language para o idioma padrão de sua aplicação. No nosso exemplo definiremos para English (United States)
      SNAGHTML9045f7_thumb
    • Clique em OK, e salve o projeto.
  2. Definirmos quais as culturas suportadas pela aplicação
    • No Solution Explorer clique com o botão direito em seu projeto e selecione Unload Project;
    • Clique novamente com o botão direito no projeto e dessa vez selecione “Edit Global01.csproj”, onde Global01 será o nome do seu projeto;
    • No arquivo xml que será aberto, localize o elemento SupportedCultures;
    • Adicione como valor desse elemento todas as culturas suportadas pelo seu aplicativo, sempre separadas por “;”
      <SupportedCultures>   pt-BR;es-ES
      </SupportedCultures>
    • Salve o arquivo;
    • Clique novamente com o botão direito no projeto e selecione Reload Project;

Feito isso, compile e execute seu aplicativo.

Como poderá perceber, ao clicarmos em algum item nosso ListBox que corresponda a um arquivo de resource criado, a mensagem será exibida no idioma correto, já se selecionarmos uma cultura inexistente entre os arquivos de localização, automaticamente é utilizada a cultura neutra/padrão.

Conclusão
Como podemos perceber implementar o conceito de localização em nossos aplicativos, é extremamente simples, sendo que esta é apenas uma das formas de ser realizada. Podemos dizer que a etapa mais difícil e trabalhosa de todos esse processo, será efetivamente criar os arquivos de localização. Até a próxima…

Categorias: artigos
Tags: ,

Introdução
Nos artigos “Globalização e Localização no Windows Phone - Parte 1” e “Globalização e Localização no Windows Phone - Parte 2” falamos sobre a parte teórica de globalização e localização. A partir de agora iremos ver as particularidades da implementação desses recursos em nossa aplicações.

Conhecendo o System.Globalization
Quando falamos de aplicações globalizadas, um dos pontos principais que temos que trabalhar é o namespace System.Globalization, pois nele existem as classes responsáveis por definir todas as informações relacionadas à cultura, incluindo linguagem, país/região, calendário e etc.

Dentro deste namespace, temos a classe CultureInfo responsável por fornecer informações de uma cultura específica e consequentemente é a classe que utilizaremos para criar nossa aplicação globalizada.

Criando a aplicação
A aplicação que iremos criar é extremamente simples, mas com ela já é possível começarmos a entender o funcionamento e comportamento de aplicações globalizadas.

A ideia é oferecermos para o usuário uma lista contendo as culturas disponíveis para que ele possa selecionar a mais adequada, e baseado nesta seleção exibiremos a data atual e um valor monetário devidamente formatado de acordo com a seleção. Para isso, faça o seguinte:

  • Crie um projeto do tipo Windows Phone Application;
  • Abra o arquivo MainPage.xaml;
  • Adicione ao seu ContentPanel, os seguintes controles:        
    <!--ContentPanel - place additional content here-->
    <StackPanel Height="824" HorizontalAlignment="Left" Margin="9,6,0,0" Name="stackPanel2" VerticalAlignment="Top" Width="443" Background="{StaticResource PhoneBackgroundBrush}">
    
        <TextBlock Height="30" Name="textBlock1" Text="Selecione uma localização" Width="443" Foreground="{StaticResource PhoneAccentBrush}" />
    
        <ListBox Height="250" HorizontalAlignment="Left" Margin="9,6,0,10" Name="locList" VerticalAlignment="Top" Width="441" SelectedIndex="-1" SelectionChanged="LocList_SelectedIndexChanged">
            <ListBoxItem Content="French, France" FontSize="22" />
            <ListBoxItem Content="German, Germany" FontSize="22" />
            <ListBoxItem Content="Italian, Spain" FontSize="22" />
            <ListBoxItem Content="Spanish, Spain" FontSize="22" />
            <ListBoxItem Content="English, United Kingdom" FontSize="22" />
            <ListBoxItem Content="English, United States" FontSize="22"/>
            <ListBoxItem Content="Danish, Denmark" FontSize="22" />
            <ListBoxItem Content="Portuguese, Brazil" FontSize="22" />
        </ListBox>
    
        <TextBlock Height="30" Name="textBlock4" Text="Data" Width="443" Foreground="{StaticResource PhoneAccentBrush}"/>
        <TextBlock Height="30" Name="txbData" Text=" " Width="443" />
    
        <TextBlock Height="30" Name="textBlock7" Text="Monetário" Foreground="{StaticResource PhoneAccentBrush}"/>
        <TextBlock Height="30" Name="txbMonetario" Text=" " Width="443" />
    </StackPanel>

Com o layout devidamente definido, podemos adicionar os códigos necessários.

  • Abra o arquivo MainPage.xaml.cs;
  • Adicione o tratamento do evento SelectedIndexChanged do listbox LocList, que será responsável por definir a nova cultura que será utilizada e exibir as informações formatadas:     
    private void LocList_SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
    {
        string culture;
        switch (locList.SelectedIndex.ToString())
        {
    
            case "0":
                culture = "fr-FR";
                break;
            case "1":
                culture = "de-DE";
                break;
            case "2":
                culture = "it-IT";
                break;
            case "3":
                culture = "es-ES";
                break;
            case "4":
                culture = "en-GB";
                break;
            case "5":
                culture = "en-US";
                break;
            case "6":
                culture = "da-DK";
                break;
            case "7":
                culture = "pt-BR";
                break;
            default:
                culture = "en-US";
                break;
        }
    
        Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
    
        txbData.Text = DateTime.Now.ToString();
    
        double valor = 954371.52;
        txbMonetario.Text = valor.ToString("C");
    }
  • Compile e teste seu código;

Conclusão
Como pudemos perceber, o segredo inicial da globalização de uma aplicação está na utilização da classe CultureInfo, de acordo com a cultura desejada. Na próxima parte de nossa série de artigos, mostraremos como efetuar a localização de nossa aplicação. Até a próxima…

Categorias: artigos
Tags: ,

Introdução
No artigo “Globalização e Localização no Windows Phone - Parte 1” demos uma rápida introdução sobre Globalização e Localização, no entanto antes de colocarmos a mão na massa é bom entendermos e conhecermos quais as melhores práticas para essa implementação.

Melhores Práticas

  • Separe código dos seus recursos (resources)
    • Recursos, basicamente são textos, imagens e/ou vídeos que utilizamos em nossas aplicações. O idéia é que sejam criados arquivos de recursos, deixando totalmente separado do código
  • Localize textos e não tags
    • Realize a localização apenas dos textos, jamais das tags. Por exemplo:
      • Não localizar: <link>leia mais</link>
      • Localizar: leia mais
  • Adeque o espaço necessário
    • Durante o processo de localização de textos é extremamente importante lembrarmos que a mesma informação em Português, Inglês, ou Alemão possivelmente terão quantidade de caracteres diferentes e ocuparão um espaço diferente. Sendo assim, é necessário adequar o espaço existente para a correta exibição.
  • Localize sentenças ao invés de palavras
    • Um erro comum é criar arquivos de recursos realizando localização de palavras individualmente, ao invés de sentenças completas. Isso não deve ser realizado, pois a combinação de palavras isoladas, provavelmente formaram sentenças incorretas na maioria dos idiomas.
  • Cuidado com a ordem das informações
    • Devemos sempre lembrar que no processo de localização precisamos respeitar os formatos da cultura, sendo assim textos parametrizados devem tomar o cuidade de exibí-los corretamente, como por exemplo a exibição de datas, monetários e etc.
  • Reutilização de textos/palavras
    • Cuidado ao tentar reutilizar textos/palavras que possam ter significados diferentes de acordo com o contexto utilizado. Neste caso prefira criar localizações diferentes para cada eventual significado.
  • Utilize identificadores únicos para os recursos
    • Ao criar sua lista de recursos, garanta que sempre existirá um identificador único, dessa maneira sempre que precisar utilizá-lo, fará referência a este identificador, garantindo que sempre consiga encontrar a informação necessária.

Conclusão
Seguindo esta pequena lista de melhores práticas garantimos que nossa aplicação poderá ser globalizada sem maiores problemas. Na próxima parte de nossa série de artigos, começaremos a explorar como implementar o processo de globalização e localização de nossas aplicações. Até a próxima…

Categorias: artigos
Tags: ,

Introdução
Quando necessitamos desenvolver uma aplicação, na maioria das vezes não temos que nos preocupar em prepará-la para funcionar com múltiplos idiomas e consequentemente com suas formatações de data, decimal e etc. No entanto quando falamos em desenvolver uma aplicação global, que pode ser acessada por qualquer pessoa do mundo, o cenário muda bastante. Esta serie de artigos visa justamente demonstrar como preparar as aplicações desenvolvidas para o Windows Phone para estes cenários.

Globalização
Basicamente quando dizemos que a aplicação é globalizada, significa que ela está preparada para funcionar com múltiplas linguagens e culturas. Isso significa que a aplicação será capaz de exibir conteúdos de data, hora, valores monetários, números, calendários e etc em formatos diferentes e específicos para cada região ou cultura. Ou seja, uma mesma aplicação pode apresentar datas no padrão mês/dia/ano para usuários que selecionem o padrão americano, ou então dia/mês/ano para o padrão brasileiro.

Cultura
Sempre que estivermos falando de aplicações globalizadas, temos o conceito de cultura vinculado à isso. Isso deve-se ao fato de que a cultura está associada a uma linguagem e região específicas, e consequentemente aos formatos de data e etc.

Cada cultura possui um padrão de representação, sendo que sua primeira regra é de que o nome deve ser único e conter duas partes:

  • Código da linguagem: duas letras em minúsculo que estão associadas à uma linguagem
  • Código do país/eegião: duas letras em maiúsculo que  estão associadas à um país/região

Como exemplos, temos a seguinte tabela:

Cultura Nome da Cultura/Linguagem
English (United States) en-US
English (Canada) en-CA
English (Great Britain) en-GB
Portuguese (Brazil) pt-BR
Portuguese (Portugal) pt-PT

Uma tabela completa pode ser visualizada em:
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=VS.96).aspx

Localização
Localização é o processo de adaptação da aplicação para que ela possa funcionar corretamente em um mercado específico. Para isso é necessário realizar a tradução da interface gráfica, das mensagens emitidas pelo sistema, e etc. Como exemplo podemos citar a localização do Microsoft Office para o mercado Brasileiro.

Um ponto extremamente importante é que quando vamos desenhar aplicações que serão localizadas devemos procurar utilizar imagens, sons e outros recursos que eventualmente possam ser utilizados em linguagens diferentes sem quaisquer adaptações no código. Vale lembrar que essa escolha deve ser muito bem realizada, para que não utilizemos imagens, termos e etc, que possam ser ofensivos em determinadas localizações.

Conclusão
Hoje, demos uma pequena introdução de alguns conceitos importantíssimos para a criação de uma aplicação globalizada. Nos próximos artigos iremos abordar as melhores práticas e como realizar esta implementação. Até a próxima…

Categorias: artigos
Tags: ,