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

Arm*_*ohn 15 grails internationalization

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

dav*_*vid 19

LocaleResolver在您的bean中定义一个bean config/spring/resources.groovy来设置默认语言环境.

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

如果您不必处理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)                  
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法似乎有点重复,因为每次请求都会重置Locale.通过config选项禁用浏览器区域设置检测会更优雅.


rdm*_*ler 5

删除所有messages_xx.properties文件并仅保留messages.properties文件.这是默认消息包,如果找不到正确的消息包,系统将始终回退到该消息包.

这样您仍然可以使用消息(从而保留选项以使您的应用程序国有化),但用户将始终使用相同的语言.


Orb*_*ita 5

LocaleResolverGrails的默认值是SessionLocaleResolver. 如果您想始终使用 de_DE,您可以将其更改为FixedLocaleResolver.

beans {
  localeResolver(FixedLocaleResolver) {
      locale = new Locale("de", "DE")
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您想限制为一组语言环境,那么您将需要一个过滤器,并使用该SessionLocaleResolver#setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale)方法。

  • 这似乎有效 -> localResolver(FixedLocaleResolver, Locale.US) (2认同)