2011-02-10 21 views
1

下面的代碼將顯示該代碼my.message.code的國際化屬性文件相關聯的標籤:Grails的國際化 - 如何從信息切換到代碼

<g:message code="my.message.code" />

這是很容易的,方便的並且運行良好,但我希望按需啓用交換機,以便在正在運行的應用程序中顯示my.error.code

這種功能的目的是使Grails應用程序的用戶能夠針對特定代碼提出修改請求,這將使翻譯員能夠輕鬆查看和批量修改應用程序。

Grails可能嗎?

謝謝。

+0

您能爲i18n創建一個僞語言嗎?它不會定義任何翻譯?那不會顯示標識符? – Piskvor 2011-02-10 19:14:18

+0

嗯。不,當翻譯缺失時,它似乎自動回退到英語。 – Titom 2011-02-18 19:19:56

回答

1

您可以創建一個自定義標籤做到這一點通過標籤庫(我相信你可以覆蓋摹命名空間和信息標籤,如果你需要的話):

 def messageWithCode = {attrs, body -> 
     if (attrs.showCode) {//You will need to pass a boolean (or retrieve from a 
// config file) to indicate whether to show the message or the code 
      out << attrs.code 
      } else { 
      out << g.message(attrs) 
      } 
     } 

此外,Grails將永遠當它顯示代碼找不到與其關聯的消息。

0

您可以覆蓋標準的消息標記。不是一個乾淨的解決方案,但它可以工作:

http://grails.org/doc/latest/ref/Tags/message.html#message獲取源代碼,創建自己的taglib(帶有標準命名空間'g')並將源複製並粘貼到您的taglib。這將避免必須更改所有gsp文件。

現在更改代碼,使其顯示消息代碼(例如),如果區域設置具有特殊值(如「代碼」)。