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?
getBundle. Gets a resource bundle using the specified base name, locale, and class loader. This method behaves the same as calling getBundle(String, Locale, ClassLoader, Control) passing a default instance of ResourceBundle.
To create the ResourceBundle , invoke the getBundle method, specifying the base name and Locale : ResourceBundle labels = ResourceBundle. getBundle("LabelsBundle", currentLocale); The getBundle method first looks for a class file that matches the base name and the Locale .
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:
These resource properties files are loaded by classloader, similar to java classes. So you need to include them in your runtime classpath.
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.
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.
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.
One of two:
/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());
In your classpath. Make sure the calsspath environment variable is set
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"));
}
}
I believe it just looks in the classpath.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With