SpringBoot国际化(i18n)

2022-08-14 09:45:28

这是我们没有配置的界面

 之后我们在静态资源文件夹中创建两个配置文件,分别为中文和英文的配置文件

之后我们需要看一下源码的原理,找到如下文件打开

 我们看见了@ConfigurationProperties注解,代表配置文件的前缀为:Spring.messages

basename属性代表默认配置文件名称为:messages

所以我们想修改配置文件,可以在全局配置文件中修改,指定这个属性去resources/i18n/找login开头的文件进行扫描

这里我们就可以在页面中从配置文件中取值了,需要配置thymeleaf模板

注意:在配置文件中取值需要中#号,属性取值用$

此时运行界面,发现可以在页面设置中进行中英文切换了

我们还可以使用超链接的方式记性中英文的切换,我们找一下源码

LocaleResolver的主要作用: 解析Request中的语言标志参数或者head中的Accept-Language参数, 并将解析后的参数保存到指定的域中。

所以我们可以通过页面给locale 传值

 通过配置类springioc容器进行创建LocaleResolver(@Bean会将方法的返回值放入Bean池,通过Springioc容器进行创建.注意:方法名必须是返回值类型的首字母小写形式,否则无法通过反射创建对象)返回我们自定义的类



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.WebMvcConfigurerAdapter;
@Configuration//代表配置的意思
public class MyConfiguration {

	@Bean//方法返回值直接通过此注解进行ioc容器创建
	public WebMvcConfigurerAdapter webMvcConfigurerAdapter(){
		WebMvcConfigurerAdapter adapter = new WebMvcConfigurerAdapter() {

			@Override
			public void addViewControllers(ViewControllerRegistry registry) {
				registry.addViewController("/").setViewName("index");
				registry.addViewController("/index.html").setViewName("index");
			}
			
		};
		return adapter;
	}
	@Bean
	public LocaleResolver localeResolver(){
		return new MyLocalReslover();
	}
}

import java.util.Locale;

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

import org.springframework.web.servlet.LocaleResolver;

public class MyLocalReslover implements LocaleResolver{

	@Override
	public Locale resolveLocale(HttpServletRequest request) {
		String info = request.getParameter("l");
		Locale locale = Locale.getDefault();
		if(info!=null){
			String[] infos = info.split("_");
			locale = new Locale(infos[0],infos[1]);
		}
		return locale;
	}

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

}

 设置完成后,点击中英文切换,成功

通过对页面的中文/英文超链接按钮的传值,传入LocaleResolver,通过传入的值寻找静态资源中的配置文件,完成切换。

  • 作者:孤鹤儿
  • 原文链接:https://blog.csdn.net/qq_42041473/article/details/114398140
    更新时间:2022-08-14 09:45:28