2010-07-20 90 views
2

爲什麼春天「ReloadableResourceBundleMessageSource」無法找到與代碼相關的正確信息時Locale.getDefault()返回EN,但能夠找到正確的消息當它返回EN_USReloadableResourceBundleMessageSource無法找到消息時默認的語言環境是「恩」

默認區域:EN_US

key: CODE_1, Locale: Locale.US   = Hit 
key: CODE_1, Locale: Locale.CANADA  = Hit 
key: CODE_1, Locale: fr_CA    = Hit 
key: CODE_1, Locale: null (use default) = Hit 

默認區域設置:zh

key: CODE_1, Locale: Locale.US    = Hit 
key: CODE_1, Locale: Locale.CANADA   = CODE_1 
key: CODE_1, Locale: fr_CA     = CODE_1 
key: CODE_1, Locale: null (use default)  = CODE_1 

我只有一個具有CODE_1在這message_en_US.properties

+0

在哪個bundle/locale是「Hit」定義的? – mdma 2010-07-27 14:48:00

+0

用定義了Hit的資源束更新了帖子 – 2010-07-27 16:41:44

回答

5

該消息僅爲en_US區域設置定義,因爲它在message_en_US.properties文件中定義。從區域設置en_US(Locale.US)切換到en時出現不同行爲的原因是,如果在請求的區域設置中未找到消息,ReloadableResourceBundleMessageSource默認會向系統區域設置執行fallback

在第一種情況,當en_US是默認的,則該消息被總是發現,由於所請求的本地是en_US或當不是,則消息源確實的回退是en_US,其中定義該消息。

當默認區域設置爲en時,只有en_US查詢有效,因爲它正在查找正確的屬性文件。對於其他所有人,在相應的屬性文件中找不到該消息,並且在回退區域en中也找不到該消息。

2

這是因爲它無法找到較少的國家/語言特定的屬性文件messages_en.propertiesmessages.properties類路徑捆綁。

如果您想對所有en語言默認捆綁無論國家,那麼你應該有一個messages_en.properties。如果您希望爲所有語言設置默認捆綁包,那麼您應該有messages.properties

messages_en_US.properties實際上只有在您有多個英語方言如en_UKen_US時纔有用,但是您應該真的爲另一個英語「方言」提供另一個方言。其中之一應該被命名爲messages_en.properties,然後它可以被用作未指定國家的訪問者的「默認」英文包。

相關問題