2011年3月7日月曜日

libandrotranslation のサンプル・アプリ作ってみた

最近、libandrotranslation というライブラリを知りました。
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 に読み込ませる必要があります。

サイトに、その手順は記載されていますが、一応、手順を以下に記述します。
  1. LibAndroTranslation-1.0.0.zip を解凍します。
    解凍したフォルダは android プロジェクトのファイルになっています。

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

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>

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

            }
        });
    }
}
※ メールアドレスについては、送信したいアドレスへの修正が必要です。
※ コメントにも書かれていますが、デフォルトでは、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>


実行画面を以下に貼り付けます。

起動直後の画面です。


起動直後の画面で、"テスト開始"をクリックすると、翻訳のお願い画面が表示されます。
以下の画面では日本語になっていますが、端末の設定に合わせた言語で表示されるようです。
(端末の言語が英語のときは、英語の文章でした)


上記画面で "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>>

設定画面などに埋め込めば、より自然に翻訳ご協力お願い機能を追加できそうです。