本地化

如果您需要支援其他語言環境,所有您需要知道的資訊都包含在本節中。

所有例外訊息都可以本地化,包括與身份驗證失敗和拒絕存取(授權失敗)相關的訊息。針對開發人員或系統部署人員的例外和記錄訊息(包括不正確的屬性、介面合約違規、使用不正確的建構子、啟動時間驗證、除錯層級記錄)不會本地化,而是在 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」範例應用程式已設定為使用本地化訊息。