springboot国际化配置详细过程

因为我是纯小白来做的国际化,所以网上找了些资料,完成了国际化的开发,很多文章把大致过程都总结出来了,但是有些细节地方还不完整,所以这里做一个记录,并且把国际化的异常自己做了一个工具类封装,还从前端大神那里总结了一套对于很多国际化字符如何分类的问题。

目录

一、参考文章,此篇基本的代码都有了

二、详细操作步骤

1、在resource下新建文件夹i18n

2、在i18n下新建‘Resource Bundle’文件

2、文件编辑

3、在国际化配置文件中加上配置

4、添加国际化解析文件

在springmvc中加上加上解析类

5、自己封装的国际化工具类

6、代码中的使用,一般是在跑送给前端的异常消息中使用

三、关于国际化数量多了之后,如何很好的区分他们的一些想法

后台的分法

1、根据类名作为前缀区分

2、根据功能区分

3、我自己用的时候是吧这两种融合在一起使用的

前台的分法


一、参考文章,此篇基本的代码都有了

SpringBoot国际化配置_DH大黄的博客-CSDN博客

二、详细操作步骤

完成之后的截图

1、在resource下新建文件夹i18n

2、在i18n下新建‘Resource Bundle’文件

输入‘message’

此时结构和正式的不一样,不要慌(我当时在这里纠结过),再次在i18n新建语言文件,idea会自动帮我们调整成正式文件的样子

在i18n下再次新建‘Resource Bundle’文件,文件名‘message_en_US’,新建成功之后,文件结果会自动变成如下,此后要添加语言,就新建对应的文件提示就行了

2、文件编辑

我最开始是直接手动修改每一个语言文件,甚至message.properties都没有往里面写过东西,导致东西又杂又乱,后来知道了语言文件的编写方式,我忘记是那片博客了,具体如下

注(如果资源文件message.properties打开之后,下面没有‘Text   Resource Bundle’的选项,可能是idea还没有反应过来,试下关闭所有打开的文件,然后再打开资源文件,再不行重新启动idea)

输入完成之后,就可以对应输入各种语言的翻译了,刚开始写会有点不习惯,写习惯了会发现很快,比一个个文本写快多了

3、在国际化配置文件中加上配置

如果没有新建i18n文件夹,spring.messages.basename=message就行了

spring.messages.basename=i18n.message
spring.messages.encoding=utf-8

4、添加国际化解析文件

public class MyLocaleResolver implements LocaleResolver {
    private static final String LANG = "lang";
    private static final String LANG_SESSION = "lang_session";

    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        Locale locale = request.getLocale();
        String language = locale.getLanguage();
        //中文language=zh_CN
        if("en".equals(language)){
            locale = new Locale("en_US");
        }
        HttpSession session = request.getSession();
        session.setAttribute(LANG_SESSION, locale);
        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {

    }
}

在springmvc中加上加上解析类

注意这两个注解都要@Configuration @EnableWebMvc

@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {

    /**
     * 国际化
     * @return
     */
    @Bean
    public LocaleResolver localeResolver(){
        return new MyLocaleResolver();
    }
}

5、自己封装的国际化工具类

@Component
public class InternationalizationUtil {
    @Autowired
    private MessageSource messageSource;

    public void languageException(String code) {
        throw new CommonException(messageSource.getMessage(code, null, LocaleContextHolder.getLocale()));
    }

    public void languageExceptionAnd(String andString, String code) {
        throw new CommonException(andString + messageSource.getMessage(code, null, LocaleContextHolder.getLocale()));
    }

    public void languageExceptionTwoCode(String code1, String andString, String code2) {
        throw new CommonException(messageSource.getMessage(code1, null, LocaleContextHolder.getLocale()) + andString + messageSource.getMessage(code2, null, LocaleContextHolder.getLocale()));
    }
}

6、代码中的使用,一般是在跑送给前端的异常消息中使用

@Service
public class XXServiceImpl implements XXService {
    //注入 依赖
    @Autowired
    private InternationalizationUtil internationalizationUtil;

    @Override
    public PageResult<UserAbnormalRecordVo> getUserAbnormalRecord() {
            
        if (loginUser == null) {
               //以前是直接抛出中文异常
                //throw new CommonException("登陆超时,请重新登陆");
                //使用国际化工具
            internationalizationUtil.languageException("login.timeout.please.login.again");
        }
}

三、关于国际化数量多了之后,如何很好的区分他们的一些想法

后台的分法

1、根据类名作为前缀区分

比如,把每个类的名字作为前缀名区分+中文翻译的英文以.号分隔

actuatorService.wrong.equipment.number=设备号有误
sysUserService.fishing.ground=的场地

2、根据功能区分

比如登录功能以login做前缀,注册就以register做前缀,然后是具体的中文翻译

login.Authorization.code.is.invalid,.please.obtain.wechat.authorization.code.again=授权码失效,请重新获取微信授权码

3、我自己用的时候是吧这两种融合在一起使用的

前台的分法

这是我看了前端大神的多语言之后,做的总结,受益匪浅。

主要是通过功能点来区分的,这样逻辑很清晰

{
  "menu": {
    "record": {
      "record": "菜单1",
      "monitor": "菜单1",
      "operate": "菜单1",
      "warning": "菜单1"
    }
  },
  "button": {
    "search": "搜索"
  },
  "title": {
    "remark": "备注"
  },
  "placeHolder": {
    "username": "请输入用户账号"
  },
  "option": {
    "normal": "正常"
  },
  "text": {
    "theme": "物联网解决方案"
  },
  "tableLabel": {
    "recordTime": "记录时间"
  },
  "operate": {
    "delete": "删除"
  },
  "message" :{
    "unbindMessage": "确认为该用户解绑当前设备?"
  },
  "abnormalType": {
    "powerFailure": "疑似断电"
  },
  "changePwd": {
    "title": "修改密码"
  }
}

  • 10
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值