1

我正在尝试在特定语言环境中呈现 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) 

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

4

2 回答 2

0

如果您在渲染器的位置使用新的页面渲染 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
于 2012-09-04T07:23:27.503 回答
0

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

对于 Grails 来说并不优雅,但它确实有效。

于 2012-09-12T23:14:02.963 回答