Grails:来自 Java POJO 的国际化

Grails: Internationalization from Java POJO

我正在尝试使用我在 src/java/Gender.java class.

中定义的 Java POJO 中的 i18n 国际化

Gender Class:

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? 我试图避免为性别创建 table。

我正在使用:

谢谢!

您可以使用 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