2011-08-04 19 views
3
翻譯一個HTML選擇元素

認爲這將是更容易....想象<g:select />這樣的:Grails中

<g:select name="type.id" from="${Type.list()}" 
      value="${domainInstance?.type?.id}" /> 

兩個領域類這樣的(請原諒我,如果這些人造類不無差錯)

class Domain { 
    Type type 
} 

class Type { 
    String name 
} 

我現在想翻譯select元素的條目。下面的代碼首先看了好:

<g:select name="type.id" from="${Type.list()}" 
      valueMessagePrefix="type.name" 
       value="${domainInstance?.type?.id}" /> 

,像這樣在messagebundle條目:

type.name.type1 = red 
type.name.type2 = green 

問題:不僅是文字被翻譯,但選擇鍵,太!

於是,我就添加optionKey='id'

<g:select name="type.id" from="${Type.list()}" 
     valueMessagePrefix="type.name" 
      value="${domainInstance?.type?.id}" 
       optionKey='id' /> 

這個切換的鑰匙ID - 偉大的,但文字切換到ID,太:-(

任何想法如何解決這個?

回答

4

感謝名單,以Grails的beeing開源的,我只是檢查代碼:http://grails.org/doc/latest/ref/Tags/select.html#select

似乎valueMessagePrefix是隻要你使用option鍵或optionValue忽略。但optionValue可以關閉:

<g:select name="type.id" from="${Type.list()}" 
     value="${domainInstance?.type?.id}" 
      optionKey="id" 
      optionValue="${ {name->g.message(code:'type.name'+name) } }"/> 

至少,這個工程。

+0

謝謝,但這沒有奏效,你的關閉中的「name」會收到g:select的「from」對象,所以你必須這麼做:(至少那對我有用) optionValue =「$ { {typeAbc-> g.message(code:'type.name'+ typeAbc.name)}我希望這可以幫助別人:) 我重命名類型爲typeAbc以區別於您的i18n前綴 – hereForLearing

+0

我想我的答案只適用於舊版本的Grails ...你使用哪個版本? – rdmueller

+0

3.1.7,哦,也許這就是爲什麼 – hereForLearing

1

你就不能添加optionValue?

<g:select name="type.id" from="${Type.list()}" 
     valueMessagePrefix="type.name" 
      value="${domainInstance?.type?.id}" 
       optionKey='id' 
       optionValue='name'/> 

對不起我沒有機會測試這個確切的代碼,但做了類似的事情,沒有問題。

+0

這就是我所做的。結果是未翻譯的名字。 – rdmueller