我正在尝试在 Grails/Groovy 枚举上进行 i18n 本地化,
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
然后,当您想在选择元素中显示枚举的值时,请执行以下操作:
<g:select from="${path.to.package.Notification.values()}" keys="${path.to.package.Notification?.values()}" name="notification" valueMessagePrefix="enum.value"/>
根据有关 select 标记的 Grails 文档,您放入属性 valueMessagePrefix 中的值将使用后跟一个点 (.),然后是枚举元素的值。这样它就会转到 message.properties 文件并搜索您之前放置的行。
现在,您需要做的另一件事是例如在数据列表中,显示每个记录的枚举值。在这种情况下,您需要执行以下操作:
${message(code:'enum.value.'+fieldValue(bean: someDomainClass, field: "notification"))}
这是如果您有一个域类具有一个通知类型的属性。
希望这有帮助。
再见!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)