我正试图从src/java/Gender.java
类中定义的Java POJO中使用i18n国际化。
Gender
类:
public enum Gender {
NONE(0),
MALE(1),
FEMALE(2);
private Integer code;
Gender(final Integer code) {
this.code = code;
}
Integer code() {
return code;
}
}
我正在尝试为枚举的每个项使用一些本地化文本,类似于这样(以下代码不起作用!):
public enum Gender {
NONE(0, message("gender.none")),
MALE(1, message("gender.male")),
FEMALE(2, message("gender.female"));
private Integer code;
private String text;
Gender(final Integer code, final String text) {
this.code = code;
this.text = text;
}
Integer code() {
return code;
}
Integer text() {
return text;
}
}
问题:是否可以从Java POJO中使用messageSource
?我尽量避免创建一个性别表。
我正在使用:
- 圣杯2.4.4
谢谢
您可以使用toString()
方法和messageSource
bean从messages.properties
中获取enum
文本值,如:
import grails.util.Holders;
import org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest;
import org.codehaus.groovy.grails.web.util.WebUtils;
import org.springframework.context.MessageSource;
public enum Gender {
NONE(0, "none"),
MALE(1, "male"),
FEMALE(2, "female");
MessageSource messageSource = (MessageSource) Holders.getApplicationContext().getBean("messageSource");
private Integer code;
private String text;
Gender(final Integer code, final String text) {
this.code = code;
this.text = text;
}
Integer code() {
return code;
}
String text() {
return text;
}
@Override
public String toString() {
GrailsWebRequest webUtils = WebUtils.retrieveGrailsWebRequest();
return messageSource.getMessage("gender." + text, null, "default", webUtils.getLocale());
}
}
其中messages.properties
具有
gender.none=None
gender.male=Male
gender.female=Female