springboot + thymeleaf 实现国际化

需要的类和配置:(框住的都是需要的, 没有框住的是我自己检测用的)

第一: 添加依赖

如果需要一个网页展示的话就需要用到 thymeleaf

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

        <!-- 引入thymeleaf-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
            <version>2.7.4</version>
        </dependency>

第二: 添加页面html文件

注意:  这里的html 文件是需要放在resource文件下的templates(默认的)文件下的 

  • templates:用来存放模板引擎Thymeleaf(本质依然是.html文件)
  • 如果需要直接放在resource文件或者其他路径下就需要自己配置(见下面properties配置)
  • 由于我的controller中写的是index3的跳转, 所以建议这里直接命名为: index3.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
	<meta charset="UTF-8">
<!--	<meta charset="GBK">-->
	<title>Title</title>
</head>
<body>
<form>

	<h3 th:text="#{login.tip}" >Please Sign in</h3>

	<input type="text"  th:placeholder="#{login.username}" > <br>
	<input type="password" th:placeholder="#{login.password}"> <br>


	<input type="checkbox" value="remember-me">[[#{login.remember}]] <br>

	<button type="submit" th:text="#{login.btn}" > Sign in</button>  <br>

	<a th:href="@{/index3.html(lang='zh_CN')}" >中文</a> &nbsp;&nbsp;&nbsp;
	<a th:href="@{/index3.html(lang='en_US')}">English</a>

</form>
</body>
</html>

第三: 创建一个类

1. SpringBoot为我们自动配置了LocaleResolver组件,实现国际化我们需要自定义LocaleResolver才能起作用,代码如下:

package com.yong.world;

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;

/**
 * @author yong
 * @date 2022-10-26 12:07
 */


public class MyLocaleResolver implements LocaleResolver {
    
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        //获取请求中的语言参数
        String language = request.getParameter("lang");  // 比如: language = zh_CN 
        //默认的;如果没有就使用默认的
        Locale locale = Locale.getDefault();
        //如果请求的了携带了国际化的参数
        if (!StringUtils.isEmpty(language)) {
            String[] split = language.split("_");  // split = zhCN

            locale = new Locale(split[0], split[1]);
                                // 国家zh    // 语言CN
        }

        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {

    }
}

 2. 再将自定义LocaleResolver注入到spring容器中:

package com.yong.world.config;

import com.yong.world.MyLocaleResolver;
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.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author yong
 * @date 2022-10-26 12:19
 */

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
//        registry.addViewController("/").setViewName("index");
//        registry.addViewController("/index.html").setViewName("index"); 
        /* "/": 是用来接收<a th:href="@{/(lang='en_US')}">English</a>*/
//        registry.addViewController("/").setViewName("index3");
        /* "/index3.html": 是用来接收<a th:href="@{/index3.html(lang='en_US')}">English</a>*/
        registry.addViewController("/index3.html").setViewName("index3");
    }

    /**
     * 国际化配置
     */
    @Bean
    public LocaleResolver localeResolver() {
        return new MyLocaleResolver();
    }
}

3.  Controller: 

package com.yong.world.controller;

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

/**
 * @author yong
 * @date 2022-10-24 16:22
 */

@Controller
public class LoginController {

    @GetMapping("index3")
    public String login() {
        return "index3";
    }
}

第四: application配置

文本外部化是从模板文件中提取模板代码的片段,以便可以将它们保存在单独的文件(通常是.properties文件)中,文本的外部化片段通常称为“消息(message)”。

spring.thymeleaf.cache=false
spring.thymeleaf.encoding=utf-8
# 这个可以直接写在resource 文件下面就可以运行html
#spring.thymeleaf.prefix=classpath:/
# 这个是需要写在templates 下面才可以运行界面html  (默认是写在templates 下面)
spring.thymeleaf.prefix=classpath:/templates/
#spring.messages.basename=home
spring.messages.basename=info       # info: (自定义的名字)用来放置你的 message

第五: message 例子

英文: 
login.tip=Please Sign in
login.username=username
login.password=password
login.remember=remember
login.btn=Sign in
中文: 
login.tip=\u8BF7\u767B\u5F55
login.username=\u7528\u6237\u540D
login.password=\u5BC6\u7801
login.remember=\u8BB0\u4F4F
login.btn=\u767B\u5F55

 将这里的编码转换成 汉字形式显示: 

 第六: 结果展示

springboot 国际化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值