首页 > 其他分享 >springboot~国际化Locale正确的姿势

springboot~国际化Locale正确的姿势

时间:2023-05-19 18:04:48浏览次数:37  
标签:姿势 国际化 return springboot Locale code messageSource public

Java中的Locale.getDefault()获取的是操作系统的默认区域设置,如果需要获取客户端浏览器的区域设置,可以从HTTP头中获取"Accept-Language"的值来进行解析。

使用说明

Java网站中实现国际化(多语言支持)通常需要涉及以下几个方面:

  1. 为所有可见的文本(如按钮、标签、提示等)都提供多语言的支持,遵循国际化的标准,建议使用标准的属性文件进行配置。

  2. 根据用户请求或浏览器设置来选择合适的Locale,以便在数据保存和显示时使用相应的语言和地区格式。最常用的方法是使用Java的Locale类来获取、设置当前的Locale,可以通过调用Locale类的getAvailableLocales()方法获取支持的区域列表,也可以根据用户的请求或浏览器的设置来检测用户当前所使用的Locale。

  3. 针对国际化后的日期、时间、数字等数据类型进行格式化处理,以便在不同的语言、地区环境下使数据显示更加友好和易读。可以使用Java的SimpleDateFormat类等进行处理。

正确的姿势

在Java Web应用中使用MessageSource对象实现国际化功能时,可以通过以下步骤使用浏览器语言动态设置Locale区域。

  • 国际化文件在resources/i18n目录,文件名是message_{语言}.properties
  • 通过MessageSource对象进行国际化配置信息的管理
  1. 配置类
@Configuration
public class LocalMessageConfig {

   /**
    * 系统国际化文件配置
    * @return MessageSource
    */
   @Bean
   public MessageSource messageSource() {
      ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
      messageSource.setBasename("classpath:i18n/message");
      messageSource.setDefaultEncoding("UTF-8");
      return messageSource;
   }

}
  1. 静态工具类
 /**
 * 国际化消息配置 LocalMessageConfig中配置了resources/i18n/messages_zh_CN.properties.
 * 通过 LocaleContextHolder.getLocale()获取客户端浏览器的语言环境,就是请求头中的Accept-Language的值,再根据它进行国际化消息的获取。
 *
 * @UtilityClass所有的方法和属性都会被加上static关键字,并且该类会创建一个私有的空参构造器
 */
@UtilityClass
public class LocaleMessageUtils {

   /**
    * 通过code 获取错误信息
    * @param code
    * @return
    */
   public String getMessage(String code) {
   return getMessage(code, null);
   }

   /**
    * 通过code 和参数获取错误信息
    * @param code
    * @return
    */
   public String getMessage(String code, Object... objects) {
      MessageSource messageSource = SpringContextUtils.getBean("messageSource");
      Locale locale = LocaleContextHolder.getLocale();
      return messageSource.getMessage(code, null,locale);
   }

}
  1. 配置文件有中文和英文两个版本
# message_en_US.properties
title=System
# message_zh_CN.properties
title=\u7cfb\u7edf # 中文咱们使用unicode编码

  1. 在前台控制器中获取配置信息
	@GetMapping("get-title")
	public ResponseEntity title() {
		return ResponseEntity.ok(
				LocaleMessageUtils.getMessage("title")
		);
	}

  1. 通过切换浏览器的语言,来实现中文和英文的输出


通过这个国际化,我们可以更优雅的实现多语言的系统设计了,不硬编码在程序里是程序员永远追求的方向

标签:姿势,国际化,return,springboot,Locale,code,messageSource,public
From: https://www.cnblogs.com/lori/p/17415892.html

相关文章

  • 关于SpringBoot AutoConfiguration
    (1)如何导入的自动配置类首先我们得从@SpringBootApplication注解入手。@SpringBootApplicationpublicclassSpringBootDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringBootDemoApplication.class,args);......
  • springboot开启跨域security也开启跨域配置
    springboot开启跨域security也开启跨域配置浏览器同源策略,导致跨域失败,添加了security框架后,因为安全框架有一些列的过滤器,即使springboot把跨域打开,security的过滤器也可以能拦截。所以,如果要在服务器端设置,要改两处 方法一:先开放springboot的跨域 再开启security的跨......
  • SpringBoot实现WebSocket发送接收消息 + Vue实现SocketJs接收发送消息
    SpringBoot实现WebSocket发送接收消息+Vue实现SocketJs接收发送消息参考:1、https://www.mchweb.net/index.php/dev/887.html2、https://itonline.blog.csdn.net/article/details/81221103?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2......
  • springboot 2.4 版本后的多环境配置
    beanpackagecom.example.demo.tt;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Component;importjavax.annotation.PostConstruct;@ComponentpublicclassTT{@Value("${test.ww}")pub......
  • ④ActiveMQ 与 SpringBoot 集成——(动力节点)ActiveMQ笔记
    第四章ActiveMQ与SpringBoot集成4-1ActiveMQ与SpringBoot集成集成配置1、加载springboot的activeMQ的依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><depen......
  • SpringBoot整合knife4j(swagger)
    关于knife4jKnife4j是一个基于Swagger的Java接口文档生成工具,它提供了一套可视化的界面来展示和测试API接口。Knife4j通过解析接口代码中的Swagger注解,自动生成接口文档,并提供了交互式的API文档界面,方便开发者查看和测试接口。引用官方的一句描述Knife4j是一个集Swagger2和Open......
  • SpringBoot配置过滤器、拦截器
    拦截器概述SpringBoot提供了一种简单且强大的方式来定义和使用拦截器(Interceptor)。SpringBoot的拦截器基于Spring框架的拦截器机制,可以在请求的处理过程中插入自定义的逻辑。SpringBoot的拦截器主要用于在请求处理的不同阶段执行额外的逻辑操作,比如在请求进入控制器方法之前......
  • Springboot支持XML格式报文的传输
    导入依赖-jackson-dataformat-xml<!--整合web模块--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions>......
  • SpringBoot 配置统一API对象返回
    1、前言在实际项目开发中,为了便于前端进行响应处理,需要统一返回类格式。特别是在有多个后端开发人员参与的情况下,如果不规范返回类,每个人按照个人习惯返回数据,前端将面临各式各样的返回数据,难以统一处理。为解决这个问题,我们需要规范后端的返回数据,并定义一个统一的返回类,所有数......
  • SpringBoot单元测试只${spring.profiles.active}异常
    在使用SpringBoot进行单元测试时,如果遇到「couldnotresolveplaceholder'spring.profiles.active'」的错误提示,通常是因为你在测试用例中使用了@ActiveProfiles注解来激活某些特定的配置文件,但是你的项目中并没有这些指定的配置文件。为了解决这个问题,你需要检查你的测试......