springboot 国际化文件


springboot 国际化文件

国际化:根据locale的不同,显示不同的信息

***************************************

相关类

SessionLocaleResolver:国际化解析器

public class SessionLocaleResolver extends AbstractLocaleContextResolver {
    public static final String LOCALE_SESSION_ATTRIBUTE_NAME = SessionLocaleResolver.class.getName() + ".LOCALE";
    public static final String TIME_ZONE_SESSION_ATTRIBUTE_NAME = SessionLocaleResolver.class.getName() + ".TIME_ZONE";
    private String localeAttributeName;
    private String timeZoneAttributeName;

    public SessionLocaleResolver() {
        this.localeAttributeName = LOCALE_SESSION_ATTRIBUTE_NAME;
        this.timeZoneAttributeName = TIME_ZONE_SESSION_ATTRIBUTE_NAME;
    }


******************************************
AbstractLocaleContextResolver

public abstract class AbstractLocaleContextResolver extends AbstractLocaleResolver implements LocaleContextResolver {
    @Nullable
    private TimeZone defaultTimeZone;



*******************************************
AbstractLocaleResolver

public abstract class AbstractLocaleResolver implements LocaleResolver {
    @Nullable
    private Locale defaultLocale;

    public AbstractLocaleResolver() {
    }

    public void setDefaultLocale(@Nullable Locale defaultLocale) {
        this.defaultLocale = defaultLocale;
    }                           //一般调用此方法设置默认的Locale

    @Nullable
    protected Locale getDefaultLocale() {
        return this.defaultLocale;
    }
}

ReloadableResourceBundleMessageSource:国际化属性文件加载类

ReloadableResourceBundleMessageSource

public class ReloadableResourceBundleMessageSource extends AbstractResourceBasedMessageSource implements ResourceLoaderAware {
    private static final String PROPERTIES_SUFFIX = ".properties";
    private static final String XML_SUFFIX = ".xml";

**************
构造方法

    public ReloadableResourceBundleMessageSource() {
    }




************************************
AbstractResourceBasedMessageSource

public abstract class AbstractResourceBasedMessageSource extends AbstractMessageSource {

    private final Set<String> basenameSet = new LinkedHashSet(4);

    @Nullable
    private String defaultEncoding;

    private boolean fallbackToSystemLocale = true;

    @Nullable
    private Locale defaultLocale;

    private long cacheMillis = -1L;  //默认不重新加载文件

**********************
常用方法

    public void setBasename(String basename) {
    public void setBasenames(String... basenames) {   //属性文件名前缀

    public void setCacheSeconds(int cacheSeconds) {
    public void setCacheMillis(long cacheMillis) {    //加载文件的时间间隔

LocaleChangeInterceptor:国际化拦截器

public class LocaleChangeInterceptor extends HandlerInterceptorAdapter {

    public static final String DEFAULT_PARAM_NAME = "locale";
    protected final Log logger = LogFactory.getLog(this.getClass());
    private String paramName = "locale";

*******************
构造方法

    public LocaleChangeInterceptor() {
    }

*******************
常用方法

    public void setParamName(String paramName) {
                            //设置拦截的参数名称

****************************************

示例

**********************

config 层

DataConfig:配置localeResolver、messageSource、localeChangeResolver

@Configuration
public class DataConfig {

    @Bean("localeResolver")
    public LocaleResolver initSessionLocaleResolver(){
        SessionLocaleResolver sessionLocaleResolver=new SessionLocaleResolver();
        sessionLocaleResolver.setDefaultLocale(Locale.CHINA);

        return sessionLocaleResolver;
    }

    @Bean("messageSource")
    public MessageSource initReloadableResourceBundleMessageSource(){
        ReloadableResourceBundleMessageSource messageSource=new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:/static/properties/msg");
        messageSource.setDefaultEncoding("utf-8");
        messageSource.setCacheSeconds(60);

        return messageSource;
    }

    @Bean
    public LocaleChangeInterceptor initLocaleChangeInterceptor(){
        LocaleChangeInterceptor localeChangeInterceptor=new LocaleChangeInterceptor();
        localeChangeInterceptor.setParamName("language");

        return localeChangeInterceptor;
    }

}

WebConfig:配置拦截路径

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Resource
    private LocaleChangeInterceptor interceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(interceptor).addPathPatterns("/change/**");
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/hello").setViewName("hh");
    }
}

************************

controller 层

@RestController
public class HelloController {

    @RequestMapping("/change")
    public void change(){

    }
}

********************

前端页面

<script>
    $(function () {
        $("#b1").click(function () {
            $.post({
                url: "/change?language=zh_CN"
            });
            window.location.reload();
        });

        $("#b2").click(function () {
            $.post({
                url: "/change?language=en_US"
            });
            window.location.reload();
        })
    })
</script>
<body>
<div th:align="center">
    <span th:text="#{hello}"></span><br>
    <button id="b1">中文</button><br>
    <button id="b2">english</button>
</div>
</html

***********************

属性文件

                  

发布了320 篇原创文章 · 获赞 91 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43931625/article/details/103655187