在特定区域设置中呈现单个GSP

时间:2012-09-03 23:01:23

标签: grails internationalization locale 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) 

那么如何强制SINGLE在特定区域设置中渲染?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

经过大量搜索后,我不得不将语言环境对象传递给GSP中的每个标签。

Grails并不优雅,但它确实有效。