java locale资源包位置,Locale Resource读取次序问题

一般,项目的语言包由几个properties文件组成。

例如A项目中有1个properties文件global.properties,文件中有若干key,其中一个是:BUTTON_OK=OK。如果项目A需要英语、德语、简体中文等种语言的界面。那么,我们应该另外准备三个properties文件,分别为:global_en_US.properties,global_de_DE.properties,global_zh_CN.properties。

_en代表“英语”,_US代表美国,之所以带个地区代码是因为有些地区虽然都说英语但是不同地区的语言存在细微差别,带上国家代码以示区分。那么,_de就是德语,_DE即为德国;_zh为汉语,_CN为中国(当然还有_TW台湾地区、_HK香港和_MO澳门)。

而global.properties文件的名字后面没有任何语言、地区代码,这个文件被称为default资源文件,也即程序获取key的值时,如果其他相对应的语言文件中都没有与此key相对应的值,那么就取default资源文件中与此key相对应的值。

但是,需要注意的是:JDK的ResouceBundle类在获取key的对应值时,也是有一定逻辑的。如果项目在运行的时候传给ResouceBundle的locale是en,而项目中又没有相对应的语言资源包,那么,按常理猜想ResourceBundle应该去取default文件中的值。但是,注意,事实恰恰相反。ResourceBundle会根据当前用户JDK的默认语言去取相对应的语言包。

也就是说,如果告诉ResourceBundle去获取en资源,而恰好没有en对应的资源,那么ResourceBundle不会立刻去取default资源,而是去获取JDK的默认语言环境(其实就是JDK所在OS的地区设置),然后根据JDK的默认语言环境去获取对应的资源包。如果与JDK相对应的资源也不存在,这时才去取default资源。

所以,当我们的项目需要支持en语言时,不能仅在default资源写上en语言就完事儿了,还要切切实实的准备一份_en.properties文件(地区代码是可以省略掉的)。哪怕是准备一份空白的_en.properties文件,这都是必须的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值