• Springboot实现国际化以及部署Linux不生效问题


    1、在application.properties 添加以下配置:

    #国际化配置
    spring.messages.basename=i18n/messages/messages
    spring.messages.fallback-to-system-locale=false

     2、添加配置文件在 resources目录下 如下图所示:

    这个国际化文件命名有个坑,必须按照小明名称进行  否则部署linux国际化不生效,目前是遇到这个问题,问题修改en_us/zh_cn/es_pa得到解决 。如果有其他方式 ,欢迎留言沟通交流。

    3、添加国际化配置文件:

    I18nConfig.java

    package com.example.cxjgmanagedevice.utils;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.support.ReloadableResourceBundleMessageSource;
    import org.springframework.web.servlet.LocaleResolver;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
    import org.springframework.web.servlet.i18n.SessionLocaleResolver;
    
    import java.util.Locale;
    
    @Configuration
    public class I18nConfig implements WebMvcConfigurer {
    
        @Bean
        public LocaleResolver localeResolver() {
            SessionLocaleResolver slr = new SessionLocaleResolver();
            slr.setDefaultLocale(Locale.US); // 设置默认语言为英语
            return slr;
        }
    
        @Bean
        public ReloadableResourceBundleMessageSource messageSource() {
            ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
            messageSource.setBasenames("classpath:i18n/messages/messages"); // 设置基础名,不带后缀
            messageSource.setDefaultEncoding("UTF-8");
            messageSource.setCacheSeconds(5); // 设置缓存刷新间隔(秒)
            return messageSource;
        }
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
            localeChangeInterceptor.setParamName("lang"); // 通过URL参数lang来切换语言
            registry.addInterceptor(localeChangeInterceptor);
        }
    }

    4、创建控制类 添加属性:

    private final MessageSource messageSource;
    
    @Autowired
    public UserController(MessageSource messageSource) {
        this.messageSource = messageSource;
    }

    5、在对应接口方法上通过下面方式进行国际化

    Locale locale = new Locale(lang);
    String message = null;
    if (StringUtils.isBlank(mobile) || StringUtils.isBlank(random)) {
        message = messageSource.getMessage("1004",null , locale);
        return ResultCodeDataObj.INFO("1004", message,null);
    }

    6、国际化配置文件

    至此:你的国际化流程已经顺利完成,中间过程中,如果有任何问题,欢迎骚扰。

  • 相关阅读:
    kafka 相关概念
    编程开发中的的字符编码与解码-原理篇
    Maven 知识点总结
    Node.js | Express+MongoDB 实现简易用户管理系统(三)(登录验证之Cookie&Session)
    Vue输入框卡死
    TP-Link家用路由器上网与防蹭网
    【文献阅读】Adaptive Arrays
    一个关于 i++ 和 ++i 的面试题打趴了所有人
    最小生成树--Prim算法和Kruskal算法
    Servlet
  • 原文地址:https://blog.csdn.net/qq_23000805/article/details/138153570