目录
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