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

Java应用中MacOS原生菜单项的本地化切换问题

解决MacOS原生菜单栏Locale不切换的问题

针对你遇到的MacOS原生菜单栏(About、Quit、Settings等)在设置Java默认Locale后仍显示英文的问题,可通过以下几种方式处理:

1. 提前设置Locale(关键步骤)

Java的MacOS原生菜单项本地化依赖JVM启动时的Locale设置,而非运行时动态修改。必须在任何AWT/Swing组件初始化前设置默认Locale,建议放在main方法最开头:

public static void main(String[] args) {
    // 优先级最高:在初始化UI前设置Locale
    Locale.setDefault(new Locale("fr", "FR"));
    // 再配置MacOS菜单栏相关属性
    System.setProperty("apple.laf.useScreenMenuBar", "true");
    System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Mon Application");
    
    SwingUtilities.invokeLater(() -> {
        // 初始化应用UI
        JFrame frame = new JFrame();
        // ...
    });
}

2. 用系统属性强制指定Locale

若提前设置Locale无效,可添加MacOS专属系统属性,直接告知Java适配层使用目标语言:

// 在main方法开头添加
System.setProperty("user.language", "fr");
System.setProperty("user.country", "FR");
System.setProperty("user.variant", "");

3. 验证ResourceBundle加载逻辑

确保自定义菜单使用的ResourceBundle依赖默认Locale加载,避免硬编码Locale导致不一致:

// 正确:使用默认Locale加载资源
ResourceBundle bundle = ResourceBundle.getBundle("MyResources");
// 错误:硬编码Locale会和系统设置脱节
// ResourceBundle bundle = ResourceBundle.getBundle("MyResources", Locale.ENGLISH);

4. 针对Settings菜单项的本地化配置

如果是打包成.app应用,需在Info.plist中添加本地化支持,并提供对应语言的字符串文件:

  1. 在Info.plist中添加:
<key>CFBundleLocalizations</key>
<array>
    <string>fr</string>
    <string>en</string>
</array>
  1. 在应用包的Contents/Resources/fr.lproj目录下创建InfoPlist.strings,写入:
"Preferences..." = "Préférences...";
"Quit Mon Application" = "Quitter Mon Application";
"About Mon Application" = "À propos de Mon Application";

内容的提问来源于stack exchange,提问作者Bart Jourquin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:15:02