2012-05-21 18 views

回答

2

Locale.setDefault()設置整個JVM的默認語言環境,這對客戶端應用程序來說很好。對於Web應用程序,這不是一個有效的解決方案,但是線程本地也不是,因爲所有用戶都使用相同的線程。在這種情況下,用戶區域通常存儲在HTTP會話中。

+1

對於Web應用程序來說,線程本地IS是一個線程,一次只能處理一個用戶請求。它必須在用戶的流程開始時重新初始化。這是asp.net如何做到的 - 它評估它(從brokwser發送的電文中),然後爲這個請求的線程設置約定。 – TomTom

+1

同意。如果您在每次請求時重新初始化它的值,則可以將它存儲在線程本地中。 Whci表示它必須存儲在其他地方:在會話中,在cookie中或在數據庫中(當然,除非您使用請求中的本地地址) –

+0

接受此解決方案以用於SpringMVC解決方案的ThreadLocal –

1

如果您有基於Web SpringMVC的Web應用程序,則可以使用此類org.springframework.context.i18n.LocaleContextHolderjavadoc here),該類允許您訪問當前語言環境。

在web應用程序中,這可以根據DispatcherServlet中的accept-language請求標頭(javadoc here)進行初始化。

+0

+1 –