Java 资源包

Java ResourceBundle

我已经 Java 几个月没有编程了,我有一个小应用程序要开发供我自己使用。我卡在 ResourceBundle 上了!我记得它很容易使用,所以我想我的问题很容易解决,但需要新的眼光:)

Locale frLocale = new Locale("fr","CA");
Locale enLocale = new Locale("en","CA");

String dir = System.getProperty("user.dir");
System.out.println("current dir = " + dir); // current dir = D:\RP1.8.2

Path p = FileSystems.getDefault().getPath(dir,"test.properties");
System.out.println("Path : "+p.toAbsolutePath().toString()); // Path : D:\RP1.8.2\test.properties

boolean exists = Files.exists(p);
System.out.println("File found: "+exists); // File found: true

ResourceBundle bundle = ResourceBundle.getBundle(p.toAbsolutePath().toString());
/* Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name D:\RP1.8.2\test.properties, locale fr_CA */

String title = bundle.getString("main.title");
System.out.println("Titre = "+title);

所以我的属性文件存在,但 ResourceBundle 找不到它……很奇怪。 在用户目录中,我有 3 个文件: test.properties、test_fr.properties 和 test_fr_CA.properties

有什么线索吗? 谢谢

如果它是一个 Maven 项目,那么我会右键单击该项目,然后在 "M2 tools" 下,我会 select 生成工件(检查更新),然后单击 "generate OSGI bundles"

getBundle 的参数不是文件名,实际上不能是文件名。 ResourceBundle 文件是 应用程序资源, 并且需要放置在与编译的 classes 相同的位置。 (事实上​​,ResourceBundle 可以是实际的 Java class 而不是属性文件。)例如:

build
└─classes
  └─com
    └─example
      └─myapp
        ├─MyWindow.class
        ├─MyDataImporter.class
        ├─test.properties
        ├─test_fr.properties
        └─test_fr_CA.properties

代码:

ResourceBundle bundle = ResourceBundle.getBundle("com.example.myapp.test");