Spring Boot 基础学习之(五)页面通过自定义LocaleResolver组件实现网页页面的的中英文转换

article/2025/9/18 3:47:46

 本次项目所有能够使用的静态资源可以免费进行下载

静态资源

在前端网页,是不是看见过这样的功能

基础网页:中文表示

 点击下面的English 按钮网页显示文字开始切换

 通过功能性按钮实现中英文切换,在浏览器中,都带着一个功能叫翻译功能,但是这种功能并不是所有的网页都能进行转换,为了增加用户的体验感我们可以自己在后端给网页添加一个功能让他进行语言的翻译,当然这里的翻译,翻译的内容不仅仅指的是中英文还可以进行其他语种的翻译,但是在中国最熟悉的就是中英文切换,所以咱们这里实现的功能则是以中英文这两个语种进行切换。

一:找到网页中存在的几个元素

 这个索引网页就是黑框中的这几个元素,接下来实现的是在配置文件设置这些元素

创建配置文件,将元素全都添加到配置文件中

 第一个配置文件login.properties存放着这几个元素

 第二个配置文件则是在第一个配置文件的基础上,通过英文来表示

 第三个则是通过中文表示内容

可以使用Resource Bundle:他的功能则是在一个界面来设置一个配置文件的不同显示

 它可以实现的是在login.properties配置文件进行对一个关键字进行代码的同时设置,en_US则表示英文,zh_CN则表示中文对一个关键字进行多语种的设置。

在spring boot项目中的配置文件调用这个配置

spring:   thymeleaf:     cache: false

进行模板缓存:实现的功能是,在idea项目中,如果修改的html静态资源的源代码,不需要重新启动该项目,只需要刷新页面就能够看到修改代码后的效果。

spring:messages:basename: i18n.login

将上面创建的配置文件交给配置文件,前端用户访问,可以直接到配置文件中去找咱们需要的那些元素。

在代码实现之前,先介绍一个功能,thymeleaf

 导入依赖:

        <dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId></dependency><dependency><groupId>org.thymeleaf.extras</groupId><artifactId>thymeleaf-extras-java8time</artifactId></dependency>

 之前在配置文件中创建的那些元素,如何将他交给网页,然后通过按钮实现调用呢?

原始网页_原始代码


<!DOCTYPE html>
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content=""><meta name="author" content=""><title>Signin Template for Bootstrap</title><!-- Bootstrap core CSS --><link href="asserts/css/bootstrap.min.css" rel="stylesheet"><!-- Custom styles for this template --><link href="asserts/css/signin.css" rel="stylesheet"></head><body class="text-center"><form class="form-signin" action="dashboard.html"><img class="mb-4" src="asserts/img/bootstrap-solid.svg" alt="" width="72" height="72"><h1 class="h3 mb-3 font-weight-normal">Please sign in</h1><label class="sr-only">Username</label><input type="text" class="form-control" placeholder="Username" required="" autofocus=""><label class="sr-only">Password</label><input type="password" class="form-control" placeholder="Password" required=""><div class="checkbox mb-3"><label><input type="checkbox" value="remember-me"> Remember me</label></div><button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button><p class="mt-5 mb-3 text-muted">© 2017-2018</p><a class="btn btn-sm">中文</a><a class="btn btn-sm">English</a></form></body></html>

这是一个特别干净的原始基础代码,并没有进行前后端交互。

那么如何将前面配置的内容,添加给它,实现前后端交互呢?

这时咱们就要刚才认识的功能:thymeleaf,关于这个功能的具体使用方法,这里就不进行讲解了,一搜都能够搜到这个模板使用的基础语法

修改后的网页文件

<!DOCTYPE html>
<html lang="en-US" xmlns:th="http://www.thymeleaf.org"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content=""><meta name="author" content=""><title>Login Page</title><!-- Bootstrap core CSS --><link th:href="@{/asserts/css/bootstrap.min.css}" rel="stylesheet"><!-- Custom styles for this template --><link th:href="@{/asserts/css/signin.css}" rel="stylesheet"></head><body class="text-center"><form class="form-signin" action="dashboard.html"><img class="mb-4" th:src="@{/asserts/img/bootstrap-solid.svg}" alt="" width="72" height="72"><h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}">Please sign in</h1><label class="sr-only" th:text="#{login.username}">Username</label><input type="text" class="form-control" th:placeholder="#{login.username}" required="" autofocus=""><label class="sr-only" th:text="#{login.password}">Password</label><input type="password" class="form-control" th:placeholder="#{login.password}" required=""><div class="checkbox mb-3"><label><input type="checkbox" value="remember-me">[[#{login.remrember}]]</label></div><button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.btn}">Sign in</button><p class="mt-5 mb-3 text-muted">© 2023-2024</p><a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文</a><a class="btn btn-sm" th:href="@{/index.html(l='en_US')}">English</a></form></body></html>

与原始代码的区别:

1:添加thymeleaf它的命名空间

<html lang="en-US" xmlns:th="http://www.thymeleaf.org">

2:将配置文件中的配置属性添加到网页中:通过thymeleaf语法进行属性的添加

 3:只要使用thymeleaf模板,那么在代码中链接文件的代码也需要进行修改

属性设置完成后,那如何实现中英文进行切换呢?

如何让后端知道前端用户,想要那种语言呢?

在网页有两个链接,我们只需要修改链接文件实现,数据的传送即可

<a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文</a>
<a class="btn btn-sm" th:href="@{/index.html(l='en_US')}">English</a>

之前的网页传送数据是通过来进行数据的传送,因为这个静态资源因为使用的是thymeleaf模板,索引大部分的代码都需在原本的基础上进行修改,这个数据传送也是如此。

来到这里,前端实现的功能,基本都已经完善了,接下来就是后端进行语种切换的问题了。

在这里我会直接上完成后的代码,那么代码为什么该如此这样实现,如果有想要了解的可以看博主的另外一个博客自定义组件,并将组件交给ioc进行管理

自定义转换器localeResolver(最为关键的一步)

package com.example.demo2.Config_file;import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;public class MylocalResolver implements LocaleResolver {@Overridepublic Locale resolveLocale(HttpServletRequest request) {String language = request.getParameter("l");   //获取前端链接传来的数据//如果没有进行任何的代码设置,默认执行Locale locale = Locale.getDefault();if(StringUtils.hasText(language)==true){        //判断前端传来的数据是否为空String[] s = language.split("_");locale = new Locale(s[0],s[1]);          //将传来的数据(就是前端用户想要什么界面的数据)交给locale类进行转换}return locale;   //返回}@Overridepublic void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {}
}

将自定义组件添加到IOC容器中,统一进行管理

    @Beanpublic LocaleResolver localeResolver(){System.out.println("shuchu");return new MylocalResolver();}

注意:有人到这一步发现自定义的组件并没有进行调用,注意一点 方法名一定要与类名一致,首字母小写其他的则不需要进行改变

执行项目,看自定义的组件有没有被调用,在此类的此一个方法添加一个断点,执行debug

查看debug:使用的类就是自定义说明组件添加成功

 然后执行项目点击

内容发生切换,说明国际化完成,语种切换成功 


http://chatgpt.dhexx.cn/article/AkKJoS4s.shtml

相关文章

网页中文转英文(国际化)

背景&#xff1a; 我的项目是已经完成的项目&#xff0c;因为要拓展海外市场&#xff0c;需要支持英文。 采用的方式是添加配置文件&#xff0c;见下文详细步骤。 本文基本转自&#xff1a;http://blog.csdn.net/wuhawang/article/details/52228589 在他的基础上给大家一点提示…

英语数字转换器

英语数字转换器 STL中map&#xff0c;stack和string的运用 描述&#xff1a; 在这个问题中&#xff0c;将用英语给你一个或多个整数。你的任务是将这些数字转换成整型表示。数字范围从-999,999,999到999,999,999.下面是你的程序必须考虑的详尽的英语单词表&#xff1a; neg…

Unity 中英文转换

在Resources下创建文件夹LanguageTxt&#xff0c;再其创建“Chinese.txt”及“English.txt”&#xff08;记得保存文本时选择UTF-8&#xff09; Chinese.txt Btn:这是一个按钮 English.txt Btn:This is a button 在Scripts下创建“LanguageManager.cs”及“UIText.cs” L…

SAP中英文转换--中文转英文

中文转英文-函数&#xff1a;CONVERSION_EXIT_CUNIT_INPUT CALL FUNCTION ‘CONVERSION_EXIT_CUNIT_INPUT’ EXPORTING input “输入的中文单位 IMPORTING output “输出的英文单位 效果图&#xff1a;

SAP 中英文转换-英转中

英文转中文-函数&#xff1a;CONVERSION_EXIT_CUNIT_OUTPUT CALL FUNCTION ‘CONVERSION_EXIT_CUNIT_OUTPUT’ EXPORTING input “输入的英文单位 IMPORTING output “输出的中文单位

将数字转换为中文

功能需求 做公司项目遇到一个有关交易金额&#xff08;合同签订书&#xff09;的内容&#xff0c;需要将查询出来的交易金额转化为中文数字&#xff0c;例如&#xff1a;壹拾捌万伍仟元整&#xff08;185000.00&#xff09; 需求分析 因为合同书中的数据都是动态的&#xff0c…

Java 16进制报文转换中英文报文(通过字节转换)

最近在搞这个16进制报文,网上找了很多地方&#xff0c;解出来的结果不是乱码就是报错&#xff0c;干脆自己写了。 大概是这样的&#xff0c;16进制的报文大家都知道是什么样子 例如: 3C E4 BA A4 E6 98 93 E6 88 90 E5 8A 9F EF BC 81 3E 20 3C 42 61 6B 31 2F 3E 因为其中包…

通过C#进行中英文转换

通过C#进行中英文转换 编写相应语言的XML文件&#xff0c;添加xml文件 ChineseSimplified.xml文件内容 <?xml version"1.0" encoding"GB2312" ?> <Softimite Language"12"><Form><Name>LoginForm</Name><…

【Adobe After Effects中英文转换2019——2023版】

** Adobe After Effects中英文转换2019——2023版 ** 如果是默认安装的软件&#xff0c;在桌面右击AE图标&#xff0c;点击打开文件所在位置&#xff0c;来到软件安装目录 C:\Program Files\Adobe\Adobe After Effects 2023\Support Files 找到AMT文件夹 点击进入&#xf…

在线中英文符号转换工具

在线中英文符号转换工具 在线中英文符号转换工具 将中文符号转换成英文符号或将英文符号转换成中文符号&#xff0c; 将单引号‘’都转换成’&#xff0c; 将双引号“”都转换成" 将中括号【】转换成[]&#xff0c; 将大括号&#xff5b;&#xff5d;转换成{} 将逗号&…

英文表格如何快速转换为中文?

今天跟大家分享一下英文表格如何快速转换为中文&#xff1f; 1.首先打开Excel文件&#xff0c;选中要翻译的单元格&#xff0c;点击【DIY工具箱】 ​ 2.点击【翻译】 3.选择【有道翻译】 4.将翻译语言设置为中文&#xff0c;然后点击【确定】 5.鼠标点击一个合适的单元格作为翻…

英文转换-在线英文批量转换器免费

英文转换&#xff0c;怎么找到好的英文转换器&#xff1f;今天给大家分享一款免费批量的英文转换器汇集了世界最好的几个翻译平台&#xff08;百度/谷歌/有道&#xff09;&#xff0c;为什么这么多人使用它&#xff1f;首先第一点翻译质量高&#xff0c;选择性多。第二点可以批…

php 英文转中文,中文转换成英文

[php]代码库/** * 中文转换成英文 */ function pinyin($_String, $_Codegb2312){ $_DataKey "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha". "|chai|chan|chang|chao|che|chen|cheng|c…

C#小知识之中英文转换、去空格

一、中英文转换 1、安装NPinYin 2、编写代码 string str "这里是测试的中文字符串"; string str1 Pinyin.GetChineseText(str); string str2 Pinyin.GetInitials(str); string str3 Pinyin.GetPinyin(str);Console.WriteLine("取和拼音相同的汉字列表&…

Qt 语言家实现中英文切换(解决纯代码添加部件的中英文转换问题)

Qt 语言家实现中英文切换&#xff08;解决纯代码添加部件的中英文转换问题&#xff09; 关于.ts和.qm文件的生成&#xff0c;更新翻译、发布翻译等步骤就不多说了&#xff0c;其他博主有大量的描述。 现在我要解决的是中英文未完全转换的问题如下图&#xff1a; 如上图所示&a…

系统的学习网络编程,这篇就够了!(来收藏夹里吃灰)

主机字节序和网络字节序&#xff1a; 在32位机器上&#xff0c;累加器一次能装载4个字节&#xff0c;这四个字节在内存中排列顺序将影响它被累加器装载成的整数的值 大端字节序&#xff08;网络字节序&#xff09;&#xff1a;一个整数的高位字节存储在内存的低地址处 小端字节…

玩转RT-Thread之荔枝派Nano(全志F1C100S) 新手上路

玩转RT-Thread之荔枝派Nano(全志F1C100S) 一、新手上路 --作者&#xff1a;燕十三(flyingcys) blog:http://blog.csdn.net/flyingcys --荔枝派nano/RTT非官方群&#xff1a;711174828 在此感谢 RT-Thread官方成员uestczyh222提供的荔枝派Nano内核移植、rttbootloader文件、…

技术杂谈-再谈软硬SDN(2)

以下文章来源于微信公众号&#xff1a;网络里卖艺的小青年 &#xff0c;作者我就是那个KK 不好意思&#xff0c;本文有点长&#xff0c;需要阅读10-15分钟。 上一篇文章得到了很多朋友的反馈&#xff0c;软硬SDN各自有各自的优势和特点&#xff0c;对于之前的文字&#xff0c;…

技术杂谈-再谈软硬SDN(1)

以下文章来源于微信公众号&#xff1a;网络里卖艺的小青年 &#xff0c;作者KkBLuE 我曾在SDNLAB和TF中文社区联合举办的直播活动上做了一次分享&#xff0c;讨论到软件SDN和硬件SDN的话题&#xff0c;巧合的是&#xff0c;看到国内大牛厂家也在讨论软硬之路&#xff0c;于是就…

展示一下香蕉派路由Android系统

没什么好说的&#xff0c;第一版的系统&#xff0c;Android部分还可以&#xff0c;路由设置确实有闪退现象。等稳定版发布&#xff0c;可以把机顶盒和路由二合一&#xff0c;再接个SSD&#xff0c;还是很不错的。 硬件 开机 桌面 安卓程序 安卓设置 可以打开USB调试&#xff0…