2012-09-03 73 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这是浏览器设置,我认为 –

相关问题