跳到主要内容

本地化

QWen Max 中英对照 Localization

如果你需要支持其他区域设置,本节包含了你需要了解的所有内容。

所有异常消息,包括与身份验证失败和访问被拒绝(授权失败)相关的消息,都可以本地化。针对开发人员或系统部署者的异常和日志消息(包括错误的属性、接口契约违反、使用错误的构造函数、启动时验证、调试级别的日志记录)不会被本地化,而是以英文硬编码在 Spring Security 的代码中。

spring-security-core-xx.jar 中,你会找到一个 org.springframework.security 包,其中包含一个 messages.properties 文件以及一些常见语言的本地化版本。你的 ApplicationContext 应该引用这个文件,因为 Spring Security 类实现了 Spring 的 MessageSourceAware 接口,并期望在应用程序上下文启动时通过依赖注入消息解析器。通常,你只需要在应用程序上下文中注册一个 bean 来引用这些消息。以下是一个示例:

<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:org/springframework/security/messages</value>
</list>
</property>
</bean>
xml
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:org/springframework/security/messages"/>
</bean>
xml

messages.properties 的命名遵循标准资源包的命名规范,代表 Spring Security 消息支持的默认语言。这个默认文件是英文的。

要自定义 messages.properties 文件或支持其他语言,你应该复制该文件,根据需要重命名,并在前面的 bean 定义中注册它。这个文件中的消息键数量不多,因此本地化不应被视为一项重大任务。如果你确实对这个文件进行了本地化,请考虑通过记录一个 JIRA 任务并与社区分享你的工作,附上适当命名的本地化版本的 messages.properties

Spring Security 依赖于 Spring 的本地化支持来实际查找合适的消息。为了使这能够正常工作,你必须确保从传入请求中获取的区域设置存储在 Spring 的 org.springframework.context.i18n.LocaleContextHolder 中。Spring MVC 的 DispatcherServlet 会自动为你的应用程序完成这一操作。然而,由于 Spring Security 的过滤器在此之前被调用,因此在调用过滤器之前,LocaleContextHolder 需要被设置为包含正确的 Locale。你可以自己在一个过滤器中完成此操作(该过滤器必须在 web.xml 中位于 Spring Security 过滤器之前),或者可以使用 Spring 的 RequestContextFilter。有关使用 Spring 进行本地化的更多详细信息,请参阅 Spring 框架文档。

contacts 示例应用程序已设置为使用本地化消息。