Springboot实现国际化以及部署Linux不生效问题

1、在application.properties 添加以下配置:

#国际化配置
spring.messages.basename=i18n/messages/messages
spring.messages.fallback-to-system-locale=false

 2、添加配置文件在 resources目录下 如下图所示:

这个国际化文件命名有个坑,必须按照小明名称进行  否则部署linux国际化不生效,目前是遇到这个问题,问题修改en_us/zh_cn/es_pa得到解决 。如果有其他方式 ,欢迎留言沟通交流。

3、添加国际化配置文件:

I18nConfig.java

package com.example.cxjgmanagedevice.utils;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

import java.util.Locale;

@Configuration
public class I18nConfig implements WebMvcConfigurer {

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        slr.setDefaultLocale(Locale.US); // 设置默认语言为英语
        return slr;
    }

    @Bean
    public ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasenames("classpath:i18n/messages/messages"); // 设置基础名,不带后缀
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(5); // 设置缓存刷新间隔(秒)
        return messageSource;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
        localeChangeInterceptor.setParamName("lang"); // 通过URL参数lang来切换语言
        registry.addInterceptor(localeChangeInterceptor);
    }
}

4、创建控制类 添加属性:

private final MessageSource messageSource;

@Autowired
public UserController(MessageSource messageSource) {
    this.messageSource = messageSource;
}

5、在对应接口方法上通过下面方式进行国际化

Locale locale = new Locale(lang);
String message = null;
if (StringUtils.isBlank(mobile) || StringUtils.isBlank(random)) {
    message = messageSource.getMessage("1004",null , locale);
    return ResultCodeDataObj.INFO("1004", message,null);
}

6、国际化配置文件

至此:你的国际化流程已经顺利完成,中间过程中,如果有任何问题,欢迎骚扰。

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA终结者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值