这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战
前言
本节介绍RuoYi-Vue的ruoyi-admin模块中的系统登录模块SysLoginController 部分的代码,这个接口中都是和登录相关的逻辑,登录这里才是一个系统最为精髓的地方,普通的增删改查也可以,使用oauth2,使用cas,各种各样的登录代码体现了不同的设计思路和技术功底,但是跳不过的是如何返回提示信息给调用方,如果只有一种语言,肯定无法帮助我们实现服务多种语言的用户的想法。所以本节我们介绍Ruoyi中的文本国际化的代码。
internationalization(i18n)
我们讨论文本国际化时不可避免就要说到i18n,可能很多人都不了解为什么要叫i18n,其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数,主要是为了拼写简单,所以我们简写为i18n。
前端实现i18n
前端实现i18n根据你使用的框架可以使用vue i18n,也可以使用jquery-i18n-properties
后端实现i18n
Ruoyi中为了实现文本国际化,直接使用了Spring 中自带的MessageSource和LocaleContextHolder来帮助简化国际化。在Common层中有MessageUtils这个帮助类可以简化我们的国际化之路。
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
/**
* 获取i18n资源文件
*
* @author ruoyi
*/
public class MessageUtils {
/**
* 根据消息键和参数 获取消息 委托给spring messageSource
*
* @param code 消息键
* @param args 参数
* @return 获取国际化翻译值
*/
public static String message(String code, Object... args) {
MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
}
}
在我们的application.yml中我们需要进行属性的配置
# Spring配置
spring:
# 资源信息
messages:
# 国际化资源文件路径
basename: i18n/messages
将需要使用的语言文件放入resources中的i18n/messages这里就可以了
当我们需要使用的时候
@RestController
@RequestMapping("/api")
public class TestController {
@PostMapping("/test")
public String test() {
return MessageUtils.message("user.login.success");
}
}
对应的提示语需要在两个语言文件中都进行配置
默认
user.login.success=登录成功
en中
user.login.success=loginsucess
当我们调用的时候在header中添加上Accept-Language=en时,可以看到返回的提示语已经是英文了。