后端i18n国际化多语言处理

本文介绍了如何在Java后端使用i18n处理多语言支持。首先创建资源文件夹和ResourceBundle文件,配置basename为'messages',并添加不同语言的本地化文件。接着,通过 LocaleUtils 类调用 MessageSource 获取翻译结果。在实际应用中,注意Locale初始化时需要分别传入语言和国家代码,如'en'和'US',否则可能在某些环境下无法正常工作。文章还分享了一个关于在服务器上运行时的初始化问题,强调了正确初始化Locale的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

后端利用 i18n 处理多语言

添加配置文件

resource中创建i18n配置文件的文件夹:
在这里插入图片描述
新建Resource Bundle文件:
在这里插入图片描述

会出现这个窗口:
在这里插入图片描述

base name填messages就可以了

然后需要点击右边加号添加语言种类
在这里插入图片描述
在这里插入图片描述

en_US代表英语,zh_CN代表简体中文,zh_TW代表繁体中文

以下是大部分国家对应的语言Locale和国家代码对照表(国际化支持):https://www.jianshu.com/p/38a594008c55

添加翻译结果

文件创建完之后,可以给其添加配置
在这里插入图片描述

等号前面的是key,后面的是value


在这里插入图片描述

Unicode编码转换地址: https://tool.chinaz.com/tools/unicode.aspx
在这里插入图片描述

java代码

首先需要添加配置

spring下添加配置 “i18n/messages” 代表的是前面创建的文件夹路径

#多语言设置
spring:
  messages:
    basename: i18n/messages

其次就是代码

import com.oneplus.constant.ReturnKey;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Component;

import java.util.Locale;

@Slf4j
@Component
public class LocaleUtils {
    private static MessageSource messageSource;

    public LocaleUtils(MessageSource messageSource) {
        LocaleUtils.messageSource = messageSource;
    }

    public static String getMessage(String key,String locale) {
        try {
            String[] split = locale.split("_");
            // key填配置文件中等号前面的user.welcome
            String message = messageSource.getMessage(key, null, new Locale(split[0],split[1]));
            // message得到的结果就是配置文件中等号右边的value值
            return message;
        } catch (Exception e) {
            e.printStackTrace();
            return key;
        }
    }
}

然后再需要处理多语言的地方调用此方法

String message = LocaleUtils.getMessage("user.welcome","en_US");
String message = LocaleUtils.getMessage("user.welcome","zh_CN");
String message = LocaleUtils.getMessage("user.welcome","zh_TW");

这样就已经处理成功了

记录一个我在开发时候遇到的小bug:

刚开始我在初始化Locale的时候是这么写得 new Locale(“en_US”)

在idea中启动项目, 多语言处理是成功的,但当我把项目放上服务器上启动,这个多语言处理却一直不成功.

找了好久才发现这个地方需要把en_US这个下划线拆开两个参数,第一个是language,第二个是country,这样去初始化Locale,服务器上就也生效了.

语言处理是成功的,但当我把项目放上服务器上启动,这个多语言处理却一直不成功.

找了好久才发现这个地方需要把en_US这个下划线拆开两个参数,第一个是language,第二个是country,这样去初始化Locale,服务器上就也生效了.

也不知道为什么这个地方idea启动就可以,获取idea对这中类型的配置文件有着一些不同的处理?有知道原因的大佬还希望能留言对此问题进行讨论.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值