码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • springboot~国际化Locale正确的姿势


    合集 - springboot(2)(42)
    1.springboot~@ConditionalOnMissingBean一切为了可扩展性2022-03-142.springboot~security中自定义forbidden和unauthorized返回值2022-03-283.springboot~静态文件映射2022-04-204.springboot~将一个Integer类型序列为k/v对象2022-04-185.springboot~jackson和redis日期序列化2022-04-166.springboot~mybatis-plus枚举到数据库整型字段2022-03-317.springboot~用正则表达式提取bearer token2022-08-178.springboot~maven进行docker打包与推送2022-07-289.springboot~关于打包时记录当前git信息2022-07-2810.springboot~@valid返回第一个错误消息2022-07-1111.springboot~加快tomcat启动securerandom.source2022-07-0512.springboot~starter包的制作2022-07-0413.springboot~MyBatisPlus中使用@TableField完成字段自动填充2022-06-2914.springboot~没有启动类项目的单元测试2022-06-2815.springboot~WebMvcConfigurer详解02-0116.springboot~openfeign开启熔断之后MDC为null的解决01-3017.springboot~openfeign开启熔断之后MDC为null的理解01-2918.springboot~logback按level添加不同的颜色01-2819.BeanFactory的总结01-1920.springboot~写一个从excel读取json到List的方法2022-10-2821.springboot~redis-cluster动态感应的配置2022-10-2422.springboot~对mybatis的start包进行单元测试2022-10-1123.springcloud~nacos通过@refreshScope进行配置热更新2022-09-2124.springboot~RedisTemplate三种序列化方式2022-09-1625.springboot~Cache注解缓存在代码中的获取2022-09-0926.springboot~ApplicationContextAware与@Autowired注解2022-09-0927.springboot~Screw生成数据库文档2022-09-0228.starter包~mica-auto自动生成spring.factories等元文件2022-08-3129.springboot~elasticsearch对nested集合类型的字段进行不等于的检索2022-08-2330.springboot~手动加载thymeleaf模版2022-08-1831.springboot~SSE做消息推送05-0432. SimpleDateFormat和DateTimeFormatter04-2733.github~通过packages功能实现maven仓库托管04-2534.springboot~关于md5签名引发的问题04-2335.springboot~ConditionalOnProperty注解的使用03-0936.spi~在插件开发过程中的使用02-07
    37.springboot~国际化Locale正确的姿势05-19
    38.springboot~sharding-jdbc实现分库分表05-2439.springboot~mybatis-plus的DynamicTableNameInnerInterceptor实现分表05-2440.springboot~统一处理日期请求参数java.utils.Date和java.time.LocalDate05-2541.java~如何使用无符号整型06-0842.springboot~jgroups实现节点间的通讯06-08
    收起

    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. 通过切换浏览器的语言,来实现中文和英文的输出


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

  • 相关阅读:
    Synopsys Sentaurus TCAD系列教程之-Tcl《1》
    快速排序算法
    Qt http网络编程
    java面向对象之封装-抽象-继承-组合-多态五种概念一网打尽
    数据分析:小红书2024年年轻人社交趋势洞察
    面试大厂Java工程师后整理份300+页Java面试宝典
    JVM-垃圾回收
    windows命令行XCOPY命令
    cookie加密解密和保证数据完整性(不被篡改)
    php反序列化个人笔记
  • 原文地址:https://www.cnblogs.com/lori/p/17415892.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号