我们新建一个提示信息,打开其中一个配置文件:
切换到resource bundle模式下,我们就可以同时编辑多个语言的提示信息,非常的方便。
3.新建国家化处理工具类
package com.ymy.utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.ResourceBundleMessageSource;
import java.util.Locale;
@Slf4j
public class I18nUtil {
/**
-
通过code 返回对应的提示信息
-
@param code
-
@return
*/
public static String getMessage(String code) {
return getMessage(code, null);
}
/**
-
返回带参数的提示信息
-
@param code
-
@param args
-
@return
*/
public static String getMessage(String code, Object[] args) {
return getMessage(code, args, “”);
}
/**
-
根据语种查询信息
-
@param code code
-
@param args 参数
-
@param defaultMessage 默认的提示消息
-
@return
*/
public static String getMessage(String code, Object[] args, String defaultMessage) {
//这里使用比较方便的方法,不依赖request.
Locale locale = LocaleContextHolder.getLocale();
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename(“i18n/messages”);
String content;
try{
content = messageSource.getMessage(code, args, locale);
}catch (Exception e){
log.info(“获取提示消息失败: ->”,e);
content = defaultMessage;
}
return content;
}
}
不知道你有没有发现messageSource.setBasename(“i18n/messages”);这行代码,很重要,i18n表示你们文件目录,messages表示你配置文件的前缀,比如我的:messages_en_US.properties、messages_zh_CN.properties、messages_fr_FR.properties、messages.properties。
4.新建测试代码
package com.ymy.controller;
import com.ymy.vo.ResultVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class TestController {
@GetMapping(value = “/test”)
public ResultVo test(){
ResultVo resultVo = ResultVo.faild(“code-0001”);
return resultVo;
}
}
这里我们看到引用了ResultVo,源码如下:
package com.ymy.vo;
import com.ymy.utils.I18nUtil;
import lombok.Getter;
@Getter
public class ResultVo {
private String code;
private String msg;
private T data;
private String createTime ;
private ResultVo(String code){
this.code = code;
setCode(code);
}
public void setCode(String code) {
String message = null;
try {
message =I18nUtil.getMessage(code);
}catch (Exception e){
message = code;
}
this.code = code;
this.msg = message;
}
/**
-
默认成功返回
-
@param
-
@return
*/
public static ResultVo OK(){
return new ResultVo(“SUCCESS”);
}
/**
-
返回只带code的信息
-
@param code
-
@param
-
@return
*/
public static ResultVo faild(String code){
return new ResultVo(code);
}
}
如果ResultVo中的@Getter报错的话,可以在pom.xml中引入lombok的依赖:
org.projectlombok
lombok
true
5.测试
中文:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020031
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
5125026806.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzMjIwMDg5,size_16,color_FFFFFF,t_70)
如果中文乱码,推荐你将中文转换成unicode,在写往配置文件中。
英文:
法文:
是不是很简单?就是这么的丝滑,我们现在在升级一下,我们现在需要提示:对不起,张三,密码错误,剩余5次,这里面有两个动态信息,张三、5 ,这两个都是会实时发生改变的,那我们如何处理呢?
不知道你还记得国际化工具类中的这个方法吗?
/**
-
返回带参数的提示信息
-
@param code
-
@param args
-
@return
*/
public static String getMessage(String code, Object[] args) {
return getMessage(code, args, “”);
}
我们一起改造一下代码:
controller:
package com.ymy.controller;
import com.ymy.vo.PwdVo;
import com.ymy.vo.ResultVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@RestController
@Slf4j
public class TestController {
private static Integer count = 5;
/**
-
密码校验
-
@param pwdVo
-
@return
*/
@RequestMapping(value = “checkPwd”,method = RequestMethod.POST)
public ResultVo checkPwd(@RequestBody PwdVo pwdVo){
//这里我就不做判空处理了,因为判空处理还需要往配置文件中添加控的提示信息,这里主要展示带参数的提示信息
if(!“123456”.equals(pwdVo.getPwd())){
count–;
return ResultVo.faild(“code-0002”,pwdVo.getUserName(),count);
}
count = 5;
return ResultVo.OK();
}
@GetMapping(value = “/test”)
public ResultVo test(){
ResultVo resultVo = ResultVo.faild(“code-0001”);
return resultVo;
}
}
PwdVo:
package com.ymy.vo;
import lombok.Getter;
import lombok.Setter;