Есть достаточно много приложений, которые не имеют русской локализации. Как правило, это не вызывает дискомфорта для знающих английский язык (хотя бы поверхностно). Но что делать тем, кто в иностранных языках совершенно не силён? Или если приложение имеет только один язык, алфавит которого состоит из иероглифов и прочих нечитаемых крякозябр? Некоторые выходят из таких проблем, щёлкая по пунктам в приложениях, словно пальцем в небо. Но согласитесь, нелокализированное приложение вообще не смотрится на устройствах лингвистических приверед родного языка.
Да, существуют иные выходы: скачать из сети то или иное приложение, требующее перевода, в нашем случае — для русскоговорящих. Но и здесь не без проблем. Те, кто устанавливал приложения с пользовательскими переводами, могли лицезреть не только результат работы переводчика, но и его грамматические ошибки, которые порой не просто бесят, а выводят из себя! Но всё же, речь не об этом.
В этой инструкции я постарался описать многие нюансы перевода приложений, чтобы Вы тоже понимали, с чем работаете. К сожалению, эта инструкция не подходит для перевода игр и системных приложений, но в скором времени постараюсь подготовить инструкцию по переводу системных приложений, а также прошивок, в которых отсутствует русский язык.
Что у Вас должно быть:
- Письменная грамотность (если Ваш перевод не увидит весь мир, то не берите это в голову).
- Утилита APKTool (последнюю версию можно всегда найти здесь).
- Утилита Sign+.
- Текстовый редактор (скачиваем последнюю версию Notepad++ отсюда).
- Нелоказированное приложение или уже переведенное, но с огромным, просто неимоверным количеством орфографических и пунктуационных ошибок.
- Терпение и внимательность (строк для перевода может быть “ну очень много”).
Если вышеперечисленные пункты уже имеются, тогда приступим.
Описанные манипуляции проводились на Windows.
Поехали!
1. Распаковываем APKTool и рядом с ним располагаем непереведённое приложение (лучше все это добро поместить в корень диска C:\).
2. Запускаем командную строку (“Пуск”—”Выполнить”—”cmd”) и вводим:
- cd C:\
- apktool d название_приложения.apk
Всё должно выглядеть примерно так:
- cd C:\
- apktool d com.pixlr.express.apk
3. После декомпиляции в APKTool заходим в только что созданную папку, которая назвается так же, как и само приложение. Папка “res” содержит ресурсы приложения, она нам и нужна. Зайдя в неё, мы видим определенное количество папок. Папки, которые начинаются с “values-xx” имеют в себе файлы с языковыми строками (values-en для английского языка, values-ru — для русского), а папка “values” — стандартный, базовый, так сказать, перевод. Если не будет хватать строк локализации в одном из файлов, содержащемся в папке “values-xx”, то приложение будет обращаться к стандартному языку, который лежит в “values”. Поэтому лучше не делать перевод поверх стандартного. Также, когда будет выбран русский язык в прошивке, приложение будет загружать языковой пакет из папки “values-ru”. Если у приложения нет русской локализации, то система будет загружать язык из папки “values”. Надеюсь, Вы меня поняли.
4.:
- Для тех, кто дополняет перевод или его исправляет: ничего не делаем, пропускаем пункт.
- Для тех, кто переводит с нуля: создаем папку “values-ru”, копируем файлы “arrays.xml”, “plurals.xml”, “strings.xml” из папки “values” в папку “values-ru”.
5. Открываем редактор и настраиваем его кодировку, а то у нас приложение не скомпилируется. В окне Notepad++ выбираем “Кодировки” и пункт “Кодировать в UTF-8”. В дальнейшем до каждого сохранения изменённых файлов проверяйте этот очень важный параметр.
6. Открываем в редакторе один из файлов локализации. Примерная структура строк в файлах “arrays.xml”, “plurals.xml”, “strings.xml” такова:
- arrays.xml: абвгдеёжзий
- plurals.xml: клмнопрстуф
- strings.xml: хцчшщъыьэюя
Там где выделено красным — строка, которую Вы можете править. Будьте внимательными, так как, если Вы по ошибке удалите начало или конец одного из тегов, декомпилированное приложение не будет собрано! Примеры правильного закрытия тега “:”, “,” и т.д.
7. Переводим. Пользуйтесь переводчиками, руководствуйтесь словарями и т.д.
8. Сохраняем все изменения (проверьте кодировку!) и, открыв командную строку, пишем:
- apktool b название_папки
Например:
- apktool b com.pixlr.express
Приложение скомпилировалось в папке “dist“, она расположена внутри папки, что создавалась при декомпилировании приложения.
9. После компиляции APKTool ничего не подписывает, а подпись нужна для установки приложения. Файлы подписи находятся в папке “META-INF” внутри приложения. Поэтому, нам остаётся всё это дело подписать.
Распаковываем куда угодно утилиту Sign+ и открываем её. Перетягиваем наше собранное приложение из папки “dist” в окно утилиты для подписи и нажимаем в окне на “Sign files”. В той папке, в которой находится наше переведённое приложение, появится новый архив, в названии которого содержится “_signed” — это и есть подписанное приложение.
Частые проблемы с использованием APKTool:
- Некоторые несистемные приложения ни в какую не будут разбираться. Это не оплошность APKTool, а хорошо защищённое от таких, как “мы с Вами”, скомпилированное приложение разработчика. Некоторые не уважают девелоперов приложений, т.е., при переводе везде заменяют копирайт разработчика на свой, а потом представляют псевдо-свои приложения сети, это не есть хорошо!
- При компилировании приложения могут возникать ошибки. APKTool всегда сообщает, в каком файле и в какой строке допущена ошибка. Несколько примеров:
- C:\\1\res\values\styles.xml:40: error: Error parsing XML: not well-formed
“C:\\1\res\values\styles.xml” — расположение файла, в котором допущена ошибка.
“40” — строка, где была допущена ошибка.
“Error parsing XML: not well-formed ” — Вы случайно удалили либо конец класса, либо его начало.
- C:\\1\res\values\styles.xml:40: error: Resource entry “Example” already has bag item android:windowBackground.
- C:\\1\res\values\styles.xml:39: Originally defined here
(я использовал “Example” только для примера).
“C:\\1\res\values\styles.xml” — расположение файла, в котором допущена ошибка.
“40” — строка, где была допущена ошибка.
“Resource entry “Example” already has bag item” — Атрибут “Example” уже содержит необходимый параметр на другой строке. А повтор на этой строке не нужен.
“C:\\1\res\values\styles.xml:39: Originally defined here” — расположение файла, в котором уже содержится атрибут для “Example”, и он находится на 39 строке.
Нет ничего сложного. Главное — будьте внимательными и запаситесь терпением. Удачи!