springboot~国际化Locale正确的姿势

科技资讯 投稿 25000 0 评论

springboot~国际化Locale正确的姿势

使用说明

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

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

正确的姿势

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

    国际化文件在resources/i18n目录,文件名是message_{语言}.properties
  • 通过MessageSource对象进行国际化配置信息的管理
    配置类
@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. 通过切换浏览器的语言,来实现中文和英文的输出

不硬编码在程序里是程序员永远追求的方向!

编程笔记 » springboot~国际化Locale正确的姿势

赞同 (129) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽