2011-01-08 80 views
22

我在表格中擁有所有的資源捆綁值,並按照要求進行了格式設置。我必須根據用戶選擇在頁面頂部的下拉菜單中更改網站中的語言。如果我使用語言代碼作爲en_US,那麼它的工作正常。如果我使用en-Us作爲語言代碼,那麼它不起作用。可能是什麼問題。遵循什麼是正確的?爲en-US和en_US創建語言環境有什麼區別?

回答

17

「en」是由ISO 639指定的語言代碼,而美國是3166
在Java中指定的國家代碼,Locale對象識別語言languageCode_countryCode(如EN_US),而不是爲languageCode- countryCode

21

「en-US」是一個IETF language tag。雖然Java'a Locale類明顯基於IETF語言標記,但在將語言代碼與國家代碼(以及變體)分開時,它使用下劃線代替連字符,因此在等效的Locale上調用toString()會給您en_US

從Java 7開始,您可以使用Locale.forLanguageTag(String)toLanguageTag()在語言標記和Locale對象之間進行轉換。

將字符串轉換爲Locale對象時,通過分割連字符和下劃線上的組件,降低第一個組件(語言代碼)和上方第二個組件(國家代碼)來標準化是一個好主意。

+0

此答案是在java代碼中做什麼的最佳答案。對於其他語言/框架,並非如此。在使用不同約定的框架之間進行調用時,您需要了解需要知道轉換的編碼器的「pratfall」。建議使用您正在調用的框架的約定。當您調用另一個框架時,請提供進行轉換的「代理」。爲什麼?它消除了需要知道被調用的框架使用不同的約定。貢獻者只會「看到」使用那一個的慣例將會避免這種失敗。 – DaBlick

6

或者你可以使用 Locale us = Locale.forLanguageTag("en-US")us.toLanguageTag(),這將爲你做轉換,而不必創建你自己的容易出錯的實現。

1

從Java8開始, 應使用語言標記「en-US」來完成區域設置的初始化。Locale.forLanguageTag(「en-US」)。toString();返回輸出:en_US

Locale.forLanguageTag(「en_US」)不會創建所需的語言環境。它將默認爲系統區域設置。 Locale.forLanguageTag(「en_US」)。toString()返回null

相關問題