-
在resource文件下添加如下文件
-
在login.properties文件下添加键值对
-
因为国际化的相关类对应的properties对应的文件中
basename是国际化配置文件的真实位置
所以在application.properties配置
spring.messages.basename=i18n.login
-
编写页面
注意点 国际化的值需要使用#{}
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <h1 th:text="#{login.tip}"></h1> <form method="post"> <input type="text" th:placeholder="#{login.username}" name="username"><br> <input type="password" th:placeholder="#{login.password}" name="password"><br> <button type="submit">[[#{login.btn}]]</button><br> <a th:href="@{/login.html(l='zh_CN')}">中文</a> <a th:href="@{/login.html(l='en_US')}">English</a> </form> </body> </html>
-
配置解析器
1.原理
在Spring中有一个国际化的Locale (区域信息对象);里面有一个叫做LocaleResolver (获取区域信息对象)的解析器!
我们去我们webmvc自动配置文件,寻找一下!看到SpringBoot默认配置:
@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; }
AcceptHeaderLocaleResolver 这个类中有一个方法
public Locale resolveLocale(HttpServletRequest request) { Locale defaultLocale = this.getDefaultLocale(); // 默认的就是根据请求头带来的区域信息获取Locale进行国际化 if (defaultLocale != null && request.getHeader("Accept-Language") == null) { return defaultLocale; } else { Locale requestLocale = request.getLocale(); List<Locale> supportedLocales = this.getSupportedLocales(); if (!supportedLocales.isEmpty() && !supportedLocales.contains(requestLocale)) { Locale supportedLocale = this.findSupportedLocale(request, supportedLocales); if (supportedLocale != null) { return supportedLocale; } else { return defaultLocale != null ? defaultLocale : requestLocale; } } else { return requestLocale; } } }
那假如我们现在想点击链接让我们的国际化资源生效,就需要让我们自己的Locale生效!
我们去自己写一个自己的LocaleResolver,可以在链接上携带区域信息!
修改一下前端页面的跳转连接:
<a th:href="@{/login.html(l='zh_CN')}">中文</a> <a th:href="@{/login.html(l='en_US')}">English</a>
-
编写MyLocalResolver
public class MyLocalResolver implements LocaleResolver { @Override public Locale resolveLocale(HttpServletRequest request) { //获取参数值以此来获取国家和地区值 String language = request.getParameter("l"); //获取默认的国家和地区信息 Locale locale = Locale.getDefault(); if(!StringUtils.isEmpty(language)) { String[] array = language.split("_"); //封装成locale locale = new Locale(array[0],array[1]); } return locale; } @Override public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { } }
-
注册到Config中
@Configuration //@EnableWebMvc public class MyMvcConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { } @Bean public LocaleResolver localeResolver() { return new MyLocalResolver(); } }
-
-
配置Controller,映射地址
@RequestMapping({"login","login.html"}) public String international() { return "login"; }
-
测试
SpringBoot国际化配置
最新推荐文章于 2025-04-08 17:28:49 发布