About Auto Translate Plugin

Auto Translate Plugin is supported since version 1.6.2. However, we just opened the interface to developers. To develop a plugin, we need to develop a standalone app, which could get translate request, do the translation, and then set the translate result. Here is a simple description for how to develop a translate plugin.

Get Translate Request

We pass the translate request by TranslateItem which is defined as:

package com.gmail.heagoo.apkeditor.translate;

import java.io.Serializable;

// MUST be defined as this, cannot be proguarded

public class TranslateItem implements 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;

}

}

And, please refer to following code to get all the passed parameters:

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// ...

Intent intent = getIntent();

Bundle bundle = intent.getExtras();

// Target language code like "-de"

this.targetLanguageCode = bundle.getString("targetLanguageCode");

// Translated items are also passed, so that we can revise it

this.translatedFilePath = bundle.getString("translatedList_file");

this.translatedList = (List<TranslateItem>) readObjectFromFile(translatedFilePath);

// Untranslated items, which are to be translated

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;

}

Set Translate Result

After the translation, we should return back the result using following code:

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 Requirement

In general, we should request permissions like (as we may use online translators):

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.INTERNET" />

And, to make APK Editor can find the plugin, we should declare the activity like:

<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>