如何强制Grails只使用一种语言?

时间:2012-01-10 18:07:08

标签: grails internationalization

我想让我的Grails应用程序只支持一种语言,我可以在某处定义,完全忽略客户端的标题或“lang”参数。我有什么方法可以这样做吗?感谢。

4 个答案:

答案 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的默认LocaleResolverSessionLocaleResolver。如果您想要始终使用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)
    }
}