如何在g:select中将i18n与Grails/Groovy枚举一起使用?
我试图让i18n本地化在Grails/Groovy枚举上工作如何在g:select中将i18n与Grails/Groovy枚举一起使用?,grails,groovy,internationalization,enums,Grails,Groovy,Internationalization,Enums,我试图让i18n本地化在Grails/Groovy枚举上工作 public enum Notification { GENERIC(0), CONFIRM_RESERVATION(100), CONFIRM_ORDER(200), CONFIRM_PAYMENT(300), final int id; private Notification(int id) { this.id = id } String t
public enum Notification {
GENERIC(0),
CONFIRM_RESERVATION(100),
CONFIRM_ORDER(200),
CONFIRM_PAYMENT(300),
final int id;
private Notification(int id) {
this.id = id
}
String toString() {
id.toString()
}
String getKey() {
name()
}
}
有没有关于我如何做到这一点的提示?我试图将全名等放在本地化中,但这似乎不起作用
<g:select from="${Notification.values()}" name="notification" valueMessagePrefix="full.path.to.package.Notification"/>
罗布·弗莱彻(Rob Fletcher,2009年起)在中展示了一种方法
确保枚举类实现org.springframework.context.MessageSourceResolvable
然后实施很抱歉耽搁了,但我认为这会对您有所帮助。我在enum和i18n上遇到了完全相同的问题。这就是我找到的解决方案: 在前面定义的枚举之后,在message.properties文件中为枚举的每个值放置一个条目,例如:
enum.value.GENERIC
enum.value.CONFIRM_RESERVATION
enum.value.CONFIRM_ORDER
enum.value.CONFIRM_PAYMENT
然后,如果要在select元素中显示枚举值,请执行以下操作:
<g:select from="${path.to.package.Notification.values()}" keys="${path.to.package.Notification?.values()}" name="notification" valueMessagePrefix="enum.value"/>
${message(code:'enum.value.'+fieldValue(bean: someDomainClass, field: "notification"))}
这是如果您有一个域类,其中一个属性的类型为Notification
希望这有帮助。
再见 您需要实现
MessageSourceResolvable
来提供代码:
enum Notification implements org.springframework.context.MessageSourceResolvable {
GENERIC(0),
CONFIRM_RESERVATION(100),
CONFIRM_ORDER(200),
CONFIRM_PAYMENT(300),
final int id;
private Notification(int id) {
this.id = id
}
String toString() {
id.toString()
}
String getKey() {
name()
}
public Object[] getArguments() { [] as Object[] }
//This methods do the trick
public String[] getCodes() { [ "notification." + name() ] }
public String getDefaultMessage() { name() }
}
并在i18n中定义您的消息:
notification.GENERIC=Generic
notification.CONFIRM_RESERVATION=Confirm reservation
notification.CONFIRM_ORDER=Confirm order
notification.CONFIRM_PAYMENT=Confirm payment
选择标记应如下所示:
<g:select name="type" from='${Notification.values()}' optionKey="id"/>
你应该得到+100,但因为我做不到,所以我得到了+1!谢谢