springboot~国际化Locale正确的姿势

来源:博客园时间:2023-05-19 18:41:05


(相关资料图)

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

使用说明

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

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

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

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

正确的姿势

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

国际化文件在resources/i18n目录,文件名是message_{语言}.properties通过MessageSource对象进行国际化配置信息的管理配置类
@Configurationpublic class LocalMessageConfig {   /**    * 系统国际化文件配置    * @return MessageSource    */   @Bean   public MessageSource messageSource() {      ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();      messageSource.setBasename("classpath:i18n/message");      messageSource.setDefaultEncoding("UTF-8");      return messageSource;   }}
静态工具类
/** * 国际化消息配置 LocalMessageConfig中配置了resources/i18n/messages_zh_CN.properties. * 通过 LocaleContextHolder.getLocale()获取客户端浏览器的语言环境,就是请求头中的Accept-Language的值,再根据它进行国际化消息的获取。 * * @UtilityClass所有的方法和属性都会被加上static关键字,并且该类会创建一个私有的空参构造器 */@UtilityClasspublic 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);   }}
配置文件有中文和英文两个版本
# message_en_US.propertiestitle=System# message_zh_CN.propertiestitle=\u7cfb\u7edf # 中文咱们使用unicode编码
在前台控制器中获取配置信息
@GetMapping("get-title")public ResponseEntity title() {return ResponseEntity.ok(LocaleMessageUtils.getMessage("title"));}
通过切换浏览器的语言,来实现中文和英文的输出

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

标签:

图文推荐

热门文字

标签

精彩赏析