首页 > 其他分享 >7、springboot使用MessageSource国际化提示

7、springboot使用MessageSource国际化提示

时间:2023-09-27 11:12:25浏览次数:58  
标签:国际化 springboot messages springframework org import MessageSource String

目录

springboot使用MessageSource国际化提示

1、MessageSource源码

MessageSource是spring自带的一个接口,源码如下

package org.springframework.context;

import java.util.Locale;
import org.springframework.lang.Nullable;

public interface MessageSource {
    @Nullable
    String getMessage(String var1, @Nullable Object[] var2, @Nullable String var3, Locale var4);

    String getMessage(String var1, @Nullable Object[] var2, Locale var3) throws NoSuchMessageException;

    String getMessage(MessageSourceResolvable var1, Locale var2) throws NoSuchMessageException;
}

ApplicationContext实现了MessageSource的接口,所有可以直接通过@Autowired就可以注入MessageSource对象了,源码如下:

package org.springframework.context;

import org.springframework.beans.factory.HierarchicalBeanFactory;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.core.env.EnvironmentCapable;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.lang.Nullable;

public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
    @Nullable
    String getId();

    String getApplicationName();

    String getDisplayName();

    long getStartupDate();

    @Nullable
    ApplicationContext getParent();

    AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;
}

2、yml配置MessageSource

#spring框架配置
spring:
  messages:
    basename: i18n/messages,i18n/messages_zh,i18n/messages_zh_CN
    encoding: UTF-8
  • spring.messages.basename:加载国际化文件,有多个使用逗号隔开,i18n是文件夹,messages为资源文件messages.properties,目录文件放在src/main/resources

messages.properties

messages.operation.success=操作成功
messages.operation.success.arg=操作成功{0}
  • spring.messages.encoding:中文编码,默认是UTF-8

  • spring.messages.cacheDuration:文件加载到内存后缓存的时间,默认单位秒,如何没有设置默认是一次性加载,不会自动更新。这个参数在 ResourceBundleMessageSource、ReloadableResourceBundleMessageSource 稍微有些差异,会具体说下。

  • spring.messages.fallbackToSystemLocale:一个兜底开关,默认情况下,如何系统找不到语言的值,会走beanname中默认的messages.properties中查找,如何再找不就会直接返回或抛异常。该参数设置为 true 的话,还会再走一步兜底逻辑,从当前系统语言对应配置文件中查找。该参数默认是 true;

  • spring.messages.alwaysUseMessageFormat:MessageSource 组件通过 MessageFormat.format 函数对国际化信息格式化,如果注入参数,输出结果是经过格式化的。比如 MessageFormat.format("Hello, {0}!", "Kanshan") 输出结果是“Hello, Kanshan!”。该参数控制的是,当输入参数为空时,是否还是使用 MessageFormat.format 函数对结果进行格式化,默认是 false;

  • spring.messages.useCodeAsDefaultMessage:当没有找到对应信息的时候,是否返回 code。也就是当找了所有能找的配置文件后,还是没有找到对应的信息,是否直接返回 code 值。默认是 false,即不返回 code,抛出 NoSuchMessageException 异常。

按需配置即可

3、创建MessagesUtils工具类简化使用

package com.ss.ifrs.datamgr.util;

import com.ss.platform.util.SpringContextUtil;
import org.springframework.context.MessageSource;

import java.util.Locale;

public class MessagesUtils {

    public static String getMessages(String code, Object[] args,String language){
       	//通过上下文获取bean
        MessageSource messageSource = (MessageSource) SpringContextUtil.getBean("messageSource");
        //通过对应的code,语言获取国际化翻译
        String messageStr = messageSource.getMessage(code,args, new Locale(language));
        return messageStr;
    }

    public static String getMessages(String code, String language){
        MessageSource messageSource = (MessageSource) SpringContextUtil.getBean("messageSource");
        String messageStr = messageSource.getMessage(code,null, new Locale(language));
        return messageStr;
    }

}

使用:

String mess = MessagesUtils.getMessages("messages.operation.success","zh");
//带动态参数
String mess = MessagesUtils.getMessages("messages.operation.success.arg",new Object[]{"我操作的"},"zh");

标签:国际化,springboot,messages,springframework,org,import,MessageSource,String
From: https://www.cnblogs.com/lgxdev/p/17732204.html

相关文章

  • SpringBoot | 拦截机制
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......
  • SpringBoot | Bean生命周期
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......
  • Idea+SpringBoot控制台调试打印sql语句
    在application.yml中添加:logging:level:com.xiaobai.stock.mapper:DEBUG//注意:':'后有空格,不能省略mapper:运行时控制台 ......
  • SpringBoot | 加密算法使用示例
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......
  • SpringBoot | Dubbo之Filter使用示例
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......
  • SpringBoot | Redis序列化与分布式锁
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......
  • SpringBoot | Jackson序列化
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......
  • 新手指引:前后端分离的springboot + mysql + vue实战案例
    案例说明:使用springboot+mysql+vue实现前后端分离的用户查询功能。1、mysql:创建test数据库->创建user数据表->创建模拟数据;2、springboot:配置mysql->使用mybatis操作mysql数据库->接口开发;3、vue:使用axios访问接口->user数据展示;1、mysql数据库1.1、安......
  • springboot大文件上传、分片上传、断点续传、秒传的实现
    对于大文件的处理,无论是用户端还是服务端,如果一次性进行读取发送、接收都是不可取,很容易导致内存问题。所以对于大文件上传,采用切块分段上传,从上传的效率来看,利用多线程并发上传能够达到最大效率。 本文是基于springboot+vue实现的文件上传,本文主要介绍服务端实现文件上传的......
  • 基于springboot学生请假管理系统-计算机毕业设计源码+LW文档
    摘要:本学生请假管理系统是针对目前学生请假的实际需求,从实际工作出发,对过去的学生请假管理系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提高了工作的效率。本系统结合计算机系统的结构、概念、模型、原理......