Spring Boot国际化

Laughing
2021-06-25 / 0 评论 / 1,147 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年03月17日,已超过306天没有更新,若内容或图片失效,请留言反馈。

Spring Boot国际化虽然在目前项目上用的比较少,但是总归是要学习一ha(四声)的。

添加Resource Bundle

首先在resources文件夹下创建i18n文件夹,然后右键i18n创建Resource Bundle

添加配置文件

添加三个配置文件,分别是login.propertieslogin_en_US.propertieslogin_zh_CN.properties,分别对应默认的国际化配置、英文配置、中文配置。login.properties是默认的国际化配置文件,如果找不到国际化信息时,默认会读取login.properties的配置信息。
这里为了演示,我只添加了一条信息,即login.password

login.properties

login.password=请输入密码

login_en_US.properties

login.password=please input password

login_zh_CN.properties

login.password=请输入密码

[alt type="success"]温馨提示[/alt]
批量选择配置文件后,右键点击,选择Combine to Resource Bundle,可以批量编辑国际化配置文件

修改配置文件

修改application.properties,配置国际化文件

spring.messages.basename=i18n.login

修改加载国际化

配置国际化支持,我们默认通过前端传递的lang(放到header),读取对应的国际化信息。

@Component
public class MyLocaleResolverConfig implements LocaleResolver {

    private static final String PATH_PARAMETER = "lang";

    private static final String PATH_PARAMETER_SPLIT = "_";

    @Override
    public Locale resolveLocale(HttpServletRequest httpServletRequest) {
        String lang = httpServletRequest.getHeader(PATH_PARAMETER);
        Locale locale = httpServletRequest.getLocale();
        if (!StringUtils.isEmpty(lang)) {
            String[] split = lang.split(PATH_PARAMETER_SPLIT);
            locale = new Locale(split[0], split[1]);
        }
        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {

    }

    @Bean
    public LocaleResolver localeResolver() {
        return new MyLocaleResolverConfig();
    }
}

增加读取配置文件工具

增加MessageUtils.java,用于读取国际化配置信息

@Component
public class MessageUtils {

    @Resource
    private MessageSource messageSource;

    private static MessageSource staticMessageSource;

    @PostConstruct
    public void init() {
        MessageUtils.staticMessageSource = messageSource;
    }

    /**
     * 获取消息
     * @param messageKey
     * @return
     */
    public static String getMessage(String messageKey) {
        Locale locale = LocaleContextHolder.getLocale();
        return staticMessageSource.getMessage(messageKey, null, locale);
    }
}

增加静态类

增加配置文件key对应的静态类,方便读取配置文件。

/**
 * Description:
 *
 * @author : laughing
 * DateTime: 2021-06-25 17:06
 */
public class MessageKey {

   public static String LOGIN_PASSWORD="login.password";

}

增加测试controller

/**
 * Description:
 *
 * @author : laughing
 * DateTime: 2021-06-25 17:20
 */
@RestController
public class MessageController {

    @GetMapping("message")
    public String message(){
        return MessageUtils.getMessage(MessageKey.LOGIN_PASSWORD);
    }

}

通过postman测试

请求不带参数

当我们不携带lang参数时,系统默认加载login.properties

测试中文

当我们测试中文时,lang参数携带zh_CN

测试英文

当我们测试中文时,lang参数携带en_US

2

评论 (0)

取消