springboot国际化配置中英文切换

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接口
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是在Spring Boot项目中实现中英文切换的步骤: 1. 设置项目编码UTF8 ```java 在项目配置文件application.properties或application.yml中添加以下配置spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true spring.http.encoding.force=true ``` 2. 在resources目录下新建i18n文件夹及语言配置文件 ```shell 在src/main/resources目录下新建i18n文件夹,并在该文件夹下创建多个语言配置文件,例如: messages.properties(默认语言配置文件) messages_en.properties(英文语言配置文件) messages_zh.properties(中文语言配置文件) ``` 3. 指出国际化相关文件的位置 ```java 在项目配置文件application.properties或application.yml中添加以下配置spring.messages.basename=i18n/messages ``` 4. 展示页面 ```html 在HTML页面中使用Thymeleaf模板引擎实现国际化,例如: <p th:text="#{hello}"></p> ``` 5. 使用按钮切换中英文页面 5.1 新建html页面 ```html 在HTML页面中添加切换语言的按钮,例如: <button onclick="window.location.href='?lang=en'">English</button> <button onclick="window.location.href='?lang=zh'">中文</button> ``` 5.2 实现LocaleResolver 接口 ```java 创建一个自定义的LocaleResolver实现类,用于根据请求参数或其他方式切换语言,例如: public class MyLocaleResolver implements LocaleResolver { // 实现切换语言的逻辑 } ``` 5.3 放入Bean ```java 将自定义的LocaleResolver实现类放入Spring容器中,例如: @Bean public LocaleResolver localeResolver() { return new MyLocaleResolver(); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值