Child pages
  • Internacionalização
Skip to end of metadata
Go to start of metadata

Internacionalização do Cliente 

Existem 3 formas distintas de internacionalização do Cliente CSBASE: 

  • Internacionalização do Desktop
  • Internacionalização de componentes padrões do Swing
  • Internacionalização das aplicações

Internacionalização do Desktop

O arquivo de configuração Client.properties define um conjunto de propriedades usadas na inicialização da classe csbase.client.Client. É nesse arquivo que, por padrão, o CSBASE define a propriedade basic.language.file uma lista de caminhos para arquivos que contêm as mensagens internacionalizadas usadas no Desktop. Abaixo o Client.properties do CSBASE:

 

basic.language.file.1=csbase.client.resources.properties.language.idiom

É obrigatório a definição de pelo menos um caminho para a propriedade basic.language.file senão o cliente não inicia.

 

A configuração acima define que o LNG, usado na internacionalização do Desktop, será preenchido com os bundles de acordo com o locale escolhido pelo usuário no momento do login. Por exemplo, se o usuário logou com o idioma pt_BR. O LNG será preenchido com o bundle idiom_pt_BR.properties. Se o usuário logar com o idioma en_US, o LNG carregará os arquivos idiom_en_US.properties e o arquivo idiom_pt_BR.properties. Isso porque, no CSBASE, temos o conceito de idioma padrão (pt_BR) e este sempre é carregado. Este conceito de idioma padrão é importante pois garante que, se caso não tivermos o arquivo de um dado locale ou se faltar uma mensagem no locale carregado, teremos sempre o bundle (ou uma mensagem em particular) no idioma padrão. Atualmente, o CSBASE possui dois arquivos desse tipo, pt_BRen_US, ambos localizados no pacote csbase.client.resources.properties.language.

 

Os arquivos de idioma definidos na propriedade basic.language.file são distribuídos dentro dos arquivo jar do cliente (do JNLP) e por isso não são alterados pelo administrador do sistema. Além disso, o arquivo Client.properties pode definir uma lista de propriedades opcionais, additional.language.file, que possuem os caminhos para arquivos que também são carregados na classe LNG da mesma forma que o anterior, ou seja, com os bundles no idioma selecionado pelo usuário no seu login e com os bundles no idioma nativo pt_BR. É com essa propriedade que cada sub-sistema CSBase pode incluir bundles próprios para redefinir textos que precisam de um tratamento diferente (ex: algoritmos x simuladores) ou quando o cliente desse sistema CSBASE possui classes adicionais para interfaces que são específicas desse sistema. Como exemplo, segue abaixo o Client.properties do InfoGrid:

 

additional.language.file.1 = infogrid.client.resources.properties.language.idiom

A propriedade additional.language.file é opcional.

 

O arquivo Client.properties (tanto o default do csbase como o de extensão) também permite definir uma lista de propriedades opcionais external.language.file.basename que possuem as URLs para arquivos extras que são colocados em um diretório do tomcat (relativo a URL-base do sistema) para servir de extensão para o próprio administrador instalar bundles extras quando necessário. Esse mecanismo é interessante porque, com ele, os arquivos de bundle não precisam ser distribuídos dentro do jar dos sistemas, como é o caso de todos os outros descritos até agora. Essa lista é opcional e o bundle carregado é apenas aquele do idioma selecionado no login do usuário. Se por acaso o cliente, ao iniciar, não encontrar o arquivo de bundle configurado nessa lista de propriedades (no idioma selecionado pelo usuário no login), o cliente inicia assim mesmo, dando uma mensagem de advertência para o usuário. Veja abaixo a propriedade no Client.properties:

 

external.language.file.basename.1 = language/idiom

A propriedade external.language.file.basename é opcional.

 

Se o idioma selecionado pelo usuário for o default (português) será carregado no LNG o arquivo que está em http://app_server_host:app_server_port/sistema/language/idiom_pt_BR.properties
Sempre que um texto de idioma não é encontrado no LNG a partir de sua chave, fazemos:
  1. A chave não foi encontrada em nenhum bundle carregado;
  2. A chave foi encontrada em um bundle de um idioma diferente daquele selecionado no login do usuário. Por exemplo, o idioma selecionado foi inglês e o texto foi encontrado no idioma nativo pt_br. 
Em ambos os casos, o LNG usa um objeto auxiliar e opcional de callback (TranslationListener) que, no CSBase, é atribuído com uma implementação que faz o seguinte: 
  1. Se a chave não é encontrada em nenhum bundle carregado, a interface exibe um texto padrão "<< key >>";
  2. Se a chave é encontrada em um bundle de um idioma diferente daquele selecionado no login do usuário, a interface exibe o texto encontrado nesse idioma diferente que, por default, é o nativo pt_br;
  3. Guarda um duas listas as chaves e os valores usados em ambos os casos de falha nas tradução.
Ao fechar o cliente (shutdown do desktop), essas listas são enviadas para o servidor registrar no EventLog do cliente. 

 

Internacionalização de componentes padrões do Swing

O arquivo Client.properties (tanto o do CSBASE quanto os dos sub-sistemas) também define uma lista de propriedades com arquivos extras de tradução de classes do próprio JDK. O conteúdo deste arquivo serve para redefinirmos rótulos de classes como, por exemplo, JOptionPane, JColorChooser, JFileChooser, etc. Abaixo o Client.properties do CSBASE:

swing.language.file.1=csbase.client.resources.properties.language.basic

É importante frisar que todos os rótulos do arquivo definido nessa propriedade são adicionadas diretamente no UIManager e, com isso, a alteração de qualquer chave afeta o sistema inteiro.

 Estes arquivos são carregados apenas se o idioma selecionado pelo usuário no login não for inglês.

Internacionalização das aplicações

Cada aplicação possui seus próprios bundles em um subpacote resources. A nomeclatura para esses bundles segue a convenção <nome da classe da aplicação>_<locale>.properties. Por exemplo, a aplicação Bloco de Notas é definido pela classe Notepad.java, logo a estrutura do pacote da aplicação é a seguinte:

--notepad
  |--resources
     |--Notepad_en_US.properties
     |--Notepad_pt_BR.properties
  |--Notepad.java

 

As aplicações também adotam a convenção de idioma padrão que, no caso, é pt_BR. Para que a aplicação possa rodar é preciso ter, no mínimo, o bundle pt_BR pois este sempre é carregado (independente do idioma selecionado no login). Isso garante que, se caso não tivermos o arquivo de um dado locale ou se faltar uma mensagem no locale carregado, teremos sempre o arquivo (ou uma mensagem em particular) no idioma padrão. Diferente da internacionalização do Desktop, a tradução das mensagens é feita pelo método Application#getString(key), mais detalhes no tutorial

É possivel redefinirmos as mensagens de uma aplicação definindo um bundle adicional. Para isso, basta adicionar a propriedade additional.language.file no properties da aplicação em seu repositório. Abaixo mostramos como isso é feito na aplicação Monitoração de Comandos do InfoGrid:

commandsmonitor.additional.language.file.1 = /infogrid/client/resources/properties/application-manager/CommandsMonitor

Com isso, se o usuário logar com o idioma pt_BR, a aplicação carrega os bundles CommandsMonitor_pt_BR.properties definido em seu pacote resources e também carrega o arquivo CommandsMonitor_pt_BR.properties definido no path acima.

É possível definir uma lista de propriedades opcionais external.language.file.basename que possuem as URLs para arquivos extras que são colocados em um diretório do tomcat (relativo a URL-base do sistema) para servir de extensão para o próprio administrador instalar bundles extras quando necessário. Esses arquivos de bundle não precisam ser distribuídos dentro do jar do sistema, como é o caso de todos os outros bundles da aplicação. Essa lista é opcional e o bundle carregado é apenas aquele do idioma selecionado no login do usuário. Veja abaixo um trecho do properties da aplicação DrainageEditor do MARLIM :

drainage.external.language.file.basename.1 = /language/applications/marlim/MarlimAbstractApplication
drainage.external.language.file.basename.2 = /language/applications/drainage/DrainageEditor


Internacionalização do Servidor

* Em construção *

en → pt
  • No labels