SpringBoot 后端 i18n 国际化实现

什么是国际化

国际化就是让应用适配不同的国家语言。例如在美国显示英文,在中国显示中文。这样可以为不同国家的用户提供更好的体验。
下面介绍前后端分离项目中实现国际化的方案。先了解整体方案,然后介绍不同方案中前后端是如何实现的。

实现国际化的方案

下面将常用的四种方案总结成一张表格。不同方案适用于不同的场景。

纯前端实现

在前端应用中使用语言包文件、动态加载或客户端存储实现多语言支持。通过加载相应的语言资源来根据用户偏好显示不同语言的内容。
适用于单页面应用(SPA)、需要实时切换语言的应用以及主要由静态内容构成的应用。

纯后端实现

在服务器端使用模板引擎渲染多语言内容或通过 API 返回多语言内容。服务器根据请求的语言参数生成相应的语言页面。
适用于内容管理系统(CMS)、需要 SEO 优化的应用和需要集中管理和动态更新内容的应用。

混合实现

前端处理静态内容的语言切换,后端处理动态内容的国际化。前端和后端共同协作,确保内容的多语言支持。
适用于复杂的大型应用、需要快速响应和动态内容更新的应用,以及前后端密切协作的项目。

第三方服务

通过调用第三方翻译服务 API 实现多语言支持,将需要翻译的文本发送给外部服务,由其返回翻译结果。
适用于需要快速多语言支持的小型项目、内容变动不频繁的应用和不具备专业翻译团队或资源的项目。

混合实现方案中的后端实现

开发大型的复杂应用,往往使用的是混合实现方案。这个方案中前端处理静态内容的语言切换,例如网页上固定元素的固定内容。后端处理异常消息等动态内容的国际化。
异常国际化允许我们根据用户的语言环境以不同的语言呈现错误信息。通过支持多种语言,我们可以为全球用户提供更好的用户体验。不再仅仅使用单一语言显示错误信息,而是根据用户的首选语言动态翻译,使用户更容易理解和解决问题。
下面介绍后端如何实现异常消息的国际化。

开发环境

  1. Spring Boot 3.1.12
  2. JDK 21
  3. IDEA 2024.1.4

实现思路

  1. 自定义响应码和异常。
  2. 自定义响应注解。
  3. 编写国际化资源文件,自定义消息和校验消息。
  4. 根据请求头header的参数 “Accept-Language” 传递的语言设置Locale。
  5. 编写全局异常处理类,处理各种异常及返回错误信息。
  6. 编写测试接口。

实现步骤

自定义响应码和异常
public enum ResultCode {
   
   
    SUCCESS(200, "success", "success"),
    ERROR(500, "error", "error"),
    BUSINESS_EXCEPTION(502, "business.exception", "business exception");

    @Getter
    private final int code;

    @Getter
    private final String messageKey;

    @Getter
    private final String defaultMessage;

    ResultCode(int code, String messageKey, String defaultMessage) {
   
   
        this.code = code;
        this.messageKey = messageKey;
        this.defaultMessage = defaultMessage;
    }
}
/**
 * 业务逻辑异常 Exception
 */
@Data
@EqualsAndHashCode(callSuper = true)
public final class BusinessException extends RuntimeException {
   
   

    /**
     * 响应码
     */
    private final ResultCode resultCode;

    /**
     * 构造函数
     *
     * @param resultCode 响应码
     */
    public BusinessException(ResultCode resultCode) {
   
   
        // 使用ResultCode的名字作为异常消息
        super(resultCode.getDefaultMessage());
        this.resultCode = resultCode;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值