Как использовать i18n с перечислением Grails / Groovy в g: select? - PullRequest
8 голосов
/ 27 сентября 2011

я пытаюсь заставить 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"/>

Ответы [ 2 ]

13 голосов
/ 06 октября 2011

Извините за задержку, но я думаю, что это может помочь вам. У меня была точно такая же проблема с enums и 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, за которым следует точка (.), А затем значение элемента перечисления. Таким образом, он будет идти в файл message.properties и искать строки, которые вы положили раньше.

Теперь, другое, что вам нужно сделать, это, например, в списке данных показать значение перечисления для каждой записи. В этом случае вам нужно сделать следующее:

${message(code:'enum.value.'+fieldValue(bean: someDomainClass, field: "notification"))}

Это если у вас есть класс домена с одним атрибутом типа Notification.

Надеюсь, это помогло. Bye!

7 голосов
/ 27 сентября 2011

Один метод показан в этом сообщении в блоге Робом Флетчером (с 2009 г.)

Убедитесь, что ваш enum класс implements org.springframework.context.MessageSourceResolvable

Затем реализуйте методов, которые он определяет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...