1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Duvida relacionada com Java. Como fazer uma aplicação multi-linguas?

Discussão em 'Programação' iniciada por Hartimer, 21 de Dezembro de 2007. (Respostas: 5; Visualizações: 1171)

  1. Saudações.

    Estou neste momento a desenvolver uma aplicação em Java.
    Eu queria que essa aplicação suporta-se várias linguas (inicialmente Português e Inglês, mas que fosse facilmente escalável).

    Agora a questão é, qual é a melhor maneira de fazer isto? definir uma classe com as Strings todas que são usados pelo programa? E alterar o "ficheiro de strings" que é carregado consoante a lingua selecionada?

    Usar uma classe com uma variável contendo a lingua seleccionada, com metodos de obtenção das Strings usadas pelo sistema?

    Talvez enums?

    Não sei mesmo que tipo de abordagem é feito em Java para solucionar este problema, sou capaz de me desenrascar, mas não queria re-inventar a roda.

    O ideal seria por exemplo:
    Código:
    
    public String getBeer(User u){
         return u.getUsername() + REQUEST_FOR_BEER;
    }
    
    Em português devolveria: "UtilizadorX pediu cerveja."
    Em inglês devolveria: "UtilizadorX requested beer."

    Espero que tenha conseguido expor a duvida correctamente.

    Obrigado desde já pela ajuda.
    Hartimer
     
  2. CrazyBomber

    CrazyBomber Power Member

    Ok, nunca fiz nada disto, mas tenho assim uma ideia:

    1 classe "global" (aka estática) "LangStrings".
    Métodos:
    getLanguageString( String stringName )
    setLanguage( String langName )

    Ok, e agora lá dentro podes fazer como quiseres. Com arrays para cada linguagem, sub-classes, listas, fazer parse de ficheiros, etc.

    Uso disto:

    public String getBeer(User u){
    return u.getUsername() + LangStrings.getLanguageString( "REQUEST_FOR_BEER" );
    }
     
  3. AliFromCairo

    AliFromCairo Power Member

    Hartimer!

    Há algum tempo tempo atrás deparei-me com o mesmo problema e, depois de ler alguns artigos sobre o assunto em diversos blogs e no próprio site da Sun, cheguei à conclusão que o melhor método para resolver esse problema gira à volta das classes Locale e ResourceBundle.

    A ideia base é ter um ficheiro de propriedades (.properties) para cada língua, com todas as strings que a tua aplicação vai utilizar. O nome que é dado a este ficheiro é muito importante, devido ao facto de os métodos que irei descrever em seguida se basearem nesse mesmo nome para carregar o ficheiro de propriedades correcto.

    Supõe que tens um ficheiro de propriedades chamado Properties_pt_PT.properties com o seguinte conteúdo:

    Código:
    REQUEST_FOR_BEER = pediu cerveja.
    
    Bem como o ficheiro Properties_en_GB.properties:

    Código:
    REQUEST_FOR_BEER = requested beer.
    
    Neste caso, terias que criar um Locale (serve essencialmente para representar uma região) com a informação sobre o país e língua (pt_PT ou en_GB) para, em seguida, o associar a um ResourceBundle, de modo a conseguires ler o ficheiro de propriedades correcto. Algo do género:

    Código:
    // nota a ligação com o ficheiro de propriedades
    Locale pt = new Locale("pt", "PT"); 
    Locale gb = new Locale("en", "GB");
     
    ResourceBundle rb = ResourceBundle.getBundle("Properties", pt);
    System.out.println("Paulo " + rb.getString("REQUEST_FOR_BEER"));
    rb = ResourceBundle.getBundle("Properties", gb);
    System.out.println("Paulo " + rb.getString("REQUEST_FOR_BEER"));
    
    O excerto de código acima, integrado com a aplicação, deverá imprimir o seguinte:

    A vantagem deste método é ser facilmente escalável e não obrigar o tradutor a perceber código Java. Por exemplo, no caso de quereres que a tua aplicação suporte árabe, apenas terás que dar um template de um ficheiro .properties a um tradutor, ao invés de o obrigares a definir constantes numa classe Java.

    Abraço.
     
    Última edição: 22 de Dezembro de 2007
  4. grande ALI :)

    uhm, pelo que tive a ler realmente parece ser a melhor opção.

    estive a tentar implementar mas tou com um problemazito... onde colocar o ficheiro de propriedades? ja li o javadoc das várias classes e nao referem propriamente o sitio onde vao procurar... :/

    vou continuar a tentar
     
  5. sexta13

    sexta13 What is folding?

    Pela minha experiencia normalmente deve colocar no local onde tens as classes do fixeiros!
     

  6. Mas se assim o fizer os ficheiros de propriedades ficarão dentro do .jar, o que significa que não podem ser alterados em run-time :/
     

Partilhar esta Página