Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Немогу создать ResourceBundle
Список форумов
 ->  Локализация (l10n & i18n)


На страницу 1, 2  След. 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
Louis : 222
Новичок

СообщениеИюн 27, 2008 22:47 
Ответить с цитатой
Код:
Locale current = Locale.getDefault();
ResourceBundle rb = ResourceBundle.getBundle("text", current);


файл text.properties находится в оном паекете с классом Main и имеет вид:
Цитата:
str1 = Привет!
str2 = Здарова!


при запуске получаю:
Цитата:
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name text, locale ru_RU


Что не так??
К началу Посмотреть профиль Отправить личное сообщение
шкипер : 1960
Java Developer
Откуда: Харьков

СообщениеИюн 27, 2008 23:31 
Ответить с цитатой
Подозреваю, что main-класс находится в пакете? А ресурс то вы указываете без имени пакета, и ищется он на самом верху иерархии classpath.

Если вы создаёте класс this.package.has.a.cool.name.BlahBlahBlah и кладёте рядом файл blah.properties, то при его загрузке вы должны обращаться по полному имени
Код:
ResourceBundle.getBundle("this.package.has.a.cool.name.blah"...

_________________

aka ur6lad
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Louis : 222
Новичок

СообщениеИюн 27, 2008 23:45 
Ответить с цитатой
шкипер писал(а):
Подозреваю, что main-класс находится в пакете? А ресурс то вы указываете без имени пакета, и ищется он на самом верху иерархии classpath.

Если вы создаёте класс this.package.has.a.cool.name.BlahBlahBlah и кладёте рядом файл blah.properties, то при его загрузке вы должны обращаться по полному имени
Код:
ResourceBundle.getBundle("this.package.has.a.cool.name.blah"...



Вы правы! Спасибо
К началу Посмотреть профиль Отправить личное сообщение
Louis : 222
Новичок

СообщениеИюн 28, 2008 14:54 
Ответить с цитатой
Создать - создал..

а вот вывести:

Код:
String st = rb.getString("start");
String menu = new String(st.getBytes("ISO-8859-1"), "UTF-8");
System.out.println(menu);


Ангийский текст выводит нормально

а русский -
Цитата:
C?????? ??????? ?????????????-?????????
К началу Посмотреть профиль Отправить личное сообщение
Marbo : 1179
Java Developer
Откуда: Украина, Одесса

СообщениеИюн 28, 2008 15:24 
Ответить с цитатой
На то она и консоль. Перенаправьте вывод в файл:
Код:
java Tratata >1.txt

_________________
Не знала Настя, где зад, где перёд. Показали - разобралась.
К началу Посмотреть профиль Отправить личное сообщение Отправить e-mail
Louis : 222
Новичок

СообщениеИюн 28, 2008 15:33 
Ответить с цитатой
Marbo писал(а):
На то она и консоль. Перенаправьте вывод в файл:
Код:
java Tratata >1.txt


ээээээ

А если я хочу все же на экран??

тогда непонимаю смыла RB
К началу Посмотреть профиль Отправить личное сообщение
шкипер : 1960
Java Developer
Откуда: Харьков

СообщениеИюн 28, 2008 18:05 
Ответить с цитатой
Louis писал(а):
Создать - создал..

а вот вывести:

Цитата:
String st = rb.getString("start");
String menu = new String(st.getBytes("ISO-8859-1"), "UTF-8");
System.out.println(menu);

Позвольте спросить, а нахрена эти извращения? Поскольку вы не первый, такой маразм явно где-то описан. Было бы интересно узнать - где?
_________________

aka ur6lad
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
шкипер : 1960
Java Developer
Откуда: Харьков

СообщениеИюн 28, 2008 18:09 
Ответить с цитатой
Да, я в прошлый раз хотел написать да забыл - вы же неправильно текст в properties пишите.
_________________

aka ur6lad
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
nazica : 1519
Администратор
Откуда: Donetsk, UA

СообщениеИюн 28, 2008 18:59 
Ответить с цитатой
попробуйте используя утилиту native2ascii (поищите в JAVA_HOME/bin) обработать ваши файлы локализации. В результате не-аски символы заменятся на \uXXXX.
_________________
Software and cathedrals are much the same - first we build them, then we pray
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
Louis : 222
Новичок

СообщениеИюн 28, 2008 21:08 
Ответить с цитатой
2 шкипер:

Embarassed в книжке так написано)))

Цитата:
Да, я в прошлый раз хотел написать да забыл - вы же неправильно текст в properties пишите.
,


А как правильно??
К началу Посмотреть профиль Отправить личное сообщение
шкипер : 1960
Java Developer
Откуда: Харьков

СообщениеИюн 28, 2008 22:33 
Ответить с цитатой
Louis писал(а):
2 шкипер:

Embarassed в книжке так написано)))

Имя автора в студию!

Louis писал(а):
Цитата:
Да, я в прошлый раз хотел написать да забыл - вы же неправильно текст в properties пишите.
,

А как правильно??

nazica уже в принципе написал.

Растолкую детали.

Ява все строки хранит в юникоде. Если строка почему-либо не в юникоде - значит она была неправильно прочитана или при компиляции не была указана правильная кодировка или ещё какая ошибка. И исправлять надо эту причину, а не заниматься глупостями типа getBytes. Автору книжни пять лет расстрела Laughing

Теперь о самих файлах properties. Для того, что бы не было проблем с морем кодировок, решено что в файлах используется кодировка ASCII, а все символы, не попадающие в этот набор обозначаются стандартным для явы способом \u0000. Поскольку вручную перекодировать напряжно, создата консольная утилита native2ascii, которая умеет как превращать текст из любой кодировки в вариант, принятый для properties, так и делать обратное преобразование.

Тоесть вам перед сборкой/запуском проекта надо выполнить
Код:
native2ascii -encoding <ваша_кодировка> <исходный_файл> <целевой_файл>


Update: поправил кодировку
_________________

aka ur6lad
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Louis : 222
Новичок

СообщениеИюл 10, 2008 0:46 
Ответить с цитатой
шкипер писал(а):
Louis писал(а):
2 шкипер:

Embarassed в книжке так написано)))

Имя автора в студию!

Louis писал(а):
Цитата:
Да, я в прошлый раз хотел написать да забыл - вы же неправильно текст в properties пишите.
,

А как правильно??

nazica уже в принципе написал.

Растолкую детали.

Ява все строки хранит в юникоде. Если строка почему-либо не в юникоде - значит она была неправильно прочитана или при компиляции не была указана правильная кодировка или ещё какая ошибка. И исправлять надо эту причину, а не заниматься глупостями типа getBytes. Автору книжни пять лет расстрела Laughing

Теперь о самих файлах properties. Для того, что бы не было проблем с морем кодировок, решено что в файлах используется кодировка ASCII, а все символы, не попадающие в этот набор обозначаются стандартным для явы способом \u0000. Поскольку вручную перекодировать напряжно, создата консольная утилита native2ascii, которая умеет как превращать текст из любой кодировки в вариант, принятый для properties, так и делать обратное преобразование.

Тоесть вам перед сборкой/запуском проекта надо выполнить
Код:
native2ascii -encoding <ваша_кодировка> <исходный_файл> <целевой_файл>


Update: поправил кодировку


файл properties написал.
лезу разбираться с native2ascii. Открываю свой properties фаром(до запуска native2ascii) и вот что я там вижу:

Цитата:
greeting = \u0421\u0438\u0441\u0442\u0435\u043C\u0430 \u0416\u0438\u043B\u0438\u0449\u043D\u043E-\u043A\u043E\u043C\u043C\u0443\u043D\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0445\u043E\u0437\u044F\u0439\u0441\u0442\u0432\u0430
logon = 1. \u0412\u043E\u0439\u0442\u0438
exit = 2. \u0412\u044B\u0445\u043E\u0434

login = \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043B\u043E\u0433\u0438\u043D:
password = \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043F\u0430\u0440\u043E\u043B\u044C:

make_claim = 1. \u041E\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0437\u0430\u044F\u0432\u043A\u0443.
look_claims = 2. \u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0437\u0430\u044F\u0432\u043A\u0438
customer_exit = 3. \u0412\u044B\u0445\u043E\u0434.

request_input_type_of_work = \u0412\u044B\u0431\u0435\u0440\u0435\u0442\u0438 \u0432\u0438\u0434 \u0440\u0430\u0431\u043E\u0442: [1 - \u044D\u043B\u0435\u043A\u0442\u0440\u0438\u043A\u0430. 2 - \u0441\u0442\u043E\u043B\u044F\u0440\u043D\u044B\u0435. 3 - \u0441\u0430\u043D\u0442\u0435\u0445\u043D\u0438\u0447\u0435\u0441\u043A\u0438\u0435. 4 - \u0434\u0440\u0443\u0433\u043E\u0435.]:
request_input_comment = \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043A\u043E\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439:


#request
request_nom = \u0417\u0430\u044F\u0432\u043A\u0430 \u2116
request_from = Id \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u0435\u043B\u044F:
request_type_of_work = \u0412\u0438\u0434 \u0440\u0430\u0431\u043E\u0442:
request_due_date = \u0414\u0430\u0442\u0430:
request_status = \u0421\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u044F\u0432\u043A\u0438:
request_comment = \u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E:
request_executor = Id \u0438\u0441\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044F:


Разве это не то что нужно?? (Файл создовал NetBeans-ом)
Призапуске получаю козявки на экране(((

2 Вопрос:

Код:
native2ascii -encoding <ваша_кодировка> <исходный_файл> <целевой_файл>


как узнать мою кодировку?
целовой файл - это то что получится после конверитации?
К началу Посмотреть профиль Отправить личное сообщение
шкипер : 1960
Java Developer
Откуда: Харьков

СообщениеИюл 10, 2008 8:49 
Ответить с цитатой
Louis писал(а):
Цитата:
logon = 1. \u0412\u043E\u0439\u0442\u0438

То.
Разве это не то что нужно??

Louis писал(а):
Призапуске получаю козявки на экране(((

Windows? Не знаю, будет ли для вас открытием то, что системная кодировка и кодировка консоли в это операционке отличаются? Потому для вывода текста на экран надо (только для этой операционки) перекрывать out новым экземпляром PrintStream с явно указанной кодировкой (в нашем случае это будет cp866). С вводом скорей всего та же фигня.
_________________

aka ur6lad
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Louis : 222
Новичок

СообщениеИюл 10, 2008 9:19 
Ответить с цитатой
Цитата:
Windows? Не знаю, будет ли для вас открытием то, что системная кодировка и кодировка консоли в это операционке отличаются?


Да Windows... На самом деле не знал(((

Цитата:
Потому для вывода текста на экран надо (только для этой операционки) перекрывать out новым экземпляром PrintStream с явно указанной кодировкой (в нашем случае это будет cp866). С вводом скорей всего та же фигня.


А можно пример?? не уверен что правильно понял....
К началу Посмотреть профиль Отправить личное сообщение
шкипер : 1960
Java Developer
Откуда: Харьков

СообщениеИюл 10, 2008 10:03 
Ответить с цитатой
Эх, я кажется сам тут пример кидал... но не найду....

One moment, please - 'm asking google Wink
_________________

aka ur6lad
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
 
Начать новую тему  Ответить на тему
Страница 1 из 2
На страницу 1, 2  След.
Список форумов
 -> Локализация (l10n & i18n)


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru