How to use ResourceBundle

internationalization, java, netbeans, resourcebundle, swing

Solution

You need to use fully qualified base name:

bundle = ResourceBundle.getBundle("pkg.subpkg.resources.MainWindow", locale);

Problem

I'm trying to grasp internalization of java applications as shown here. I can't though. I have created a class that extends `ListResourceBundle` like stated and tried to retrieve the keys. I keep getting an exception though. If you check out the tutorial, it says to use .class files. This can't be right, can it? [PROJECT TREE] [Source code] Here are the two classes I'm using, just one of the MainWindow_xx_XX.java files since they're basically the same. First the ListResourceBundle: ``` public class MainWindow_en_US extends ListResourceBundle { @Override protected Object[][] getContents() { return contents; } private Object[][] contents = { {"fileLabel", "File"}, {"newSessionLabel", "New session..."}, {"openSessionLabel", "Open session..."}, {"saveLabel", "Save"}, {"exitLabel", "Exit"}, {"editLabel", "Edit"}, {"toolsLabel", "Tools"}, {"helpLabel", "Help"} }; } ``` And now the method I use to load it: ``` private static final int DEFAULT_LOCALE = 0; private ResourceBundle bundle; public static Locale locale; public static final Locale[] supportedLocales = { new Locale("en", "US"), new Locale("es", "ES") }; public MainWindow() { for (Locale i : supportedLocales) { if (i.getLanguage().equals(Locale.getDefault().getLanguage())) { locale = i; break; } else { locale = supportedLocales[DEFAULT_LOCALE]; } } bundle = ResourceBundle.getBundle("MainWindow", locale); //EXCEPTION POINTS HERE!!! initComponents(); } ``` I keep getting the following exception. I know I can do it through property files but it bugs me beyond reason the fact that I can't get Oracle's extremely simple tutorial to work. ``` Exception in thread "AWT-EventQueue-0" java.util.MissingResourceException: Can't find bundle for base name MainWindow, locale es_ES at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1499) at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1322) at java.util.ResourceBundle.getBundle(ResourceBundle.java:796) at -.-.-.-.-.<init>(MainWindow.java:37) at -.-.-.-.MainWindow$2.run(MainWindow.java:145) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701) at java.awt.EventQueue.access$000(EventQueue.java:102) at java.awt.EventQueue$3.run(EventQueue.java:662) at java.awt.EventQueue$3.run(EventQueue.java:660) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:671) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) at java.awt.EventDispatchThread.run(EventDispatchThread.java:97) ```

Original source