2011-09-27 15 views
8

sto cercando di ottenere i18n localizzazione lavorando su un/enum Groovy Grails,Come usare i18n con un enumerazione Grails/Groovy in un g: select?

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() 
    } 
} 

Eventuali suggerimenti su come potrei ottenere questo? Ho provato a mettere il pieno ecc nomeclasse in una localizzazione ma questo noet sembra funzionare

<g:select from="${Notification.values()}" name="notification" valueMessagePrefix="full.path.to.package.Notification"/> 

risposta

13

Ci scusiamo per il ritardo ma penso che questo potrebbe essere di aiuto. Stavo avendo lo stesso identico problema con enum e i18n. Questa è la soluzione che ho trovato:

In seguito alla vostra enum definiti in precedenza, nei vostri message.properties file messo una voce per ogni valore della enum per esempio:

enum.value.GENERIC 
enum.value.CONFIRM_RESERVATION 
enum.value.CONFIRM_ORDER 
enum.value.CONFIRM_PAYMENT 

Poi, quando si desidera mostrare i valori della enum in un elemento di selezione poi procedere come segue:

<g:select from="${path.to.package.Notification.values()}" keys="${path.to.package.Notification?.values()}" name="notification" valueMessagePrefix="enum.value"/> 

Secondo la documentazione Grails per quanto riguarda il tag select, il valore si mette in l'attributo valueMessagePrefix viene utilizzata seguita da un punto e poi il valore (.) dell'elemento dell'enum. In questo modo andrebbe nel file message.properties e cercherà le linee che hai inserito prima.

Ora, l'altra cosa che dovresti fare è ad esempio in una lista di dati, mostrare il valore dell'enum per ogni record. In questo caso è necessario fare come segue:

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

Questo è se si dispone di una classe di dominio con un attributo di tipo di notifica.

Spero che questo abbia aiutato. Ciao!

+1

Ti meriti un +100 ma dato che non potevo farlo, ho fatto +1! Grazie. –

7

Un metodo è illustrato nella this blog post da Rob Fletcher (dal 2009)

Assicurarsi che la classe enum implements org.springframework.context.MessageSourceResolvable

Quindi implementare the methods it defines

Problemi correlati