Android ソフトのローカライズ方法

アプリケーションのローカライズ方法のDraftが出たので一通り試してみました。
現在Draftの状況ではありますが、大きく変わることはないと思われます。
Localizing Android AppsのDraft
https://groups.google.com/group/android-developers/web/localizing-android-apps-draft

デモアプリのダウンロード

ローカライズ手法を説明するために、デモアプリ(L10nDemo.zip)が用意されており、上記ドキュメントに記載されてあるリンクからダウンロードできます。
ダウンロードして実行してみました。特に記載することはなく、Locale情報を見てリソースを切り替えているだけのアプリケーションです。(しかし日本語リソースがないというのはいかがなものかと…)
localize1.png
ちなみに、ロケール情報は以下のコードで取得します。

// fetch the display name for the current locale; a couple different waysString locale = getResources().getConfiguration().locale.getDisplayName();locale = java.util.Locale.getDefault().getDisplayName();

エミュレータのロケールを変えてみる

エミュレータにshellで入り、以下のコマンドを打つだけです。

adb shellecho fr-CA > /data/locale;stop 5;start

5秒待って、エミュレータ上でデモアプリを起動すると、無事カナダに住むフランス人状態になりました。
localize2.png
注意としてこの手法は、エミュレータだけで動作をし、実機では動作しません、またこの手法は将来変更されるでしょう(GUIが付くのが普通でしょう)と記載されています。

アプリケーションの公開

アプリケーションを公開する時は、アプリケーションサイズを小さくするために、各リージョン毎にaptを作ってAndroid Marketに公開をする、とありますが、このあたりはどうなんだろうか?開発者の結局手間が増えるだけで、サイズはあまり変わらない気がします(グラフィックを多様しているソフトは除く)。開発者が手間を増やすかどうかは、新しくなるAndroidMarketの仕様によるでしょう。
(ちなみに、aapt -c コマンドにバグがあるので、試すのはちょっとまってねということらしい)

日本語化

日本語化を試してみる。
先のデモアプリに日本語リソースを追加し実行させます。

参考資料

現在のAndroid SDKのローカライズ関連ページ
http://code.google.com/intl/ja/android/devel/resources-i18n.html
Language
ISO 639-1
Region
ISO 3166-1-alpha-2
日本に住んでいて、日本語をしゃべる人は、「ja_rJP」となります。

プログラムの変更

/drawable-ja-rJP/flag.pngを作成
日本の国旗を用意
/values-ja/strings.xmlを作成
内容を以下とする。

<?xml version="1.0" encoding="utf-8"?><resources><string name="app_name">国際化テスト</string><string name="text_a">これは非常時の放送システムのテストです。 これはテストにすぎません</string><string name="text_b">これが実際の非常事態であったならば、我々は仰天して逃げました、そして、あなたには知らされなかったでしょう。</string><string name="text_c">この文字列は、message formattingを使ったものです。現在のロケールでは {0} は {1}の前にきます。そして現在のロケールは {2}です。</string><string name="button_label">ボタン</string></resources>
実行

エミュレータのロケール変更

echo ja-JP > /data/locale;stop;sleep 5;start

無事動きました。
localize3.png

ブログ内の関連する記事


コメント

このブログの人気の投稿

島へ移住の話【炊飯】

ドローンプログラミング体験教室を伊豆大島の小学校でしてきました

情報処理安全確保支援士登録証のカード型が届きました。