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”。

locale_1.png

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

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
广告
将在 10 秒后关闭
bannerAds