后端i18n国际化多语言处理

后端利用 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对这中类型的配置文件有着一些不同的处理?有知道原因的大佬还希望能留言对此问题进行讨论.

猜你喜欢

转载自blog.csdn.net/Survivor_L/article/details/123332229