本地化

如果您需要支援其他語言環境,本節包含您需要了解的所有資訊。

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