我想让我的Grails应用程序只支持一种语言,我可以在某处定义,完全忽略客户端的标题或“lang”参数。我有什么方法可以这样做吗?感谢。
答案 0 :(得分:19)
在LocaleResolver
中定义config/spring/resources.groovy
bean以设置默认语言环境。
beans = {
localeResolver(org.springframework.web.servlet.i18n.SessionLocaleResolver) {
defaultLocale = new Locale("de","DE")
java.util.Locale.setDefault(defaultLocale)
}
}
如果您不必处理lang
参数,这将非常有用 - 否则会被覆盖。要忽略lang
参数值,您可以在每次请求时在Filter
中设置区域设置:
import org.springframework.web.servlet.support.RequestContextUtils as RCU
...
def filters = {
all(controller:'*', action:'*') {
before = {
def locale = new Locale("sv","SV")
RCU.getLocaleResolver(request).setLocale(request, response, locale)
}
}
}
这种方法似乎有点重复,因为每次请求都会重置Locale。通过配置选项禁用浏览器区域设置检测会更优雅。
答案 1 :(得分:5)
删除所有messages_xx.properties
个文件,并仅保留messages.properties
个文件。
这是默认的消息包,如果找不到正确的消息包,系统将始终回退到该消息包中。
通过这种方式,您仍然可以使用消息(从而保留将应用程序国内化的选项),但用户将始终使用相同的语言。
答案 2 :(得分:4)
Grails的默认LocaleResolver
为SessionLocaleResolver
。如果您想要始终使用de_DE,可以将其更改为FixedLocaleResolver
。
beans {
localeResolver(FixedLocaleResolver) {
locale = new Locale("de", "DE")
}
}
如果要限制为一组区域设置,则需要使用过滤器,并使用SessionLocaleResolver#setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale)
方法。
答案 3 :(得分:0)
这对我有用,以便覆盖默认的localResolver bean
beans = {
localeResolver(org.springframework.web.servlet.i18n.FixedLocaleResolver) {
setLocale(Locale.US)
}
}