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的值来改变语言了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中进行多语言切换,可以采用国际化(i18n)的方式来实现。具体步骤如下: 1. 在src/main/resources目录下创建i18n文件夹,然后在该文件夹下创建多个properties文件,每个文件对应一种语言,例如messages_en.properties、messages_zh_CN.properties等。这些properties文件中,以键值对的形式存储了各种语言对应的文本信息。 2. 在Spring Boot的配置文件application.properties(或application.yml)中,配置Spring Boot应用默认的语言类型,例如: ``` spring.messages.basename=i18n/messages spring.mvc.locale=zh_CN spring.mvc.locale-resolver=fixed ``` 其中,spring.messages.basename参数指定了properties文件的前缀,spring.mvc.locale参数指定了默认的语言类型,spring.mvc.locale-resolver参数指定了使用固定的语言类型。 3. 在Controller中使用MessageSource对象来获取对应语言的文本信息,例如: ``` @Controller public class HelloController { @Autowired private MessageSource messageSource; @GetMapping("/hello") public String hello(Model model, Locale locale) { String message = messageSource.getMessage("hello.world", null, locale); model.addAttribute("message", message); return "hello"; } } ``` 在上述代码中,messageSource.getMessage方法用于获取对应语言的文本信息,第一个参数是在properties文件中定义的键,第二个参数是占位符,第三个参数是Locale对象,用于指定语言类型。 4. 在HTML模板中使用Thymeleaf的国际化功能来显示文本信息,例如: ``` <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Hello</title> </head> <body> <p th:text="#{hello.world}"></p> </body> </html> ``` 在上述代码中,th:text属性使用了Thymeleaf的国际化功能,#{hello.world}表示获取properties文件中的键为hello.world的文本信息。 通过上述步骤,就可以在Spring Boot中实现多语言切换了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值