戌印-INUJIRUSHI- (Androidあれこれ)

Androidのプログラミングをメインにしてます。記事に貼られたソースコードはダブルクリックすることで行番号をはずしてコピーすることができます。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
08

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

多言語対応 : updateConfiguration

前回、『多言語対応 : res/values-○○』でリソースフォルダを分けることでOSの言語設定に合わせて表示する言語を変更する方法を書きました。

今回は、ソースコード上で表示する言語(リソースファイル)を切り替える方法について書きます。
この方法を使うことで、ゲームアプリでよく見かける言語選択画面を表示し、ユーザーに任意の言語を選択させることが可能になります。
※ リソースファイルの生成は『多言語対応 : res/values-○○』を参照してください

ソースコード上で言語を切り替えるには Configuration クラスで管理されている Locale を変更し、Resources#updateConfiguration() でアプリに反映します。

以下のサンプルソースは画面を開く度に日本語と英語を切り替えます。
package jp.inujirushi.android.sample;

import java.util.Locale;

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;

public class TestActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Resouces クラスから Configuration を取得する
Configuration config = getResources().getConfiguration();

// 日本語と英語を切り替える
Locale locale = config.locale;
if (Locale.JAPAN.equals(locale)) {
config.locale = Locale.ENGLISH;
} else {
config.locale = Locale.JAPAN;
}

// 変更した内容を反映する (引数が null であれば変更されない)
getResources().updateConfiguration(config, null);

// レイアウトを設定する
setContentView(R.layout.activity_layout);
}
}
この方法で変更した言語はプロセスが生きている間、有効です。
アプリを強制終了させたり、メモリ不足でメモリが解放されたりすると設定が解除されます。
そのため、実際に使う場合には変更した言語をプリファレンス等に保存し、アプリ起動時に設定するようにします。

また、変更した Locale は現在表示されているレイアウトには適用されません
変更後はレイアウトを再生成する必要があります (29-30行目)

設定されている Locale は以下の方法で取得できます。
// デバイスの言語設定で設定されている Locale を取得する
Locale locale = Locale.getDefault();

// デバイスで選択可能な Locale を取得する
Locale[] locales = Locale.getAvailableLocales();

// アプリで選択されている Locale を取得する
Locale appLocale = getResources().getConfiguration().locale;
スポンサーサイト

Comments

Leave a Comment


Body
プロフィール

とむ・やむくん

Author:とむ・やむくん
管理人について

Windows 7 / 64bit
Eclipse 4.2 Juno (日本語パッチ済)

スポンサーサイト
最新トラックバック
検索フォーム
ブロとも申請フォーム
QRコード
QR
Twitter
2013/01/04 19:00 カウント開始

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。