In my LocaleBean
Code:
/**
* Location of internationalization property files.
*/
public static final String BUNDLE_LOCATION = "com.foo.bar.web.i18n.messages";
/**
* Creates and adds <code>FacesMessage</code> to current <code>FacesContext</code>.
*
* <p>
* Uses {@link LocaleBean} to get <code>ResourceBundle</code>, which is used
* to get localized messages.
*
* @param severity represent message severity level
* @param summaryKey i18n key of message summary, displayed at top
* @param detailKey i18n key of message detail, can be <code>null</code> for no detail.
* @param params parameters in message detail. Example: Account {0} was ...
*
* @see FacesContext#addMessage(String, FacesMessage)
* @see FacesMessage
*/
public void createAndAddMessage(Severity severity, String summaryKey,
String detailKey, String... params) {
ResourceBundle messages = ResourceBundle.getBundle(BUNDLE_LOCATION,
getLocale());
FacesMessage facesMessage;
String summary = messages.getString(summaryKey);
if (detailKey != null) {
String detail = messages.getString(detailKey);
if (params != null && params.length > 0) {
MessageFormat messageFormat = new MessageFormat(detail);
detail = messageFormat.format(params);
}
facesMessage = new FacesMessage(severity, summary, detail);
} else {
facesMessage = new FacesMessage(severity, summary, "");
}
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
}
localeBean.createAndAddMessage(FacesMessage.SEVERITY_ERROR, "message_bad_credentials", "message_bad_credentials");