О плагине автоперевода
Плагины автоматического перевода поддерживаются начиная с версии 1.6.2, однако мы только сейчас открыли интерфейс для разработчиков. Для создания плагинов вы должны разработать автономное приложение, которое может получить запрос на перевод, выполнить его и затем возвратить результат. Вот простое описание того, как разработать плагин перевода.
Получение запроса на перевод
Мы передаём запрос перевода через TranslateItem, который определяется как:
package com.gmail.heagoo.apkeditor.translate;
import java.io.Serializable;
// ДОЛЖНО быть определено как здесь, не может быть proguarded
открытый класс TranslateItem использует Serializable {
private static final long serialVersionUID = -3101805950698159689L;
public String name;
public String originValue;
public String translatedValue;
public TranslateItem(String _n, String _o) {
this.name = _n;
this.originValue = _o;
}
public TranslateItem(String _n, String _o, String _t) {
this.name = _n;
this.originValue = _o;
this.translatedValue = _t;
}
}
И, пожалуйста, используйте следующий код, чтобы получить все передаваемые параметры:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
// Код целевого языка, например "-de"
this.targetLanguageCode = bundle.getString("targetLanguageCode");
// Переведённые элементы также проходят, так что можно будет пересмотреть их
this.translatedFilePath = bundle.getString("translatedList_file");
this.translatedList = (List<TranslateItem>) readObjectFromFile(translatedFilePath);
// Непереведённые элементы, которые должны быть переведены
String path =bundle.getString("untranslatedList_file");
this.untranslatedList = (List<TranslateItem>) readObjectFromFile(path);
// ...
}
public static Object readObjectFromFile(String filePath) {
Object result = null;
File file = new File(filePath);
ObjectInputStream objIn = null;
try {
objIn = new ObjectInputStream(new FileInputStream(file));
result = objIn.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
closeWithoutThrow(objIn);
}
return result;
}
Получение результата перевода
После выполнения перевода вы должны вернуть результат, используя следующий код:
private void setResult(List<TranslateItem> stringValues) {
Intent intent = new Intent();
intent.putExtra("targetLanguageCode", this.targetLanguageCode);
writeObjectToFile(this.translatedFilePath, stringValues);
intent.putExtra("translatedList_file", this.translatedFilePath);
this.setResult(RESULT_OK, intent);
}
public static void writeObjectToFile(String filePath, Object obj) {
File file = new File(filePath);
ObjectOutputStream objOut = null;
try {
objOut = new ObjectOutputStream(new FileOutputStream(file));
objOut.writeObject(obj);
objOut.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
closeWithoutThrow(objOut);
}
}
Разрешения AndroidManifest
Запрашиваемые разрешения (так мы сможем использовать онлайн-переводчики):
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
И, чтобы APK Editor мог найти плагин, вы должны декларировать активность:
<activity android:name="xx.xx.TranslateActivity" android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/com.gmail.heagoo.apkeditor-translate" />
</intent-filter>
</activity>