22

現在のロケールを変更するにはどうすればよいですか?

  • 入れようとしましcontroller/action?lang=deたが、ロケールはまだですen_US
  • このコードを使用して値をオーバーライドしようとしました:

    def key = "org.springframework.web.servlet.DispatcherServlet.LOCALE_RESOLVER"
    def localeResolver = request.getAttribute(key)
    localeResolver.setLocale(request, response, new Locale("de","DE"))
    

何も変わっていません。

  • このコードを使用して値をオーバーライドしようとしました:

    import org.springframework.web.servlet.support.RequestContextUtils as RCU;
    RCU.getLocaleResolver(request).setLocale(request, response, new Locale("de","DE"))
    

そして...何も起こらなかった。まだロケールをに設定していますen_US

ロケールを変更するアイデアはありますか?

4

6 に答える 6

27

10. Grails ドキュメントの国際lang化によると、Grails はそのままで i18n をサポートしており、パラメーターを使用してロケールを変更できるはずです。

デフォルトでは、受信Accept-Language ヘッダーからユーザー ロケールが検出されます。lang ただし、 Grails に呼び出されるパラメーターを要求パラメーターとして渡すだけで、ロケールを切り替える機能をユーザーに提供できます。

/book/list?lang=de

Grails は自動的にユーザー ロケールを切り替えて Cookie に保存するため、後続のリクエストには新しいヘッダーが含まれます。

ただし、すべてのアプリケーションが英語であるとは限らないため、デフォルトの言語を事前に設定したい場合があります。これを行うにはlocaleResolverresources.groovySpring 構成ファイルで次のように設定するだけです。

beans = {
   localeResolver(org.springframework.web.servlet.i18n.SessionLocaleResolver) {
      defaultLocale = new Locale("de","DE")
      java.util.Locale.setDefault(defaultLocale)
   }
}

さて、詳細がなければ、langパラメーターの使用があなたのケースで機能しない理由はわかりません。念のため、ロケールがまだ en_US であることをどのように確認しますか?

于 2009-10-14T23:19:16.820 に答える
6

ロケール「request.locale」をチェックする方法が間違っていることを私が理解している限り、それは、grails applciationのロケールではなく、ブラウザのロケールを提供します。

「 LocaleContextHolder.locale 」を使用する必要があります。

2.0.3では、パラメータを渡すだけでロケールを変更しますlang=someLocale

于 2012-05-30T14:07:53.687 に答える
6

アプリケーションのルート URL (例: http://localhost:8080/myapp/?lang=de) のロケールを変更しようとしていますか?

Grails の基本セットアップで、アプリケーションのルート URL のロケールを変更しようとしても機能しません。GrailslocalChangeInterceptorは、すべてのコントローラーが呼び出される前に呼び出されるロケールを変更します。アプリケーションのルート URL にアクセスすると、デフォルトの UrlMappings に見られるようにコントローラーは呼び出されません。

そのため、アプリケーションのルート URL でロケールを変更しても機能しません。一部のコントローラーでURLを変更しようとすると、機能します。

現在のロケールはorg.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME、http セッションのキーの下に保存されます。そこで確認できます。

正しい解決策は、ルート URL を UrlMappings のコントローラーにマップすることです。

于 2009-12-10T12:25:58.297 に答える
5

これはおそらく手遅れですが、参考までに、インデックスページコントローラーでこれを行います。

session['org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE'] = new Locale("es", "PR")
于 2012-01-15T17:01:53.527 に答える
1

同様の問題がありましたが、それはスペースが原因でした。私が持っていた:

[space]messages_de.properties代わりはmessages_de.properties

于 2013-09-16T00:25:30.963 に答える
0

以前のバージョンの Apache2.2 を介してプロキシし、grails (2.3.9) war ファイルを使用しているときに、これに問題がありました。mod_proxy_html (3.1) / Apache 2.4 を使用した方がうまくいきました。おそらく、より高度なバージョンの grails でこれが修正されるでしょう。

于 2015-08-30T00:24:33.373 に答える