RuoYi-Vue 前后端分离版代码浅析-登录逻辑-i18n

1,481 阅读2分钟

这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

前言

本节介绍RuoYi-Vueruoyi-admin模块中的系统登录模块SysLoginController 部分的代码,这个接口中都是和登录相关的逻辑,登录这里才是一个系统最为精髓的地方,普通的增删改查也可以,使用oauth2,使用cas,各种各样的登录代码体现了不同的设计思路和技术功底,但是跳不过的是如何返回提示信息给调用方,如果只有一种语言,肯定无法帮助我们实现服务多种语言的用户的想法。所以本节我们介绍Ruoyi中的文本国际化的代码。

internationalization(i18n)

我们讨论文本国际化时不可避免就要说到i18n,可能很多人都不了解为什么要叫i18n,其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数,主要是为了拼写简单,所以我们简写为i18n。

前端实现i18n

前端实现i18n根据你使用的框架可以使用vue i18n,也可以使用jquery-i18n-properties

后端实现i18n

Ruoyi中为了实现文本国际化,直接使用了Spring 中自带的MessageSourceLocaleContextHolder来帮助简化国际化。在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这里就可以了

image.png

当我们需要使用的时候

@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时,可以看到返回的提示语已经是英文了。

image.png