如何更改当前区域设置?
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
。
有任何改变语言环境的想法吗?
答案 0 :(得分:27)
根据Grails文档的10. Internationalization章节,Grails支持开箱即用的i18n,您确实应该能够使用lang
参数更改语言环境:
默认情况下,检测到用户区域设置 来自传入的
Accept-Language
头。但是,您可以提供用户 通过切换区域设置的功能 只需传递一个名为lang
的参数 Grails作为请求参数:/book/list?lang=de
Grails会自动切换 用户区域设置并将其存储在cookie中 所以后续的请求将有 新标题。
但有时您可能希望预设默认语言,因为并非所有应用程序都使用英语。要做到这一点,您所要做的就是在localeResolver
弹簧配置文件中设置resources.groovy
,如下所示:
beans = {
localeResolver(org.springframework.web.servlet.i18n.SessionLocaleResolver) {
defaultLocale = new Locale("de","DE")
java.util.Locale.setDefault(defaultLocale)
}
}
现在,没有更多详细信息,我不能说为什么使用lang
参数在您的情况下不起作用。为了以防万一,你怎么知道语言环境仍然是en_US?。
答案 1 :(得分:6)
您是否尝试更改应用程序根网址中的区域设置(例如http://localhost:8080/myapp/?lang=de
)?
在Grails基本设置中尝试更改应用程序根URL中的区域设置不起作用。 Grails更改localChangeInterceptor
中的语言环境,该语言环境在调用所有控制器之前调用。当您访问应用程序根URL时,不会调用任何控制器,如默认UrlMappings中所示。
这就是为什么在应用程序根URL中更改区域设置不起作用的原因。如果您尝试更改某个控制器中的URL,则可以正常工作。
当前区域设置存储在http会话中的密钥org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME
下。你可以在那里查看。
正确的解决方案是将根网址映射到UrlMappings中的某个控制器。
答案 2 :(得分:5)
这可能为时已晚,但作为参考,我在索引页控制器中执行此操作:
session['org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE'] = new Locale("es", "PR")
答案 3 :(得分:5)
据我所知,您检查语言环境“request.locale”的方式是错误的,它提供了浏览器的语言环境,而不是grails applciation的语言环境。
您应该使用“ LocaleContextHolder.locale ”。
在 2.0.3 中,只需传递参数lang=someLocale
即可更改区域设置。
答案 4 :(得分:1)
我有类似的问题,这是因为一个空间。我有:
[space]messages_de.properties
代替messages_de.properties
答案 5 :(得分:0)
在代理通过旧版本的Apache2.2并使用grails(2.3.9)war文件时,我遇到了一段时间的问题。我使用mod_proxy_html(3.1)/ Apache 2.4运气好了。也许更高级版本的grails可以解决这个问题。