Tenho uma action chamada SystemAction que implementa ActionSupport. No mesmo pacote tenho dois arquivos de properties:
SystemAction_en.properties
SystemAction_pt_BR.properties
No webwork.properties tenho a propriedade webwork.locale=pt_BR e mesmo assim o texto mostrado está sendo o do arquivo SystemAction_en.properties.
No meu template eu tenho:
Não, não estou utilizando getText dentro da action. Mas não entendí a pergunta.
Só mais um detalhe: a action que está sendo executada é uma classe filha de SystemAction.
Não sei se tem algo haver, mas não consegui utilizar:
#if( $actionErrors.size() > 0 )
...
#end
A princípio achei que essa variável (actionErrors) não “valesse” para validações (achando que erros de actions e erros de validações fosse algo que recebesse tratamento diferenciado). Mas fui dar uma bisbilhotada no código (classes RequiredFieldValidator, FieldValidatorSupport, ValidatorSupport) e ví que os erros de validações são adicionados com ‘addActionError’. Então, não sei pq não funcionou.
Só pra atualizar, eu estava utilizando:
#foreach( $error in $action.getErrors() )
mas getErrors está deprecada, então estou utilizando:
#foreach( $error in $action.getFieldErrors() )
Resumindo, ainda não sei pq ele continua localizando a chave pelo arquivo SystemAction_en.properties sendo que meu locale está setado para pt_BR.
[quote=“maresp”]Não, não estou utilizando getText dentro da action. Mas não entendí a pergunta.
Só mais um detalhe: a action que está sendo executada é uma classe filha de SystemAction.[/quote]
O getText e resposavel por “pegar” sua chave definida nos arquivos de Locale e colocar o valor correspondente ao locale selecionado!
Costumo utizar assim na action:
//Assumindo que $error possua a chave da mensagem
#foreach( $error in $action.getErrors() )
<p align="center">
<font color="red">$action.getText($error)</font>
</p>
#end
Da action que você pode testar se existe chamando hasActionErrors e iteranto sobre o getActionErrors;
Dos campos que você testa com hasFieldErrors e manipula com getFieldError (ou coisa assim).
A diferenca eh que os fieldErross estão ligados a um campo e as tags do WW usam pra colocar a mensagem diretamente no campo (e marca-lo como errorLabel) enquanto actionErrors são apenas uma lista.
[quote=“aborges”]Acho q vc nao leu direito o primeiro post dele:
Nao sou expert em WW, mas acho q isso resolve o locale.
Me corrija c eu estiver errado, certo ? [/quote]
Me desculpa, mas eu li sim o primeiro post dele.
Segue.
[quote]Internacionalização
Esse recurso do Webwork torna mais fácil a tradução do site, podendo ser
utilizado para simples mensagens de erros até o conteúdo do site.
Para definir o idioma do usuário, o Webwork busca o locale da requisição
http.
Os arquivos com as traduções devem ter no mesmo nome da action +
.properties. [/quote]
Não teria muita lógica se fosse diferente. Se é para adequar o teu site a cada usuario que usamos I18N nada mais normal que buscar pela localização dele.
Estranho. Verifica a Locale o que o WW ta usando quando ele chama actions.
[quote]Resource bundles are searched in the following order:
ActionClass.properties
BaseClass.properties (all the way to Object.properties)
Interface.properties (every interface and sub-interface)
package.properties (every of every base class, all the way to java/lang/package.properties) [/quote]
O WW faz a busca ainda da seguinte maneira.
ActionClass_<LOCALE>.properties
Se ele não encontra o arquivo para a Locale do usuario ele vai pro arquivo default sem locale.
smota:
Tá certo… concordo, eles tem tratamento diferenciado mesmo. Fiz confusão pq minha action tb estava retornando ERROR.
aborges:
Não estou utilizando getText pq ao iterar sobre os erros o container já sabe o que ele precisa procurar através do arquivo MinhaAction-validation.xml, onde vc preenche o atributo key da tag message.
fabgp2001:
tudo bem que o webwork busca o locale da requisição http, mas não é para isso que serve o parâmetro webwork.locale do webwork.properties?
[quote=“maresp”]fabgp2001:
tudo bem que o webwork busca o locale da requisição http, mas não é para isso que serve o parâmetro webwork.locale do webwork.properties?[/quote]
Sim, serve para setar a Locale padrão, justamente por isso perguntei a tua Locale, se estivesse como en seria normal ele ta pegando este arquivo. Agora como tu disse que a tua locale ta como pt_BR ta estranho. Por isso pedi para ver a qual locale ele ta usando no request do http, tem como fazer isso?
[quote=“maresp”]Bem o problema mudou um pouco de figura.
Fiz um $action.getLocale() na página e saiu en_US. Menos mal, mas pq en_US se no webwork.properties tá pt_BR?[/quote]
Era o que eu imaginava. Tu ja verificou se o tomcat (ou container que tu ta usando) ta achando o webwork.properties? Ou se não ta dando erro no carregar o arquivo??
Provavelmente seu browser é que está enviando … no firefox isso tá em TOOLS -> OPTIONS -> GENERAL -> LANGUAGES
Mesmo com SO em portuga o danado fica com o locale padrao para en_US e depois en … vc tem que adicionar na mao pt_BR e aproveita coloca no topo da sua lista.