Az automatikus fordítási bővítményről
Az automatikus fordítási bővítmény az 1.6.2 verzió óta támogatott. Azonban, mi csak egy felületet nyitottunk a fejlesztők számára. A bővítmény fejlesztéséhez ki kell dolgoznunk egy önálló alkalmazást, amely fogadja a fordítási kérelmet, elvégzi a fordítást, majd beállítja a fordítási eredményt. Itt egy egyszerű leírást talál a fordítási bővítmény fejlesztésével kapcsolatban.
Fordítási kérelem
Mi továbbítjuk a fordítási kérelmet a TranslateItem által, amely a következő szerint van meghatározva:
package com.gmail.heagoo.apkeditor.translate;
import java.io.Serializable;
// MEG kell határozni, mivel ez nem lehetséges
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;
}
}
Majd, tekintse meg az alábbi kódot az összes átadott paraméter lekéréséhez:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
// Cél-nyelv kód, mint például a "-de"
this.targetLanguageCode = bundle.getString("targetLanguageCode");
// A lefordított elemek is át lesznek küldve, hogy felül lehessen vizsgálni őket
this.translatedFilePath = bundle.getString("translatedList_file");
this.translatedList = (List<TranslateItem>) readObjectFromFile(translatedFilePath);
// A lefordítatlan elemek, amelyeket le kell fordítani
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;
}
Fordítási eredmény beállítása
A fordítás után, nekünk vissza kell juttatnunk az eredményt a következő kód használatával:
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 követelmény
Általában, nekünk is engedélyeket kell kérnünk (mivel mi is online fordítókat használunk):
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
És, hogy az APK Editor megtalálja a bővítményt, deklarálnia kell a következő tevékenységet:
<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>