inList中的国际化

时间:2015-11-01 01:56:02

标签: grails internationalization

我发现this这对我想要做的事情非常有用,但有没有办法在 inList 中按照 Grails国际化

由于

1 个答案:

答案 0 :(得分: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本身中硬编码的 - 这将导致问题,因为从现在起一个月内您的应用程序实际上需要支持第二语言:-)那么如何我们是否利用了已经拥有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