Grails:Java POJO的国际化



我正试图从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()方法和messageSourcebean从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

最新更新