我发现this这对我想要做的事情非常有用,但有没有办法在 inList 中按照 Grails国际化
由于
答案 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