栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MessageSource使用(i18n国际化支持)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MessageSource使用(i18n国际化支持)

引用:https://blog.csdn.net/DreamsArchitects/article/details/120410107

i18n 来源是 internationalization 的首末字符 i 和 n ,18 为中间的字符数
internationalization:国际化

代码实现:

  • 在 i18n 目录下定义资源文件:
    messages.properties
    messages_en_US.properties
user.login.username=username
user.login.password=password

messages_zh_CN.properties

user.login.username= 用户名
user.login.password=密码
  • yml
spring:
  # 资源信息
  messages:
    # 国际化资源文件路径
    basename: i18n/messages
  • SpringUtils工具类
@Component
public class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware {

    private static ConfigurableListableBeanFactory beanFactory;
    private static ApplicationContext applicationContext;
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        SpringUtils.beanFactory  = beanFactory;
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringUtils.applicationContext = applicationContext;
    }

    public static T getBean(String name){
        return (T)beanFactory.getBean(name);
    }

    public static T getBean(Class clz){
        return beanFactory.getBean(clz);
    }

    public static boolean containsBean(String name){
        return beanFactory.containsBean(name);
    }

    public static boolean isSingleton(String name){
        return beanFactory.isSingleton(name);
    }
}
  • MessageUtils获取国际化值:
public class MessageUtils {
    
    public static String message(String code,Object... args){
        MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
        // 默认的Locale
        Locale aDefault = Locale.getDefault();
        System.out.println("aDefault = " + aDefault);
        System.out.println(LocaleContextHolder.getLocale());
        return messageSource.getMessage(code,args, aDefault);

    }
}
  • 测试:
@SpringBootTest
class MessageApplicationTests {
    @Test
    void contextLoads() {
        String message = MessageUtils.message("user.login.username");
        System.out.println("message = " + message);
    }
}
遇到的问题:
  • No message found under code ‘user.login.username’ for locale ‘en_US’.
    解决: 少写了 messages.properties,springboot不会创建 MessageSource实例
    引用:https://www.jianshu.com/p/d3697a5e7b35?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1010570.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号