libandrotranslation
http://code.google.com/p/libandrotranslation/
このライブラリを android アプリに組み込むと、
アプリ使用者に strings.xml の翻訳を実施してもらい、翻訳結果をメールにて送信してもらえるようになります。
(最後に、サンプル・アプリの動作画面を貼り付けたので、それを見てもらうと分かりやすいかもです)
早速、サンプル・アプリを作ってみることにしました。
まず、libandrotranslation のライブラリをダウンロードします。
libandrotranslation のサイトより、ファイル名は LibAndroTranslation-1.0.0.zip をダウンロードします。(2011/3/7時点)
libandrotranslation - Downloads
http://code.google.com/p/libandrotranslation/downloads/list
libandrotranslation のサイトには、使用方法についての記述があるので、
それを参考にしました。
libandrotranslation - Description
http://code.google.com/p/libandrotranslation/wiki/Description
libandrotranslation を使用するには、zip ファイルを解凍し、それが android プロジェクトになっているので、eclipse に読み込ませる必要があります。
サイトに、その手順は記載されていますが、一応、手順を以下に記述します。
- LibAndroTranslation-1.0.0.zip を解凍します。
解凍したフォルダは android プロジェクトのファイルになっています。
- Eclipse から 1. で解凍したプロジェクトを読み込みます。
Exclipse を起動し、"Filie" --> "New" から新規に Android Project を作成します。
このとき、Contents で "Create project from existing source" を選択し、
1. で解凍したフォルダを指定します。
Project name はサイトと同じく、LibAndroTrans にしました。
後はデフォルトのままで構いません。
libandrotranslation ライブラリを使用する準備ができたので、
早速、サンプルアプリを作成してみます。
Exclipse を起動し、"Filie" --> "New" から新規に Android Project を作成します。
アクティビティ名を LibAndroTransTestActitivy にしていますが、その辺は適当に解釈して下さい。
各ファイルで、修正した箇所を青字で記述します。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="jp.test.libandrotest"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".LibAndroTransTestActitivy"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- LibAndroTranslation -->
<activity android:name="shoozhoo.libandrotranslation.TranslationListActivity" />
<activity android:name="shoozhoo.libandrotranslation.TranslationEditActivity" />
</application>
<uses-sdk android:minSdkVersion="6" />
<!-- LibAndroTranslation -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="jp.test.libandrotest"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".LibAndroTransTestActitivy"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- LibAndroTranslation -->
<activity android:name="shoozhoo.libandrotranslation.TranslationListActivity" />
<activity android:name="shoozhoo.libandrotranslation.TranslationEditActivity" />
</application>
<uses-sdk android:minSdkVersion="6" />
<!-- LibAndroTranslation -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="LibAndroTrnaslatin のテスト"
/>
<Button
android:id="@+id/libandrotrans_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="テスト開始"
/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="LibAndroTrnaslatin のテスト"
/>
<Button
android:id="@+id/libandrotrans_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="テスト開始"
/>
</LinearLayout>
LibAndroTransTestActitivy.java
package jp.test.libandrotest;
import java.util.ArrayList;
import shoozhoo.libandrotranslation.TranslationListActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class LibAndroTransTestActitivy extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button) findViewById(R.id.libandrotrans_button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(LibAndroTransTestActitivy.this, TranslationListActivity.class);
// 翻訳データの送信先メールアドレス
intent.putExtra(TranslationListActivity.INTENT_EXTRA_MAIL_TO, "YOUR_MAIL_ADDRESS");
// 翻訳データのメールの題名に入るアプリ名
intent.putExtra(TranslationListActivity.INTENT_EXTRA_MAIL_APPNAME, "YOUR_APP_NAME");
ArrayList<String> ignores = new ArrayList<String>();
ignores.add("app_name");
ignores.add("no_i18n.+");
// 翻訳画面に表示させたくないリソース名のパターン(正規表現)
intent.putExtra(TranslationListActivity.INTENT_EXTRA_IGNORE_PATTERNS, ignores);
// 翻訳データの保存先を変更したい場合に指定する
// デフォルト Environment.getExternalStorageDirectory()+"/MyTranslation"
// intent.putExtra(TranslationListActivity.INTENT_EXTRA_DIR,
// Environment.getExternalStorageDirectory()+"/LibAndroTranslationSample");
LibAndroTransTestActitivy.this.startActivity(intent);
}
});
}
}
※ メールアドレスについては、送信したいアドレスへの修正が必要です。import java.util.ArrayList;
import shoozhoo.libandrotranslation.TranslationListActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class LibAndroTransTestActitivy extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button) findViewById(R.id.libandrotrans_button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(LibAndroTransTestActitivy.this, TranslationListActivity.class);
// 翻訳データの送信先メールアドレス
intent.putExtra(TranslationListActivity.INTENT_EXTRA_MAIL_TO, "YOUR_MAIL_ADDRESS");
// 翻訳データのメールの題名に入るアプリ名
intent.putExtra(TranslationListActivity.INTENT_EXTRA_MAIL_APPNAME, "YOUR_APP_NAME");
ArrayList<String> ignores = new ArrayList<String>();
ignores.add("app_name");
ignores.add("no_i18n.+");
// 翻訳画面に表示させたくないリソース名のパターン(正規表現)
intent.putExtra(TranslationListActivity.INTENT_EXTRA_IGNORE_PATTERNS, ignores);
// 翻訳データの保存先を変更したい場合に指定する
// デフォルト Environment.getExternalStorageDirectory()+"/MyTranslation"
// intent.putExtra(TranslationListActivity.INTENT_EXTRA_DIR,
// Environment.getExternalStorageDirectory()+"/LibAndroTranslationSample");
LibAndroTransTestActitivy.this.startActivity(intent);
}
});
}
}
※ コメントにも書かれていますが、デフォルトでは、strings.xml のデータを格納したファイルが、/mnt/sdcard/MyTranslation/ ディレクトリ(エミュレータで確認)に作成されます。
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, LibAndroTransTestActitivy!</string>
<string name="app_name">LibAndroTransTest</string>
<string name="message1">Good morning</string>
<string name="message2">Good evening</string>
</resources>
<resources>
<string name="hello">Hello World, LibAndroTransTestActitivy!</string>
<string name="app_name">LibAndroTransTest</string>
<string name="message1">Good morning</string>
<string name="message2">Good evening</string>
</resources>
実行画面を以下に貼り付けます。
起動直後の画面です。
起動直後の画面で、"テスト開始"をクリックすると、翻訳のお願い画面が表示されます。
以下の画面では日本語になっていますが、端末の設定に合わせた言語で表示されるようです。
(端末の言語が英語のときは、英語の文章でした)
上記画面で "OK" を押すと、strings.xml が読み込まれ、リスト表示されます。
"Good morning" をクリックすると、翻訳を入力する画面に切り替わります。
メニューボタンを押し、"開発者に送信"を押すことで、XML ファイルをメールの添付ファイルとして、送信することことができます。HTC Aria で実行してみると、メール以外に、操作の選択として、Facebook とか Bluetooth とかも出てきたんですが、これは想定内か?
以下のファイルが実施にメールに添付されたファイルです。
string_jp.test.libandrotest
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<resources>
<string name="message1">"おはよう"</string>
<string name="message2">"こんばんは"</string>
</resources>>
<resources>
<string name="message1">"おはよう"</string>
<string name="message2">"こんばんは"</string>
</resources>>
設定画面などに埋め込めば、より自然に翻訳ご協力お願い機能を追加できそうです。