-
Notifications
You must be signed in to change notification settings - Fork 0
/
chapter-04-internationalization.tex
153 lines (110 loc) · 6.39 KB
/
chapter-04-internationalization.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
\section{Internacionalização}
Internacionalizar aplicações é cada vez mais uma tarefa comum em um desenvolvimento para web e é um dos processos importantes para o aumento da acessibilidade do sistema. O \texttt{framework} deve permitir mecanismo para facilitar a utilização de diversas línguas. Para tal, foi construido um conjunto de ferramentas para facilitar esse processo. A maioria dos frameworks web tem a sua maneira particular de prover esse mecanismo, mas o que muita gente desconhece é que existe uma forma padrão de fazer isso, definida na especificação do Java EE, através da JSP Standard TagLibs.
O MDArte utiliza esse mecanismo e já provê ela configurada. Assim, a especificação de novas linguas se torna uma tarefa ainda mais fácil.
Segue abaixo os passos para a definições de novas linguas.
\subsection{Mensagens}
Cada arquivo properties conterá todas as traduções do sistema. Todos os textos
do sistemas serão representados por uma \texttt{key}. Cada \texttt{key} e sua
respectiva mensagem, ou seja, \texttt{label} serão listadas em cada arquivo como
properties. Abaixo segue um exemplo:
\begin{lstlisting}[language=xml, frame=single, breaklines=true]
label.key=Mensagem
\end{lstlisting}
Todas os recursos modelados no diagrama de atividades serão gerados com uma \texttt{key}.
Caso essa \texttt{key} não esteja no arquivo properties, o sistema utilizará a
\texttt{key} como \texttt{label} contudo sem o ponto.
Cada uma das possibilidades será abordada a seguir.
\subsubsection{Título de uma Página}
Todo título de página é gerado com uma key para o desenvolvedor possa definir no
custom-resources.
\begin{lstlisting}[language=html, frame=single, breaklines=true]
<tiles:put name="title" type="string">
<bean:message key="pagina.exemplo.title"/>
</tiles:put>
\end{lstlisting}
\subsubsection{Campo ou Botão de uma Página}
Todo campo ou botão é gerado com uma key definida pelo o nome do caso de uso
somado com o nome do campo/botão. Segue abaixo um exemplo.
\begin{lstlisting}[language=html, frame=single, breaklines=true]
<td class="field">
<s:set name="__value" value="#session.form.nome"/>
<div id="divnomeConsultaCursoUC" class="textfield field">
<label class="textfieldLabel" for="nome"><bean:message key="consulta.curso.uc.preencha.campos.consulta.curso.param.nome"/></label>
<s:textfield id="nomeConsultaCursoUC" name="nome" label="%{getText('consulta.curso.uc.preencha.campos.consulta.curso.param.nome')}" value="%{#session.form.nome}" title="" styleId="consultaCursoNome" />
</div>
\end{lstlisting}
\subsubsection{Exception}
Toda mensagem carregando uma \texttt{exception} também é substituída quando a
\texttt{key} na \texttt{exception} é encontrada no \texttt{custom-resource}.
Segue abaixo um exemplo.
\begin{lstlisting}[language=java, frame=single, breaklines=true]
throw new Exception("ocorre.erro.esperado");
throw new Exception("ocorre.erro.nao.esperado", exception);
\end{lstlisting}
Existem algumas funções que não interrompem a execução, mas possui o mesmo
efeito da \texttt{exception}. Segue abaixo um exemplo.
\begin{lstlisting}[language=java, frame=single, breaklines=true]
saveErrorMessage(request, "informando.erro.key"); //Struts 1
saveWarningMessage(request, "informando.aviso.key"); //Struts 1
saveSuccessMessage(request, "informando.sucesso.key"); //Struts 1
saveErrorMessage("informando.erro.key", container); //Struts 2
saveWarningMessage("informando.aviso.key", container); //Struts 2
saveSuccessMessage("informando.sucesso.key", container); //Struts 2
\end{lstlisting}
A função \texttt{saveErrorMessage} gera a seguinte mensagem na página:
\begin{figure}[H]
\centering
\includegraphics[scale=0.75]{files/imgs/internacionalizacao-00.png}
\caption{Mensagem de erro}
\label{mensagem_erro}
\end{figure}
\subsubsection{Passagem de Parâmetros}
Existe a possibilidade de passar parâmetros para a mensagem. Será passando um
\texttt{array} de \texttt{string} e na mensagem existirá marcadores informando
onde será colocado o conteúdo do \texttt{array}.
\textbf{Exemplo:}
\texttt{custom-resources.properties}
\begin{lstlisting}[language=xml, frame=single, breaklines=true]
label.key=Mensagem com parametro {0}
\end{lstlisting}
\texttt{Código:}
\begin{lstlisting}[language=java, frame=single, breaklines=true]
String[] parametro = new String[1];
parametro[0] = "param1";
saveErrorMessage("label.key", parametro, container); //Struts 2
//saveErrorMessage(request, "label.key", parametro); //Struts 1
\end{lstlisting}
Assim será exibido a mensagem \texttt{Mensagem com
parametro param1} na figura abaixo:
\begin{figure}[H]
\centering
\includegraphics[scale=0.75]{files/imgs/internacionalizacao-01.png}
\caption{Mensagem de erro com parâmetros}
\label{mensagem_erro_parametro}
\end{figure}
\subsection{Arquivo de Configurações}
Para dar suporte a diversas linguas é necessário criar um arquivo com as \texttt{keys} do sistema para cada lingua e adicionar algumas configurações no \texttt{struts}. O \texttt{framework} MDARrte configura automaticamente o \texttt{struts} para facilitar o desenvolvedor nessa tarefa. Para tal, edite o arquivo \textbf{<DiretorioProjeto>}/mda/conf/andromda.xml e na propriedade \texttt{languages} informe os locales que serão utilizados.
Exemplo:
\begin{lstlisting}[language=xml, frame=single, breaklines=true]
<property name="languages">pt,en,fr</property>
\end{lstlisting}
Após a geração utilizando essa configuração será criado novos três arquivos:
\begin{lstlisting}[language=xml, frame=single, breaklines=true]
custom-resources_en.properties
custom-resources_pt.properties
custom-resources_fr.properties
\end{lstlisting}
Além do arquivo já criado no geração da aplicação:
\begin{lstlisting}[language=xml, frame=single, breaklines=true]
custom-resources.properties
\end{lstlisting}
Automaticamente o sistema irá detectar qual locale do browser que o usuário está
utilizando e utilizará o locale correto. Caso não exista o locale pré-definido,
o sistema utilizará o \texttt{custom-resources} padrão.
O desenvolvedor poderá forçar um locale específico pelo código. Exemplo:
\begin{lstlisting}[language=java, frame=single, breaklines=true]
//Recuperando o Locale
Locale locale = (Locale) request.getSession().getAttribute("org.apache.struts.action.LOCALE");
//Definindo um Locale
request.getSession().setAttribute("org.apache.struts.action.LOCALE", new Locale("pt", "BR"));
\end{lstlisting}