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
の値は、ブラウザで制御できます。
GoogleChromeの場合は、[設定]->[言語と入力の設定]から設定できます。
設定画面には言語設定が並んでいます。
先ほど送信されていた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"
になります。