アプリを多言語に対応させる方法
アンドロイドでアプリを作成するときにそのアプリ中の文字列はxmlファイルに記録されいて、もしアプリを複数の言語(英語、中国語、etc...)に翻訳して対応したい場合はその言語に対応するxmlファイルを作れば多言語に対応させることができます。
プロジェクトを作った時のデフォルトの言語ファイルはres/valuesのフォルダの中にのstring.xmlの名前で作られていて、例えばその内容は次のようなものです。
<?xml version="1.0" encoding="utf-8" ?> <resources> <string name="app_name">MyApp</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello!</string> </resources>
これがデフォルトの言語ファイルでname属性で定義されているのが文字列の名前(ID)、string要素で囲まれた文字列がアプリで表示される文字列です。
これを日本語にしたい場合にはresフォルダに新たに日本語用言語ファイルを作ります。日本語ならresフォルダにvalues-jaフォルダを作り、その中にstring_ja.xmlを作成します。そして、string_ja.xmlにstrings.xmlの文字列の値を日本語に直した内容を次のように書きます。
string_ja.xml<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">MyApp</string> <string name="action_settings">設定</string> <string name="hello_world">こんにちは!</string> </resources>
これでこのアプリは日本語に対応したアプリになります。実際にアンドロイドの言語設定を日本語にすると日本語でアプリが表示されます。
アプリから言語を変更する
言語を端末で設定しているものに合わせて切り替えるにはアプリの起動時にどの言語を使っているのか判別してコードから切り替えることができます。
例えばデフォルトの言語が英語であるアプリが日本語の環境で起動されたときに日本語を設定するには以下のようなソースコードを書きます。
MainActivity.javapackage com.MyApp.myapp; import java.util.Locale; import android.content.res.Configuration; import android.content.res.Resources; public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Locale locale = Locale.getDefault(); locale = (locale.equals(Locale.JAPAN)) ? Locale.US : Locale.JAPAN; //言語を環境に合わせて変える。 locale.setDefault(locale); //言語を設定 Configuration config = new Configuration(); config.locale = locale; Resources resources = getBaseContext().getResources(); resources.updateConfiguration(config, null); //言語ファイルなどのリソースを更新する。 setContentView(R.layout.activity_main); //新たにレイアウトを描画しなおす。 } }
これで環境にあわせて言語を変えることができます。この例では端末の言語が日本語の時は表示言語を日本語に設定し、それ以外の時は英語に設定しています。
もしもっと複数の言語に対応させたい場合は訳したい言語の数だけ言語ファイルが必要になります。
言語がしっかりと切り替わっているかどうかの確認は「設定」アプリの「言語設定」から「言語」の項目を選び、その中からアプリで使う言語を変更することができます。