客户端和服务器具有不同的区域设置回退机制



我有运行fr_CH语言环境的jboss服务器和运行de_CH语言区域的应用程序客户端。我有两个bundle-messages.properties(root)和messages_fr_CH.properties。这很奇怪,但在服务器端,ResourceBundle.getBundle("bundleLocation",new Locale("de","CH")为fr_CH区域设置返回bundle,而不是root bundle。

我唯一能想到的是,在服务器端Locale.getDefault()是"fr_CH",但如果我做对了,由于优雅降级的概念,标准java回退机制不应该关心它…

还有其他想法吗?问题可能是什么?

谢谢,一月

你是对的,这种行为是因为默认的语言环境。查看javadoc ResourceBundle.getBundle:

getBundle使用基本名称、指定的区域设置和默认值locale(从locale.getDefault获得)以生成候选捆绑包名称。如果指定区域设置的语言、国家/地区,和variant都是空字符串,则基名称是唯一的候选捆绑包名称。否则,将生成以下序列根据指定的语言环境(language1,country1和variant1)和默认语言环境(language2,country2和variant2):

baseName + "_" + language1 + "_" + country1 + "_" + variant1
baseName + "_" + language1 + "_" + country1
baseName + "_" + language1
baseName + "_" + language2 + "_" + country2 + "_" + variant2
baseName + "_" + language2 + "_" + country2
baseName + "_" + language2
baseName

所以您的案例是baseName + "_" + language2 + "_" + country2

最新更新