I'm testing Java's i18n features and have a problem, I can't load the language file when it's not in the class root. Right now my files are in the /lang
directory.
Looked several answers here in SO, putting it in a classes
subdir and loading it like lang.Messages
, used complete location routing /Test/lang/Message
(test is the project name), using just /lang/Message
and still I'm getting the:
java.util.MissingResourceException: Can't find bundle for base name
error.
Anything else to try?
My file structure is:
Test/lang/Messages_es.properties
Test/src/test/Main.java
import java.util.Locale;
import java.util.ResourceBundle;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
Locale currentLocale;
ResourceBundle messages;
currentLocale = new Locale("es");
messages = ResourceBundle.getBundle("Messages", currentLocale);
System.out.println(messages.getString("Messagesgreetings"));
System.out.println(messages.getString("Messagesinquiry"));
System.out.println(messages.getString("Messagesfarewell"));
}
}
You need to have your locale name in your properties file name.
Rename your properties file to Messages_es.properties
Since you haven't declared any package, both your compiled class file and the properties file can be in the same root directory.
EDIT in response to comments:
Lets say you have this project structure:
test\src\foo\Main.java
(foo
is the package name)
test\bin\foo\Main.class
test\bin\resources\Messages_es.properties
(properties file is in the folder resources
in your classpath)
You can run this with:
c:\test>java -classpath .\bin foo.Main
Updated source code:
package foo;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
Locale currentLocale;
ResourceBundle messages;
currentLocale = new Locale("es");
messages = ResourceBundle.getBundle("resources.Messages", currentLocale);
System.out.println(messages.getString("Messagesgreetings"));
System.out.println(messages.getString("Messagesinquiry"));
System.out.println(messages.getString("Messagesfarewell"));
}
}
Here as you see, we are loading the properties file with the name "resources.Messages"
Hope this helps.
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