本地化
本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。 |
Spring Security支持对终端用户可能看到的异常信息进行本地化。如果你的应用程序是为讲英语的用户设计的,你不需要做任何事情,因为在默认情况下,所有的 Security 消息都是英文的。如果你需要支持其他地区的语言,本节包含了你需要知道的一切。
所有的异常信息,包括与认证失败和访问被拒绝(授权失败)有关的信息,都可以被本地化。针对开发者或系统部署者的异常和日志信息(包括不正确的属性、违反接口约束、使用不正确的构造函数、启动时验证、debug级日志)不被本地化,而是在Spring Security的代码中用英文硬编码。
在 spring-security-core-xx.jar
中,你会发现一个 org.springframework.security
包,它又包含一个 messages.properties
文件,以及一些常用语言的本地化版本。你的 ApplicationContext
应该参考这个文件,因为 Spring Security 类实现了Spring的 MessageSourceAware
接口,并期望消息解析器在 application context 启动时被依赖注入。通常情况下,你需要做的就是在你的 application context 中注册一个Bean来引用这些消息。下面的列表显示了一个例子。
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:org/springframework/security/messages"/>
</bean>
messages.properties
是按照标准资源包(resource bundles)命名的,代表了 Spring Security 消息所支持的默认语言。这个默认文件是英文的。
要定制 messages.properties
文件或支持其他语言,你应该复制该文件,对其进行相应的重命名,并在前面的 bean 定义中注册。这个文件里面没有大量的 message key,所以本地化不应该被认为是一个重要的举措。如果你真的对这个文件进行了本地化,请考虑与社区分享你的工作,记录一个JIRA任务,并附上你适当命名的 messages.properties
的本地化版本。
Spring Security依赖于Spring的本地化支持,以便实际查找适当的消息。要做到这一点,你必须确保来自传入请求的locale被存储在Spring的 org.springframework.context.i18n.LocaleContextHolder
中。Spring MVC的 DispatcherServlet
会自动为你的应用程序做这个。然而,由于Spring Security的过滤器在这之前被调用,因此在过滤器被调用之前, LocaleContextHolder
需要被设置为包含正确的 Locale
。你可以自己在过滤器中做到这一点(在 web.xml
中必须在Spring Security的过滤器之前),或者你可以使用Spring的 RequestContextFilter
。关于使用Spring本地化的进一步细节,请参见Spring框架文档。
contacts
示例应用程序被设置为使用本地化的信息。