SpringBoot实现任意切换语言功能

SpringBoot,thymeleaf实现点击切换语言

首先在application.properties配置文件内 配置基础国际化文件的位置

  1. 编写国际化文件:
    文件路径:
    在这里插入图片描述
    language.properties(基础文件)
login=登录
username=用户名
password=密码

language_zh_CN.properties(中文)

login=登录
username=用户名
password=密码

language_en_US(美式英语)

login=login
username=username
password=password

然后在application.properties 配置基础国际化文件路径

spring.messages.basename=static.message.language  

然后在html内通过 #{xxx}引入国际化中的配置

这样springBoot就能根据 浏览器中的语言 任意切换语言
例:如果你浏览器语言设置为 美式英语 那么#{login}就从 language_en_US.properties内引入值

原理是 springBoot 的 WebMvcAutoConfiguration 配置类内配置了一个LocaleResolver(区域解析器)

思路: 前端页面提供a标签 用户点击a标签想服务器发请求 带上要切换的语言(格式为 zh_CN)
后台通过request.getParameger 获得语言信息 产生新的语言地区
实现语言的切换

前端页面

<div align='center' >
		<h2>[[#{login}]]</h2>   <!--#{login} 表示引入国际化文件的login值 -->
		<h3 th:text='${message}'></h3>
		<form th:action='@{/logtest}' method='POST'>
			用户名:<input type='text' name='username' th:placeholder="#{username}"/>
			密码  :<input type='password' name='password' th:placeholder="#{password}" />
			<input type='submit' value='提交'/>
		</form>
		</br>
		<a th:href='@{/login(lg=zh_CN)}'>中文</a> &nbsp;|&nbsp;
		<a th:href='@{/login(lg=en_US)}'>英文</a>
	</div> 

后端:
1.编写 自己的LocaleResolver

@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;
		}

他能自动根据你浏览器设置的语言自动切换地区

我们可以配置自己的 区域解析器 代替默认的 从而实现 用户自由切换语言的功能

代码:

public class LocaleConfig implements LocaleResolver{ //实现LocaleResolver接口
	@Override
	public Locale resolveLocale(HttpServletRequest request) { 
		Locale locale = Locale.getDefault(); //获取默认的地区
		 if(request.getParameter("lg")!=null) {  //如果能获取到 说明用户要指定语言
			 String str = (String)request.getParameter("lg"); //获取用户选择的语言 
			String[] temp = str.split("_");  //分割下字符串
			locale  = new Locale(temp[0],temp[1]);//产生新的Locale
			 request.getSession().setAttribute("lg",locale ); //将Locale对象放入session 作为默认的语言地区
		 }
		 //如果用户没指定语言 从session获取默认的语言地区
		if(request.getSession().getAttribute("lg")!=null) {
			return (Locale)request.getSession().getAttribute("lg");
		}
		return locale ; //返回语言地区
	}

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

}
  1. 将 LocaleResolver 放入spring容器中
@Configuration
public class MvcConfig implements WebMvcConfigurer{
	@Bean(name = "localeResolver")
	public LocaleResolver localeResolver() { //注意bena的名字必须为localeResolver
		return new LocaleConfig();
	}

这样就实现了 点击a标签任意切换语言的功能了 非常简单

效果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
springboot 是一个快速开发框架,其通过注解和自动配置简化了应用的搭建和部署,并且非常适用于微服务架构。当需要实现关注功能时,我们可以考虑使用 springboot 结合数据库来实现。 首先,我们需要在数据库中创建一个关注表,该表包含用户 ID、被关注用户 ID 等字段。并且在业务中我们需要将关注关系分为单向关注和双向关注,即关注用户 A,可能不一定会被用户 A 关注,此时为单向关注;也可能用户 A 与用户 B 互相关注,此时为双向关注。 接着,在 springboot 项目中使用 JPA 或 Mybatis 等持久层框架来操作数据库。关注功能实现需要涉及到数据库的读写操作和业务逻辑的处理,在使用持久层框架时,我们需要创建对应的实体类和 DAO 接口,并通过注解来配置映射关系和 SQL 语句。 最后,我们需要在业务层面实现关注功能。关注一个用户时,我们需要先判断当前用户是否已经关注了该用户,如果是单向关注,则需要将关注关系写入数据库,如果是双向关注,则需要同时写入两条记录。取消关注时同理。 在实现关注功能时,我们需要注意一些细节问题,比如如何防止重复关注、如何判断关注关系的类型、如何实现取消关注等。总之,springboot 为我们实现关注功能提供了一些方便快捷的方式,我们只需要根据具体业务需求做出合理的选择即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值