How can I force Grails to use only one language?

前端 未结 4 1220
梦如初夏
梦如初夏 2021-02-05 12:29

I want to make my Grails application support only one language, that I can define somewhere, completely ignoring the client\'s headers or the \"lang\" parameter. Is there any wa

相关标签:
4条回答
  • 2021-02-05 13:11

    Define a LocaleResolver bean in your config/spring/resources.groovy to set the default locale.

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

    This is useful if you don't have to deal with the lang parameter - otherwise it would get overridden. To even ignore the lang parameter value you can set the locale in a Filter upon each request:

    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)                  
            }
    
        }
    }
    

    This approach seems a bit repetitive as Locale is re-set on every request. It would be more elegant to disable the browsers locale detection via an config option.

    0 讨论(0)
  • 2021-02-05 13:26

    The default LocaleResolver of Grails is SessionLocaleResolver. If you want to always use de_DE you can change this to FixedLocaleResolver.

    beans {
      localeResolver(FixedLocaleResolver) {
          locale = new Locale("de", "DE")
      }
    }
    

    If you want to restrict to a set of locales, then you will need a filter, and use the SessionLocaleResolver#setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) method.

    0 讨论(0)
  • 2021-02-05 13:32

    This worked for me in order to override the default localResolver bean

    beans = {
        localeResolver(org.springframework.web.servlet.i18n.FixedLocaleResolver) {
            setLocale(Locale.US)
        }
    }
    
    0 讨论(0)
  • 2021-02-05 13:35

    remove all messages_xx.properties files and keep only the messages.properties files. This is the default message bundle to which the system will always fall back if it can't find the right message bundle.

    This way you can still use messages (and thus keep the option to nationalize your app) but users will get always the same language.

    0 讨论(0)
提交回复
热议问题