2012-09-03 25 views
1

我正嘗試在特定語言環境中呈現GSP。在特定語言環境中呈現單個GSP

這兩種解決方案的工作

使用PARAMS

/book/list?lang=es 

使用代碼在控制器

def newLocale = new Locale(lang) 
    RCU.getLocaleResolver(request).setLocale(request, response, newLocale) 
    render(view: "mail", model: [invoiceInstance: invoiceInstance]) 

不幸的是這兩種解決方案更改會話對象永遠事後影響所有GSP。

如果我嘗試在Render語句後更改LocaleResolver,它不起作用。

// Switch to OWNER language for print preview 
    def newLocale = new Locale(lang) 
    RCU.getLocaleResolver(request).setLocale(request, response, newLocale) 

    render(view: "mail", model: [invoiceInstance: invoiceInstance]) 

    // switch back to user language 
    def newLocale2 = new Locale(user.language) 
    RCU.getLocaleResolver(request).setLocale(request, response, newLocale2) 

那麼如何強制一個單一渲染在特定的語言環境?

+0

您是否在嘗試更改要在中使用的語言環境? –

+0

不,我想在控制器中渲染完整的GSP。 –

回答

0

很多搜​​索後我不得不把Locale對象傳遞給在GSP每一個標籤。

Grails並不優雅,但它的工作原理。

0

我想你的第二次嘗試可以工作,如果你在渲染器的地方使用新的Page Rendering API

// Switch to OWNER language for print preview 
    def newLocale = new Locale(lang) 
    RCU.getLocaleResolver(request).setLocale(request, response, newLocale) 

    def contents = groovyPageRenderer.render(view:"/controller/mail", model: [invoiceInstance: invoiceInstance]) 

    // switch back to user language 
    def newLocale2 = new Locale(user.language) 
    RCU.getLocaleResolver(request).setLocale(request, response, newLocale2) 

    render contents 
+0

pageRenderer似乎沒有迴應我認爲基於會話的setLocale。也許如果我能找到如何更改AppContext的區域設置? –

+0

@StéphaneRainville如果您在gsp內部打印RequestContextUtils.getLocale(request),結果如何? –

+0

如果我嘗試打印 值=「$ {session.'org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE」我得到一個錯誤,因爲會話不pageRenderer支持 值=」 $ {組織。 springframework.web.servlet.support.RequestContextUtils.getLocale(request)}「總是得到en_CA這是瀏覽器設置,我認爲 –

相關問題