5. Exemplo 04 – Internacionalização
Este exemplo retoma a internacionalização abordada no primeiro exemplo.
5.1. O projeto NetBeans
![]() | ![]() |
Nele encontramos:
- uma vista [Page1.JSP]
- dois ficheiros de mensagens [messages*.properties]
- nenhuma ação
5.2. Configuração do projeto
O ficheiro [struts.xml] é o seguinte:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- internacionalização -->
<constant name="struts.custom.i18n.resources" value="messages" />
<!-- pacote padrão -->
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<action name="index">
<result type="redirectAction">
<param name="actionName">Action1</param>
<param name="namespace">/actions</param>
</result>
</action>
</package>
<!-- pacote de ações -->
<package name="actions" namespace="/actions" extends="struts-default">
<action name="Action1">
<result name="success">/vues/Page1.JSP</result>
</action>
</package>
</struts>
- a linha 8 define uma constante Struts, que determina o nome do ficheiro das mensagens internacionalizadas, neste caso messages. Os ficheiros [messages_xx.properties] serão procurados no ClassPath do projeto. Por esse motivo, foram colocados aqui, na raiz de [Source Packages] e [1].
- linhas 21-23: definem uma ação [Action1] sem classe associada. Será então utilizada uma classe padrão do Struts, cujo método execute devolve a chave success. A vista [/vues/Page1.JSP] será então devolvida ao cliente. É importante compreender que isto não é o mesmo que chamar diretamente a vista [/vues/Page1.JSP]. Com efeito, a chamada de uma ação desencadeia a execução dos interceptores, o que não acontece com a chamada direta a uma vista. Um dos interceptores gere a internacionalização.
5.3. Os ficheiros de mensagens
messages.properties
page.texte=Ici, on met un texte fran\u00e7ais...
page.titre1=Fran\u00e7ais
page.titre2=Fran\u00e7ais
messages_en.properties
page.texte=Here, we put some english text...
page.titre1=English
page.titre2=English
Estes definem três chaves: page.texte, page.titre1 e page.titre2. O ficheiro [messages_en.properties] será utilizado se o idioma da página for o inglês (en). O ficheiro [messages.properties] será utilizado para todos os outros idiomas. Este é o ficheiro de mensagens predefinido. O idioma utilizado é:
- a do navegador do cliente, conforme as preferências enviadas ao servidor
- a solicitada por um pedido do cliente com o parâmetro request_locale=xx.
5.4. A vista [Page1.JSP]
A vista é a seguinte:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><s:text name="page.titre1"/></title>
</head>
<body>
<h1><s:text name="page.titre2"/></h1>
<s:text name="page.texte"/>
</body>
</html>
- linha 7: apresenta a mensagem da chave page.titre1
- linha 10: apresenta a mensagem de chave page.titre2
- linha 11: apresenta a mensagem de chave page.texte
5.5. Os testes
Vamos executar o projeto:
![]() |
- no [1], a página foi apresentada em francês. Foi utilizado o ficheiro [messages.properties] porque o navegador utilizado tinha o francês como idioma preferencial.
- no [3], a página foi apresentada em inglês. Foi utilizado o ficheiro [messages_en.properties] porque o URL [2] utilizou o parâmetro request_locale=en.
![]() |
No [4], é solicitada uma página em alemão (de). Como não existe nenhum ficheiro [messages_de.properties], é utilizado o ficheiro predefinido [messages.properties] [5].
No [6], define-se o inglês como idioma preferido do navegador.
![]() |
No [7], a ação [Action1] é solicitada sem parâmetros de idioma. A solicitação provém de um navegador cujo idioma preferido é o inglês (en). Por isso, é utilizado o ficheiro [messages_en.properties] em vez de [8].
A partir de agora, todos os projetos terão um único ficheiro [messages.properties] que será utilizado para todos os idiomas. Isto obrigará a escrever vistas que utilizem as chaves deste ficheiro. A internacionalização para o inglês consistirá em criar o ficheiro [messages_en.properties] com as mensagens em inglês. Não há mais nenhuma alteração a fazer.




