|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
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 |
|
|
На то она и консоль. Перенаправьте вывод в файл:
_________________ Не знала Настя, где зад, где перёд. Показали - разобралась. |
|
|
|
 |
Louis : 222 Новичок
|
Июн 28, 2008 15:33 |
|
|
| Marbo писал(а): |
На то она и консоль. Перенаправьте вывод в файл:
|
ээээээ
А если я хочу все же на экран??
тогда непонимаю смыла 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 |
|
|
|
 |
Louis : 222 Новичок
|
Июн 28, 2008 21:08 |
|
|
2 шкипер:
в книжке так написано)))
| Цитата: |
| Да, я в прошлый раз хотел написать да забыл - вы же неправильно текст в properties пишите. |
,
А как правильно?? |
|
|
|
 |
шкипер : 1960 Java Developer Откуда: Харьков
|
Июн 28, 2008 22:33 |
|
|
| Louis писал(а): |
2 шкипер:
в книжке так написано))) |
Имя автора в студию!
| Louis писал(а): |
| Цитата: |
| Да, я в прошлый раз хотел написать да забыл - вы же неправильно текст в properties пишите. |
,
А как правильно?? |
nazica уже в принципе написал.
Растолкую детали.
Ява все строки хранит в юникоде. Если строка почему-либо не в юникоде - значит она была неправильно прочитана или при компиляции не была указана правильная кодировка или ещё какая ошибка. И исправлять надо эту причину, а не заниматься глупостями типа getBytes. Автору книжни пять лет расстрела
Теперь о самих файлах properties. Для того, что бы не было проблем с морем кодировок, решено что в файлах используется кодировка ASCII, а все символы, не попадающие в этот набор обозначаются стандартным для явы способом \u0000. Поскольку вручную перекодировать напряжно, создата консольная утилита native2ascii, которая умеет как превращать текст из любой кодировки в вариант, принятый для properties, так и делать обратное преобразование.
Тоесть вам перед сборкой/запуском проекта надо выполнить
| Код: |
| native2ascii -encoding <ваша_кодировка> <исходный_файл> <целевой_файл> |
Update: поправил кодировку _________________
aka ur6lad |
|
|
|
 |
Louis : 222 Новичок
|
Июл 10, 2008 0:46 |
|
|
| шкипер писал(а): |
| Louis писал(а): |
2 шкипер:
в книжке так написано))) |
Имя автора в студию!
| Louis писал(а): |
| Цитата: |
| Да, я в прошлый раз хотел написать да забыл - вы же неправильно текст в properties пишите. |
,
А как правильно?? |
nazica уже в принципе написал.
Растолкую детали.
Ява все строки хранит в юникоде. Если строка почему-либо не в юникоде - значит она была неправильно прочитана или при компиляции не была указана правильная кодировка или ещё какая ошибка. И исправлять надо эту причину, а не заниматься глупостями типа getBytes. Автору книжни пять лет расстрела
Теперь о самих файлах 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  _________________
aka ur6lad |
|
|
|
 |
|
|
Страница 1 из 2 На страницу 1, 2 След. |
Список форумов
-> Локализация (l10n & i18n) |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|