 | 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.
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
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.
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
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.
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.
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
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
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>
|
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
|
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.
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.
Download | Descrição | Nome | Tamanho | Método de download |
|---|
| Hello World | os-eclipse-globalrcp-HelloWorld.zip | 161KB | HTTP |
|---|
Recursos Aprender
-
Obtenha mais detalhes sobre Eclipse RCP, o conjunto mínimo de plug-ins necessários para construir um aplicativo rich client.
-
Faça um
tutorial do Eclipse RCP que cobre: criação de um primeiro aplicativo RCP; trabalho com comandos, visualizações, editores, diálogos, uso de preferências e páginas de preferências; uso de JARs externos; criação de um produto e determinação de marca; e inclusão de ajuda em um aplicativo RCP.
-
Aprenda mais sobre Códigos para a Representação de Nomes de Idiomas
(ISO 639.2) e os nomes de países e elementos de código
(ISO 3166-1 e os elementos correspondentes do código ISO 3166-1-alpha-2).
-
Globalizar seus Negócios On Demand
discute como a IBM foca a concorrência em um mercado internacional.
-
Verifique a "Lista de Leitura Recomendada do Eclipse."
-
Procure todo o conteúdo Eclipse no developerWorks.
-
Siga o developerWorks no Twitter.
-
Principiante para o Eclipse? Leia o artigo do developerWorks "Introdução à Plataforma Eclipse" para aprender sua origem e arquitetura e como estender o Eclipse com plug-ins.
-
Expanda suas qualificações no Eclipse verificando, no IBM developerWorks, os recursos do projeto Eclipse.
-
Para ouvir entrevistas e discussões interessantes para desenvolvedores de software, verifique os podcasts do developerWorks.
-
Permaneça atualizado com eventos técnicos e webcasts do developerWorks.
-
Assista e aprenda sobre tecnologias da IBM e de software livre e funções de produtos gratuitamente com as demos on demand do developerWorks.
-
Verifique as futuras conferências, feiras, webcasts e outros Eventos em todo o mundo que são de interesse para desenvolvedores de software livre da IBM.
-
Visite, no developerWorks, a Zona de Software Livre para obter informações extensivas de instruções, ferramentas e atualizações de projetos para ajudá-lo a desenvolver com tecnologias de software livre e usá-las com produtos IBM.
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 é um desenvolvedor em ECM Widgets. Tem mais de cinco anos de experiência no desenvolvimento do Eclipse. |
Avalie esta página
|  |