You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用扩展或私有使用子标签时Java消息束属性文件命名规范

Java ResourceBundle 对BCP-47扩展/私有使用子标签的命名规范

JDK7及之后版本原生支持BCP-47区域标签解析,但扩展子标签、私有使用子标签的文件名分隔规则和语言、国家、变体段不同,不要用单下划线拼接这类标签。

正确命名方式

如果你要使用带私有使用子标签RandomTag的en_US区域设置:

  • 构造Locale实例时不要把私有标签塞到variant字段,要用标准BCP47方式构造:Locale locale = Locale.forLanguageTag("en-US-x-RandomTag");
  • 对应的属性文件命名为:
message_en_US__x-RandomTag.properties

注意私有标签段x-RandomTag前面是两个连续下划线,标签内部的短横线保留,不需要替换成下划线。

规则细节

  • 所有BCP-47扩展段(包含单字符前缀的通用扩展、x开头的私有使用段),在文件名中都以两个下划线作为前缀,和前面的语言、国家、变体段做分隔。比如带日历扩展u-ca-gregory的zh_CN区域,对应文件名为message_zh_CN__u-ca-gregory.properties。
  • 标准BCP-47变体表仍然用单下划线拼接在国家段之后,和扩展段完全分隔,不会出现命名冲突。比如同时带标准变体scotland和私有标签RandomTag的en_GB区域,对应文件名为message_en_GB_scotland__x-RandomTag.properties,语义清晰无歧义。
  • 匹配回退逻辑和普通资源束一致:加载时会从最具体的文件名开始匹配,逐段去掉后缀回退。以上文的en-US-x-RandomTag为例,查找顺序为:
    • message_en_US__x-RandomTag.properties
    • message_en_US.properties
    • message.properties(根默认资源)

常见踩坑点

如果误把扩展/私有标签段前的两个下划线写成一个,Java会把整段内容识别为variant值,相当于退化成「把自定义标签塞到variant字段」的写法,后续接入标准BCP47变体时必然出现匹配优先级混乱、命名冲突的问题。


内容的提问来源于stack exchange,提问作者Ashish Padakannaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:09:16