springboot页面国际化配置指南
作者:阿落小世界 时间:2022-06-16 14:26:25
前言
前一段时间做了一个项目,需要解决中文、繁体、英文的国际化问题,所以本文将详细介绍springboot页面国际化配置的过程
方法如下
1.引入依赖pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.导入网页资源,这里给大家推荐一个我自己在使用的页面资源,SB ADMIN-2
html页面放在templates目录下,这是thymeleaf默认的解析目录,其他的样式文件放在static目录下
3.接管spring Mvc,自定义url访问路径,可做可不做
建一个config目录,在这里建一个myWebMvcConfig
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.WebMvcConfigurer;
@Configuration
public class myWebMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/wq").setViewName("register");//localhost:8080/wq
registry.addViewController("/").setViewName("register");//localhpst:8080/
registry.addViewController("/register.html").setViewName("register");
//localhost:8080/register.html
}
}
路径可以设置多个,这样只要是这三个url,spring 都会访问register.html
还有一种方式也能实现
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class demoController {
@RequestMapping({"/","/wq"})
public String test(){
return "register";
}
}
4.国际化配置文件:en_US英文,zh_CN中文
点击左上角加号,便可以添加配置的属性,只要在右边填写相应的中英文即可
5. 配置文件已经写好,如何在我们的页面中使用呢?thyme leaf的作用又来了
首先在你的网页添加这样的头部
<html lang="en" xmlns:th="http://www.thymeleaf.org">
在所有的html属性前加**th:**就被thymeleaf接管了,根据thymeleaf 语法,获取国际化值使用**#{}**,本地值用**${}**,url用**@{}**
? ?<a ?th:href="@{/register.html(l='zh_CN')}" rel="external nofollow" ?>中文 </a>
? <a ?th:href="@{/register.html(l='en_US')}" rel="external nofollow" >English </a>
6. 页面和配置文件都准备好了,怎样实现跳转呢?
在WebMvcAutoConfiguration.class中
? ? ? ?? ??? ?@Bean
? ? ? ? ? ? ?@ConditionalOnMissingBean(
? ? ? ? ? ? ? ? ?name = {"localeResolver"}
? ? ? ? ? ? ?)
? ? ? ? ? ? ?public LocaleResolver localeResolver() {
? ? ? ? ? ? ? ? ?if (this.webProperties.getLocaleResolver() == org.springframework.boot.autoconfigure.web.WebProperties.LocaleResolver.FIXED) {
? ? ? ? ? ? ? ? ? ? ?return new FixedLocaleResolver(this.webProperties.getLocale());
? ? ? ? ? ? ? ? ?} else {
? ? ? ? ? ? ? ? ? ? ?AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
? ? ? ? ? ? ? ? ? ? ?localeResolver.setDefaultLocale(this.webProperties.getLocale());
? ? ? ? ? ? ? ? ? ? ?return localeResolver;
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ?}
我们再找到AcceptHeaderLocaleResolver.class,发现它实现了LocaleResolver
? ? ?public class AcceptHeaderLocaleResolver implements LocaleResolver {
? ? ? ? ?private final List<Locale> supportedLocales = new ArrayList(4);
? ? ? ? ?@Nullable
? ? ? ? ?private Locale defaultLocale;
那我们就编写自己的LocaleResolver
? ? ?public class myLocaleResolver implements LocaleResolver {
? ? ? ? ?@Override
? ? ? ? ?public Locale resolveLocale(HttpServletRequest request) {
? ? ?
? ? ? ? ? ? ?String mylocale=request.getParameter("l");
? ? ? ? ? ? ?Locale locale=Locale.getDefault();
? ? ? ? ? ? ?if(!StringUtils.isEmpty(mylocale)){
? ? ? ? ? ? ? ? ?String[] split=mylocale.split("_");
? ? ? ? ? ? ? ? ?locale=new Locale(split[0],split[1]);
? ? ? ? ? ? ?}
? ? ? ? ? ? ? System.out.println("debug====>"+mylocale);
? ? ? ? ? ? ?return locale;
? ? ? ? ?}
? ? ?
? ? ? ? ?@Override
? ? ? ? ?public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
? ? ?
? ? ? ? ?}
? ? ?}
然后在spring配置中注入myLocaleResolver
? ? ?@Bean
? ? ?public LocaleResolver localeResolver(){
? ? ? ? ?return new myLocaleResolver();
? ? ?
? ? ?}
**注意:方法名必须是localeResolver**,**因为源码中名字为localeResolver的bean**
7. 最后我们来测试一下
而且控制台输出也没问题
来源:https://www.cnblogs.com/littleworld/p/15961378.html
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android 通过代码安装 APK的方法详解
Android使用SharedPreferences存储数据的实现方法
使用java技术抓取网站上彩票双色球信息详解
![](https://img.aspxhome.com/file/2023/1/60111_0s.jpg)
浅谈Java中注解Annotation的定义、使用、解析
Java设计模式中的桥接模式
![](https://img.aspxhome.com/file/2023/8/113178_0s.png)
详解三种C#实现数组反转方式
以Java代码的方式总结几个典型的内存溢出案例
![](https://img.aspxhome.com/file/2023/9/129179_0s.png)
Java之Spring注解开发案例详解
![](https://img.aspxhome.com/file/2023/0/80330_0s.png)
Flutter实现手势识别功能详解方法
![](https://img.aspxhome.com/file/2023/5/116025_0s.gif)
Java——对象初始化顺序使用详解
Java毕业设计实战之生活旅行分享平台的实现
![](https://img.aspxhome.com/file/2023/9/72519_0s.jpg)
java使用@Scheduled注解执行定时任务
![](https://img.aspxhome.com/file/2023/6/65786_0s.jpg)
JAVA JDK8 List分组获取第一个元素的方法
Java求解二叉树的最近公共祖先实例代码
![](https://img.aspxhome.com/file/2023/0/119070_0s.png)
android 添加按(power键)电源键结束通话(挂断电话)
![](https://img.aspxhome.com/file/2023/7/104637_0s.png)
彻底掌握C语言strcpy函数的用法
![](https://img.aspxhome.com/file/2023/4/103104_0s.png)