Spring Boot: How to access locale in Services or Repositories

Viewed 707

I followed some tutorials for internationalization in Spring Boot.

(https://www.youtube.com/watch?v=Y7pHhui0cD4 and https://www.baeldung.com/spring-boot-internationalization)

I came so far to configure it like this:

@Configuration
public class InternationalizationConfiguration {


    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
        sessionLocaleResolver.setDefaultLocale(Locale.GERMAN);
        return sessionLocaleResolver;
    }

    @Bean 
    public ResourceBundleMessageSource messageSource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("messages");
        messageSource.setUseCodeAsDefaultMessage(true);
        return messageSource;
    }

}

and to use it in the RestConroller like this:


@RestController
public class ExperimentalControllerImpl implements ExperimentalController{

    @Autowired
    ResourceBundleMessageSource messageSource;

    @Override
    public String testI18n(@RequestHeader("Accept-Language") String locale) {
        StringBuilder builder = new StringBuilder();
        builder.append(messageSource.getMessage(Messages.HELLO, null, new Locale(locale)));
        builder.append("\n");
        builder.append(messageSource.getMessage(Messages.HOW_ARE_YOU, null, new Locale(locale)));
        return builder.toString();
    }

}

It works fine.....

But how do I get the locale information from the request header to my service layer or my repository layers?

Is there a best practise to store the information which locale is sent by the request, so that I can access it in my services and repositories? I think the value must be request/thread specific. Giving it as a method parameter down to the other layer seems pretty ugly.

Thank you Regards form Germany

0 Answers
Related