我试图让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 toString() {
id.toString()
}
String getKey() {
name()
}
}
关于如何实现这一目标的任何提示?我试图将完整的类名放在本地化中,但这似乎没有用
<g:select from="${Notification.values()}" name="notification" valueMessagePrefix="full.path.to.package.Notification"/>
最佳答案
抱歉造成延迟,但是我认为这可以为您提供帮助。我在使用枚举和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"/>
根据Grails文档中有关select标记的说明,将使用您放入属性valueMessagePrefix中的值,后跟一个dot(.),然后是枚举元素的值。这样,它将转到message.properties文件并搜索您之前放置的行。
现在,您需要做的另一件事是例如在数据列表中,显示每条记录的枚举值。在这种情况下,您需要执行以下操作:
${message(code:'enum.value.'+fieldValue(bean: someDomainClass, field: "notification"))}
这是如果您的域类具有一个类型为Notification的属性。
希望这对您有所帮助。
再见!
关于grails - 如何在g :select?中将i18n与Grails/Groovy枚举一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7571808/