Вопрос по internationalization, netbeans, swing, resourcebundle, java – Как использовать ResourceBundle

8

я пытаюсь понять интернализацию Java-приложений, как показаноВот, Я могу'т хотя. Я создал класс, который расширяетListResourceBundle вроде заявлено и попытался получить ключи. Я продолжаю получать исключение, хотя. Если вы проверите учебник, он говорит, чтобы использовать.учебный класс файлы. Это может'не так ли?

[ПРОЕКТНОЕ ДЕРЕВО]

[Исходный код]

Вот два класса, которые ям, только один из файлов MainWindow_xx_XX.java, так как онив основном то же самое. Сначала 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"}
    };
}

А теперь метод, который я использую, чтобы загрузить его:

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

Я продолжаю получать следующее исключение. Я знаю, что могу сделать это с помощью файлов свойств, но это вызывает недоразумение, потому что я могуОракулОчень простой учебник для работы.

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 -.-.-.-.-.(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)

Ваш Ответ

2   ответа
3

Вы можете'Назовите файлMainWindow_es_ES, Чтобы решить вашу проблему, переименуйте ваш файл в.MainWindow es

Locale locale = new Locale("es");
ResourceBundle rb = ResourceBundle.getBundle("yourPackageName.MainWindow", locale);   
System.out.print(rb.getObject("YourKey"));
12

bundle = ResourceBundle.getBundle("pkg.subpkg.resources.MainWindow", locale);
Это помогло мне правильно указатьpkg.subpkg.resources.MainWindow вmsgfmt команда. то есть команда былаmsgfmt --java2 -d source/folder/root/ -r pkg.subpkg.resources.MainWindow my/po/file.po Johnride

Похожие вопросы