ボタン押下による言語表示に挑戦してみた。
##ボタン作成
前々回、前回と同様にボタンを作成。
今回作るのは以下の2種。
・「JAPANESE」(id:japaneseButton)日本語切替用のボタン
・「English」 (id:englishButton) 英語切替用のボタン
##クリックイベント取得
これも前回同様にラムダ式を用いて実装。
ここでLocaleというクラスを用いる。
このクラスは言語ごとに定数があり、どの定数を持っているかで表示言語を切り替えるというときに使える。
例えば、以下のとおりである。
Locale locale = Locale.JAPAN;
JAPANという定数は、Localeクラスで以下のように定義されている。
static public final Locale JAPAN = createConstant( lang: "ja", country: "JP" );
"ja"はLocaleクラスのgetLanguageメソッドで取得できるので、その値で言語を識別するといった具合である。
##定数ごとの分岐
localeからgetLanguage()により値を取り出す。その値ごとに処理を分ける。
String lang = locale.getLanguage();
switch(lang) {
case "ja":
//String型変数に日本語文字列を代入
break;
default:
//String型変数に日本語以外の文字列を代入
break;
}
##TextViewの表示
TextViewのsetTextにより言語別の文字列を入れて終了。
text.setText(String型変数);
##実行
結果、うまくいかなかった。
以下が失敗したサンプルコードである。
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.Locale;
public class MainActivity extends Activity {
//言語設定用変数
Locale locale;
String str = "";
//テキスト表示
TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
languageInitialize();
}
/*
日本語英語切替ボタンの実装
*/
public void languageInitialize() {
//クリックを取得するボタン
Button japaneseButton = (Button) findViewById(R.id.japaneseButton);
Button englishButton = (Button) findViewById(R.id.englishButton);
// 定数取得
japaneseButton.setOnClickListener((View v3) -> {
locale = Locale.JAPAN;
});
englishButton.setOnClickListener((View v4) -> {
locale = Locale.ENGLISH;
});
//定数ごとの分岐
String lang = locale.getLanguage();
switch (lang) {
case "ja":
str = "こんにちは";
break;
case "en":
str = "Hello";
break;
}
//表示
text.setText(str);
}
}
実行するとエミュレータは起動するが、アプリがstopしているようだ。
なにか設定に問題があるかもしれない。
次回は今回の続きで、このエラーを修復したいと思う。
以上。