1. 概述
本教程将演示如何在 Spring Boot 应用中实现国际化功能,让应用支持多语言切换。
2. Maven 依赖
开发时需要添加以下核心依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>
最新版 spring-boot-starter-thymeleaf 可在 Maven Central 获取。
3. LocaleResolver 配置
需要配置 LocaleResolver
Bean 来识别当前使用的语言环境:
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.US);
return slr;
}
LocaleResolver
接口有多种实现方式:
- 基于会话(Session)
- 基于Cookie
- 基于
Accept-Language
请求头 - 固定值
✅ 这里使用 SessionLocaleResolver
并设置默认语言为美式英语。
4. LocaleChangeInterceptor 拦截器
添加拦截器实现语言切换功能:
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
⚠️ 关键步骤:必须将拦截器注册到应用中:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
5. 定义消息源
Spring Boot 默认在 src/main/resources
目录下查找国际化文件:
- 命名规则:
messages_XX.properties
(XX为语言代码) - 默认回退文件:
messages.properties
❌ 注意:默认语言和回退文件是两个独立概念:
- 默认语言:当请求的语言不存在时使用
- 回退文件:当特定语言文件中找不到键值时使用
示例文件结构:
默认文件 messages.properties
(英语):
greeting=Hello! Welcome to our website!
lang.change=Change the language
lang.eng=English
lang.fr=French
**法语文件 messages_fr.properties
**:
greeting=Bonjour! Bienvenue sur notre site!
lang.change=Changez la langue
lang.eng=Anglais
lang.fr=Francais
6. 控制器与HTML页面
创建控制器返回国际化页面:
@Controller
public class PageController {
@GetMapping("/international")
public String getInternationalPage() {
return "international";
}
}
Thymeleaf 模板中使用国际化键值:
<h1 th:text="#{greeting}"></h1>
JSP 中的语法(对比参考):
<h1><spring:message code="greeting" text="default"/></h1>
语言切换实现:
URL 参数格式:
/international?lang=fr
添加语言选择下拉框:
<span th:text="#{lang.change}"></span>: <select id="locales"> <option value=""></option> <option value="en" th:text="#{lang.eng}"></option> <option value="fr" th:text="#{lang.fr}"></option> </select>
jQuery 切换逻辑:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"> </script> <script type="text/javascript"> $(document).ready(function() { $("#locales").change(function () { var selectedOption = $('#locales').val(); if (selectedOption != ''){ window.location.replace('international?lang=' + selectedOption); } }); }); </script>
7. 运行应用
添加启动类:
@SpringBootApplication
public class InternationalizationApp {
public static void main(String[] args) {
SpringApplication.run(InternationalizationApp.class, args);
}
}
运行效果:
- 英语版本:
- 法语版本:
8. 总结
本文完整展示了 Spring Boot 国际化的实现方案,核心要点包括:
- 配置
LocaleResolver
确定语言环境 - 使用
LocaleChangeInterceptor
实现动态切换 - 规范化组织多语言资源文件
- 前端模板集成国际化键值
完整源码可在 GitHub 获取。