Spring boot国际化支持

当我们web项目涉及到国外部署或者国外用户使用时,需要展示不同语言信息,所以就需要国际化支持,下面将讲解Springboot国际化支持操作

1. 修改Springboot application.yml配置

spring:messages:basename: i18n/messages #配置国际化资源文件路径

2. 创建国际化资源文件

messages.properties不带后缀为默认语言资源

  • 简体中文 messages_zh_CN.properties

    unknown.exception=未知异常,请联系管理员!
    user.login.notExists={0} 用户不存在!
    
  • 英文 messages_en_US.properties

    unknown.exception=Unknown error,Please contact the administrator!
    user.login.notExists={0} user not exists!
    
  • messages.properties文件内容就和简体中文文件一致,如果未设置Locale参数,默认就为该文件内容,此文件也可不用

    unknown.exception=未知异常,请联系管理员!
    user.login.notExists={0} 用户不存在!
    

3. 创建SpringUtil类

创建SpringUtil工具类,方便其他工具类(未被Spring管理的class)获取Spring容器中的实例。

import com.central.common.utils.StringUtils;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;/*** spring工具类 方便在非spring管理环境中获取bean** @author xq0136*/
@Component
public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware
{/** Spring应用上下文环境 */private static ConfigurableListableBeanFactory beanFactory;private static ApplicationContext applicationContext;@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException{SpringUtils.beanFactory = beanFactory;}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException{SpringUtils.applicationContext = applicationContext;}/*** 获取对象** @param name* @return Object 一个以所给名字注册的bean的实例* @throws BeansException**/@SuppressWarnings("unchecked")public static <T> T getBean(String name) throws BeansException{return (T) beanFactory.getBean(name);}/*** 获取类型为requiredType的对象** @param clz* @return* @throws BeansException**/public static <T> T getBean(Class<T> clz) throws BeansException{T result = (T) beanFactory.getBean(clz);return result;}/*** 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true** @param name* @return boolean*/public static boolean containsBean(String name){return beanFactory.containsBean(name);}/*** 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)** @param name* @return boolean* @throws NoSuchBeanDefinitionException**/public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException{return beanFactory.isSingleton(name);}/*** @param name* @return Class 注册对象的类型* @throws NoSuchBeanDefinitionException**/public static Class<?> getType(String name) throws NoSuchBeanDefinitionException{return beanFactory.getType(name);}/*** 如果给定的bean名字在bean定义中有别名,则返回这些别名** @param name* @return* @throws NoSuchBeanDefinitionException**/public static String[] getAliases(String name) throws NoSuchBeanDefinitionException{return beanFactory.getAliases(name);}/*** 获取aop代理对象** @param invoker* @return*/@SuppressWarnings("unchecked")public static <T> T getAopProxy(T invoker){return (T) AopContext.currentProxy();}/*** 获取当前的环境配置,无配置返回null** @return 当前的环境配置*/public static String[] getActiveProfiles(){return applicationContext.getEnvironment().getActiveProfiles();}/*** 获取当前的环境配置,当有多个环境配置时,只获取第一个** @return 当前的环境配置*/public static String getActiveProfile(){final String[] activeProfiles = getActiveProfiles();return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null;}
}

4. 创建MessageUtils工具类,获取message

Spring提供了 MessageSource来实现国际化操作,原理后续编写 todo


import com.xq.util.spring.SpringUtils;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;/*** 获取i18n资源文件**/
public class MessageUtils {/*** 根据消息键和参数 获取消息 委托给spring messageSource* @param code 消息键* @param args 参数* @return 获取国际化翻译值*/public static String message(String code, Object... args) {MessageSource messageSource = SpringUtils.getBean(MessageSource.class);return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());}}

5. java代码中使用MessageUtils实现国际化操作

@GetMapping("test")
public String getRedisTest(){String msg1 = MessageUtils.message("unknown.exception");String msg2 = MessageUtils.message("user.login.notExists","123456");return msg1+"\n"+msg2;
}

请求测试接口返回结果:

6. 添加国际化拦截器

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {/*** 国际化配置*/@Beanpublic LocaleResolver localeResolver(){//      SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
//      sessionLocaleResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
//      return sessionLocaleResolver;//使用CookieLocaleResolver,也可使用SessionLocaleResolver,区别在于一个使用Cookie存储Locale信息,一个使用SessionCookieLocaleResolver localeResolver = new CookieLocaleResolver();localeResolver.setCookieName("localeCookie");//设置默认区域localeResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);localeResolver.setCookieMaxAge(3600);//设置cookie有效期.return localeResolver;}/**** 添加Locale 拦截器,从请求参数lang中获取参数值,这样我们可以通过lang RequestParam来切换Locale信息*/@Beanpublic LocaleChangeInterceptor localeChangeInterceptor(){LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();localeChangeInterceptor.setParamName("lang");return localeChangeInterceptor;}@Overridepublic void addInterceptors(InterceptorRegistry registry) {//添加locale拦截器registry.addInterceptor(localeChangeInterceptor());}}

如图:

Spring boot实现国际化相关推荐

  1. Spring Boot 数据国际化

    internationalization详解 国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式.它要求从产品中抽离所有地域语言,国家/地区和文化相关的 ...

  2. Spring Boot 页面国际化

    internationalization详解 国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式.它要求从产品中抽离所有地域语言,国家/地区和文化相关的 ...

  3. Spring Boot国际化支持

    文章目录 添加Maven支持 LocaleResolver LocaleChangeInterceptor 定义Message Sources Controller文件 html文件 运行应用程序 S ...

  4. Spring Boot中通过Accept-Language头信息设置国际化内容

    目录 概念 演示 操作步骤 概念 使用Spring MVC编写国际化配置文件: 1. 编写国际化配置文件: 2. 使用ResourceBundleMessageSource管理国际化资源文件: 3. ...

  5. Spring Boot国际化(i18n)

    国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式.它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素.换言之,应用程序的功能和代码设计考虑在不 ...

  6. spring boot 国际化

    国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式.它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素.换言之,应用程序的功能和代码设计考虑在不 ...

  7. Spring Boot Validation提示信息国际化配置

    引言 之前介绍过Spring Boot Validation的使用及扩展,可参见:<SpringBoot Validation> 本文在此基础上重点讲解下Spring Boot Valid ...

  8. Spring boot国际化

    国际化 根据浏览器,语言设置的信息 自动切换国际化支持 Spring MVC实现过程 1.编写国际化配置文件 2.使用ResourceBundleMessageSource管理国际化资源文件 3.在页 ...

  9. Spring Boot基础学习笔记10:配置国际化页面

    文章目录 零.学习目标 1.掌握使用Thymeleaf配置国际化页面 2.掌握Thymeleaf复杂数据的展示 一.使用Thymeleaf配置国际化页面 (一)创建Spring Boot项目 - Th ...

最新文章

  1. react-webpack-express
  2. python中eval()函数的使用
  3. python识别文字并且提示_python脚本:检测字符串标识符
  4. LNMP环境运行laravel open_basedir restriction in effect 问题
  5. javascript继承一览
  6. php setjmp longjmp,我本来以为setjmp和longjmp的实现很复杂【附代码】
  7. 小米路由器开启SSH并连接
  8. echarts地图地名显示_echarts显示自定义中国地图——笔记
  9. 4.1 手工编写第一个Jmeter性能测试脚本
  10. 黎明前的黑夜如此漫长
  11. 李维看 .net 和 DELPHI 6 (含李维照片) (转)
  12. SSRS 2008 冻结首行
  13. 软件著作权申请有什么条件?
  14. 中国最美的10首情诗
  15. 使用注册表设置程序软件开机自启
  16. 基于spring boot的邮件微服务消息中间件设计与实现 毕业论文+系统功能图v1.0.vsdx+项目源码
  17. 手工DIY:手机变身扫描仪_极客迷
  18. 0基础建站教程,1小时建网站,王通教程
  19. mysql不同版本乱码_技术|解决MySQL中文乱码以及版本不一致问题
  20. 超微主板IPMI激活升级BIOS的方法

热门文章

  1. 大咖说|“网上浙大”数字化之路
  2. matlab遗传算法(例题及代码)
  3. 想做外贸却没有头绪?来看看这篇文章
  4. 看完这篇 教你玩转渗透测试靶机vulnhub——FunBox3(Easy)
  5. js 去除首尾字符串的几种方式(es6前后)
  6. 病毒木马查杀实战第005篇:熊猫烧香之逆向分析(上)
  7. 前后端交互(Promise、fetch、axios、async/awit用法)
  8. 阿里如何保障数据质量的?
  9. Mybatis入门环境搭建
  10. 用visio画ER图