国际化(internationalization)是设计容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言元素。换言之,应用程序的功能和代码设计考虑了在不同地区运行的需要。开发这样的程序的过程,就称为国际化。

那么当我们使用Spring Boot如何进行国际化呢?我们用一个例子来演示操作的步骤:

1、我们写一个thymeleaf模板

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8" /><title>hello spring boot</title>
</head>
<body><p>欢迎你登录到ybzy.ke.qq.com我的课程分享网站</p></body>
</html>

2、写出对应的controller类

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class HelloController {@RequestMapping("/hello")public String hello(){return  "/hello";}}

我们观察hello.html里面的信息直接就是中文显示,但是我们现在的需求是当访问语言是zh的时候显示为中文,当语言为en的时候显示为英文,那么怎么操作呢?

首先我们先定义国际化资源文件,spring boot默认就支持国际化的,而且不需要你过多的做什么配置,只需要在resources/这个根路径下定义国际化配置文件,文件名称必须以messages开头。

注意:配置文件的名字和存放的位置SpringBoot的内部代码里默认的就是messages和classpath,当然我们可以在配置文件中配置spring.messages.basename的值来改变这两个东西。

我们先用默认的配置定义如下几个文件:

messages.properties (默认,当找不到语言的配置的时候,使用该文件进行展示)。

messages.properties (默认,当找不到语言的配置的时候,使用该文件进行展示)。
messages_zh_CN.properties(中文)
messages_en_US.properties(英文)

分别写上内容:

welcome = 欢迎你登录到 ybzy.ke.qq.com 我的课程分析网站(default)
welcome = \u6b22\u8fce\u4f60\u767b\u5f55\u5230 \u963f\u91cc\u5df4\u5df4 \u7f51\u7ad9\uff08\u4e2d\u6587\uff09
welcome = welcome to login to ybzy.ke.qq.com website(English)

配置信息完毕后,那么在前端展示怎么修改呢,修改hello.html文件,使用#{key}的方式进行使用messages中的字段信息:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8" /><title>hello spring boot</title>
</head>
<body><p><label th:text="#{welcome}"></label></p>
</body>
</html>

修改火狐浏览器的国际化信息,看测试效果:

about:config

在搜索框输入accept,然后找到intl.accept_languages修改对应的值,我这里原本是:

zh-CN, zh, zh-TW, zh-HK, en-US, en

为了看到效果,修改为:

en-us, en

通过三个问题,简单说下原理:

第一个问题,为什么命名必须是messages开头,需要看一个源码文件:MessageSourceAutoConfiguration

如果我们没有在application.properties中配置spring.messages.basename属性,那么使用默认的messages,好了这个问题就这么简单解决了。

第二个问题:为什么我看到的是中文(或者英文)呢?

为了让web应用程序支持国际化,必须识别每个用户的首选区域,并根据这个区域显示内容。在Spring MVC应用程序中,用户的区域是通过区域解析器来识别的,它必须是实现LocaleResolver接口。Spring MVC提供了几个LocaleResolver实现,让你可以按照不同的条件来解析区域。除此之外,你还可以实现这个接口创建自己的区域解析器。如果没有做特殊的处理的话,Spring 采用的默认区域解析器是AcceptHeaderLocaleResolver。它通过检验HTTP请求的头部信息accept-language来解析区域。这个头部是由用户的web浏览器底层根据底层操作系统的区域设置进行设定的。请注意,这个区域解析器无法改变用户的区域,因为它无法修改用户操作系统的区域设置。

第三个问题:怎么根据我们的需要切换语言环境呢?

我们可以自定义我们的区域解析器LocaleResolver,然后将它注册到spring的ioc容器中。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

prometheus+grafana+Linux监控

prometheusgrafanaLinux监控 环境说明 操作前提&#xff1a; 先去搭建Docker部署prometheusgrafana...这篇文章的系统 Docker部署prometheusgrafana...的参考文章&#xff1a; Docker部署prometheusgrafana…-CSDN博客 Linux部署docker参考文章&#xff1a; 02-Docker安装_doc…

文档处理控件Aspose.Words教程:在.NET中将多页文档转换为单个图像

在Aspose.Words for .NET 25.6版本中&#xff0c;我们引入了一项新功能&#xff0c;允许您将多页文档导出为单个光栅图像。当您需要将文档作为单个可视文件共享或显示时&#xff0c;此功能非常有用。 Aspose.Words for .NET 25.6 的新功能 在 25.6 版之前&#xff0c;将多页文…

vuex4.0用法

VUEX 状态管理&#xff0c;多个组件有共享数据的时候&#xff0c;就叫状态管理 什么情况下会用到vuex , 如果你不知道vuex的情况也能完成你的需求&#xff0c;就说你的项目中不需要用到状态管理。 组件层级比较复杂的时候&#xff0c;还是用组件传值的方式来传值&#xff0c;…

2025.6.24总结

今天发生了两件事&#xff0c;这每件事情都足以影响我的工作状态。 1.团队中有人要转岗 这算是最让我有些小震惊的事件了。我不明白&#xff0c;那个同事干得好好的&#xff0c;为啥会转岗&#xff0c;为啥会被调到其他团队。虽然团队有正编&#xff0c;有od,但我自始自终觉得…

状态模式详解

概述 结构设计类似责任链模式&#xff0c;但是在各个状态进行遍历的过程中&#xff0c;更注重的是条件的判断&#xff0c;只有符合条件的状态才能正常匹配进行处理。条件不成功的会立即切换到下一个状态。 有限状态机 状态机一般指的是有限状态机&#xff08;FSM&#xff1a…

Lua 调试(Debug)

Lua 调试(Debug) 引言 Lua 是一种轻量级的编程语言&#xff0c;广泛应用于游戏开发、嵌入式系统、脚本编写等领域。在 Lua 开发过程中&#xff0c;调试是确保程序正确运行的重要环节。本文将详细介绍 Lua 调试的基本方法、常用工具以及调试技巧&#xff0c;帮助开发者提高编程…

Windows安装Emscripten‌/emsdk(成功)

安装git安装python 不要自行下载版本&#xff0c;先卸载其他版本的python。 使用管理员打开cmd&#xff0c;输入python3&#xff0c;直接跳转到应用商店&#xff0c;安装即可。 为什么一定要这么安装&#xff1f;好像是跟路径有关。 下载emsdk git clone https://github.c…

AI网页部署在本地_windows

用bolt.new写了一个网页&#xff0c;下载ZIP至本地 以下是在 Windows 上本地运行你用 Node.js 搭建的网页服务&#xff0c;并在浏览器中访问的常见流程&#xff1a; 1、安装 Node.js 访问官网 Node.js — Run JavaScript Everywhere &#xff0c;下载适合 Windows 的 LTS 版本…

Linux sudo命令

sudo是一个常用的Linux命令&#xff0c;用于以超级用户的权限执行命令。下面是对sudo命令的介绍&#xff1a; sudo命令的作用&#xff1a; sudo允许普通用户以超级用户&#xff08;root&#xff09;的身份执行特定命令或访问特定文件。它提供了一种安全且可控制的方式&#xf…

邮件合并----批量从excel表中导出数据到word中

文章目录 前言一、操作流程1. 打开word&#xff0c;开始邮件合并->邮件合并分布向导2. 开始邮件合并&#xff0c;一共6步3. 选择全部&#xff0c;点击确认&#xff0c;即可生成Excel表中244条记录&#xff0c;也就是244页。 总结 前言 涉及到将学生的姓名、学号、档案编号、…

活动安排贪心算法

输入说明 n      —— 活动数量 s[1…n]  — 第 i 个活动的开始时间 (start) f[1…n]  — 第 i 个活动的结束时间 (finish) 前置要求&#xff1a;数组已按 f 从小到大排好序 &#xff08;若没排&#xff0c;先调用 sortByFinishTime()&#xff0c;复杂度 O(n log …

Mysql8启用日志审计插件

概述 等保要求&#xff0c;数据库启用日志审计。Mysql8上面使用开源插件audit-plugin-for-mysql&#xff08;MariaDB的审计插件不用折腾了&#xff0c;无论直接使用还是编译使用&#xff0c;在Mysql8上都不行&#xff09; 插件下载 日志审计插件下载地址&#xff1a; https:…

机器学习-线性模型

目录 线性模型 1、线性回归&#xff1a; 2、对数几率回归&#xff1a; 3、线性判别分析&#xff1a; 4、多分类学习&#xff1a; 5、类别不平衡问题&#xff1a; 基本数理知识补充&#xff1a; 损失函数&#xff1a; 凹凸函数 梯度下降 线性模型 线性模型形式简单、易…

Git上传代码如何解决Merge冲突

示例 解决方案 1、第一步切到本地的主分支 git checkout master2、拉取线上最新的代码 git pull3、切到本地自己的分支 gco feat-xx4、将代码从master变基&#xff08;移动/合并&#xff09;过来 git rebase master5、手动解决冲突 <<<<<<< HEAD 本…

fluentd + elasticsearch + grafana 不能显示问题

fluentd中配置log 源文件后&#xff0c;再配置elasticsearch后&#xff0c; elasticsearch pod中查询日志记录正常。 修改log 文件 后&#xff0c; elasticsearch pod中查询日志记录更新也正常。 但是在grafana中添加elasticsearch data source后&#xff0c; 连接正常&#…

《分布式事务新形态:AT模式如何被Seata TCC击穿》的深度解析,包含AT死锁原理/TCC原子性保障/Service Mesh深度集成三大硬核模块

一、AT模式的死刑判决&#xff1a;全局锁引发的血案 1.1 死锁现场还原&#xff08;支付宝真实案例&#xff09; 1.2 全局锁原理与缺陷 二、TCC模式的绝地反击&#xff1a;原子性保障三板斧 2.1 TCC核心架构设计 2.2 幂等控制原子防护网 三、Service Mesh深度集成&#xf…

【Elasticsearch】es初识,在项目架构中的用途,与mysql和kafka的配合使用,

ES是一个开源的高扩展的分布式全文检索引擎 在项目已有mysql增删改查的情况下&#xff0c;新增kafka&#xff0c;es流程 用户新增/修改商家&#xff08;写MySQL&#xff09; ↓ Kafka 生产者发送商家数据消息 ↓ Kafka 消费者监听消息 → 写入 Elasticsearch ↓ 前端搜索商家时…

【DataWhale组队学习】AI办公实践与应用-数据分析

AI办公&#xff1a;数据分析 1. 使用大模型进行数据分析的常见流程 把数据扔给AI让AI自动分析&#xff0c;并告诉你结果 下面我们对上面两个步骤进行详细说明 2. 使用大模型进行数据分析 2.1 将数据扔给大模型 2.1.1 选择合适的办公大模型 要使用大模型进行数据分析时&a…

5G 浪潮:发展全景、困境突围与未来航向

在当今数字化浪潮中&#xff0c;5G 技术宛如一颗璀璨的明星&#xff0c;照亮了各个行业前行的道路。自 5G 正式商用以来&#xff0c;它不仅深刻改变了人们的生活方式&#xff0c;更在工业、农业、交通等领域掀起了一场数字化转型的革命。本文将深入探讨 5G 技术的原理、发展现状…

理论加案例,一文读懂数据分析中的分类建模

一、什么是分类 分类&#xff0c;是数据建模领域的重要分支&#xff0c;你每天也都会接触。 手机垃圾短信过滤&#xff0c;就是分类算法给短信打的标签&#xff0c;比如0代表正常短信&#xff0c;1代表垃圾短信。 在医学领域&#xff0c;根据影像检查判断肿瘤是良性还是恶性。…