grails - 如何在g :select?中将i18n与Grails/Groovy枚举一起使用

标签 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 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/

相关文章:

database - 如何使用 Liquibase 删除 Grails 中的索引

Java,groovy REST 客户端比 Postman 慢 30 多倍

groovy - 如何评估groovy中的字符串

Java 世界的本地化方法 - 有什么隐含的含义吗?

java - 在 JSF 2.0 应用程序中使用 UTF-8 编码的 i18n 属性文件

asp.net-mvc - 支持多语言的ASP MVC技术

java - 使用 GROOVY SQL 从 SQL SERVER 存储过程获取结果集

grails - grails的getter方法返回属性对象的COPIES还是属性对象本身?

grails - Grails formRemote禁用的字段内容不会作为GSP的参数返回

unit-testing - 如何运行多个 Groovy 单元测试