Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I force Grails to use only one language?

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 way I can do so? Thanks.

like image 776
ArmlessJohn Avatar asked Jan 10 '12 18:01

ArmlessJohn


2 Answers

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.

like image 150
david Avatar answered Oct 20 '22 19:10

david


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.

like image 28
Orbita Avatar answered Oct 20 '22 19:10

Orbita