Mar*_*rco 8 grails groovy enums internationalization
我正在尝试使用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()
}
}
Run Code Online (Sandbox Code Playgroud)
有关如何实现这一目标的任何提示?我试图将完整的类名等放在本地化中,但这似乎不起作用
<g:select from="${Notification.values()}" name="notification" valueMessagePrefix="full.path.to.package.Notification"/>
Run Code Online (Sandbox Code Playgroud)
小智 13
对不起延迟,但我认为这可以帮到你.我和enum和i18n有同样的问题.这是我找到的解决方案:
按照之前定义的枚举后,在message.properties文件中为枚举的每个值放置一个条目,例如:
enum.value.GENERIC
enum.value.CONFIRM_RESERVATION
enum.value.CONFIRM_ORDER
enum.value.CONFIRM_PAYMENT
Run Code Online (Sandbox Code Playgroud)
然后,当您想要在select元素中显示枚举的值时,请执行以下操作:
<g:select from="${path.to.package.Notification.values()}" keys="${path.to.package.Notification?.values()}" name="notification" valueMessagePrefix="enum.value"/>
Run Code Online (Sandbox Code Playgroud)
根据有关select标记的Grails文档,使用属性valueMessagePrefix中的值,后跟一个点(.),然后是枚举元素的值.这样它就会转到message.properties文件并搜索之前放的行.
现在,您需要做的另一件事是例如在数据列表中,显示每条记录的枚举值.在这种情况下,您需要执行以下操作:
${message(code:'enum.value.'+fieldValue(bean: someDomainClass, field: "notification"))}
Run Code Online (Sandbox Code Playgroud)
如果您的域类具有一个Notification类型的属性,则为此.
希望这有帮助.再见!
| 归档时间: |
|
| 查看次数: |
4328 次 |
| 最近记录: |