2011-09-27 47 views
8

我想獲得國際化的定位上的Grails/Groovy的枚舉工作,如何在g中使用帶有Grails/Groovy枚舉的i18n: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() 
    } 
} 

我如何能做到這一點的任何提示?我試圖把完整的類名等在本地化但這NOET似乎工作

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

回答

13

對不起,但我認爲這可以幫助你。我對enums和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"/> 

根據有關選擇標籤Grails文檔,你把屬性的值valueMessagePrefix用於後面跟着一個點,然後將值(。)枚舉的元素。這樣它就會轉到message.properties文件並搜索您之前放置的行。

現在,您需要做的另一件事是例如在數據列表中,顯示每條記錄的枚舉值。在這種情況下,你需要做的,如下所示:

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

這是,如果你有一個域類型通知的一個屬性。

希望這有助於。 再見!

+1

你應該得到+100,但因爲我做不到,所以我做了+1!謝謝。 –

7

一個由羅布·弗萊徹(2009年)在this blog post顯示方法

確保您的枚舉類implements org.springframework.context.MessageSourceResolvable

然後執行the methods it defines