Как получить языковой стандарт в Spring WebFlux? - PullRequest
0 голосов
/ 21 июня 2020

Я хочу получить текущий языковой стандарт, но контекст всегда возвращает языковой стандарт по умолчанию. Он работает с MVC, но не с WebFlux.

Спасибо за вашу помощь!

package co.example.demo.controller;

import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Locale;

@RestController
@RequestMapping("/hello")
public class HelloController {
    private final MessageSource messageSource;

    public HelloController(MessageSource messageSource) {
        this.messageSource = messageSource;
    }

    @GetMapping
    public String hello() {
        Locale locale = LocaleContextHolder.getLocale();
        return messageSource.getMessage("hello", null, locale);
    }
}

1 Ответ

2 голосов
/ 21 июня 2020

Не используйте LocaleContextHolder в среде WebFlux, а вместо этого добавьте Locale в качестве параметра метода:

@RestController
public class LocaleController {
    @GetMapping("/locale")
    String getLocale(Locale locale) {
        return locale.toLanguageTag();
    }
}

Тест:

$ curl localhost:8080/locale -H 'Accept-Language: en-US'
en-US
$ curl localhost:8080/locale -H 'Accept-Language: en-GB'
en-GB

Для получения дополнительной информации см .:

...