2011-11-26 73 views
1

我剛剛讀了很多,並用google搜索,但我現在很沮喪。grails g:select i18n

我有一個國家的域模型

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 

所以,我發現從計算器一個可能的解決方案: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

希望你能幫我,非常感謝你!

回答

4

有3種可能:

  1. 而不是發送的ID控制器的,使用的contryCode代替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) 
    
  2. 手工進行:

    <select name="contryByCountryCode" id="contryByCountryCode" > 
        <g:each in="${countryCodes}" var="country"> 
        <option value="${country.id}"> 
         ${message(code:"prefix" + country.countryCode)} 
        <option> 
        </g:each> 
    </select> 
    
  3. 補丁g:select萬一optionValuemessagePrefix工作被定義;-)

+0

NO - 不起作用。我的下拉列表中填充了countryCode的數據庫值,例如'US','DE'等:-( – grailsInvas0r

+0

grails將通過查找來自「valueMessagePrefix +」的密鑰的消息來解析標籤。「+ value' – Chris

+0

對不起,你是對的!我編輯了我的回覆。 – Chris

相關問題