Li a documentação a respeito de internacionalização, mas o exemplo disponível só cita como usar em páginas JSP.
Eu quero usar i18n na minha action, durante a validação, mas no exemplo do site (MyBooks) usa-se Strings.
Segue uma parte do código para entendimento:
public class MinhaAction extends BaseAction implements Validatable
{
private static final String FIELD_REQUIRED = "Campo obrigatório não-preenchido!";
private static final String INVALID_LENGTH = "Esse campo deve ter entre %min% e %max% caracteres!";
// ...
public void initValidator(Validator val, String innerAction) {
if (innerAction != null && innerAction.equals("addUser")) {
val.add("nome", new RequiredFieldRule(), FIELD_REQUIRED);
val.add("nome", new StringRule(4, 50), INVALID_LENGTH);
}
}
}
Nas variáveis FIELD_REQUIRED e INVALID_LENGTH é onde eu quero aplicar i18n.
public class HelloWorldValidator extends ValidationFilter {
private static final String FIELD_REQUIRED_ERROR = "required"; // to illustrate that this can be a string too
private static final int INVALID_USERNAME_LENGTH = 2;
private static final int INVALID_AGE = 3;
private static final int INVALID_PASSWORD_LENGTH = 4;
private static final int PASSWORD_DOES_NOT_MATCH = 5;
// Note: If you were not using i18n, you could have done this:
private static final String FIELD_REQUIRED_ERROR = "Field required!";
private static final String INVALID_USERNAME_LENGTH = "Username length invalid!";
private static final String INVALID_AGE = "Invalid age!";
private static final String INVALID_PASSWORD_LENGTH = "Invalide password length!";
private static final String PASSWORD_DOES_NOT_MATCH = "Passwords do not match!";
public void initValidator() {
add("username", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
add("username", new StringRule(6, 30), INVALID_USERNAME_LENGTH);
add("age", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
add("age", new IntegerRule(18, 50), INVALID_AGE);
add("password", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
add("password", new StringRule(4, 20), INVALID_PASSWORD_LENGTH);
add("password", new EqualRule("password", "passconf"), PASSWORD_DOES_NOT_MATCH);
add("passconf", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
}
}
Vc coloca os textos em /validation/HelloWorldValidator_loc.i18n
required = Required field cannot be left blank
2 = Your username must be between %min% and %max% characters long.
3 = You must be %min% years old or older.
4 = Your password must be between %min% and %max% characters long.
5 = Passwords do not match.
[/code]
Ok. Lembre-se que vc pode escolher entre ter um filtro separado para fazer a validação, deixando sua action bem limpa, ou vc pode escolher em fazer a validação na própria action, usando o filtro global ValidatorFilter.