JDK11及以上版本实现瑞典语JFileChooser的方法及相关疑问
JFileChooser瑞典语本地化(JDK11+适配方案)
核心问题解答
1. JFileChooser的UI字符串来源:你的ResourceBundle假设是对的
Swing组件的本地化文本确实来自ResourceBundle,JFileChooser的默认字符串存放在对应LookAndFeel的资源包中(比如Basic风格对应com.sun.swing.internal.plaf.basic.resources.basic),不同Locale会加载对应的语言版本资源文件(如瑞典语的basic_sv.properties)。
2. JDK11后Locale默认值设置失效的原因
JDK11引入模块化设计后,Swing的UI资源加载逻辑发生了关键变化:
- 早期JDK中,全局默认Locale(
Locale.setDefault(new Locale("sv", "SE")))会让所有Swing组件自动匹配对应语言的资源包; - JDK11+中,
java.desktop模块封装了内部资源包,应用程序无法直接访问,且组件加载资源时不再完全依赖全局Locale,而是优先使用组件自身Locale或系统UI的Locale设置。
3. UIManager修改UI字符串的原理与查找方式
字符串查找逻辑
Swing组件获取文本时,会通过UIManager.getString(key, locale)按以下顺序查找:
- 优先读取UIManager中手动
put的键值对; - 若未找到,再去对应LookAndFeel的ResourceBundle中匹配当前Locale的字符串;
- 最后找不到则使用默认英文文本。
UIManager.put的原理
UIManager.put(Object key, Object value)是直接在UI管理器的全局缓存中插入自定义值,后续组件查找对应key时会直接返回这个值,跳过资源包的查找流程。比如修改"打开"按钮文本:
UIManager.put("FileChooser.openButtonText", "Öppna");
4. 可行解决方案
方案一:UIManager手动覆盖单个字符串
适合仅修改少量文本的场景,先找到JFileChooser的UI键名:
- 查看对应LookAndFeel的语言资源文件(比如Basic风格的
basic_sv.properties); - 调用
UIManager.getDefaults().keys()遍历所有UI键,筛选包含"FileChooser"的条目。
示例代码:
// 覆盖瑞典语常用文本 UIManager.put("FileChooser.openButtonText", "Öppna"); UIManager.put("FileChooser.saveButtonText", "Spara"); UIManager.put("FileChooser.cancelButtonText", "Avbryt"); UIManager.put("FileChooser.fileNameLabelText", "Filnamn:"); UIManager.put("FileChooser.filesOfTypeLabelText", "Filtyper:"); // 按需添加更多键值对
方案二:自定义ResourceBundle替换默认逻辑
适合全量本地化所有文本的场景,步骤如下:
- 创建自定义资源包(比如
my.swing.resources.basic_sv.properties),复制默认资源包的所有键并翻译成瑞典语; - 通过
UIManager.getDefaults().addResourceBundle("my.swing.resources.basic")将自定义资源包加入加载链,优先级高于系统默认资源包; - 给JFileChooser指定瑞典语Locale:
JFileChooser chooser = new JFileChooser(); chooser.setLocale(new Locale("sv", "SE"));
注意:JDK11+中,自定义资源包需放在模块路径下,module-info.java要声明requires java.desktop;,并开放资源包访问:opens my.swing.resources to java.desktop;
总结
- JDK11+失效是模块化导致内部资源包访问受限,且Locale依赖逻辑调整;
- UIManager.put是直接覆盖缓存,优先级最高,适合局部修改;
- JFileChooser确实依赖ResourceBundle,自定义资源包是更完整的全量本地化方案。
内容的提问来源于stack exchange,提问作者Oscar Josefsson
相关产品推荐
相关产品推荐

