springboot --根据配置文件切换语言

一、配置语言文件

在这里插入图片描述
在 resources 文件夹下创建一个文件夹local(自定义名称)来装三个配置文件

success_en_US.properties文件(英文)

success.name=Mr.Huang

success_zh_CN.properties(中文)

success.name=\u9EC4\u5FA1\u633A

success.properties(默认中文)

success.name=\u9EC4\u5FA1\u633A

其中success是根名
.name 是你需要中英文切换属性的属性值

spring.messages.basename=local/success

在application.properties文件中添加以上代码标识语言配置文件的位置

二、重写语言解析器方法

package handler;

import java.util.Locale;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;

public class MyLocaleResolver implements LocaleResolver{

	@Override
	public Locale resolveLocale(HttpServletRequest request) {
		String l = request.getParameter("l");
		//没有设置的话就用系统默认的语言
		Locale locale = Locale.getDefault();
		if(!StringUtils.isEmpty(l)){
			String[] split = l.split("_");
			locale = new Locale(split[0], split[1]);
			System.out.println(split[0]+"  "+split[1]);
		}

		return locale;
	}
	
	@Override
	public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
		// TODO Auto-generated method stub
		
	}

}

创建一个MyLocaleResolver类实现LocaleResolver

其中 l 是指前端在地址栏后面的配置的参数, 值的格式是 zh_CN, zh是代表语言的, CN是代表国家的。

Locale locale = Locale.getDefault()表示如果没有相关参数就默认使用系统的语言。

但此时该方法返回的locale并没有添加到容器中, 即无法生效

三、将语言解析器对象添加到容器中生效

@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter{
	Logger logger = LoggerFactory.getLogger(getClass());
	
	@Bean
	public LocaleResolver localeResolver(){
		logger.info("语言解析器已添加...");
		return new MyLocaleResolver();
	}

}

创建MVC配置类。

写一个方法用@Bean标识并且返回刚才写的MyLocaleResolver类的对象, 表示将该类的对象添加到容器中, 此时springboot自动配置的语言解析器就失效,转为使用我们编写的语言解析器了。

四、前端

<a th:href="@{/success(l='zh_CN')}">中文</a>
<a th:href="@{/success(l='en_US')}">英文</a>
<h1 th:text="#{success.name}">eee</h1>

这里只要点击中文或英文 , 下面的success.name就会根据参数l的值来改变语言了。

发布了52 篇原创文章 · 获赞 1 · 访问量 1772

猜你喜欢

转载自blog.csdn.net/qq_42039738/article/details/103920284