2015-11-01 277 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