LoginSignup
12
7

More than 5 years have passed since last update.

Spring(Spring Boot)でのLocaleのデフォルト値

Last updated at Posted at 2016-09-10

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"になります

locale_1.png

送信するAccept-Headerの値は、ブラウザで制御できます。
GoogleChromeの場合は、[設定]->[言語と入力の設定]から設定できます。

locale_2.png

設定画面には言語設定が並んでいます。
先ほど送信されていたja,en-US;q=0.8,en;q=0.6と、上から順の「日本語」「英語(アメリカ合衆国)」「英語」の並びが対応しているように見えますね。

locale_3.png

ドラッグ&ドロップで、並び替えることができます。

locale_4.png

もう一度同じリクエストをしてみると、Accept-Headerの値を変えることができていることがわかります。
「英語」「英語(アメリカ合衆国)」「日本語」としたので、値はen,en-US;q=0.8,ja;q=0.6になりました。
これでLocaleContextHolder.getLocale()の結果は"en"になります。

locale_5.png

12
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
7