本地化

如果您需要支援其他語言環境,本節包含您需要了解的一切。

所有異常訊息,包括與認證失敗和拒絕訪問(授權失敗)相關的訊息,都可以本地化。針對開發人員或系統部署人員的異常和日誌訊息(包括屬性不正確、違反介面契約、使用不正確的建構函式、啟動時驗證、除錯級別日誌記錄)則不予本地化,而是硬編碼在 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 示例應用已設定為使用本地化訊息。