Trabalhando com vários idiomas no Flex

January 5th, 2009 | Tags: , , , ,

Meu amigo Caio postou em seu blog uma boa dica para trabalhar com idiomas no Flex, resolvi dar uma filtrada e compartilhar aqui no blog. Primeiramente vou explicar como traduzir e fazer o controle de idiomas dos componentes do Flex, e em seguida explicarei como controlar idiomas dos textos de sua aplicação.

Traduzindo os componentes do Flex

Você pode traduzir os componentes do Flex de duas maneiras:

- Baixe aqui o framework ( e rpc ) já traduzido (pt_BR) pela própria Adobe;
- Descompacte o arquivo na pasta C:Arquivo de ProgramasAdobeFlex Builder 3sdks3.2.0frameworkslocale;
- Acesse as propriedades do projeto, clique em “Flex Compiler”, em “Aditional compiler arguments” altere o argumento -locale para pt_BR

Pronto, os componentes do Flex estarão traduzidos para o português do brasil.

Este método é para aqueles que queiram criar ou alterar traduções.

Abra o prompt de comando, e navegue até a pasta C:Arquivos de ProgramasAdobeFlex Builder 3sdks3.2.0bin; Digite o comando:

1
copylocale.exe en_US pt_BR

Isto irá criar os arquivos necessários para fazer a tradução ou alteração. Para ver-los, acesse a pasta C:Arquivos de ProgramasAdobeFlex Builder 3sdks3.2.0frameworkslocalept_BR.

Serão criados 4 arquivos com a extenção .swc, dentro desses arquivos contem uma pasta chamada locale, e nesta pasta, arquivos com a extenção .properties, os quais o conteúdo é a tradução em modo key=value.

Para visualizar e alterar esses arquivos .properties, abra o arquivo .swc correspondente usando o WinRAR.

Aqui você encontra as traduções do framework feitas pela própria adobe, e aqui vc encontra as traduções do rpc.

É só baixar os arquivos .properties e substituir os do .swc, feito isso, acesse as propriedades do projeto, clique em “Flex Compiler”, em “Aditional compiler arguments” altere o argumento -locale para pt_BR.

Pronto, os componentes do Flex ja foram traduzidos, agora, vamos criar um exemplo de como fazer traduzir os textos de sua aplicação.

Traduzindo sua aplicação e criando um controle de idiomas.

Crie uma nova aplicação, e na raiz do seu projeto cria uma pasta chamada locale, dentro desta pasta crie mais duas pastas: pt_BR e en_US.

Dentro das pastas pt_BR e en_US, você irá criar um arquivo chamado Application.properties com o seguinte conteúdo para cada um deles:

No arquivo Application.properties da pasta en_US:

aplicacao.nome=Hello Word!!

No arquivo Application.properties da pasta pt_BR:

aplicacao.nome=Olá Mundo!!

Atenção: É necessário que o arquivo esteja como UTF-8, caso não saiba como tornar seu arquivo UTF-8, clique nele com o botão direito ( no Flex Builder ), em “Text file encoding” clique em “Other” e selecione UTF-8.

Acesse as propriedade do seu projeto, clique em “Flex Compiler”, em “Aditional compiler arguments” altere o argumento -locale pt_BR para -locale=en_US,pt_BR e logo após adicione o seguinte argumento: -source-path=../locale/{locale}

Pronto. Agora, copie o código abaixo em sua aplicação para testar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?xml version="1.0" encoding="UTF-8"?>
<mx:Application  xmlns:mx="http://www.adobe.com/2006/mxml"  layout="absolute" xmlns:ns1="*">
 
    <mx:Metadata>
    	[ResourceBundle("Application")] //Nome do arquivo .properties
    </mx:Metadata>
 
    <mx:Script>
    <![CDATA[
 
        [Bindable]
        private var Locais:Array = [ "en_US" , "pt_BR" ];
 
        private function IniciarCombo(event:Event):void
        {
            /*A ordem nessa array é dada conforma o que foi colocado no 
            Flex Compiler > additional compiler arguments*/
            cboLocais.selectedIndex = Locais.indexOf(resourceManager.localeChain[0]);
        }
 
        private function AlterarLocal(event:Event):void
        {
            // Seta o Local que será usado
            // "en_US" ou "pt_BR "
            resourceManager.localeChain = [ cboLocais.selectedItem ];
        }
    ]]>
    </mx:Script>
 
    <mx:Label text="{resourceManager.getString('Application', 'aplicacao.nome')}" fontSize="48" x="10" y="40"/>
 
    <mx:ComboBox id="cboLocais" dataProvider="{Locais}"
                 initialize="IniciarCombo(event)"
                 change="AlterarLocal(event)" x="10" y="10"/>
 
    <mx:DateChooser x="10" y="113"/>
 
</mx:Application>

Clique aqui para visualizar o exemplo deste post.
Clique aqui para baixar os arquivos deste post.

Bom, é isso ae… Qualquer duvida deixe comentários.

UPDATE 14/01/2009: Na TV Adobe achei um screencast que explica exatamente tudo isso que postei no blog, só que em vídeo, vale a pena dar uma olhada ( em Inglês ). (http://tv.adobe.com/#vi+f1472v1032)

Abraços


  1. January 11th, 2009 at 10:48
    Reply | Quote | #1

    Pra mim dá esse erro: unable to open ‘../locale/en_US’

  2. January 11th, 2009 at 10:52
    Reply | Quote | #2

    Problema resolvido, como eu não uso a pasta src eu precisa remover os dois pontos na frente do /locale

  3. Arnaldo Filho
    March 23rd, 2009 at 09:16
    Reply | Quote | #3

    Marcos,
    Cara..vc me ajudou muito…obrigado..

    Agora..uma pergunta..
    Como eu faço pra uma vez que mudei na minha tela de login a minha linguagem…ele mude todo o resto do sistema…
    tem um exemplo pra me ajudar??
    Obrigado

  4. March 24th, 2009 at 04:45
    Reply | Quote | #4

    @Arnaldo Filho
    Olá Arnaldo, que bom que tenha lhe ajudado.
    Cara, este exemplo que eu postei já faz isso… mais especificamente na parte “Traduzindo sua aplicação e criando um controle de idiomas.”
    baixe o arquivo de exemplo e testa ai… Se mesmo assim você não conseguiu fazer entra em contato novamente.
    Abraços!

  5. Iron
    March 24th, 2009 at 10:41
    Reply | Quote | #5

    No meu caso deu erro, estou realizando apenas “Traduzindo os componentes do Flex”, ele dá o seguinte erro.

    “This panel is only available for CSS and MXML” em

    States
    Flex Properties
    Components

    Obrigado.

  6. Christiano Morais
    July 2nd, 2009 at 00:39
    Reply | Quote | #6

    Show de bola, este post me acendeu um holofote nas idéias. Muito grato mesmo pela dica e espero poder retribuir algum dia!

  7. September 26th, 2009 at 12:16
    Reply | Quote | #7

    Show de bola marcos! muito bom.

  8. Flávio
    March 12th, 2010 at 16:19
    Reply | Quote | #8

    Eu sei que faz bastante tempo do post. Buuuut, qual problema pode ser esse?
    1018: Duplicate class definition: en_US$Application_properties.

    Estranho que aqui no Windows 7 quando tento executar o copylocal.exe ele diz que não foi encontrado o JRE =/

1 trackbacks

  1. Flex: tradução para pt_br Pingback | 2009/01/05