为何jpackage打包的macOS Java应用菜单不使用系统定义语言
问题根因
- Oracle JDK 9发布时间远早于Apple Silicon芯片面世时间,没有对M1架构做原生适配,在M1设备上运行时依赖Rosetta 2转译执行,转译过程中JDK读取系统语言偏好的系统API调用存在兼容性缺陷,无法正确识别到法语为首选语言,会直接fallback到默认英文。
- macOS Big Sur 11.x针对Apple Silicon设备调整了应用本地化资源的读取逻辑,相较于Intel架构上的Catalina系统规则更严格:仅配置
CFBundleDevelopmentRegion无法触发语言匹配,必须同时存在对应语言的.lproj资源目录,你当前的应用包缺少fr.lproj目录,因此在M1+Big Sur的组合下无法生效,而Catalina对该规则校验更宽松,所以Intel设备运行正常。
解决方案
- 优先升级打包使用的JDK版本到JDK 17及以上,这是首个原生支持Apple Silicon的长期支持版本,内置的jpackage工具已经修复了大量macOS本地化适配问题,原生运行无需Rosetta转译,可正确读取系统语言配置完成菜单翻译。
- 若必须保留JDK 9作为打包环境,可在jpackage生成的.app包的
Contents/Resources目录下手动创建空的fr.lproj文件夹,重新对应用签名后即可适配Big Sur的本地化匹配规则。 - 也可在应用的启动参数中添加强制本地化配置:
-Duser.language=fr -Duser.region=FR,绕开JDK读取系统语言的兼容性问题,强制JVM加载法语资源。
内容的提问来源于stack exchange,提问作者jtraulle
相关产品推荐
相关产品推荐

