Spring(Spring Boot)的默认语言环境值
您可以使用LocaleContextHolder.getLocale()来获取默认的区域设置。
package com.sample.config;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
@Component
public class MyMessageSource extends ResourceBundleMessageSource {
/**
* 指定されたベース名のメッセージリソースの内容を全て返す。
* デフォルトのLocaleを用いる。
* @param basename
* @return
*/
public Map<String, String> getAllMessage(String basename) {
return getAllMessage(basename, LocaleContextHolder.getLocale());
}
/**
* 指定されたベース名、指定されたLocaleのメッセージリソースの内容を全て返す。
* @param basename
* @param
* @return
*/
public Map<String, String> getAllMessage(String basename, Locale locale) {
Map<String, String> map = new HashMap<>();
ResourceBundle bundle = getResourceBundle(basename, locale);
bundle.keySet().stream()
.forEach(key -> { map.put(key, getStringOrNull(bundle, key)); });
return map;
}
}
默认的语言环境是由RequestHeader中的Accept-Language决定的。
当值为ja,en-US;q=0.8,en;q=0.6时,LocaleContextHolder.getLocale()的结果将是”ja”。

可以通过浏览器来控制发送请求的Accept-Header的值。
对于Google Chrome来说,可以通过[设置]->[语言和输入设置]进行设置。

在设置画面上,语言设置排列成了刚刚发送的ja,en-US;q=0.8,en;q=0.6和从上到下分别为”日本语”、”英语(美国)”、”英语”的顺序,看起来是相互对应的。

您可以通过拖放进行排序。

尝试再次发出相同的请求时,我们发现可以更改Accept-Header的值。
由于设置为”英语”、”英语(美国)”、”日语”,因此值变为en,en-US;q=0.8,ja;q=0.6。
这样一来,LocaleContextHolder.getLocale()的结果将会是”en”。
