Статистика |
Онлайн всего: 1 Гостей: 1 Пользователей: 0 |
|
|
Каталог файлов |
APK Manager
| 02.09.2011, 21:40 |
Нам понадобятся: Java и Apk manager. Java качаем отсюда http://www.oracle.com/technetwork/java/javase/downloads/jdk6-jsp-136632.html Apk Manager http://narod.ru/disk/23866283001/APKMAnagerRUS.rar.html
Главной особенностью этой версии есть то, что она переведена на русский и
теперь ей пользоваться стало ещё проще. Но я всё же покажу вам как
русифицировать или изменить нужное приложение.
0) Убеждаемся что всё установлено. Все события будут происходить в папке с разархивированным Apk Manager'ом! 1) Копируем нужное приложение в папку /place-apk-here-for-modding 2) Запускаем Script.bat и видим вот такую картину:
Вводим цифру нужного приложения и нажимаем Enter 3) Появятся кучу вариантов действий, не пугаемся, выбираем пункт 9 (Декомпиляция) 4) Идём в папку /projects и находим папку с нужным приложением. Заходим в папку projects\Ваше приложение.apk\res\values и ищем там файл strings.xml Создаем папку projects\Ваше приложение.apk\res\values-ru и копируем туда наш strings.xml Для
редактирования советую Notepad++, и не в коем случае всякие "редакторы"
типа aiLocalizer, они дописывают кучу мусора в исходный файл и из-за
этого он и следовательно программа "толстеет" Примечание: иногда перевод может находится не только в файле strings.xml, но и в arrays.xml,
например. Ну а в особо запущенных случаях (laucnher pro) часть
локализации может находится в smali коде, о нём сейчас не будем. 5) После редактирования в том же Apk Manager'e выбираем пункт 11. И тут мы видим следующее:
Не пугаемся, так как мы редактировали не системное (не системное ж?!) приложение, то пишем букву n и нажимаем enter 6) Теперь осталось подписать приложение, тут всё просто. Выбираем 12 пункт. 7) Если у вас прописан в PATH путь к ADB то можно установить сразу приложение выбрав 13 пункт, или же сразу от компилирования до установки пунктом 14.
Забыл сказать, готовое приложение находится по адресу /place-apk-here-for-modding/signedваше_приложение.apk
Надеюсь это подтолкнёт новичков к такому благородному делу, как локализация!
-----Ответы на вопросы----- В: Сделал всё как написано, но при установке ошибка, что не так? О: Данное приложение уже было установлено? Тогда надо его удалить вместе с данными перед установкой модифицированного. -- В: В какой кодировки сохранять редактируемые файлы? О: UTF-8, если используете NotePad++ смотрите тут. -- В: Ошибка при сборке: "No resource identifier found for attribute 'xlargeScreens' in package 'android'", что не так? О (Лучший вариант): Обновить Apktool по ссылке: http://android-apktool.googlecode.com/file...ol1.4.1.tar.bz2 О (Простой вариант): Удалить из AndroidManifest.xml параметр xlargeScreens После этого выполнить команду в консоли:
del /F /Q "%UserProfile%\apktool\framework\1.apk" Сведения для перевода приложений
В большинстве случаев нужный нам для перевода текст содержится в папке "values", в файле "strings.xml". Поэтому создаем папку "values-ru", кидаем в нее копию "strings.xml", открываем "strings.xml" с помощью "Notepad++", проверяем кодировку (должна быть UTF-8 (без BOM)) и далее переводим наздоровье. Иногда при переводе, в предложениях можно встретить такое: \n.
Это означает переход на новую строку (аналог нажатия "Enter" в Word),
т.е. предложение начнется с новой строки. Если попадается \n\n, следовательно, между предложениями будет пустая строчка. Удаление \n или \n\n
из строк по идее никак не должно отражаться на сборке apk (у меня
ниразу не было). Если нужно, чтобы в тексте (русском или любом другом)
отображались кавычки "" или '', перед каждой кавычкой нужно поставить \ В противном случае ваш apk при сборке будет выдавать ошибку. После того как мы закинули "strings.xml" с переводом в папку "values-ru", эту папку помещаем рядом с папкой "values" в разобранном apk. Далее производим сборку файла.
В некоторых программах используются выпадающие меню. Так вот чаще всего содержимое этих меню находится в файле "arrays.xml". Процедура перевода этого файла идентична описанной выше. Этот файлик по окончании перевода также кидаем в папку "values-ru".
Собственно на этом с типичным и правильным с рациональной точки зрения
переводом закончим. Далее речь пойдет, на мой взгляд, об извращенствах и
ухищрениях.
Пример №1.1 В одной из программ Хелпник для программы разработчик запихнул в папку "layout", в файл "help.xml". Я с ним поступил так: создал папку "layout-ru", в нее скопировал файл "help.xml", открыл этот файл в "Notepad++", проверил кодировку (должна быть UTF-8 (без BOM)), вызвал окно поиска (Ctrl+F), в строку поиска ввел слово text и нажимал кнопку "Искать далее", пока не нашел фразу android:text= Это то, что нам нужно. Далее, если после фразы android:text= идет что-то типа "@string/...........", эту штуку не трогаем, т.к. это ссылка на строку в файле "strings.xml". Если после фразы android:text= идет текст на английском в кавычках ("........................") - это наш текст, его и переводим, но только то, что в кавычках. Вообще, как показала практика, лучше всего закинуть в "Notepad++" все файлы из папки "layout" и проверить в них по поиску наличие фраз android:text="..................."
Пример №1.2 В одной из программ, пункты меню настроек (поля с названиями и описаниями настроек) разработчик запихнул не в папку "values", в файл "strings.xml", а в папку "layout", в файл "preferences.xml". С этим файлом пришлось поступить также, как описано в примере №1.1, но с одной разницей: нужный для перевода текст находился почему-то не во фразе android:text=, а во фразах android:title= и android:summary=. И выглядел как android:title=" ХХХХХХ " и android:summary="ХХХХХХ", где "ХХХХХХ" нужный нам текст. Фраза android:text= в данном файле вообще отсутствовала
Пример №2. В одной из программ разработчик запихнул в папку "layout", некий файл "main.xml", а в папку "layout-land" такой же файл "main.xml" Весь прикол в том, что в обоих папках файл "main.xml" был одинаковым и содержал нужные фразы для перевода android:text="..................." Пришлось создать папки "layout-ru" и "layout-land-ru" и в них закинуть переведенный файл "main.xml" Спросите, в чем была разница - да фиг его знает, все заработало.
Пример №3 (про smali-файлы) Про эти smali-файлы можно целый трактат написать, поэтому попробую короче. Оговорюсь сразу: 1. Я не встретил еще ни одной программы, где бы в smali-файлах отсутствовали слова или предложения для перевода 2. При переводе smali создание папок с префиксом -ru не прокатывает. Поэтому приходится брать "родные" файлы и делать изменения в них, а потом подставлять их в исходник.
Далее привожу алгоритм, как я переводил эти smali. В распакованном apk нахожу папку smali, захожу в нее и нахожу папки с файлами .smali. Копирую эти папки в отдельную папку. Далее захожу в одну из скопированных папок, выбираю все файлы smali и открываю их в "Notepad++". Вызываю окно поиска (Ctrl+F), в строку поиска ввожу фразу const-string v и по ней осуществляю поиск. Если по поиску фраза const-string v не находится, смело удаляю этот файл из папки. Если же по поиску фраза const-string v нашлась, она будет представлять из себя const-string vХХ, "YYYYYYY", где ХХ это число, а "YYYYYYYY" это нужный нам текст. Изначально все smali-файлы открытые в "Notepad++" имеют кодировку ANSI. Чтобы перевод корректно отображался в дальнейшем, сначала меняем кодировку файла на UTF-8 (без BOM) и только потом в строку "YYYYYYYY" вставляем перевевод и жмем "Сохранить".
Теперь про текст. Обычно "YYYYYYYY" может быть словом (например, const-string v6, "Speed"), фразой (например, const-string v6, "Could not find file "), символами (например, const-string v12, "%d"), числами (например, const-string v7, "-1"), ссылками (например, const-string v0, "content://telephony/carriers/") или даже просто пробелом (например, const-string v2, " ").
Далее все зависит от контекста. В большинстве случаев, текст, который
нужно перевести, начинается с заглавной буквы, не имеет сокращений
(например, const-string v2, "yyyyMMddHHmmss" - в действительности для перевода фраза была такой const-string v2, "YYYY-MM-DD-HH-MMSS") и без нижнего подчеркивания (например, const-string v6, "speed_units" - в действительности для перевода фраза была такой const-string v6, "Speed units"). Иногда в "YYYYYYYY"
могут попадаться большие куски текста (например, Хелпник), но это
редкость. Еще попадаются слова, которые начинаются с маленькой буквы.
Вот тут нужно смотреть контекст, т.к. это слово может быть для перевода,
а может быть параметром для какой-то строки и его переводить не нужно. Например, попалось const-string v5, "Publisher ID read from AndroidManifest.xml is ",
с первого взгляда нужно перевести, а оказалось, что эта фраза к
интерфейсу пользователя программы вообще никакого отношения не имеет
Несколько раз попадались составные предложения для перевода. Например, начинается все в строке const-string v2, "Logs PhotoVault (" далее из какой-то другой строки подставляется название этого лог-файла, а заканчивается это все уже на другой строке const-string v2, ")" Некоторые разработчики программ в smali помещают названия кнопок, а чаще всего сервисные сообщения (например, которые отображаются в различных всплывающих окнах).
По окончании перевода в smali-файлах, заменяем этими файлами "родные" файлы и собираем apk.
Вот вроде пока все, что пришло на ум. Надеюсь, мой труд кому-нибудь поможет. Удачи в переводах
|
Категория: Системные | Добавил: Elmonolit
|
Просмотров: 18368 | Загрузок: 0
| Рейтинг: 4.0/7 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
|
|
|