本地化
如果您需要支援其他語言環境,本節包含您需要了解的所有資訊。
所有異常訊息都可以本地化,包括與認證失敗和訪問被拒絕(授權失敗)相關的訊息。針對開發人員或系統部署人員的異常和日誌訊息(包括不正確的屬性、介面契約違規、使用不正確的建構函式、啟動時驗證、除錯級別日誌記錄)不會本地化,而是在 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="basename" value="classpath:org/springframework/security/messages"/>
</bean>
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 Framework 文件。
“contacts” 示例應用程式已設定為使用本地化訊息。