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 文档的国际化,Grails 支持 i18n 开箱即用,您确实应该能够使用lang参数更改语言环境:

默认情况下,从传入Accept-Language 标头中检测到用户区域设置。但是,您可以通过简单地将调用lang Grails 的参数作为请求参数传递给用户来为用户提供切换语言环境的能力:

/book/list?lang=de

Grails 将自动切换用户区域并将其存储在 cookie 中,以便后续请求将具有新的标头。

但有时您可能希望预设默认语言,因为并非所有应用程序都是英文的。为此,您所要做的就是localeResolver在您的resources.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 应用程序的语言环境。

您应该使用“ LocaleContextHolder.locale ”。

2.0.3中,它通过简单地传递参数来更改语言环境lang=someLocale

于 2012-05-30T14:07:53.687 回答
6

您是否尝试更改应用程序根 url 中的语言环境(例如。http://localhost:8080/myapp/?lang=de)?

在 Grails 中,尝试更改应用程序根 url 中的语言环境的基本设置不起作用。Grails 在localChangeInterceptor调用所有控制器之前更改调用的语言环境。当您访问应用程序根 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 回答