Boa tarde a todos, li vários tópicos sobre internacionalização aqui no GUJ, porém, em nenhum deles encontrei o que gostaria, segue minha dúvida:
Vi que todos os tópicos (pelo menos os que eu vi) fazem a internacionalização nos arquivos .properties, eu conseguiria fazer a mesma lendo essas informações do banco de dados ao invéz de gravar esses arquivos? Porque, veja bem, se eu utilizar esses arquivos e escrever uma palavra errada e precisar corrigir depois, precisaria fazer deploy novamente, restartar o servidor de aplicação e tudo mais, e eu não posso me limitar a isso. Alguma idéia?
Interessante implementar como falou, mas não pelo motivo de ter que fazer o deploy depois. Digo isso pois vai ser muito difícil você não encontrar um erro no seu sistema, ou fazer alguma atualização solicitada pelo cliente, para não dizer impossível.
Também concordo que vai ser difícil encontrar erros, mais preciso que essas informações venham do banco de dados e não de um arquivo que eu fico limitado a redeployar a aplicação para surtir efeito na atualização, alguma idéia de qual caminho a seguir?
[code]@ManagedBean(name = “i18nBean”) @SessionScoped
public class I18nBean implements Serializable {
private Map<String,String> termos;
public Map<String, String> getTermos() {
//Supondo que você carrega por sessão (ou seja, ao usuário logar carrega, não necessário subir de novo a aplicação)
if(termos == null) {
termos = new HashMap<String,String>();
// Carregue o Map usando o meio que achar mais conveniente de acordo com o idioma escolhido na sessão
//...
termos.put("Usuario", "User");
termos.put("Senha", "Password");
}
return termos;
}[/code]
É possível também ter vários Maps no escopo Application, um para cada idioma e no escopo Session do usuário retornar o Map correspondente.
Somente no caso de atualizar a base de dados de termos i18n é necessário recarregar cada um dos Maps. Assim permite economia de memória pois haverá somente um Map para cada idioma na aplicação inteira.
Obrigado pelas respostas.
Outra dúvida, eu conseguiria fazer isso editando os .properties com a aplicação startada? (Acho que cheguei a ler algo sobre isso uma vez, mais não encontro mais o tópico)
Pq ai, eu colocaria um botão na área de admin que serviria para atualizar as informações, se isso funcionar, acho que seria o ideal, e não tem problema ter que clicar nesse botão.
Então, opção que sugeri é uma alternativa para o uso do .properties.
Também já tentei fazer desta maneira, alterando em tempo de execução o arquivo .properties mas não tive sucesso, não conseguia forçar a recarga do arquivo (creio que seria quase o que chamam de ‘hot deploy’).
[quote=jamirdeajr]Então, opção que sugeri é uma alternativa para o uso do .properties.
Também já tentei fazer desta maneira, alterando em tempo de execução o arquivo .properties mas não tive sucesso, não conseguia forçar a recarga do arquivo (creio que seria quase o que chamam de ‘hot deploy’).
[/quote]
Então não teria uma solução? Tem um amigo meu que trabalha com .NET, ele faz uma função que retorna uma string, e essa string é o texto daquele campo por exemplo, teria como fazer isso dentro da JSP?? (O que em minha opinião eu acho muito porco, mais talvez se não tiver outra solução e for necessário… dá pra pensar em fazer assim)
Do jeito que sugeri funciona como se fosse uma função que retorna o valor que está no Map, que pode ser carregado dinamicamente sem ter que subir a aplicação novamente.
Isso na página JSP faz com que o conteúdo fique com o que estiver no Map com a chave = ‘Usuario’, no exemplo em inglês retornaria ‘User’.
[quote=jamirdeajr]Do jeito que sugeri funciona como se fosse uma função que retorna o valor que está no Map, que pode ser carregado dinamicamente sem ter que subir a aplicação novamente.
Isso na página JSP faz com que o conteúdo fique com o que estiver no Map com a chave = ‘Usuario’, no exemplo em inglês retornaria ‘User’.
Só se entendi errado o que você quer fazer…[/quote]
Bom, muito obrigado pela ajuda. Vou tentar implementar dessa maneira ou talvez até mesmo usar os .properties. Obrigado mesmo !
[quote=Cesar Pizolato][quote=jamirdeajr]Então, opção que sugeri é uma alternativa para o uso do .properties.
Também já tentei fazer desta maneira, alterando em tempo de execução o arquivo .properties mas não tive sucesso, não conseguia forçar a recarga do arquivo (creio que seria quase o que chamam de ‘hot deploy’).
[/quote]
Então não teria uma solução? Tem um amigo meu que trabalha com .NET, ele faz uma função que retorna uma string, e essa string é o texto daquele campo por exemplo, teria como fazer isso dentro da JSP?? (O que em minha opinião eu acho muito porco, mais talvez se não tiver outra solução e for necessário… dá pra pensar em fazer assim)[/quote]
pode passar um parâmetro para um método e fazer a busca em um banco de dados.
A restrição é que só é compatível com container web que funcione com Servlet 3.0 / EL 2.2.
Tomcat 6 por exemplo não funciona.
Compatíveis são Tomcat 7, Glassfish 3, JBoss AS 6 e é necessário também no web.xml declarar como Servlet 3.0 e, é claro incluir o el-impl-2.2.jar no projeto.
Se isso não for um problema, é com certeza a melhor maneira!
Obrigado.
[quote=Z][quote=Cesar Pizolato][quote=jamirdeajr]Então, opção que sugeri é uma alternativa para o uso do .properties.
Também já tentei fazer desta maneira, alterando em tempo de execução o arquivo .properties mas não tive sucesso, não conseguia forçar a recarga do arquivo (creio que seria quase o que chamam de ‘hot deploy’).
[/quote]
Então não teria uma solução? Tem um amigo meu que trabalha com .NET, ele faz uma função que retorna uma string, e essa string é o texto daquele campo por exemplo, teria como fazer isso dentro da JSP?? (O que em minha opinião eu acho muito porco, mais talvez se não tiver outra solução e for necessário… dá pra pensar em fazer assim)[/quote]
pode passar um parâmetro para um método e fazer a busca em um banco de dados.