Spring Boot 如何处理国际化

news2025/1/12 1:07:55

Spring Boot 国际化

在全球化的今天,很多应用程序需要支持多种语言和地区。为了满足不同用户的需求,应用程序需要提供多语言的支持。Spring Boot 提供了强大的国际化支持,使得开发人员能够轻松地为应用程序添加多语言支持。本文将介绍如何使用 Spring Boot 处理国际化,并提供示例代码来帮助读者更好地理解。

在这里插入图片描述

Spring Boot 国际化的基本原理

Spring Boot 国际化的基本原理是将应用程序中的文本信息抽取出来,存储在一个或多个属性文件中,然后根据用户的语言和地区选择相应的属性文件来显示文本信息。Spring Boot 默认使用 messages.propertiesmessages_xx.properties 文件作为属性文件,其中 xx 为语言和地区的代码。例如,messages_cn.properties 文件用于存储中文文本信息,messages_en_US.properties 文件用于存储美式英文文本信息。

在应用程序中,可以使用 MessageSource 接口来访问属性文件中的文本信息。Spring Boot 提供了多种方式来注入 MessageSource 接口,例如使用 @Autowired@Resource@Inject 注解。然后,可以使用 MessageSourcegetMessage() 方法来获取属性文件中的文本信息。例如,以下代码演示了如何使用 MessageSource 获取 messages.properties 文件中的文本信息:

@Autowired
private MessageSource messageSource;

public String getMessage() {
    return messageSource.getMessage("hello", null, Locale.getDefault());
}

在这个示例代码中,使用 @Autowired 注解将 MessageSource 接口自动注入到 messageSource 变量中。然后,使用 messageSource.getMessage() 方法获取 messages.properties 文件中名称为 hello 的文本信息,并返回该文本信息。

国际化属性文件的命名规则

Spring Boot 默认使用 messages.propertiesmessages_xx.properties 文件作为属性文件,其中 xx 为语言和地区的代码。当应用程序需要支持多种语言和地区时,可以为每种语言和地区创建一个属性文件,并使用正确的语言和地区代码命名文件。例如,以下是一些常用的语言和地区代码:

  • zh_CN:简体中文
  • zh_TW:繁体中文
  • en_US:美式英文
  • en_GB:英式英文
  • ja_JP:日文
  • ko_KR:韩文

如果应用程序需要支持以上所有语言和地区,可以为每种语言和地区创建一个属性文件,如下所示:

  • messages.properties:默认属性文件,用于存储英文文本信息。
  • messages_zh_CN.properties:用于存储简体中文文本信息。
  • messages_zh_TW.properties:用于存储繁体中文文本信息。
  • messages_en_US.properties:用于存储美式英文文本信息。
  • messages_en_GB.properties:用于存储英式英文文本信息。
  • messages_ja_JP.properties:用于存储日文文本信息。
  • messages_ko_KR.properties:用于存储韩文文本信息。

在以上属性文件中,可以使用相同的键名来存储不同语言和地区的文本信息。例如,在messages.properties 文件中,可以使用以下键值对存储 hello 的英文文本信息:

hello=Hello!

messages_zh_CN.properties 文件中,可以使用以下键值对存储 hello 的简体中文文本信息:

hello=你好!

messages_zh_TW.properties 文件中,可以使用以下键值对存储 hello 的繁体中文文本信息:

hello=妳好!

messages_en_US.properties 文件中,可以使用以下键值对存储 hello 的美式英文文本信息:

hello=Hi!

messages_en_GB.properties 文件中,可以使用以下键值对存储 hello 的英式英文文本信息:

hello=Hello!

messages_ja_JP.properties 文件中,可以使用以下键值对存储 hello 的日文文本信息:

hello=こんにちは!

messages_ko_KR.properties 文件中,可以使用以下键值对存储 hello 的韩文文本信息:

hello=안녕하세요!

当用户选择不同的语言和地区时,Spring Boot会根据用户的语言和地区代码自动选择相应的属性文件,并返回相应的文本信息。

在 Spring Boot 中配置国际化

配置 Spring Boot 的国际化非常简单。首先,在 application.propertiesapplication.yml 文件中配置默认语言和地区代码。例如,在 application.properties 中添加以下配置:

spring.messages.basename=messages
spring.messages.encoding=UTF-8
spring.messages.fallback-to-system-locale=false

或在 application.yml 中添加以下配置:

spring:
  messages:
    basename: messages
    encoding: UTF-8
    fallback-to-system-locale: false

在上面的配置中,spring.messages.basename 属性指定了属性文件的基本名称,即 messages。Spring Boot 将自动查找 messages.propertiesmessages_xx.properties 文件来获取文本信息。spring.messages.encoding 属性指定了属性文件的编码方式,默认为 UTF-8。spring.messages.fallback-to-system-locale 属性指定了当找不到当前语言和地区的属性文件时是否回退到系统语言和地区,默认为 false

然后,可以在属性文件中添加键值对来存储文本信息。例如,在messages.properties 文件中添加以下键值对:

hello=Hello!

messages_zh_CN.properties 文件中添加以下键值对:

hello=你好!

messages_zh_TW.properties 文件中添加以下键值对:

hello=妳好!

messages_en_US.properties 文件中添加以下键值对:

hello=Hi!

messages_en_GB.properties 文件中添加以下键值对:

hello=Hello!

messages_ja_JP.properties 文件中添加以下键值对:

hello=こんにちは!

messages_ko_KR.properties 文件中添加以下键值对:

hello=안녕하세요!

然后,在代码中使用 MessageSource 来获取属性文件中的文本信息。例如,在控制器中添加以下代码:

@Autowired
private MessageSource messageSource;

@GetMapping("/hello")
public String hello(HttpServletRequest request) {
    return messageSource.getMessage("hello", null, request.getLocale());
}

在上面的代码中,使用 @Autowired 注解将 MessageSource 接口自动注入到 messageSource 变量中。然后,在 hello() 方法中,使用 messageSource.getMessage() 方法获取 hello 键对应的文本信息。request.getLocale() 方法用于获取当前请求中的语言和地区代码,让 Spring Boot 自动选择相应的属性文件,并返回相应的文本信息。

在 Thymeleaf 模板中使用国际化

Thymeleaf 是一种流行的模板引擎,它与 Spring Boot 集成得非常好。Thymeleaf 提供了强大的国际化支持,使得开发人员能够轻松地在模板中使用多语言文本信息。在 Thymeleaf 模板中使用国际化需要以下步骤:

  1. 在模板中使用 th:text 属性来显示文本信息。
  2. 使用 #{...} 表达式来引用属性文件中的键。

例如,在以下 Thymeleaf 模板中,使用 th:text 属性来显示文本信息,并使用 #{...} 表达式来引用属性文件中的键:

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"/> 
    <title>Spring Boot Thymeleaf Internationalization Example</title> 
    </head> 
    <body> <h1 th:text="#{hello}">Hello!</h1> </body> 
</html> 

在上面的模板中,使用 th:text 属性来显示文本信息,并使用 #{hello} 表达式来引用 messages.properties 文件中的 hello 键。当用户选择不同的语言和地区时,Thymeleaf 会自动选择相应的属性文件,并返回相应的文本信息。

使用消息参数

在实际开发中,有时需要将动态参数插入到文本信息中。例如,需要显示欢迎消息,但需要将用户名动态插入到消息中。在这种情况下,可以在属性文件中使用占位符来表示动态参数,然后在代码中使用 MessageSourcegetMessage() 方法来将动态参数插入到文本信息中。

例如,在 messages.properties 文件中添加以下键值对:

welcome=Welcome, {0}!

在代码中使用 getMessage() 方法将动态参数插入到文本信息中:

@Autowired
private MessageSource messageSource;

@GetMapping("/welcome")
public String welcome(HttpServletRequest request, @RequestParam String name) {
    return messageSource.getMessage("welcome", new Object[]{name}, request.getLocale());
}

在上面的代码中,使用 getMessage() 方法将 welcome 键对应的文本信息获取出来,并将 name 参数动态插入到文本信息中。

在 Thymeleaf 模板中,可以使用 th:text 属性和 #{...} 表达式来显示包含动态参数的文本信息。例如,在以下 Thymeleaf 模板中,将 name 参数插入到 welcome 键对应的文本信息中:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>Spring Boot Thymeleaf Internationalization Example</title>
</head>
<body>
    <h1 th:text="#{welcome(${name})}">Welcome, <span th:text="${name}">User</span>!</h1>
</body>
</html>

在上面的模板中,使用 th:text 属性和 #{welcome(${name})} 表达式来获取包含动态参数的文本信息。th:text="${name}" 表达式用于显示 name 参数的值。

总结

Spring Boot 提供了强大的国际化支持,使得开发人员能够轻松地为应用程序添加多语言支持。在本文中,我们介绍了 Spring Boot 国际化的基本原理、国际化属性文件的命名规则以及如何在 Spring Boot 中配置国际化。我们还介绍了如何在 Thymeleaf 模板中使用国际化,并使用动态参数来插入动态内容。

通过使用 Spring Boot 的国际化支持,开发人员可以为不同语言和地区的用户提供更好的用户体验,从而吸引更多的用户。****

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/558403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能Python-python_id用法

Python ID用法介绍 在 Python 编程中&#xff0c;ID 是一个极其重要的概念。ID 是一个对象在内存中的唯一标识符&#xff0c;每个对象都有一个唯一的 ID。在本文中&#xff0c;我们将介绍 Python ID 的用途和用法&#xff0c;并且给出一些示例&#xff0c;以帮助读者更好地理解…

lab4:以time/gettimeofday系统调用为例分析ARM64 Linux 5.4.34

一、ARM64 Linux系统调用过程 &#xff08;1&#xff09;svc指令触发系统调用。 &#xff08;2&#xff09;保存现场&#xff08;el0_sync处的内核汇编代码保存异常发生时程序的执行现场&#xff09;&#xff0c;然后根据异常发生的原因&#xff08;ESR_EL1寄存器&#xff09;…

“不务正业”的奶茶店三个月实现30+万收入

今天我和大家分享一个 我身边的案例。 我有一个朋友 和我分享他朋友的 一个奶茶店 互联网商城的故事。 19年李某开了一家 奶茶店&#xff0c;同时呢 自己在平台做了一个 线上购买奶茶的商城 他是怎么做的呢&#xff1f; 原来每次有客户来到店 购买奶茶的时候。 他会和客户说 扫…

BetaFlight Mark4 H7 Dual270 + BN880 + CRSF 配置存档

BetaFlight Mark4 H7 Dual270 BN880 CRSF 配置存档 1. 源由2. 配置2.1 端口2.2 系统2.3 对齐2.4 GPS2.5 救援2.6 PID2.7 Rate2.8 滤波2.9 接收器2.10 模式2.11 电机 3.差异4. 整机效果5. 飞行效果6. 参考资料 1. 源由 手头这台航模四轴&#xff0c;基本调试的差不多&#xf…

【数据分析之道-Numpy(八)】numpy统计函数

文章目录 专栏导读1、np.mean()2、np.median()3、np.std()4、np.var()5、np.min()6、np.max()7、np.sum()8、np.prod()9、np.percentile()10、np.any()11、np.all() 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN Python领域新星创作者&#xff0c;专注于分享python领…

Qt QGenericPlugin插件使用案例

问题描述: Qt插件的编写,有两种方式,一种是直接通过自定义接口类Interface来实现,一种是通过QtCreator自带的插件模板来创建。 这里我们先来实现第二种。 功能为点击主界面的按钮,显示插件界面。(插件和开发库一样,什么都可以放进去,只不过就是封装成方便调用的模块…

Vue|非单文件组件

传统网页一些不可避免的小问题: 1.网页JS、CSS等资源依赖关系混乱,不方便维护 2.代码复用率很低 使用组件将代码进行复用,简化项目结构,提高运行效率,便于维护 组件定义传统网页组件 传统代码实现步骤 组件代码定义组件注册组件局部注册全局注册 使用组件避坑 组件定义 组件即为…

聊聊如何利用spring插件来实现策略模式

前言 偶然的机会发现spring有个spring-plugin&#xff0c;官网对它的介绍是 Spring Plugin provides a more pragmatic approach to plugin development by providing the core flexibility of having plugin implementations extending a core system’s functionality but o…

linux上使用系统安装和Docker安装mysql的两种方式

一、安装到linux 1、安装mysql-server 1、在安装之前查看下系统是否已经安装了mysql ls /usr/share2、安装mysql-server sudo apt-get install mysql-server3、再次查看&#xff0c;发现多了个mysql ls /usr/share | grep mysql //在ls打印结果中搜索mysql关键字4、登陆 在…

chatgpt赋能Python-python_lamb

Python Lambdas - 强大的匿名函数 Python是一个充满了强大特性的编程语言&#xff0c;其中之一就是Python的lambda函数。在这篇文章中&#xff0c;我们将介绍Python lambdas的基础知识、使用方法、优缺点以及与普通函数的区别。 什么是Python Lambda函数 Python Lambda函数&…

咖啡「江湖」:从1999到2023

【潮汐商业评论/原创】 “我现在几乎每天都要来杯咖啡&#xff0c;哪怕周末在家休息也是。上班喝美式是为了提神&#xff0c;在家做拉花是享受生活&#xff0c;平时和朋友出去大概率还是会选择咖啡馆&#xff0c;毕竟看起来有氛围还不发胖。”Allen说道。 事实上&#xff0c;…

地铁车辆项目RAMS管理

导读 由于RAMS管理可以为轨道交通提供安全保障&#xff0c;提高运行效率&#xff0c;该管理模式在国外已得到广泛应用&#xff0c;并取得了良好成效。因此引入RAMS管理是确保城市轨道交通车辆安全发展的必然趋势。本文分析地铁车辆项目RAMS管理的必要性&#xff0c;阐述了项目各…

不要做一个透明人:展现真实的自己

✨求关注~ &#x1f600;博客&#xff1a;www.protaos.com 目录&#xff1a; 引言&#xff1a;透明人的困境透明人的定义与特征 2.1 透明人的追求与代价 2.2 社交媒体与透明人现象的关系透明度的局限性 3.1 自我保护与隐私权 3.2 虚假的透明度和个人形象管理重建真实的自我 4.…

城市内涝的原因和解决措施,内涝监测预警助力城市防涝度汛

城市内涝是城市化进程中最遇到的自然灾害&#xff0c;城市内涝不仅会对市民生活造成困扰&#xff0c;也会对城市基础设施和经济发展产生不利影响。因此&#xff0c;及时监测城市内涝现象&#xff0c;对于城市管理和城市安全具有重要意义。本文将深入探讨城市内涝的原因以及针对…

docsify安装(线上文档)

01、docsify 是什么 一款神奇的文档生成利器 自从有了 Markdown&#xff0c; 我就再没用过富文本编辑器&#xff0c;因为 Markdown 的书写有一种心流的感觉。很多博客平台都支持 Markdown 了&#xff0c;即便是不支持&#xff0c;也没关系&#xff0c;可以通过 mdnice 或者 Md…

亚马逊云科技推出全新即用型模型,通过机器学习在几分钟内生成见解

4月10日&#xff0c;亚马逊云科技宣布推出Amazon Amazon SageMaker Canvas中的新功能&#xff0c;这些功能可帮助业务分析师通过机器学习&#xff08;ML&#xff09;在几分钟内从数千个文档、图像和文本行中生成见解。新功能推出后&#xff0c;可以访问即用型模型&#xff0c;创…

六、数据仓库详细介绍(ETL)工具篇下

0x00 前言 上篇&#xff0c;我们介绍了五种传统 ETL 工具和八种数据同步集成工具。 数据仓库详细介绍&#xff08;五.ETL&#xff09;工具篇上 本篇&#xff0c;我们接着介绍两种新型 ETL 工具、大数据发展不同阶段产生的六种主要计算引擎、五种流程控制组件。 最后我们简单…

空间转换案例-3D导航

想要制作这么一个简单的 3D 导航栏需要了解以下几个知识 : 1.空间转换 : 从坐标轴角度除了我们熟知的 X , Y 外还会和 Z 坐标轴 构成一个立体空间, Z轴的位置与我们眼睛视线的方向相同. 空间转换的属性仍然是 transform ,所以可以给他添加 空间的 平移,旋转,缩放 等效果. 2.空…

[问]python中字典dict如何排序sorted?

文章目录 一、sorted使用二、按照keys的顺序对dict中的keys排序三、按照valuse的顺序对dict中的values排序四、按照keys的顺序对dict中的items排序五、按照values的顺序对dict中的items排序六、按照keys的顺序对dict的values排序七、按照values的顺序对dict中的keys排序八、字典…

【Http协议③】http状态码,响应报头,响应正文等知识的学习

前言: 大家好,我是良辰丫,上一篇文章中我们已经学习了http请求的一些知识,这篇文章我将带领大家去领略http响应的风采,不要着急,跟随良辰的步伐,一起去学习http.&#x1f49e;&#x1f49e;&#x1f49e; &#x1f9d1;个人主页&#xff1a;良辰针不戳 &#x1f4d6;所属专栏&a…