springboot国际化配置中英文切换

2023-10-27

1、新建项目

第一步新建springboot项目,勾选web依赖,或者后面进入在pom.xml中加入也可以。

2、项目结构
在这里插入图片描述
项目pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.jf</groupId>
    <artifactId>locale-lanuage</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>locale-lanuage</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3、在templates中写入一个html页面,以login.html为例。
在Controller写入访问的控制器

package com.jf.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class UserController {

    @RequestMapping("/login")
    public String login(){
        return "login";
    }
}

启动项目保证login能访问.。

在pom.xml中要加上thymeleaf依赖,

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

4、在resources中新建文件夹i18n,在其中新建login.properties,在新建login_zh_CN.properties,

这时候目录会自动多一个Resource Bundle'login',说明IDEA识别了此配置文件
在这里插入图片描述
然后右键此文件夹,就可以有自动添加的窗口出来,当然也可以手动添加login_en_US.properties
在这里插入图片描述

然后要对每一个需要中英文转换的文字都要一一配置。这里有一个可视化的页面,点击左下角的Resource Bundle就可以。
在这里插入图片描述
添加要转换的属性的中英文对照
命名没有什么规范
例如下面的login.username,这里表示的是login页面的username的替换品,你也可以写为A.B都行,为了方便阅读而已。
在这里插入图片描述

将这些写好后,
在配置文件application.properties或yaml中加入

spring.messages.basename=i18n.login

5、进入login.html页面
修改一些内容
首先加入头文件
<html lang="en" xmlns:th="http://www.thymeleaf.org">
然后利用thymeleaf语法,添加中英文变化的属性,在属性前面加入th:,内容用#{}
例如:

<label for="username">用户名</label>
<label for="username" th:text="#{login.username}">用户名</label>

在这里插入图片描述
添加中英文切换的按钮,th:href="@{/login(language='zh_CN')},thymeleaf语法中,urk要用@{},所以以上语法的意思是访问login,并带上一个参数language='zh_CN'
在这里插入图片描述
完整的login.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div  id="login" >
    <form >
        <div >
            <label for="username" th:text="#{login.username}">用户名</label>
            <input type="text"  name="username"   id="username" >
        </div>
        <div >
            <label for="password" th:text="#{login.password}">密码</label>
            <input type="password"  name="password"   id="password" >
        </div>

        <div>
            <button type="submit"   th:text="#{login.login}">登录</button>
        </div>
        <div>
            <a href="register.html" th:text="#{register.register}">注册</a>
            <a th:href="@{/login(language='zh_CN')}">中文</a>
            <a th:href="@{/login(language='en_US')}">English</a>
        </div>
    </form>
</div>


</body>
</html>

6、现在情况下,启动项目,点击中文英文切换的时候,还是没有效果,只是浏览器地址栏上可以看到有参数传递了。

接下来自己写一个国际化解析器,实现LocaleResolver接口

package com.jf.config;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.LocaleResolver;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;


public class MyLocaleRelover implements LocaleResolver {
    @Override
    public Locale resolveLocale(HttpServletRequest httpServletRequest) {
        String language = httpServletRequest.getParameter("language");
        Locale locale = Locale.getDefault();
        System.out.println(language);
        if (!(language==null||"".equals(language))){
            String[] split = language.split("_");
            locale = new Locale(split[0], split[1]);
        }

        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {

    }
}

7、写好了国际化解析器后,现在需要将他加入到spring中

现在要自己扩展springMVC,
新建config包,新建MyMvcResolver实现WebMvcConfigurer接口,写上注解@Configuration

package com.jf.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

//扩展springMVC
@Configuration
public class MyMvcResolver implements WebMvcConfigurer {

    @Bean
    public LocaleResolver localeResolver(){
        return new MyLocaleRelover();
    }

}

8、然后就ok了,启动项目访问一下。
默认的访问
在这里插入图片描述
点击中文后:可以看到地址栏有参数传递
在这里插入图片描述
点击英文后
在这里插入图片描述

9、源码扩展

首先找到这个类WebMvcAutoConfiguration(webmvc自动配置类)
在这里插入图片描述
在其中ctrl+f搜索localeRelover地区解析
在这里插入图片描述

在这里插入图片描述

此类实现了LocaleResolver接口
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot国际化配置中英文切换 的相关文章

随机推荐

  • codeforce刷题 1

    1 Sequence Pair Weight 题目大意 给定一个长度为 n 的数组 a 规定 i lt j 且 ai aj 为一个数对 求数组 a 的 所有连续子序列中有多少个这样的数对 输出总数 解题思路 易得如果一个一个子序列去遍历的话
  • STM32 电机教程 4 - 直流有刷电机闭环电流控制

    前言 有刷电机是大家最早接触的一类电机 中学时物理课堂上介绍电动机也是以它为模型来展示的 有刷电机的主要结构就是定子 转子 电刷 通过旋转磁场获得转动力矩 从而输出动能 电刷与换向器不断接触摩擦 在转动中起到导电和换相作用 有刷电机采用机械
  • SpringBoot中一个空格引发的服务器崩塌

    SpringBoot中一个空格引发的服务器崩塌 在练习SpringBoot整合Thymeleaf的时候 由于一时不查 导致服务器崩塌 细究之下 原来是一个空格的原因 练习是这样的 打算在com action包下建一个UserAction c
  • 嵌入式系统中的“四个地址”

    1 物理地址 计算机在运行程序时 需要对代码指令及相关数据进行保存 而这些数据将会保存到内存 包括RAM和ROM 中 为了能够在读取数据时 可以直接找到数据的位置所在 因此 会对内存进行编号 从0开始顺序编号 直到其支持的最大存储单元 物理
  • 防止SQL注入的五种方法

    一 SQL注入简介 SQL注入是比较常见的网络攻击方式之一 它不是利用操作系统的BUG来实现攻击 而是针对程序员编程时的疏忽 通过SQL语句 实现无帐号登录 甚至篡改数据库 二 SQL注入攻击的总体思路 1 寻找到SQL注入的位置 2 判断
  • Topaz Photo AI for Mac v1.3.1,图像智能ai降噪软件

    Topaz Photo AI是一款适用于Mac的图像处理软件 它使用人工智能技术对照片进行编辑和优化 该软件提供了多种强大的功能 帮助用户轻松地改善图像质量 并实现自定义的效果 Topaz Photo AI支持多种文件格式 包括JPEG T
  • css web页面实现一个弹窗

    div 基本层级 div class pc invest join container div class bg wrap div class place hold div div class top container div class
  • go 类型断言

    1 什么是类型断言 由于 interface 是 一般类型 不是具体类型 如果要转成具体类型 就需要使用类型断言 直接将 x 的值 赋给 a 是不可以的 编译前检查都过不去 断言后可成功赋值 输出结果为 5 2 带检查的类型断言 类型断言有
  • 继承和方法重写

    目录 继承的基本概念 super关键字 1 使用super关键字调用父类成员 子类对象 实例化子类对象 方法重写 方法重写特点 继承的基本概念 1 继承是面向对象的三大特征之一 继承可以解决编程中代码冗余的问题 是实现代码重用的 重要手段之
  • 第五章、ROS常用组件

    第五章 ROS常用组件 TF坐标变换 实现不同类型的坐标系之间的转换 rosbag 用于录制ROS节点的执行过程并可以重放该过程 rqt 工具箱 集成了多款图形化的调试工具 可实现的案例 roslaunch turtle tf2 turtl
  • 熄灯问题

    公众号 CppCoding 题目描述 include
  • VMD-LSTM的数据回归预测(主要应用于风速,负荷,功率)

    VMD LSTM预测 clc clear all close all warning off restoredefaultpath tic 导入数据 ff xlsread windspeed xls B2 B1001 ff ff data
  • 利用lambda表达式为槽函数传递参数20221021

    利用lambda表达式为槽函数传递参数 lambda是匿名函数 lambda 参数 函数体 fun lambda print 我是没有参数的lambda函数 fun 我是没有参数的lambda函数 fun xy lambda x y pri
  • @那些想要转行AI的人:送你一份人工智能入门指南

    人工智能是什么 人工智能为何重要 我们应该畏惧人工智能吗 为什么突然之间所有人都在谈论人工智能 你可能会从网上知道人工智能如何为亚马逊和Google的虚拟助理提供支持 或者人工智能如何一步步地取代所有的工作 有争议的 但是这些文章极少很好的
  • Qt(2):MOC文件解析

    在Qt下 从QObject派生的类都会生成moc 文件 1 比如现在有2个文件 qmyobject h和qmyobject cpp 它里面有一个类QMyObject 记为版本A cpp view plain copy print class
  • hadoop中的ssh无密码登录配置

    目标 在配置hadoop分布式安装过程中 需要配置ssh的无密码登录 在组建hadoop集群的时候 需要多台实体机进行通信 发送或者读取数据 namenode和datanode之间 就是借助ssh 在通信过程中如果需要操作人员频繁输入密码是
  • 域名服务器从k8s访问不稳定,使用云厂商托管K8S时容器域名解析注意事项

    云厂商托管 Kubernetes 服务的 Pod 域名解析注意事项 使用云厂家提供托管式Kubernetes Pod的域名解析参数 通过界面创建Pod的话 可能厂商界面没有开放dnsConfig配置 采用了一些默认值 在使用时候 需要了解清
  • 人工智能与伦理问题浅谈

    第一章 绪论 一 提出问题 人工智能 Artificial Intelligence 缩写为AI 一词 是在1956年的达特茅斯会议上被首次提出来的 作为一门新兴的交叉学科 人工智能在当今脑科学 认知科学飞速发展的基础下 被称为本世纪三大科
  • element中table组件使用多级表头后在点击事件中为变量赋值会出现抖动

    出现情况 一般出现在表头中设置了v if v if的表头在更新数据时自动重新计算一次宽高 解决方法 为表格设置doLayout方法 更新数据前重写表格样式 不在重新计算宽高 beforeUpdate this nextTick gt 在数据
  • springboot国际化配置中英文切换

    1 新建项目 第一步新建springboot项目 勾选web依赖 或者后面进入在pom xml中加入也可以 2 项目结构 项目pom xml