Изучаю пример с применением интернационализации с помощью классов ResourceBundle и ListResourceBundle
Пример демонстрирует применение комплектов ресурсов под именем семейства SampleRB.
После компиляции я постоянно получаю ошибку:
Английская версия программы:
Exception in thread "main" java.lang.NullPointerException
at java.util.ListResourceBundle.loadLookup(ListResourceBundle.java:202)
at java.util.ListResourceBundle.handleGetObject(ListResourceBundle.java:130)
at java.util.ResourceBundle.getObject(ResourceBundle.java:441)
at java.util.ResourceBundle.getString(ResourceBundle.java:407)
at LRBDemo.LRBDemo.main(LRBDemo.java:12)
Сама программа состоит из класса LRBDemo с запускающим методом main-ом:
public class LRBDemo {
public static void main(String[] args) {
// загрузить комплект ресурсов по умолчанию
ResourceBundle rd = ResourceBundle.getBundle("LRBDemo.SampleRB");
System.out.println("Английская версия программы: ");
System.out.println("Строка по ключу Title: " + rd.getString("title"));
System.out.println("Строка по ключу StopText: " + rd.getString("StopText"));
System.out.println("Строка по ключу StartText: " + rd.getString("StartText"));
// загрузить комплект ресурсов для поддержки немецкого языка
rd = ResourceBundle.getBundle("LRBDemo.SampleRBde", Locale.GERMAN);
System.out.println("
Немецкая версия программы: ");
System.out.println("Строка для ключа Title: " + rd.getString("title"));
System.out.println("Строка по ключу StopText: " + rd.getString("StopText"));
System.out.println("Строка по ключу StartText: " + rd.getString("StartText"));
}
}
Класса SampleRB с поддержкой английского языка:
public class SampleRB extends ListResourceBundle {
protected Object[][] getContents() {
Object[][] resources = new Object[3][2];
resources[0][0] = "title";
resources[0][1] = "MyProgram";
resources[1][0] = "StopText";
resources[1][1] = "Stop";
resources[1][0] = "StartText";
resources[2][1] = "Start";
return resources;
}
}
И класса SampleRBde с поддержкой немецкого языка:
public class SampleRBde extends ListResourceBundle {
protected Object[][] getContents() {
Object[][] resources = new Object[3][2];
resources[0][0] = "title";
resources[0][1] = "Mein Programm";
resources[1][0] = "StopText";
resources[1][1] = "Anschlag";
resources[2][0] = "StartText";
resources[2][1] = "Anfang";
return resources;
}
}
Сам код не отображает ошибок, но если я пропишу в классе LRBDemo вместо строки ResourceBundle rd = ResourceBundle.getBundle("LRBDemo.SampleRB") таким образом ResourceBundle rd = ResourceBundle.getBundle("SampleRB") и вместо rd = ResourceBundle.getBundle("LRBDemo.SampleRBde", Locale.GERMAN); так rd = ResourceBundle.getBundle("SampleRBde", Locale.GERMAN);, то есть убираю пакет классов, то получаю на выводе:
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name SampleRB, locale ru_RU
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:773)
at LRBDemo.LRBDemo.main(LRBDemo.java:9)
Структура моего проекта:
Буду благодарен за совет, как убрать ошибки и вывести наконец результат.
Ответ
1) Исправил индексы:
вместо
resources[1][0] = "StartText";
resources[2][1] = "Start";
так
resources[2][0] = "StartText";
resources[2][1] = "Start";
2)
public class LRBDemo {
public static void main(String[] args) {
// загрузить комплект ресурсов по умолчанию
ResourceBundle rd = ResourceBundle.getBundle("LRBDemo.SampleRB");
System.out.println("Английская версия программы: ");
System.out.println("Строка по ключу Title: " + rd.getString("title"));
System.out.println("Строка по ключу StopText: " + rd.getString("StopText"));
System.out.println("Строка по ключу StartText: " + rd.getString("StartText"));
// загрузить комплект ресурсов для поддержки немецкого языка
rd = ResourceBundle.getBundle("LRBDemo.SampleRBde", Locale.GERMAN);
System.out.println("
Немецкая версия программы: ");
System.out.println("Строка для ключа Title: " + rd.getString("title"));
System.out.println("Строка по ключу StopText: " + rd.getString("StopText"));
System.out.println("Строка по ключу StartText: " + rd.getString("StartText"));
}
}
или
public class LRBDemo {
public static void main(String[] args) {
// загрузить комплект ресурсов по умолчанию
ResourceBundle rd = ResourceBundle.getBundle(SampleRB.class.getName());
System.out.println("Английская версия программы: ");
System.out.println("Строка по ключу Title: " + rd.getString("title"));
System.out.println("Строка по ключу StopText: " + rd.getString("StopText"));
System.out.println("Строка по ключу StartText: " + rd.getString("StartText"));
// загрузить комплект ресурсов для поддержки немецкого языка
rd = ResourceBundle.getBundle(SampleRBde.class.getName());
System.out.println("
Немецкая версия программы: ");
System.out.println("Строка для ключа Title: " + rd.getString("title"));
System.out.println("Строка по ключу StopText: " + rd.getString("StopText"));
System.out.println("Строка по ключу StartText: " + rd.getString("StartText"));
}
}
Комментариев нет:
Отправить комментарий