在Spring MVC中,国际化(i18n)支持是通过LocaleResolver
、MessageSource
和LocaleChangeInterceptor
等组件实现的。以下是实现国际化的步骤和关键组件:
1. 配置 LocaleResolver
LocaleResolver
用于确定当前请求的Locale。Spring提供了几种实现,如AcceptHeaderLocaleResolver
、SessionLocaleResolver
和CookieLocaleResolver
。
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.US); // 设置默认Locale
return slr;
}
2. 配置 MessageSource
MessageSource
用于加载不同Locale的资源文件(如messages.properties
、messages_fr.properties
等)。
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
3. 配置 LocaleChangeInterceptor
LocaleChangeInterceptor
用于根据请求参数(如lang
)动态更改Locale。
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang"); // 默认参数名为"locale",这里改为"lang"
return lci;
}
4. 注册拦截器
将LocaleChangeInterceptor
注册到Spring MVC的拦截器链中。
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
5. 创建资源文件
在src/main/resources
目录下创建资源文件,如:
messages.properties
(默认)messages_fr.properties
(法语)messages_zh.properties
(中文)
示例内容:
# messages.properties
greeting=Hello
# messages_fr.properties
greeting=Bonjour
# messages_zh.properties
greeting=你好
6. 在控制器中使用国际化消息
在控制器中,可以使用MessageSource
或@RequestHeader
注解来获取国际化消息。
@Controller
public class MyController {
@Autowired
private MessageSource messageSource;
@GetMapping("/greeting")
public String greeting(Model model, Locale locale) {
String greeting = messageSource.getMessage("greeting", null, locale);
model.addAttribute("greeting", greeting);
return "greeting";
}
}
7. 在视图中使用国际化消息
在视图(如JSP、Thymeleaf)中,可以使用Spring的标签或表达式来显示国际化消息。
JSP示例:
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<html>
<head>
<title>Greeting</title>
</head>
<body>
<h1><spring:message code="greeting" /></h1>
</body>
</html>
Thymeleaf示例:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Greeting</title>
</head>
<body>
<h1 th:text="#{greeting}"></h1>
</body>
</html>
8. 切换Locale
通过在URL中添加lang
参数来切换Locale。例如:
http://localhost:8080/greeting?lang=en
(英语)http://localhost:8080/greeting?lang=fr
(法语)http://localhost:8080/greeting?lang=zh
(中文)
总结
Spring MVC的国际化支持通过以下组件实现:
LocaleResolver
:确定当前请求的Locale。MessageSource
:加载不同Locale的资源文件。LocaleChangeInterceptor
:根据请求参数动态更改Locale。
在面试中,理解这些组件及其配置方式是关键。
THE END
暂无评论内容