Spring Boot编写国际化配置文件步骤&点击链接实现国际化效果

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Java_Glory/article/details/89875778

1.编写国际化配置文件 , 抽取页面需要显示的国际化消息

2.Spring Boot 自动配置好了管理国际化资源文件的组件,可以在properties文件中直接配置

@ConfigurationProperties(
    prefix = "spring.messages"
)
public class MessageSourceAutoConfiguration {
    private String basename = "messages";   
    //配置文件可以直接放在类路径下:messages.properties
    ...
    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        if (StringUtils.hasText(this.basename)) {
        //设置国际化资源文件的基础名(去掉语音国家代码的)
            messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray(StringUtils.trimAllWhitespace(this.basename)));
        }

        if (this.encoding != null) {
            messageSource.setDefaultEncoding(this.encoding.name());
        }

        messageSource.setFallbackToSystemLocale(this.fallbackToSystemLocale);
        messageSource.setCacheSeconds(this.cacheSeconds);
        messageSource.setAlwaysUseMessageFormat(this.alwaysUseMessageFormat);
        return messageSource;
    }
}

3.页面使用 #{} 获取国际化的值

若页面乱码 , 则设置IDEA的properties文件编码 : properties配置文件属性提示与编码问题

完成以上步骤后 , 页面会根据浏览器的设置显示中文或是英文。

原理:

         国际化Locale(区域信息对象);LocaleResolver(获取区域信息对象);

        @Bean
        @ConditionalOnMissingBean
        @ConditionalOnProperty(
            prefix = "spring.mvc",
            name = {"locale"}
        )
        public LocaleResolver localeResolver() {
            if (this.mvcProperties.getLocaleResolver() == org.springframework.boot.autoconfigure.web.WebMvcProperties.LocaleResolver.FIXED) {
                return new FixedLocaleResolver(this.mvcProperties.getLocale());
            } else {
                AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
                localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
                return localeResolver;
            }
        }
        //在WebMvcAutoConfiguration里面默认的就是根据请求头带来的区域信息获取Locale进行国际化

实现步骤:

1.设置链接请求参数带的国际化的值

2.实现一个区域信息解析器

/**
 * 可以在链接上携带区域信息
 */
public class MyLocaleResolver implements LocaleResolver {
    
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        String l = request.getParameter("l");
        Locale locale = Locale.getDefault();//如果超链接上没带区域信息参数就用系统默认的
        if(!StringUtils.isEmpty(l)){
            String[] split = l.split("_");
            locale = new Locale(split[0],split[1]);//parameter1:语言代码参数,parameter2:国家代码参数
        }
        return locale;
    }
    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {

    }
}

3.将实现的区域信息解析器加到容器中,这样才能生效

//使用WebMvcConfigurerAdapter可以来扩展SpringMVC的功能
//@EnableWebMvc   不全面接管SpringMVC
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {
    @Bean
    public LocaleResolver localeResolver(){
        return new MyLocaleResolver();//返回自己实现的区域信息解析器
    }
}

这样就会根据html标签超链接带的参数进行语言切换了!

猜你喜欢

转载自blog.csdn.net/Java_Glory/article/details/89875778