10

I'm running Eclipse and trying to create a simple test program trying our ResourceBundle with a couple of different files. The file is properly named as ResourceFile_us_US.properties. But I'm getting an exception on the getBundle() call because it apparently can't find the file. Where should it be located so it can be found?

Craig A
  • 101
  • 1
  • 1
  • 3

4 Answers4

17

You know java is looking for a properties file in a specific locale. You may be baffled why java keeps complaining it can't find a properties file that is right there. A few things to keep in mind when debugging this type of errors:

  1. These resource properties files are loaded by classloader, similar to java classes. So you need to include them in your runtime classpath.

  2. These resources have fully-qualified-resource-name, similar to a fully-qualified-class-name, excerpt you can't import a resource into your java source file. Why? because its name takes the form of a string.

  3. ResourceBundle.getBundle("config") tells the classloader to load a resource named "config" with default package (that is, no package). It does NOT mean a resource in the current package that has the referencing class.

  4. ResourceBundle.getBundle("com.cheng.scrap.config") tells the classloader to load a resource named "config" with package "com.cheng.scrap." Its fully-qualified-resource-name is "com.cheng.scrap.config"

More : Can't find bundle for base name com...config, locale zh_CN

Cheers.

tmwanik
  • 1,643
  • 14
  • 20
8

If you create a package resources and put the file hello_en_US.properties inside it, which has the content:

hello = Hello World!!

you can print the content of hello using the following code:

package localization;

import java.util.Locale;
import java.util.ResourceBundle;

public class ResourceBundleDemo {

public static void main(String[] args) {

    Locale en_US = new Locale("en", "US");
    ResourceBundle bundle = ResourceBundle.getBundle("resources.hello", en_US);

    // print the value of the key "hello"
    System.out.println("" + bundle.getString("hello"));

  }
}
Adil
  • 4,503
  • 10
  • 46
  • 63
2

One of two:

  1. /src/resources Make sure you include locale in name of resource bundle file. e.g for Zimbabwe, it will be ResourceBundle_en_ZW.properties and you would load it as ResourceBundle resourceBundle = ResourceBundle.getBunndle("ResourceBundle", Locale.getDefault());

  2. In your classpath. Make sure the classpath environment variable is set

Michu93
  • 5,058
  • 7
  • 47
  • 80
Shinx
  • 21
  • 1
1

I believe it just looks in the classpath.

Alex Beardsley
  • 20,988
  • 15
  • 52
  • 67