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

多くの検索の後、GSP内のすべてのタグにロケールオブジェクトを渡す必要がありました。

Grailsにはエレガントではありませんが、機能します。

于 2012-09-12T23:14:02.963 に答える
0

レンダラーの代わりに新しいPage Rendering APIを使用すると、2 回目の試行がうまくいくと思います。

    // 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 に答える