Providing localized messages
Our login action produced error messages. Of cause, we have to provide the corresponding resources to be able to show up textual messages to the user.
Let's recover the code parts in our login action:
if (!users.containsKey(user)) {
Message.Arg arg = new Message.ValueArg(user);
Message message = new Message("messages", "login.user.unknown", arg);
MessageUtils.saveError(request, "user", message);
return getActionConfig().getSourceDispatchConfig();
}
if (!users.get(user).equals(request.getParameter("password"))) {
Message message = new Message("messages", "login.failed");
MessageUtils.saveError(request, message);
return getActionConfig().getSourceDispatchConfig();
}
In the first code block, we reference a message resource with bundle name messages and resource key login.user.unknown. Furthermore, this message takes the (unknown) user name as a parameter.
In the second block, we reference a message resource with the same bundle name and resource key login.failed. This message takes no parameters.
Since messages use Java's java.util.ResourceBundle class to resolve messages, we simply have to place a messages.properties file into our classpath, containing messages in our default language. That is, save the following as /WEB-INF/classes/messages.properties:
login.user.unknown = User id {0} is unknown.
login.failed = Login failed.
That's it. Adding messages for other languages easy. For example, if you wanted to add a german message file, save it to /WEB-INF/classes/messages_de.properties.


