如何使用ResourceBundle [英] How to use ResourceBundle

查看:104
本文介绍了如何使用ResourceBundle的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试掌握java应用程序的内部化,如这里所示。我不能。我已经创建了一个扩展 ListResourceBundle 的类,并且尝试检索密钥。我不断得到例外。如果您查看教程,它会说使用 .class 文件。这可能不对,可以吗?

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]

[源代码]

这是我正在使用的两个类,只是一个MainWindow_xx_XX.java文件,因为它们基本相同。
首先是ListResourceBundle:

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();
}

我一直收到以下异常。我知道我可以通过属性文件来实现它,但它让我无法理解我无法让Oracle的极其简单的教程工作。

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)


推荐答案

您需要使用完全限定的基本名称:

You need to use fully qualified base name:

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

这篇关于如何使用ResourceBundle的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆