категории | RSS

Руссификация ява-приложений
Частенько бывает такое - имеется интересное ява-приложение (игра), оно вам нравится, но там всё непонятно (на английском или другом иностранном языке), а как хотелось бы по-русски. Иногда поиски бывают успешные и находится русская версия программы. А если нет? Конечно можно поканючить на форуме, вдруг кто переведёт. А ведь ява-приложения переводятся не на небесах и вам самим вполне по силам сделать это.
Рассматриваемый способ не гарантирует 100% возможность перевода, т.к. затрагивает лишь вариант когда все текстовые ресурсы ява-мидлета располагаются в файлах class. Впрочем таковых большинство.
В качестве примера возьмём ява-приложение Compass 4.1(автор Dana Peters, приложение бесплатное, по лицензии GNU General Public License, т.е. его исходный код может изменять любой желающий). В оригинале мидлет английский, переведём это полезное приложение на русский.
1. Инструментарий для работы
Для перевода ява-приложений нам понадобится несколько программ:
- архиватор-разархиватор (например WinRAR, но можно и любой другой, умеющий работать с zip-архивами);
- программа для работы с текстами в файлах class (например InClassTranslator или Mobitrans за авторством [wl],- для непосредственно перевода текстов опционально можно воспользоваться любым переводчиком, в т.ч. и онлайновым, или бумажным словарём.
2. Разархивирование ресурсов ява-приложения
Прежде всего треубется разархивировать все ресурсы ява-приложения. Сейчас я открою великую тайну (шёпотом) - ява-приложение (его основной файл jar) на самом деле является... обыкновенным zip-архивом! Поэтому просто поменяйте расширение jar на zip и открывайте файл в любом архиваторе (да хотя бы в WinRAR). Внутри файла jar вы увидите различные файлы и папки. Разархивируйте их (все) в какую либо папку и изучите содержимое на предмет наличия файлов с расширением class. Чаще всего текстовые ресурсы находятся в них.
Разархивировав compass.jar вы увидете файлы ".timestamp", "a.class", "Compass.png" и папки "henson", "META-INF", "org" (внутри этих папок ещё куча вложенных подпапок и файлов, их перечислять не буду).
3. Перевод текстов
Запускаем In Class Translator. Окно программы разбито на три области. В первой (вертикальная колонка слева) будут отображаться все текстовые строки из файла class, во второй (верхнее окно справа) отбражается краткая справка по работе с программой (после открытия файла class там будет показан полный текст выбранной строки), в третьей (нижнее окно слева) пишем перевод.
Нажимаем "File - Open", выбираем любой файл с расширением class (из разархивированных ресурсов ява приложения). Если в данном файле нет текстовых строк, программа сообщит об этом "Where is no strings in file" (тогда открывайте следующий файл class). В колонке слева вы увидите все текстовые ресурсы, хранящиеся в данном class-файле (для примера на рис. 2 показано содержимое файла a.class из ресурсов compass.jar). Выделяем мышкой любой из них, он появится в правом верхнем окне.
Затем переводим его любым доступным способом и пишем перевод в правом нижнем окне.
Снова тыкаем мышкой в левую колонку и нажимаем значок "Сохранить". Переведённый текст отобразится в колонке слева вместо оригинального.
И так последовательно переводим все тексты из данного файла class. Затем открываем другой файл class и т.д. пока не переберёте все "классы" из ресурсов ява-приложения.
4. Запаковка ресурсов в архив и тестирование
По окончании перевода файлов class запаковываем все файлы ява-приложения обратно в zip-архив (с сохранением структуры файлов, какой она была в оригинале). Меняем расширение с zip на jar. Записываем ява-мидлет в телефон, инсталлируем и проверяем как смотрится ваш перевод. Если всё устраивает, радуемся, если какие-либо надписи "съехали", повторяем процедуру перевода и делаем проблемные надписи короче.
5. Если что-то пошло не так
Переведя указанный Compass я был несколько удивлён тем что мидлет отказывается запускаться. Изучение сообщения об ошибке и метод тыка позволили определить, что это происходит если перевести символ "s" (в файле a.class). Пришлось стороны света "n, s, w, e" оставить без перевода. Почему так произошло я не знаю. Общее правило такое - если после перевода мидлет не работает, значит вы где-то хватили лишнего и перевели то, что переводить было нельзя. Как узнать где переводить не стоило? К сожалению здесь никаких рекомендаций дать невозможно -только метод тыка и изучение сообщений об ошибках (возможно они подскажут в каком class-файле искать проблему). Можно пойти другим путём -после перевода каждого class запаковывать файлы в jar и каждый раз проверять работу мидлета. Это долго, но зато надёжно и вы наверняка будете знать в каком class находится ошибка.
P.S. Просто не означает легко - полноценный перевод приложения это довольно долгая и монотонная работа. Файлов сlass может быть довольно много. Да и по окончании перевода придётся исправлять ошибки, укорачивать неумещающиеся фразы и т.
------
статья взята из mod-box.
P.s. Если вы это умеете проходите мимо. Дайте и новичкам научиться



Источник новости: klubok.fteme.ru

DimonVideo
2010-02-24T10:42:15Z
Здесь находятся
всего 0. За сутки здесь было 0 человек

Комментарии 7

#7   Primser    

Что-то вроде Carbide.


0 ответить

#7   Muslim27    

darkadich
Для кодировки нужна другая программа. Mobile php. Как я ранее говорил в разных играх разные места. Стоит заметить есть такие игры что не возможно перевести по требованию разработчиков


0 ответить

#7   darkadich    

Хотелось бы более подробную инфо по этой теме. Сегодня разобрал 3 ява-приложения. В одном языковой ресурс находится в картинках, в другом - в отдельном файле text.bin, а в третьем - в файлах без расширения. Пытался перевести bin-файл hex-редактором, на выходе получил кракозябры. Как бороться с кодировками? И потом, там есть какая-то фишка с заменой шрифтов: в чём её суть?


0 ответить

#7   Muslim27    

darkadich
необходимо в таком случае менять картинки. То есть перерисовывать


0 ответить

#7   darkadich    

А что, если ресурсы находятся не в классах? Ведь зачастую в ява-играх тексты содержатся в картинках.


0 ответить

#7   Muslim27    

макс1983
Делается тем же способом.


0 ответить

#7   макс1983    

а вот если \\"жабка\\" например на японском языке?


0 ответить

Яндекс.Метрика