【第18章】spring-mvc之国际化(i18n)

文章目录

  • 前言
  • 一、准备
    • 1. resource
    • 2. 数据
  • 二、前端
    • 1.界面
    • 2.脚本
  • 三、后端
  • 四、效果
    • 1. 中文(默认)
    • 2.英文
  • 总结


前言

【第19章】spring-i8n

在mvc的基础上,我们可以通过界面完成浏览器和服务端的交互,可以更好地展示国际化功能;
本章节依旧以北京车展为案例。


一、准备

1. resource

在这里插入图片描述

2. 数据

在这里插入图片描述

数据文件已上传附件

二、前端

界面只展示关键部分

1.界面

<div id="smv_con_382_54" ctype="text" class="esmartMargin smartAbs "cpid="30536" cstyle="Style1" ccolor="Item2" areaid="Area0"iscontainer="False" pvid="con_1_35" tareaid="" re-direction="all"daxis="All" isdeletable="True"style="height: 85px; width: 761px; left: 11px; top: 385px; z-index: 1000012;"><div class="yibuFrameContent con_382_54  text_Style1  "style="overflow: hidden; z-index: 1;"><div id="txt_con_382_54" style="height: 100%; z-index: 1;"><div class="editableContent" id="txtc_con_382_54"style="height: 100%; overflow-wrap: break-word; z-index: 1;"><p style="z-index: 1;"><spanstyle="color: rgb(238, 238, 238); z-index: 1;"><strongstyle="z-index: 1;"><spanstyle="font-size: 40px; z-index: 1;"><span id="message_001"style="font-family: &quot;Source Han Sans&quot;, Geneva, sans-serif; z-index: 1;">2024(第十八届)北京国际汽车展览会</span></span></strong></span></p></div></div><script style="z-index: 1;">var tables = $(' #smv_con_382_54').find('table')for (var i = 0; i < tables.length; i++) {var tab = tables[i]var borderWidth = $(tab).attr('border')if (borderWidth <= 0 || !borderWidth) {console.log(tab)$(tab).addClass('hidden-border')$(tab).children("tbody").children("tr").children("td").addClass('hidden-border')$(tab).children("tbody").children("tr").children("th").addClass('hidden-border')$(tab).children("thead").children("tr").children("td").addClass('hidden-border')$(tab).children("thead").children("tr").children("th").addClass('hidden-border')$(tab).children("tfoot").children("tr").children("td").addClass('hidden-border')$(tab).children("tfoot").children("tr").children("th").addClass('hidden-border')}}</script></div>
</div>

2.脚本

<script type="text/javascript" style="z-index: 1;">$(function () {i18n("zh-CN");$('#smv_con_392_54').on("click", "li.w-language-item a", function () {var locale = $(this).attr("languageculture");i18n(locale);})$("#div_con_391_2").remove();});function i18n(locale){console.log(locale)$.ajax({url: '${pageContext.request.contextPath}/i18n',type: 'POST', // 或者 'POST', 'PUT' 等beforeSend: function(xhr) {xhr.setRequestHeader('accept-language', locale);},success: function(data) {console.log(data); // 打印返回的数据$("#message_001").text(data.message_001)// 创建新的子元素var newChild = $('<div id="txt_con_383_29" style="height: 100%; z-index: 1;">'+'    <div class="editableContent" id="txtc_con_383_29" style="height: 100%; overflow-wrap: break-word; z-index: 1;">'+'        <p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;"><strong style="z-index: 1;"><span style="font-family: &quot;Source Han Sans&quot;, Geneva, sans-serif; z-index: 1;">'+data.message_002+'</span></strong></span></span></span></p>'+'<p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;">'+data.message_003+'</span></span></span></p>'+'<p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;">'+data.message_004+'</span></span></span></p>'+'<p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;">'+data.message_005+'</span></span></span></p>'+'<p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;">'+data.message_006+'</span></span></span></p>'+'<p style="text-align: justify; z-index: 1;">&nbsp;</p>'+'<p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;"><strong style="z-index: 1;"><span style="font-family: &quot;Source Han Sans&quot;, Geneva, sans-serif; z-index: 1;">'+data.message_007+'</span></strong></span></span></span></p>'+'<p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;">'+data.message_008+'</span></span></span></p>'+'<p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;">'+data.message_009+'</span></span></span></p>'+'    </div>'+'</div>');$('#txt_con_383_29').remove();$('#smv_con_391_2 >.yibuFrameContent').append(newChild);},error: function(jqXHR, textStatus, errorThrown) {console.error('Error: ' + textStatus, errorThrown);}});}
</script>

三、后端

package org.example.springmvc.i18n;import com.alibaba.fastjson2.JSONObject;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Set;/*** Create by zjg on 2024/5/4*/
@RestController
public class I18nController {@RequestMapping("/i18n")public JSONObject i18n(HttpServletRequest request, AcceptHeaderLocaleResolver localeResolver){Locale locale = localeResolver.resolveLocale(request);ResourceBundle bundle = ResourceBundle.getBundle("autoshow", locale);Set<String> strings = bundle.keySet();JSONObject jsonObject=new JSONObject();strings.forEach((k)->{jsonObject.put(k,bundle.getString(k));});return jsonObject;}
}

四、效果

1. 中文(默认)

在这里插入图片描述

2.英文

在这里插入图片描述


总结

回到顶部
官方文档

大公司,有专门的前端同学,搞两套界面就可以了,扩展性更好,这种方式更适合前后端在一块的项目。
在一起,才是中国汽车,祝雷总大卖!

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

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

相关文章

如何制作一份出色的PPT?897份PPT模板够用了:述职报告、工作总结、岗位竞聘!

职场技能提升 | 如何制作一份出色的PPT 大家好&#xff0c;我是你们的小默姐&#xff01; ‍ 今天来聊聊&#xff0c;如何让你的PPT在职场中脱颖而出&#xff0c;成为会议中的焦点&#xff01; 1️⃣ 明确目标&#xff1a;首先&#xff0c;明确你的PPT要传达的核心信息是什么…

基于Vant UI的微信小程序开发(随时更新的写手)

基于Vant UI的微信小程序开发✨ &#xff08;一&#xff09;悬浮浮动1、效果图&#xff1a;只要无脑引用样式就可以了2、页面代码3、js代码4、样式代码 &#xff08;二&#xff09;底部跳转1、效果图&#xff1a;点击我要发布跳转到发布的页面2、js代码3、页面代码4、app.json代…

【C++】转换构造函数和类型转换函数

目录 转换构造函数转换构造函数调用 类型转换函数类型转换函数定义形式应用 转换构造函数 转换构造函数就是一种构造函数&#xff0c;将一个其他类型的数据转换成一个类的对象的构造函数。 类型->类对象 转换构造函数调用 &#xff08;1&#xff09;显式强制类型转换&…

6. 分布式链路追踪RestTemplate拦截器实现设计

前言 本文将对4. 分布式链路追踪客户端工具包Starter设计一文中的RestTemplate的拦截器进行一个增强设计&#xff0c;以使得使用RestTemplate调用下游时&#xff0c;可以得到3. 分布式链路追踪的链路日志设计一文中所定义的链路日志的requestStacks字段内容。 相关版本依赖如…

C语言实现扫雷游戏完整版

游戏介绍&#xff1a; 目录 游戏介绍&#xff1a; 游戏框架&#xff1a; 游戏具体功能实现&#xff1a; 棋盘的定义&#xff1a; 棋盘初始化&#xff1a; 棋盘打印&#xff1a; 棋盘布置雷&#xff1a; 棋盘扫雷&#xff1a; 爆炸展开一片&#xff1a; 获取周围八个…

ICode国际青少年编程竞赛- Python-4级训练场-绿色飞板1

ICode国际青少年编程竞赛- Python-4级训练场-绿色飞板1 1、 while Flyer.disappear():wait() Dev.step(4)2、 Dev.turnRight() Dev.step()while Flyer[0].disappear():wait() Dev.step(3) Dev.turnLeft() Dev.step() while Flyer[1].disappear():wait() Dev.step(2) Dev.tu…

每日两题 / 226. 翻转二叉树 98. 验证二叉搜索树(LeetCode热题100)

226. 翻转二叉树 - 力扣&#xff08;LeetCode&#xff09; 以后续遍历的方式交换当前节点的左右指针 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), ri…

基于DRP的增强视觉和空间感知系统

二维码图像处理算法 首先&#xff0c;先进行灰度转化&#xff0c;然后高斯滤波&#xff0c;自适应阈值二值化&#xff0c;连通域查找&#xff0c;多边形拟合和角点检测。得到二维码的正方形轮廓。 通过调用DRP协处理器加速处理&#xff0c;以识别运动中的二维码 此时&#xf…

java spring 10 Bean的销毁过程 上 在docreatebean中登记要销毁的bean

1.Bean销毁是发送在Spring容器关闭过程中的 AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);UserService userService (UserService) context.getBean("userService");userService.test();// 容器关闭cont…

【深度学习Labelme】使用Segment Anything Model (SAM)快速打标,labelme多边形转yolo txt框看看对不对

文章目录 windows安装环境打开labelme自动保存勾选上&#xff0c;保存图片数据不要勾选选SAM精准模型&#xff0c;然后打开图片路径&#xff0c;然后点击创建AI多边形&#xff1a;鼠标点击确认物体控制点&#xff0c;确认完成后&#xff0c;双击鼠标完成选取&#xff0c;并给上…

python之并发编程

python之并发编程 线程的创建方式线程的创建方式(方法包装)线程的创建方式(类包装)join()【让主线程等待子线程结束】守护线程【主线程结束&#xff0c;子线程就结束】 锁多线程操作同一个对象(未使用线程同步)多线程操作同一个对象(增加互斥锁&#xff0c;使用线程同步)死锁案…

P9420 [蓝桥杯 2023 国 B] 子 2023 / 双子数

蓝桥杯2023国B A、B题 A题 分析 dp问题 根据子序列&#xff1a;2&#xff0c;20&#xff0c;202&#xff0c;2023分为4个状态&#xff1b; 当前数字为2时&#xff0c;处于dp[0]&#xff0c;或者和dp[1]结合成dp[2]&#xff1b; 当前数字为0时&#xff0c;和dp[0]结合成dp[…

什么是SOL链跟单机器人与阻击机器人?

SOL链作为一个快速增长的区块链生态系统&#xff0c;为各种应用程序提供了丰富的发展机会。在SOL链上&#xff0c;智能合约的应用已经开始蓬勃发展&#xff0c;其中包括了许多与加密货币交易相关的应用。在本文中&#xff0c;我们将介绍在SOL链上开发的阻击机器人&#xff08;S…

【二叉树算法题记录】二叉树的所有路径,路径总和——回溯

目录 257. 二叉树的所有路径题目描述题目分析cpp代码 112. 路径总和题目描述题目分析cpp代码 257. 二叉树的所有路径 题目描述 给你一个二叉树的根节点root &#xff0c;按任意顺序&#xff0c;返回所有从根节点到叶子节点的路径。 题目分析 其实从根节点往下走&#xff0c…

Mat: Unknown HPROF Version

问题&#xff1a;Mat 加载 android studio 导出的 hprof 文件失败 原因&#xff1a;android hprof 文件不是标准的 java hprof 文件 解决办法&#xff1a; 使用 android sdk 自带的命令将 hprof 转换成标准的 java hprof

替代UCC21550隔离式双通道栅极驱动器

描述 PC86320是一个隔离的双通道栅极驱动器具有可编程死区时间和宽温度范围。它设计有5A峰值源和6A峰值吸收电流来驱动电源高达2MHz的MOSFET、SiC、GaN和IGBT晶体管开关频率。PC86320可以配置为两个低端驱动器&#xff0c;两个高边驱动器&#xff0c;或具有可编程功能的半桥驱…

JavaScript数组(Array)方法 - toReversed、toSorted、toSpliced

最近发现几个数组方法&#xff0c;是一些常规方法的升级版&#xff0c;比较有意思&#xff0c;分享给大家 文章目录 一、温故二、知新toReversedtoSortedtoSpliced 一、温故 我们先来回顾几个比较常用的方法&#xff1a;reverse&#xff0c;sort&#xff0c;splice众所周知&a…

【HMGD】GD32/STM32 DMA接收不定长串口数据

单片机型号&#xff1a;GD32F303系列 CubeMX配置 配置串口参数 开启DMA 开启中断 示例代码 使用到的变量 uint8_t RX_Buff_FLAG 0; uint8_t RX_Buff[300] {0}; uint8_t TX_Buff[300] {0};串口接收空闲函数 // 串口接收空闲函数 void HAL_UARTEx_RxEventCallback(UART_H…

深入理解Java HashSet类及其实现原理

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

伦敦金交易常识 原来可以这样分类

如果投资者想做好伦敦金交易&#xff0c;对市场中的伦敦金交易常识等等都需要加以学习和研究&#xff0c;别小看那些伦敦金交易常识&#xff0c;很多高深的交易策略也是从常识出发慢慢建立起来的。伦敦金交易常识可以分为几类&#xff0c;下面我们就来讨论一下。 伦敦金市场的基…