(window.webpackJsonp=window.webpackJsonp||[]).push([[627],{1058:function(e,r,s){"use strict";s.r(r);var t=s(56),o=Object(t.a)({},(function(){var e=this,r=e.$createElement,s=e._self._c||r;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"本地化"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#本地化"}},[e._v("#")]),e._v(" 本地化")]),e._v(" "),s("p",[e._v("如果你需要支持其他语言环境,那么你需要了解的所有内容都包含在本节中。")]),e._v(" "),s("p",[e._v("所有异常消息都可以本地化,包括与身份验证失败和访问被拒绝(授权失败)相关的消息。针对开发人员或系统部署人员的异常和日志消息(包括不正确的属性、违反接口契约、使用不正确的构造函数、启动时间验证、调试级别的日志记录)没有本地化,而是在 Spring Security的代码中用英文进行了硬编码。")]),e._v(" "),s("p",[e._v("在"),s("code",[e._v("spring-security-core-xx.jar")]),e._v("中,你将发现一个"),s("code",[e._v("org.springframework.security")]),e._v("包,该包依次包含一个"),s("code",[e._v("messages.properties")]),e._v("文件,以及一些常见语言的本地化版本。这应该由你的"),s("code",[e._v("ApplicationContext")]),e._v("来引用,因为 Spring 安全类实现了 Spring 的"),s("code",[e._v("MessageSourceAware")]),e._v("接口,并且期望消息解析程序是在应用程序上下文启动时注入的依赖项。通常,你所需要做的就是在应用程序上下文中注册一个 Bean 来引用消息。下面是一个例子:")]),e._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v('\n\n\n')])])]),s("p",[s("code",[e._v("messages.properties")]),e._v("是根据标准资源包命名的,表示 Spring 安全消息支持的默认语言。这个默认文件是英文的。")]),e._v(" "),s("p",[e._v("如果你希望自定义"),s("code",[e._v("messages.properties")]),e._v("文件,或者支持其他语言,那么你应该复制该文件,对其进行相应的重命名,并将其注册到上述 Bean 定义中。在这个文件中没有大量的消息键,因此本地化不应该被认为是一项主要的举措。如果你确实执行了此文件的本地化,请考虑通过记录JIRA任务并附加适当命名的本地化版本"),s("code",[e._v("messages.properties")]),e._v("来与社区共享你的工作。")]),e._v(" "),s("p",[e._v("Spring 安全性依赖于 Spring 的本地化支持,以便实际查找适当的消息。为了实现这一点,你必须确保来自传入请求的区域设置存储在 Spring 的"),s("code",[e._v("org.springframework.context.i18n.LocaleContextHolder")]),e._v("中。 Spring MVC的"),s("code",[e._v("DispatcherServlet")]),e._v("自动为你的应用程序执行此操作,但是由于 Spring Security的过滤器是在此之前调用的,因此在调用过滤器之前,需要设置"),s("code",[e._v("LocaleContextHolder")]),e._v("以包含正确的"),s("code",[e._v("Locale")]),e._v("。你可以自己在过滤器中执行此操作(它必须在"),s("code",[e._v("web.xml")]),e._v("中的 Spring 安全过滤器之前),也可以使用 Spring 的"),s("code",[e._v("RequestContextFilter")]),e._v("。请参阅 Spring 框架文档,以获取关于使用 Spring 本地化的更多详细信息。")]),e._v(" "),s("p",[e._v("将“联系人”示例应用程序设置为使用本地化消息。")]),e._v(" "),s("p",[s("RouterLink",{attrs:{to:"/spring-security/jackson.html"}},[e._v("Jackson")]),s("RouterLink",{attrs:{to:"/spring-security/servlet-api.html"}},[e._v("Servlet APIs")])],1)])}),[],!1,null,null,null);r.default=o.exports}}]);