我只是阅读了很多并用Google搜索,但我现在很沮丧。
我有一个国家/地区域模型
class Country{
String countryCode //maybe EN, DE, CH...
}
现在我想在里面翻译。我在documentation(以及谷歌)中读到可以使用“id”从翻译消息属性文件中选择它。类似的东西:
country.code.1=America
country.code.2=England
country.code.3=Germany
但这不是我想要的。我希望有类似的东西:
country.code.US=America
country.code.EN=England
country.code.DE=Germany
所以,我从stackoverflow找到了一个可能的解决方案:translate a HTML select element in Grails 这对我意味着我必须这样说:
<g:select name="country"
from="${allCountries}"
value="${country}"
optionKey="id"
optionValue="${ {countryCode->g.message(code:'country.code.'+countryCode)} }"/>
但我的结果是在下拉列表中:“country.code.grails.Country:1”(以及每个国家/地区等)
如果我改变gsp-g的最后一行:选择实现为:
[...]optionValue="${ {countryCode->g.message(code:'country.code.US')}
你看到硬编码!这适用于:-D
希望你能帮帮我,非常感谢你!
答案 0 :(得分:4)
有三种可能性:
使用contryCode
代替id
,而不是将ID发送到控制器:
<g:select name="contryByCountryCode"
from="${countryCodes}"
valueMessagePrefix="com.yourcompany"/>
将产生:
<select name="contryByCountryCode" id="contryByCountryCode" >
<option value="US">United States<option>
...
</select>
如果您配置了正确的消息。在后端,您需要执行以下操作:
def country = Country.findByCountryCode(params.contryByCountryCode)
手动执行:
<select name="contryByCountryCode" id="contryByCountryCode" >
<g:each in="${countryCodes}" var="country">
<option value="${country.id}">
${message(code:"prefix" + country.countryCode)}
<option>
</g:each>
</select>
修补g:select
,以便optionValue
和messagePrefix
定义; - )