2015-11-01 225 views
0

我發現this,這是什麼,我想這樣做是非常有用的,但有辦法讓在INLIST什麼遵循Grails的國際國際化INLIST

感謝

回答

0

我發現workaround,我認爲它可以幫助..

1的toString()

正如您所知,腳手架屏幕僅通過所示對象的toString()方法在選擇和下拉列表中輸出值。我們可以用硬編碼的翻譯構造每個枚舉,並且toString()返回該值。

class Product { 

enum Status { 

    AVAILABLE("Beschikbaar"), SOLD_OUT("Uitverkocht") 

    final String value 
    Status(String value) { 
     this.value = value 
    } 

    String toString() { 
     value 
    } 
} 

String name 
Status status 

static constraints = { name blank: false, unique: true } 
} 

枚舉的實際名稱現在只出現在生成的HTML:

<select name="status" required="" id="status" > 
<option value="AVAILABLE" >Beschikbaar</option> 
    <option value="SOLD_OUT" >Uitverkocht</option> 
    </select> 

2. MessageSourceResolvable

現在,你可能會明白上面的硬編碼解決方案僅適用於一種語言,其中一種硬編碼在enum中elf - 從現在起,應用程序實際需要支持第二種語言時會導致問題:-)那麼我們如何利用事實,即我們已經在其中放置了其他消息密鑰的message_XX.properties? 使用底層的Spring框架。讓我們的枚舉實現org.springframework.context.MessageSourceResolvable例如像這樣:

enum Status implements org.springframework.context.MessageSourceResolvable { 

AVAILABLE, SOLD_OUT 

public Object[] getArguments() { [] as Object[] } 

public String[] getCodes() { [ name() ] } 

public String getDefaultMessage() { "?-" + name() } 
} 

現在我們可以爲每一個枚舉提供我們messages_nl.properties值有:

product.label=Product 
product.name.label=Naam 
product.status.label=Status 
AVAILABLE=Beschikbaar 
SOLD_OUT=Uitverkocht