Использование resourceBundle с внешним файлом, Java - PullRequest
2 голосов
/ 18 сентября 2010

Я читал другие вопросы и ответы по этому поводу, но я не понимаю, как ограниченность ресурсов работает полностью.Я думаю, что в Joomla это похоже на использование многоязычных опций.В основном у вас есть файлы для разных сообщений, которые вы хотите прочитать для разных языков.Поэтому я создал System.properties внутри своей папки src / Lang. Внутри я создаю

STARTING_MYAPP=Starting my app

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

Locale locale = Locale.getDefault();
String basename ="System";
ResourceBundle resourceBundle = ResourceBundle.getBundle(basename, locale);
System.out.println(resourceBundle.getString("STARTING_MYAPP"));
//UserPreferences UserPrefs = new UserPreferences();

, когда я вызываю getBundle (), у него есть два входа, базовое имя и локаль,право.У меня проблемы с базовым именем.Если мой файл находится внутри src / lang / System.properties, как мне его искать.basename = "System", basename = "Lang / System", basename = "System.properties", basename = "myProject.label".

Я перепробовал все это и еще несколько комбинаций, но не работает, явсегда получаю что-то вроде Exception в потоке "main" java.util.MissingResourceException: не могу найти пакет для базового имени System, локаль en_US

О локали, как оставить ее по умолчанию, поэтому у меня нетиспользовать System_en_US.properties или что-то в этом роде.

Ответы [ 2 ]

4 голосов
/ 18 сентября 2010

Базовое имя структурировано как полное имя класса (потому что пакеты ресурсов могут быть классами), поэтому, если корнем пути к классам является src, а ресурс - это файл src/lang/System.properties, тогда базовое имя lang.System.

О локали, как я оставлю ее по умолчанию, поэтому мне не нужно использовать System_en_US.properties или что-то в этом роде.

Просто используйте getBundle() метод, который принимает только базовое имя.

3 голосов
/ 18 сентября 2010

Это отлично работает.

import java.util.Locale;
import java.util.ResourceBundle;


public class ResourceBundleTester
{
    public static void main(String[] args)
    {
        Locale locale = Locale.getDefault();
        String basename ="lang/System";
        ResourceBundle resourceBundle = ResourceBundle.getBundle(basename, locale);
        System.out.println(resourceBundle.getString("STARTING_MYAPP"));
    }
}

В папке src / lang я создал файл с именем System.properties, который содержит ...

STARTING_MYAPP=Starting my app

Вывод: запуск моего приложения

На этой странице объясняется, как JDK разрешает имена ResourceBundle.

...