Локализация. Часть 1: Введение для начинающего локализатора и программы для Android.
Данный пост начинает серию статей о локализации ПО. Будь то программа для Android, ПК или плагин для wordpress. Можете написать в комментариях, если что ещё нужно охватить. Попробую рассказать о том, что знаю и чем пользуюсь. Для меня это всего лишь хобби, чем занимаюсь только по желанию и в свободное время. В своё время я начинал русификацию с модов и хаков для известного форумного движка vbulletin. Сейчас конкретно этим не занимаюсь, но есть и другие проекты: некоторое время занимался локализацией прошивок для Samsung Galaxy Mini ещё на 2.3, также имею некоторый опыт по обычным приложениям и программам для ПК. С маком и айфоном не работал. Хотя второй имеется.
Но прежде чем писать собственно о процессе локализации, хочу предупредить будущего локализатора о том, что взявшись за русификцию того или иного ПО, слезть с неё будет сложновато, к примеру если ваша локализация не имеет альтернатив. Люди будут ждать и просить по мере выхода новых версии программ. Каждый сам решает для себя. Несколько сумбурно написал, но думаю мысль понятна.
Начнём пожалуй с первой буквы алфавита. Разберём программу для Android и добавим русский язык. Локализацию для Android приложений выполнить можно и шаблонными редакторами, такими как sisulizer и radialix, а также спец софтом, но тут мы будем делать это почти вручную для более полного понимания. Я всегда предпочитаю этот способ для Android.
Нам понадобятся программы Batch ApkTool, Araxis Merge и любой правильный редактор (Я использую Notepad++). Устанавливаем их. Первая нужна для декомпиляции приложения, а вторая для сравнения строк. Потом поймёте зачем. В другой статье я рассмотрю локализацию самой программы Araxis Merge. В России я видимо один, кто делает локализацию для неё уже несколько лет.
Обычные программы.
Итак, начнём. Для примера я возьму маленькую программу DiskInfo, перевод я сделал для неё не так давно, отправил автору и теперь он интегрирован туда по умолчанию.
Качаем Batch ApkTool, распаковываем его куда удобнее. Закидываем apk-файл DiskInfo в папку _INPUT_APK. Запускаем BatchApkTool.exe. Выбираем пункт 1.
Открываем папку _INPUT_APK\DiskInfo\res - тут и живут у нас файлы ресурсов программы. Нам нужны папки values - они и содержат собственно строки с текстом и другие параметры. Папка values содержит строки, которые используются по умолчанию, values-ru - русский язык, values-uk - соответственно украинский и т.п. Иногда этих папок нет и в наличии только одна values.
Откроем папку values-ru и посмотрим, что она содержит. В наличии только файл string.xml - он содержит строки. Откроем его в Notepad++ и видим какой-то куцый текст. Я в таком случае просто удаляю содержимое папки values-ru, потом копирую все файлы из папки values в неё.
Особенности локализации Android программ в том, что если в файлах локализации вашего языка отсутствует какой-то текст, то будет использован текст из соответствующего файла в папке values. То есть программа может быть частично на русском, к примеру, частично на английском. Если вы хотите облегчить программу, то можете удалить папки с локализацией, которые вам не нужны.
Теперь можно открывать скопированные xml файлы из values-ru, искать текст и делать перевод. Но я делаю по другому: открываем Araxis Merge и выбираем сравнение папок. Сравнение производим между values и values-ru.
Открываем файлы и ищем в них текст, используемый в программе. Файлы, где перевода нет, можно безболезненно удалить. В данном случае у нас останутся только файлы arrays.xml (тут живёт перевод текста выпадающего списка, например выбора темы оформления) и основного файла со строками - strings.xml.
Открываем arrays.xml (щелкаем по нему пару раз) в окне сравнения папок и делаем перевод. После закрываем сравнение этого файла и при запросе сохранения - соглашаемся:
Также поступаем и со strings.xml. Сохраняем:
Бывает и так, что локализация находится в файлах smali, а не только/или в values, в таком случае ищите в поиске по файлам определенный текст и переводите. Это очень неудобно и в таком случае локализация будет только на одном языке - вашем. В выше рассмотренном варианте локализация выбирается автоматически при переключении языка в настройках устройства. Имейте это в виду.
После сохранения локализованных вами файлов компилируйте apk в Batch ApkTool - пункт 3.
Отдельно стоит написать по подпись (пункт 89 в Batch ApkTool, далее инфа с форума):
Подпись в APK-файлах - это несколько файлов, находящихся в каталоге META-INF внутри APK
Задача подписи в том, чтобы система могла проверить целостность и подлинность APK во время установки. Для проверки целостности используется файл сигнатур (SF-файл), в котором содержится список всех файлов, содержащихся в APK и их контрольные суммы. Для проверки подлинности используется сертификат (RSA, DSA или EC-файл), связанный с SF-файлом всякими магическими штуками.
Логично предположить, что если изменить, добавить или удалить любой файл внутри APK, то при установке этого APK проверка целостности пройдена не будет, и приложение не установится. Причем, подпись в APK остается оригинальной, но толку с нее нет, поскольку она становится невалидной.
Для того, чтобы приложение вновь стало устанавливаться, его нужно переподписать. Ключ для подписи можно сделать персональный, но обычно для подписи используют публичные ключи, которые можно найти в интернете. В BAT используется один из таких ключей.
Итак, наш APK, в который мы внесли изменения и тем самым "сломали" оригинальную подпись, можно подписать этим публичным ключем, старая невалидная подпись удалится, сверху запишется новая, и приложение снова будет устанавливаться.
Но не поверх оригинального приложения! При установке поверх уже установленного оригинального приложения срабатывает проверка подлинности, которая определяет, что подписи оригинального и модифицированного приложения не совпадают. При этом, оно нормально будет устанавливаться поверх приложения, подписанной этим же публичным ключем. То есть перед установкой вашего локализованного приложения удалите оригинальную программу.
Системные программы.
Рассмотрим теперь локализацию системных приложений: настройки Android, звонилка, шторка и другие - это такие же программы, как и те, что вы устанавливаете из маркета или вручную. Но они являются системными и находятся в прошивке. Живут обычно в system/app и system/priv-app, а также в framework. Могут и в других местах встречатся. Как выдернуть их из прошивки - надеюсь найдёте. Бывает что прошивка для устройства не содержит русского и вы хотите исправить эту проблему или вам просто не нравится перевод и вы хотите его поправить. Сразу скажу - это долгий процесс и очень много строк. Особенно если прошивка содержит целую кучу настроек-твиков, как было у меня тут. С месяц я потихоньку делал перевод вечерами, так как сам владел этим телефоном и использовал эту прошивку ежедневно....
Для локализации системных приложений нужно отключить подпись в Batch ApkTool (пункт 89) и закинуть framework-res.apk в папку _framework в папке с BAT. Это делается для того, что иногда приложения из прошивки требуют его и не компилируются/декомпилируются. Бывают и другие проблемы, когда например при локализации MIUI требуется miui.apk и miuisystem.apk. Их также требуется поместить в папку с framework-res.apk. Лучше сначала ещё до локализации попробуйте декомпилировать программу и сразу (без изменений) её скомпилировать обратно. Если ошибок нет - тогда и делать перевод. Сами файлы framework также содержат ресурсы для перевода. Не забывайте об этом!
На этом пока всё. Если что не понятно - пишите в комментариях, я дополню пост или просто отвечу.