# 本地化

如果你需要支持其他语言环境，那么你需要了解的所有内容都包含在本节中。

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

在`spring-security-core-xx.jar`中，你将发现一个`org.springframework.security`包，该包依次包含一个`messages.properties`文件，以及一些常见语言的本地化版本。这应该由你的`ApplicationContext`来引用，因为 Spring 安全类实现了 Spring 的`MessageSourceAware`接口，并且期望消息解析程序是在应用程序上下文启动时注入的依赖项。通常，你所需要做的就是在应用程序上下文中注册一个 Bean 来引用消息。下面是一个例子：

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

`messages.properties`是根据标准资源包命名的，表示 Spring 安全消息支持的默认语言。这个默认文件是英文的。

如果你希望自定义`messages.properties`文件，或者支持其他语言，那么你应该复制该文件，对其进行相应的重命名，并将其注册到上述 Bean 定义中。在这个文件中没有大量的消息键，因此本地化不应该被认为是一项主要的举措。如果你确实执行了此文件的本地化，请考虑通过记录 JIRA 任务并附加适当命名的本地化版本`messages.properties`来与社区共享你的工作。

Spring 安全性依赖于 Spring 的本地化支持，以便实际查找适当的消息。为了实现这一点，你必须确保来自传入请求的区域设置存储在 Spring 的`org.springframework.context.i18n.LocaleContextHolder`中。 Spring MVC 的`DispatcherServlet`自动为你的应用程序执行此操作，但是由于 Spring Security 的过滤器是在此之前调用的，因此在调用过滤器之前，需要设置`LocaleContextHolder`以包含正确的`Locale`。你可以自己在过滤器中执行此操作（它必须在`web.xml`中的 Spring 安全过滤器之前），也可以使用 Spring 的`RequestContextFilter`。请参阅 Spring 框架文档，以获取关于使用 Spring 本地化的更多详细信息。

将“联系人”示例应用程序设置为使用本地化消息。