ローカライズ(多言語化)に対応する方法 | Androidアプリ開発

Androidアプリを開発し収益を得る上で最も大切なことのひとつが「ローカライズ
(各言語・地域) に対応すること」です。

この記事では動的・静的それぞれでローカライズに対応し、表示するテキストを変える方法を記載します。
スポンサーリンク

動的な対応方法

Locale.getDefault()で現在のロケールを取得して、対応する予定のロケールと比較します。注意点としては==で比較することはできません。equalメソッドを使用して比較する必要があります。
この方法では対応するロケールが増えるほどコードが複雑になっていくというデメリットがあります。
以下は「通常英語表記で日本語ロケールの場合のみ日本語表記にメッセージを変える例」です。

MainActivity.java
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv = findViewById(R.id.MainAct_tv);
        Locale locale = Locale.getDefault();

        if(locale.equals(Locale.JAPAN)) tv.setText("はろーわーるど");
        else tv.setText("Hello World");
    }
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"
    >

    <TextView
        android:id="@+id/MainAct_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</LinearLayout>
スポンサーリンク

静的な対応方法

静的な対応方法としてはローカライズしたリソースファイルを用意することです。
以下に例として日本語にローカライズ対応する方法を記載します。

まずはAndroidStudioでProject表示にして、Project->app->src->main->resを開きます。
ローカライズ手順
そしてvalues-jaというフォルダを作成し、valuesフォルダ内のstring.xmlをvalues-jaにコピーします。(フォルダの作成方法はresフォルダを右クリック->New->Directoryです)。
ローカライズ手順

そしてそれぞれのstring.xmlを以下のように記述します。
このように記述することで日本語環境ではvalues-ja\string.xmlが参照され、他の言語環境ではvalue\string.xmlが参照されるようになります。

values\string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="strHello">HelloWorld</string>
</resources>
values-ja\string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="strHello">はろーわーるど</string>
</resources>
そして、上記のstringリソースをActivityのxmlに設定すればローカライズ対応完了です。

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"
    >

    <TextView
        android:id="@+id/MainAct_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/strHello"
        />

</LinearLayout>
また、プログラムから文字列リソースを読み込む場合も特定のロケールを意識する必要はありません。
以下が例です。日本語環境なら”はろーわーるど”が、他の言語環境ならば”HelloWorld”が strに代入されます。
String str = getString(R.string.strHello);
ちなみに、画像等のリソースファイルも今回と同様の方法でローカライズ対応できます。
スポンサーリンク

まとめ

この記事ではローカライズ(多言語化)の方法を紹介しました。
動的・静的のどちらでもローカライズ対応することは可能ですが、保守性の観点からできるだけ静的に実装することをオススメします。
Androidアプリ開発
スポンサーリンク
Androidアプリ開発 記事一覧
Androidアプリ開発 記事一覧
Androidアプリ開発の記事一覧を以下にまとめています。
良かったらご覧ください。

Androidアプリ開発 記事一覧
カテゴリ広告: Androidアプリ開発
スポンサーリンク: Androidアプリ開発を個人レッスンで学ぶなら...?
Androidアプリ開発は一人で学んでいても限界があります。
そこでオススメなのがオンラインでAndroidアプリ開発を学べる「コードキャンプ」。
個人レッスンで丁寧に教えてくれます。

無料レッスン体験も可能なので、まずは無料体験から試してみてはいかがでしょうか?

Androidアプリ開発個人レッスン
一般広告: モバイルバッテリー
スポンサーリンク
Aresei-note
タイトルとURLをコピーしました