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

Grails 在特定区域设置中呈现单个GSP,grails,internationalization,locale,gsp,Grails,Internationalization,Locale,Gsp,我正在尝试在特定区域中呈现GSP 这两种解决方案都有效 使用参数 /book/list?lang=es 在控制器中使用代码 def newLocale = new Locale(lang) RCU.getLocaleResolver(request).setLocale(request, response, newLocale) render(view: "mail", model: [invoiceInstance: invoiceInstance]) 不幸

我正在尝试在特定区域中呈现GSP

这两种解决方案都有效

使用参数

    /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) 

那么,如何在特定的语言环境中强制进行单个渲染呢?

如果在渲染器位置使用新的渲染器,我认为您的第二次尝试可以奏效

    // 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

经过多次搜索,我不得不将locale对象传递给GSP中的每个标记


对于Grails来说并不优雅,但它可以工作。

您是否正在尝试更改要在中使用的区域设置?否。我正在尝试在控制器中呈现完整的GSP。pageRenderer似乎不响应我认为基于会话的setLocale。也许如果我能找到如何更改AppContext的语言环境?@StéphaneRainville如果在gsp中打印RequestContextTils.getLocale(request),结果会是什么?如果我尝试打印value=“${session.org.springframework.web.servlet.i18n.SessionLocaleResolver.locale”,我会收到一个错误,因为pageRenderer value=”中不支持该会话。“${org.springframework.web.servlet.support.RequestContextUtils.getLocale(request)}“始终获取en_CA,这是我认为的浏览器设置,嗯,我看到了,奇怪……我会将问题发布到grails论坛……我也对它感兴趣。。。