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>