1. ホーム
  2. android

[解決済み] ユーザーが言語を選択したときに、アプリの言語を変更するには?

2022-10-10 03:10:47

質問

スペイン語、ポルトガル語、英語の3ヶ国語をサポートするアプリを作りたいのですが、アプリ内で言語を選択するオプションはありますか?そして、アプリ内で言語を選択するオプションを与えます。

1) 3つのdrawableフォルダ drawable-es, drawable-pt, drawable.

2) valuesフォルダ values-es,values-pt,valuesの3つ。言語に応じてString.xmlの値を変更する。

言語選択用のimageViewがあり、クリックすると英語、スペイン語、ポルトガル語のメニューが表示されます。

オプションの選択時に、以下のコードでアプリ内のロケールを設定しています。

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.en:
             Locale locale = new Locale("en"); 
             Locale.setDefault(locale);
             Configuration config = new Configuration();
             config.locale = locale;
             getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
             Toast.makeText(this, "Locale in English !", Toast.LENGTH_LONG).show();
             break;

        case R.id.pt:
             Locale locale2 = new Locale("pt"); 
             Locale.setDefault(locale2);
             Configuration config2 = new Configuration();
             config2.locale = locale2;
             getBaseContext().getResources().updateConfiguration(config2, getBaseContext().getResources().getDisplayMetrics());

             Toast.makeText(this, "Locale in Portugal !", Toast.LENGTH_LONG).show();
             break;

        case R.id.es:
             Locale locale3 = new Locale("es"); 
             Locale.setDefault(locale3);
             Configuration config3 = new Configuration();
             config3.locale = locale3;
             getBaseContext().getResources().updateConfiguration(config3, getBaseContext().getResources().getDisplayMetrics());

             Toast.makeText(this, "Locale in Spain !", Toast.LENGTH_LONG).show();
             break;     
    }
    return super.onOptionsItemSelected(item);
}

私はマニフェストで android:configChanges="ロケール"。

動作はするのですが、いくつか問題があります。

問題点:-。

1)言語選択時に、言語選択の画像で構成される画面は変化せず、他の画面が変化する。

2)方向転換後、ロケールに合わせて言語を復元する。

どのように解決するのですか?

ウェブページの抜粋です。 http://android.programmerguru.com/android-localization-at-runtime/

ユーザーが言語リストから言語を選択すると、アプリの言語を変更するのは簡単です。以下のように、ロケールを文字列で受け取るメソッドを用意し(英語なら「en」、ヒンディー語なら「hi」)、アプリのロケールを設定し、現在のアクティビティを更新して言語の変更を反映させます。適用したロケールは、再度手動で変更するまで変更されません。

public void setLocale(String lang) { 
    Locale myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    Intent refresh = new Intent(this, AndroidLocalize.class); 
    finish();
    startActivity(refresh); 
} 

以下のパッケージがインポートされていることを確認してください。

import java.util.Locale; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.content.res.Configuration; 
import android.content.res.Resources; 
import android.util.DisplayMetrics; 

アクティビティにマニフェストを追加する android:configChanges="locale|orientation"