Qual a melhor estratégia para se implementar uma opção de idioma em um sistema ?
Estou me referindo somente a interface com o usuário, ou seja, conforme a opção feita pelo usuario, os labels, botoes, textos, menus, etc… seria traduzidos para o idioma um idioma escolhido.
Os idiomas possíveis seriam pré-definidos.
Estou com dúvida quanto a melhor forma de implementar essa funcionalidade, independente de linguaguem.
Pensei em uma tabela ou arquivo com as traduções, mas não sei se é a melhor forma.
Sendo assim se alguém tiver alguma opinião ou se já passou por essa necessidade e puder me ajudar, ficarei muito agradecido.
Use arquivos properties…eles são bastante populares como padrão de tradução…seu cliente precisará apenas alterarar o valor das chaves do arquivo…a grande vantagem é traduzir o sistema sem precisar alterar o fonte…Por tabela do banco de dados já não ficaria legal…tráfego na rede…
Não sei exatamente qual o seu problema, mas normalmente junto com internacionalização, vem um conceito bem próximo que é localização ou seja, por exemplo os números em en_US usarão o padrão americano que seria algo como 999,999,999.99 e a data seria algo como MM/DD/YYYY.
Existem muito exemplos de software internacionalizavel, mas vejo que a maioria deles não são localizaveis.
Mudar apenas os texto não quer dizer que seus software está apto a rodar em qualquer lugar.
Botões feitos com imagens com texto (veja o botão “novo tópico” aqui no GUJ para ter uma idéia… - acho que havia um tempo em que se usava um botão do phpBB que era em inglês mesmo.)
Tamanho dos títulos e espaçamentos nos layouts das telas (pode ser que a mensagem seja bem mais comprida em alemão que em inglês)
Você pode ter o azar de ter de internacionalizar o seu programa ou site para uma língua onde se escreve da DIREITA para a ESQUERDA, como o árabe ou o hebraico*. Nesse caso o layout das páginas e dos menus é espelhado em relação ao layout tradicional.
(* E o mais esquisito nessas línguas é que o cursor se move da direita para a esquerda quando você digita em um textbox, mas se você começa a digitar letras latinas (A-Z) ou números (0-9), o cursor passa a se mover da esquerda para a direita. Muito esquisito.)
Isso. Tem que usar a classe Properties. É mais ou menos assim:
String arquivoProp = (escolha do usuário);
Properties p = new Properties();
p.load(arquivoProp);
String copiar = p.getProperty("Language.0"); // colocar um nome mais significativo
Classe responsável pela Internacionalização do Sistema
@author Gustavo Silva
*/
public class Messages {
//Aqui você coloca o caminho para o arquivo
private static final String PORTUGUESE = “Languages.Portuguese”;
private static final String ENGLISH = "Languages.English";
private static final String SPANISH = "Languages.Spanish";
public static ResourceBundle LANGUAGE = ResourceBundle.getBundle(ENGLISH);
private Messages() {
}
/**
* Método que altera o idioma da aplicação
*
* @param String
* language
*/
public static void setLanguage(String language) {
if (language.equalsIgnoreCase("pt")) {
Messages.LANGUAGE = ResourceBundle.getBundle(PORTUGUESE);
} else if (language.equalsIgnoreCase("eng")) {
Messages.LANGUAGE = ResourceBundle.getBundle(ENGLISH);
} else if (language.equalsIgnoreCase("spa")) {
Messages.LANGUAGE = ResourceBundle.getBundle(SPANISH);
} // if
} // setLanguage
public static String getString(String key) {
try {
return LANGUAGE.getString(key);
} catch (MissingResourceException mre) {
return '!' + key + '!';
}
}
}[/code]
Qualquer dúvida pode gritar ai kra
Essa parte da classe você pode implementar em outras linguagens acredito eu (não conheço outras somente um pouquinho de VB 6 que eu trabalho)
sendo que o importante da mensagens eu outros idiomas ficam em arquivos.