Avançar para a área de conteúdo

ir para o conteúdo principal

developerWorks Brasil  >  Tecnologia Java | Software livre  >

Globalizar seu Aplicativo Eclipse RCP

Como sua UI pode suportar facilmente diversos idiomas

developerWorks
Opções de documento

Opções de documento que necessitam de JavaScript não são exibidas

Código de amostra


Classificar esta página

Ajude-nos a melhorar este conteúdo


Nível: Introdutório

Wei Wang, Software Engineer, SDI Corp.
Yuan Yao Deng, Software Engineer, IBM

07/Jul/2009

O Eclipse Rich Client Platform (RCP) está obtendo ampla aceitação em desenvolvimento de software. Para empresas multinacionais, fornecer um software que suporte diversos idiomas é cada vez mais importante para clientes em todo o mundo. Neste artigo, aprenda como globalizar os elementos da interface com o usuário (UI) em um aplicativo RCP, incluindo janela, menu, barra de ferramentas, diálogo, página de boas-vindas, tela inicial e elementos padrão de UI do Eclipse. Um aplicativo Hello World de amostra percorre o processo.

Introdução

O Eclipse Rich Client Platform (RCP) possui muitas vantagens, como desenvolvimento rápido, aparência e sensação nativas, extensibilidade e suporte a diversas plataformas. Muitas empresas adotaram RCP para desenvolver software. Para empresas multinacionais, fornecer um software que suporte diversos idiomas é cada vez mais importante para vendas aos clientes em todo o mundo. A globalização é uma parte crítica do desenvolvimento de software RCP. Aprenda como globalizar a UI para um aplicativo RCP usando uma amostra do Hello World.



Voltar para parte superior


Aplicativo de Amostra

A amostra neste artigo irá globalizar um aplicativo Hello World com algumas funções simples. A Figura 1 mostra a UI principal de nosso aplicativo Hello World.


Figura 1. Aplicativo RCP Hello World
Aplicativo RCP Hello World

Ao clicar em Say Hello no menu File, aparecerá um diálogo, mostrando "Hello! This is a sample!" Ao ativar o aplicativo ou clicar em Welcome no menu Help, a página de boas-vindas será mostrada na UI principal, fornecendo algumas informações de introdução. Clicar em About Hello World no menu Help fornece informações sobre o aplicativo e a versão. Isso é tudo para as funções — muito simples.

O aplicativo Hello World foi criado com o Eclipse V3.4.1, com base no modelo "RCP application with an intro" seguindo o assistente de projeto de plug-in. Algum código adicional é necessário após a conclusão do assistente. Consulte o código fonte desta amostra, do qual é possível fazer download. O foco deste artigo é a globalização, portanto, não será discutido o código para outras funções.

Após concluir a codificação para o Hello World, por padrão, ele pode suportar somente o inglês. Você irá incluir suporte a diversos idiomas para esse aplicativo. Os elementos de UI que precisam de globalização incluem: menu, barra de ferramentas, diálogo, tela inicial, página de boas-vindas, informações de plug-in e do produto e os elementos padrão de UI do Eclipse.



Voltar para parte superior


Pacote de Recursos Comum

Como com outros aplicativos Java™ , é necessário criar um pacote de recursos para o aplicativo RCP. Nesta amostra, o pacote de recursos é colocado no pacote helloworld.resource e denominado "custom". O nome do arquivo do pacote de recursos deve seguir as convenções de nomenclatura do pacote de recursos Java: <resource_name>_<Language Code>_<Country Code>.properties. Por exemplo, custom_fr.properties é o pacote de recursos para francês e custom_zh_CN.properties é para chinês simplificado. Consulte Recursos para obter informações adicionais sobre códigos de idiomas e códigos de países. A Figura 2 mostra o pacote de recursos para o Hello World.


Figura 2. Estrutura do Pacote de Recursos
Estrutura do Pacote de Recursos

Os arquivos do pacote de recursos contêm pares chave/valor. As chaves identificam de forma exclusiva um objeto específico do código do idioma no pacote configurável. É necessário criar um par chave/valor para cada elemento de UI que deseja globalizar. A Lista 1 mostra o arquivo de propriedades para o inglês.


Lista 1. Conteúdo do Arquivo do Pacote de Recursos custom_en.properties
			
MAIN_WINDOW_TITLE=Hello World
MENU_FILE=&File
MENU_FILE_SAY_HELLO=Say Hello
MENU_HELP=&Help
DIALOG_TITLE=Hello
DIALOG_MESSAGE=Hello! This is a sample!
			

Nesse ponto, é necessário ter um utilitário para ler o pacote de recursos. Conforme mostrado na Lista 2, a classe CustomString fornece duas funções:

  • setBundle inicializa um objeto do pacote de recursos de acordo com o código do idioma.
  • getString retorna um valor para uma determinada chave em um idioma específico.

Lista 2. Utilitário para Ler Pacote de Recursos (CustomString.java)
			
public class CustomString {
	private static final String BUNDLE_NAME = "helloworld.resource.custom";
	private static ResourceBundle rb = null;

	public static void setBundle(Locale locale) {
		try {
			rb = ResourceBundle.getBundle(BUNDLE_NAME, locale);
		} catch (Exception e) {
			rb = ResourceBundle.getBundle(BUNDLE_NAME, Locale.ENGLISH);
		}
	}

	public static String getString(String key) {
		try {
			String keyValue = new String(rb.getString(key).getBytes(
			        "ISO-8859-1"), "UTF-8");
			return keyValue;
		} catch (Exception e) {
			return key;
		}
	}

}
	    

Após o pacote de recursos e o utilitário estarem prontos, o aplicativo é notificado com relação a qual idioma deve ser usado quando for ativado. Application.java é a entrada de um aplicativo RCP. Recomenda-se inicializar o pacote de recursos no método start(). Locale.getDefault() retorna o código de idioma do sistema padrão e o código do idioma retornado é passado para CustomString.setLocale(), conforme mostrado abaixo. O aplicativo irá inicializar o pacote de recursos usando o código de idioma do sistema.


Lista 3. Configurar Código do Idioma em Application.java
			
	public Object start(IApplicationContext context) {
		CustomString.setLocale(Locale.getDefault());
		...
		}
			

O pacote de recursos comum está disponível para todo o aplicativo agora. A próxima seção explica como chamar o pacote de recursos na UI.



Voltar para parte superior


Barra de Ferramentas, Menu e Diálogo

Em um aplicativo RCP, as entradas de menu e da barra de ferramentas são representadas como ações. O menu e a barra de ferramentas podem ser incluídos por código ou extensão. Nossa amostra registra ações de menu por código. Na classe de definição de ação, o rótulo de ação é definido no construtor pelo método setText(). O texto será exibido como um rótulo de menu. Como se pode ver, o texto agora está codificado permanentemente somente para o inglês. O código modificado substitui "Say Hello" usando o pacote de recursos no método setText().


Lista 4. Configurar Texto de Ação em HelloAction.java para o Menu e a Barra de Ferramentas

public HelloAction(IWorkbenchWindow iworkbenchwindow) {
	this.window = iworkbenchwindow;
	this.setText("Say Hello");
	this.setImageDescriptor(WorkbenchImages.
	getImageDescriptor(IWorkbenchGraphicConstants.IMG_VIEW_DEFAULTVIEW_MISC));
	// Must setId,otherwise can not leverage Register method
	setId("helloworld.actions.HelloAction");
	window.getSelectionService().addSelectionListener(this);
	}
	
	/**
	Modified Code
	**/
	public HelloAction(IWorkbenchWindow iworkbenchwindow) {
	....
		this.setText(CustomString.getString("MENU_FILE_SAY_HELLO"));
	....
	}
			

Diálogos têm código diferente para mostrar texto na UI, mas o método de globalização é o mesmo. É possível usar a mesma abordagem para globalizar outras UIs geradas pelo código Java — sem limitar-se ao menu, barra de ferramentas e diálogo.


Lista 5. Configurar Título e Mensagem do Diálogo

		MessageDialog.openInformation(PlatformUI.getWorkbench()
				.getActiveWorkbenchWindow().getShell(),
				"Hello",
				"Hello! This is a sample!");
		
		/**
		Modified Code
		**/
		MessageDialog.openInformation(PlatformUI.getWorkbench()
				.getActiveWorkbenchWindow().getShell(),
				CustomString.getString("DIALOG_TITLE"),
				CustomString.getString("DIALOG_MESSAGE"));
			

Até o momento, a globalização da UI é semelhante a um aplicativo Java típico. A próxima seção introduz as características de um aplicativo RCP.

Voltar para parte superior


Tela Inicial

A tela inicial é uma imagem que aparece enquanto o aplicativo está sendo carregado. Notifica o usuário que o programa está sendo carregado e fornece informações do aplicativo, como o nome do produto e copyright. Geralmente, a tela inicial para um aplicativo RCP é denominada splash.bmp e está sob a pasta-raiz do projeto de plug-in. No entanto, splash.bmp está sob a pasta-raiz somente para o inglês. Para fornecer telas iniciais diferentes de acordo com os idiomas em um aplicativo com diversos idiomas, é necessário seguir as regras de caminho da tela inicial. A Figura 3 mostra um exemplo.

Denomine a pasta-raiz do projeto de plug-in <plugin-root>. splash.bmp. Deve estar em <plugin-root>/nl/<Language Code>/<Country Code>. Por exemplo, é necessário colocar o arquivo da tela inicial para chinês simplificado em <plugin-root>/nl/zh/CN.


Figura 3. Regras de Caminho da Tela Inicial
Regras de Caminho da Tela Inicial



Voltar para parte superior


Página de Boas-vindas

A página de boas-vindas é fornecida pelo plug-in org.eclipse.ui.intro. É possível definir páginas especializadas que introduzem produtos para novos usuários. As páginas de boas-vindas são mostradas na primeira vez que um produto é iniciado e são uma maneira de educar usuários sobre as funções de um produto. A página de boas-vindas do RCP consiste em um arquivo de conteúdo introdutório e arquivos de páginas (HTML, imagens, CSS, etc.).

Como pode haver um conjunto de arquivos de páginas para cada idioma, é necessário usar diferentes introContent.xml para apontar para diferentes páginas de boas-vindas, de acordo com o código do idioma. O arquivo de conteúdo de introdução é referido por plugin.xml. Você abstrai o nome do arquivo de conteúdo de introdução em plugin.xml como cadeias externas. As cadeias externas são armazenadas em um arquivo de propriedades com a convenção de nomenclatura plugin_<Language_Code>_<Country_Code>.properties. Os relacionamentos entre os arquivos é mostrado na Figura 4.


Figura 4. Relacionamentos entre Páginas de Boas Vindas Globalizadas
Relacionamentos entre Páginas de Boas Vindas Globalizadas

O trecho de código na Lista 6 é de plugin.xml. A variável %welcome.page é usada no atributo de conteúdo em vez de no nome do arquivo codificado permanentemente introContent.xml. O nome do arquivo real é colocado em um arquivo de propriedades de forma que plugin.xml possa localizar o arquivo de conteúdo correspondente de acordo com o código do idioma.


Lista 6. Seção da Página de Boas-vindas do plugin.xml

   <extension
         point="org.eclipse.ui.intro.config">
      <config
            introId="helloworld.intro"
            content="%welcome.page"
            id="HelloWorld.configId">
         <presentation
               home-page-id="root">
            <implementation
                  kind="html"
                  os="win32,linux,macosx">
            </implementation>
         </presentation>
      </config>
   </extension>
		

Vamos usar chinês como um exemplo. Quando os usuários ativam o aplicativo Hello World no ambiente em chinês, plugin.xml localizará o arquivo de cadeias de caracteres externas em chinês plugin_zh_CN.properties e obterá o nome do arquivo de acordo com o nome da chave welcome.page no arquivo de propriedades. O arquivo de conteúdo em chinês introContent_zh_CN.xml será usado, conforme mostrado abaixo.


Lista 7. Nome do Arquivo de Conteúdo de Introdução em plugin_zh_CN.properties

   #Properties file for HelloWorld
Bundle-Name = HelloWorld Plug-in
perspective.name = RCP Perspective
product.name = Hello World
welcome.page=welcome/introContent_zh_CN.xml
	

É possível ver como o arquivo introContent_zh_CN.xml aponta para a página de boas-vindas em chinês no formato HTML. welcome_zh_CN.html é um arquivo HTML que possui informações de introdução do produto em chinês. As pessoas que usam o aplicativo no S.O. em chinês verão a página de boas-vindas em Chinês.


Lista 8. Página de Boas-vindas Configurada em introContent_zh_CN.xml

<?xml version="1.0" encoding="utf-8" ?>
<introContent>
    <page id="root" content="welcome_zh_CN.html"/>
</introContent>
			



Voltar para parte superior


Plug-in e Produto

As informações no plug-in e no produto, como o nome do produto, o título da janela principal e o texto About, também podem ser globalizadas. Essas informações são armazenadas no plugin.xml. É possível usar a mesma abordagem de globalização como com a página de boas-vindas. Somente plugin.xml e plugin.properties são necessários para esse esforço. Todas as informações em plugin.xml podem ser externalizadas para plugin.properties.


Lista 9. Seção de Informações do Produto de plugin.xml

   <extension
         id="product"
         point="org.eclipse.core.runtime.products">
      <product
            application="HelloWorld.application"
            name="%product.name">
         <property
               name="windowImages"
               value="icons/alt_window_16.gif,icons/alt_window_32.gif">
         </property>
         <property
               name="appName"
               value="%product.name">
         </property>
         <property
               name="aboutText"
               value="%about.text">
         </property>
      </product>
   </extension>
			

Usando o arquivo plugin.properties anterior, é possível incluir mais duas propriedades: product.name e about.text. O valor de product.name é mostrado no título da janela e no menu about. O valor de about.text é mostrado quando o diálogo About é aberto.


Lista 10. plugin.properties

#Properties file for HelloWorld
Bundle-Name = HelloWorld Plug-in
perspective.name = RCP Perspective
welcome.page=welcome/introContent.xml
product.name = Hello World
#About text has multiple line.
about.text=This is HelloWorld\n\
\n\
Version 1.0
			

Se o arquivo de propriedades contiver caracteres não ASCII, como o nome do produto ou o texto about, é necessário converter o arquivo das codificações nativas para ASCII com Unicode escapado. <JDK_HOME>\bin\native2ascii pode ser usado para concluir a conversão. Para o pacote de recursos em chinês plugin_zh_CN.properties, é necessário fazer a conversão. Após a conversão, plugin_zh_CN.properties tem a aparência da Lista 11.


Lista 11. plugin_zh_CN.properties

#Properties file for HelloWorld
Bundle-Name = HelloWorld Plug-in
perspective.name = RCP Perspective
product.name = \u4f60\u597d
welcome.page=welcome/introContent_zh_CN.xml
about.text=\u8fd9\u662f\u4e00\u4e2a\u4f8b\u5b50\n\
\n\
\u7248\u672c 1.0



Voltar para parte superior


Elementos Padrão de UI do Eclipse

O Eclipse possui alguns elementos de UI que fazem parte de seu aplicativo, como o botão para maximizar e minimizar janela da dica de ferramenta. Para a UI de seu aplicativo, também é necessário globalizar esses elementos de UI. Felizmente, o Eclipse ajuda a resolver o problema. Faça download do pacote de idiomas para o Elipse e coloque-o sob o diretório plug-ins de seu aplicativo RCP. Os elementos de UI serão globalizados automaticamente quando você ativar seu aplicativo.



Voltar para parte superior


Resumo

Há muitos tipos de elementos de UI em um aplicativo RCP. É necessário usar diferentes abordagens para globalizar diferentes elementos de UI. Este artigo introduziu a implementação de globalização (G11N) da barra de ferramentas, menu, diálogo, tela inicial, página de boas-vindas, informações sobre o produto e elementos padrão de UI do Eclipse.

Apesar de o aplicativo Hello World de amostra ter funções muito limitadas, cobriu a maioria dos elementos de UI. Agora é possível construir uma UI suportada integralmente por globalização para seu aplicativo RCP.




Voltar para parte superior


Download

DescriçãoNomeTamanhoMétodo de download
Hello Worldos-eclipse-globalrcp-HelloWorld.zip161KBHTTP
Informações sobre métodos de download


Recursos

Aprender

Obter produtos e tecnologias

Discutir
  • Os newsgroups da Plataforma Eclipse devem ser sua primeira parada para discutir questões referentes ao Eclipse. (Selecionar isso ativará seu aplicativo de leitura de notícias Usenet padrão e abre eclipse.platform.)

  • Os newsgroups do Eclipse possuem muitos recursos para pessoas interessadas em usar e estender o Eclipse.

  • Participe dos blogs do developerWorks e envolva-se na comunidade do developerWorks.



Sobre os autores

Wei Wang é um engenheiro de software no Laboratório de Desenvolvimento de Software da IBM na China. Seu trabalho foca tecnologias de cliente de computação disseminada.


Yuan Yao Deng

Yuan Yao Deng é um desenvolvedor em ECM Widgets. Tem mais de cinco anos de experiência no desenvolvimento do Eclipse.




Avalie esta página


Reserve um instante para completar este formulário para nos ajudar a servi-lo melhor.



 


 


Não
são úteis
Extremamente
úteis