SpringBoot+Thymeleaf实现国际化

前言

SpringBoot自动配置好了管理国际化资源文件的组件

@ConfigurationProperties(prefix = "spring.messages")
public class MessageSourceAutoConfiguration {
/**
Comma-separated list of basenames, each following the ResourceBundle convention. 
Essentially a fully-qualified classpath location. 
If it doesn't contain a package qualifier (such as "org.mypackage"),
 it will be resolved from the classpath root.
*/
//我们的配置文件可以直接放在类路径下叫message.properties
private String basename = "messages";
@Bean
	public MessageSource messageSource() {
		ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
		if (StringUtils.hasText(this.basename)) {
		    //设置国际化资源文件的基础名
			messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray(
					StringUtils.trimAllWhitespace(this.basename)));
		}
		if (this.encoding != null) {
			messageSource.setDefaultEncoding(this.encoding.name());
		}
		messageSource.setFallbackToSystemLocale(this.fallbackToSystemLocale);
		messageSource.setCacheSeconds(this.cacheSeconds);
		messageSource.setAlwaysUseMessageFormat(this.alwaysUseMessageFormat);
		return messageSource;
	}
}
	

具体操作

1、创建国际化的配置文件,放在resources下的一个文件夹里(这里只配置中文和英文)
在这里插入图片描述
2、点开配置文件login.properties配置文件,选择中间部分左下角的Resource Bundle ,然后选择中间部分的左上角 “+” 号 ,创建一个引用参数,然后点进参数,配置浏览器所显示的内容

在这里插入图片描述
3、application.properties配置文件中,引入login.properties配置文件

spring.messages.basename=login/login

4、编写html页面
首先在html页面中的html标签中引入thymeleaf模板引擎

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

然后在body里面写login.properties的参数

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
</head>
<body>
<div th:text="#{login.top}">hello world</div>
<div th:text="#{login.username}">username</div>
</body>
</html>

写一个HelloController,访问html页面

@Controller
public class HelloController {

   //查询数据在html页面展示
    @RequestMapping("/login")
    public String success(){
        return "login";
    }
}

这样如果浏览器的语言是中文,将显示中文的配置信息,英文显示英文的配置信息
在这里插入图片描述

如果中文显示乱码,需要修改idea的一些配置

在这里插入图片描述

原理:

国际化Locale(区域信息对象)有一个组件LocaleResolve(获取区域对象信息);

		@Bean
		@ConditionalOnMissingBean
		@ConditionalOnProperty(prefix = "spring.mvc", name = "locale")
		public LocaleResolver localeResolver() {
			if (this.mvcProperties
					.getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {
				return new FixedLocaleResolver(this.mvcProperties.getLocale());
			}
			AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
			localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
			return localeResolver;
		}
		//默认的就是根据请求头带来的区域信息获取Locale进行国际化

在这里插入图片描述

点击链接切换国际化

1、创建一个组件MyLocaleResolver让他继承LocaleResolver然后重写里面的方法

/**
 * 可以在连接上携带区域信息
 */
public class MyLocaleResolver implements LocaleResolver {
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        //获取参数的值
        String l = request.getParameter("l");
        Locale locale = Locale.getDefault();
        //如果不为null
        if (!StringUtils.isEmpty(l)){
            String[] split = l.split("_");
            locale = new Locale(split[0],split[1]);
        }
        return locale;
    }

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

    }
}

2、写一个配置类MyMvcConfig,让这个组件生效

@Configuration
public class MyMvcConfig {
    @Bean
    public LocaleResolver localeResolver(){
        return new MyLocaleResolver();
    }
}

3、完善html页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
</head>
<body>
<div th:text="#{login.top}">hello world</div>
<div th:text="#{login.username}">username</div>
<a th:href="@{/login.html(l='zh_CN')}">中文</a>
<a th:href="@{/login.html(l='en_US')}">英文</a>
</body>
</html>

点击中文或英文即可切换对应的内容
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: SpringBoot是一个基于Spring框架的快速开发平台,它提供了诸如自动化配置、依赖管理、监控等快速开发功能,使得开发人员可以更加专注于业务逻辑的实现。 MyBatis是一个持久层框架,它通过XML或注解方式,将Java对象与SQL语句进行映射,实现了SQL和Java代码的解耦,简化了SQL语句的书写,提高了开发效率。 Thymeleaf是一种模板引擎,它可以与SpringBoot无缝集成,用于将数据渲染到HTML页面上。通过Thymeleaf的模板标签,我们可以将后端数据与HTML页面进行绑定,实现动态页面的展示。 HTML是一种标记语言,用于编写Web页面,它是构建Web页面的基础语言,我们可以通过HTML实现网页的布局、样式和交互效果。 综上所述,SpringBoot+MyBatis+Thymeleaf+HTML可以实现一个基于MVC架构的Web应用。其中,SpringBoot提供了快速开发的功能,MyBatis实现了数据库和业务逻辑之间的交互,Thymeleaf将数据和HTML页面进行绑定,实现了动态页面的展示,而HTML是构建Web页面的基础语言。这样,开发人员可以快速完成Web应用的开发,从而实现快速迭代和升级。 ### 回答2: Spring Boot 是一个用于创建独立的、基于 Spring 的应用程序的框架,MyBatis 是一种持久化框架,可以简化数据库操作,而 Thymeleaf 是一个用于 Web 和独立环境的现代服务器端 Java 模板引擎。 结合使用 Spring Boot、MyBatis 和 Thymeleaf,你可以更加轻松地开发 Web 应用程序。Spring Boot 可以帮助你快速创建基于 Spring 的应用程序,不需要进行大量的手动配置。MyBatis 还可以启动一个数据库的连接,使开发人员可以轻松地与数据库进行交互。而 Thymeleaf 则可以让你更轻松地创建并管理应用程序的前端部分。 具体地,你可以使用 Spring Boot 来开发 Web 应用程序,可以使用 MyBatis 来实现数据访问,而 Thymeleaf 则可以帮助你创建和管理用户界面(HTML)。Spring Boot 可以在 Web 应用程序中作为框架运行,而 MyBatis 可以让你轻松地与数据库进行交互,而不需要编写许多样板代码。最后,Thymeleaf 可以让你轻松地创建和管理 HTML 网页。 总之,Spring Boot、MyBatis 和 Thymeleaf 是三个非常流行的 Web 开发框架,可以帮助你更加快速地开发 Web 应用程序。无论你是初学者还是经验丰富的开发人员,这些框架都可以帮助你快速开发高品质的应用程序。 ### 回答3: Spring Boot 是一个基于 Spring 框架的快速开发框架,具有开箱即用的特点,可以降低开发者的工作量。MyBatis 是一种持久层框架,可以将 SQL 语句分离出来,使得代码更具可读性和可维护性。Thymeleaf 是一种模板引擎,可以在 HTML 页面中使用,使得前端开发人员也可以参与到后台代码的编写中。 Spring Boot 可以与 MyBatis 集成,使用 MyBatis-Spring 来管理数据源和事务,并通过注解的方式进行 SQL 语句的编写和映射,使得开发更加简化。同时,Spring Boot 还内置了 Tomcat、Jetty、Undertow 等 Web 容器,可以快速编写 RESTful API。 Thymeleaf 与 Spring Boot 集成,可以使用 Thymeleaf-Spring 库,实现数据绑定、语言国际化、表单处理等功能。同时,Thymeleaf 还支持标准的 HTML5 标签,使得模板编写更加直观和简单。 综上所述,Spring Boot、MyBatis 和 Thymeleaf 都是现代化的开发框架和工具,可以快速构建高效的 Web 应用。它们的优秀特性和丰富的生态系统,极大地提升了开发效率和代码质量,是现代 Web 开发人员不可或缺的利器。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值