1. 需求
    1. 根据配置的值实现后端返回给前端内容国际化
  2. 分析
    1. 在application.yml中设置配置和值,例如:
      app.message-source-basename: classpath:i18n/messages_en_US
    2. 使用ReloadableResourceBundleMessageSource设置basename的值为app.message-source-basename的值
    3. 在方法中引用ReloadableResourceBundleMessageSource,并调用getMessage方法获取对应属性的值
  3. 实现
    1. 建2个不同语言的配置文件:messages_en_US.properties和messages_en_US.properties
    2. 在application.yml中设置配置和值:
      app.message-source-basename: classpath:i18n/messages_en_US
    3. 配置属性值
      1. messages_en_US.properties中配置USER_NAME_ISNOT_NULL=User name cannot be empty
      2. messages_en_US.properties中配置USER_NAME_ISNOT_NULL=用户名不能为空
    4. 引入ReloadableResourceBundleMessageSource
      1. @Configuration
        public class MessageSourceConfig {
        
            @Value("${app.message-source-basename}")
            private String basename;
        
            @Bean
            public ReloadableResourceBundleMessageSource messageSourceWeb() {
                ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
                messageSource.setBasename(basename);
                messageSource.setDefaultEncoding("UTF-8");
                // 设置缓存时间,单位毫秒,这里设置为不缓存,每次读取都重新加载
                messageSource.setCacheSeconds(0);
                return messageSource;
            }
        }

      2. 使用处引入messageSourceWeb

        1. @RestController
          public class I18nTestController {
          
              @Autowired
              private MessageSource messageSourceWeb;
          
              @GetMapping("/test/i18n")
              public RightResponse TestI18n() {
                  // 业务逻辑
                  // 返回值
                  return ResponseUtil.rightResponse(I18nEnum.USER_NAME_ISNOT_NULL, null, messageSourceWeb);
              }
          }

        2. 为了返回统一格式,引入了ResponseUtil和RightResponse和状态枚举值
          1. // 返回统一格式
            @Data
            public class RightResponse {
                private Object data;
                private int code;
                private String msg;
            }
            
            // 状态枚举值
            public enum I18nEnum {
            
                USER_NAME_ISNOT_NULL(1000);
                private int code;
            
                I18nEnum(int code) {
                    this.code = code;
                }
            
                public int getCode() {
                    return code;
                }
            }
            
            // 返回统一调用类
            public class ResponseUtil {
            
                public static RightResponse rightResponse(I18nEnum i18nEnum, Object data, MessageSource messageSource) {
                    RightResponse rightResponse = new RightResponse();
                    rightResponse.setCode(i18nEnum.getCode());
                    rightResponse.setMsg(messageSource.getMessage(i18nEnum.name(), null, LocaleContextHolder.getLocale()));
                    rightResponse.setData(data);
                    return rightResponse;
                }
            }
            
            
    5. 调用结果
      1. app.message-source-basename: classpath:i18n/messages_zh_CN

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐