Spring MVC – 国际化 (i18n) 和本地化 (L10n)
Spring MVC 是一个模型-视图-控制器 (MVC) 框架,用于用 Java 构建 Web 应用程序。 Spring MVC 模式包含三个部分:
- 模型: 模型包含需要在视图上显示的数据。一个简单的 POJO 类可以被视为一个模型。
- 视图:视图用于呈现 UI 操作。
- 控制器: 控制器接受用户请求并将其传递给视图进行渲染。
先决条件
- Java 开发工具包 (JDK) 11 或更高版本
- Spring Boot 2.7.7 或更高版本
- 您选择的 IDE(例如 Eclipse、IntelliJ IDEA、STS(Spring Tool Suite))
Spring MVC 国际化 (i18n)
国际化是开发软件的过程,以便无需更改任何代码即可轻松适应不同的语言和地区。
Spring MVC i18n 的核心组件:
- LocaleResolver: LocaleResolver 是一个定义解析当前语言环境策略的接口。它确定 HTTP 请求中要使用的区域设置。
- MessageSource: MessageSource 是 Spring 中的一个接口,它提供了一种解析特定区域设置消息的方法。它支持属性、XML 和 YAML 格式。
- ViewResolvers:ViewResolvers 确定如何根据当前区域设置渲染视图。 ContentNegotiatingViewResolver 解析区域设置的最佳匹配视图
- LocaleChangeInterceptor:LocaleChangeInterceptor 提供了动态区域设置切换的机制。它拦截区域设置更改请求并通过 LocaleResolver 更新请求/会话中的区域设置。
- 资源包:名为 messages_xx.properties 的属性文件,其中包含每个区域设置的本地化文本值。
使用 Spring MVC 进行本地化 (L10n)
Spring MVC 应用程序必须本地化才能在多种语言和地区运行。这允许构建可以为全球用户无缝本地化的应用程序,而无需更改代码。
Spring MVC L10n 的核心组件:
- LocaleResolver: LocaleResolver 是一个确定用户区域设置的接口,它代表用户的语言和国家或地区。确定请求中要使用的区域设置。
- LocaleContext:使当前区域设置在控制器和模型中可用。通常使用LocaleContextHolder。
- MessageSource: MessageSource 是一个接口,它提供了一种根据当前区域设置解析来自资源包的消息的方法。
- ViewResolvers: ViewResolvers 确定如何根据当前区域设置呈现视图。 ContentNegotiatingViewResolver 解析区域设置的最佳匹配视图。
- LocaleChangeInterceptor: LocaleChangeInterceptor 是一个拦截器,允许根据请求参数或属性更改区域设置。
- 资源包:资源包是包含特定于区域设置的键值对的文件,其中键代表消息代码< a i=3>值代表翻译的消息。
国际化和本地化示例
创建消息控制器:MessageController.Java
package com.demo.controller; |
创建消息模型:Message.java
package com.demo.model; |
创建视图:message.html
- 此文件位于src/main/resources/templates,包含一条消息。
<!DOCTYPE html> |
配置国际化:WebConfig.java
package com.demo.config; |
消息属性
- 这些属性文件位于 src/main/resources/messages,包含不同语言的本地化消息。
- messages.properties:data.message=Hello and goodbye!
- messages_fr.properties:data.message=Bonjour et au revoir!
运行应用程序
您可以通过集成开发环境或使用 Spring Boot 提供的命令行工具运行 Spring Boot 应用程序。
mvn spring-boot:run
测试:
- 打开浏览器,进入 http://localhost:8080/message。您应该会看到英文版的默认信息。
- 您可以在 URL 上添加 ?lang=fr 或 ?lang=en 来切换语言。