スピナー(または任意の方法)を使用して、ユーザーがアプリケーションの言語を変更できるようにしたい。私はさまざまな方法を試しましたが、すべてのアクティビティではなくこのアクティビティの言語が変更されるため、ユーザーがアプリを再起動したときに最後に選択した言語が見つかるように保存したいと思います。
このコードはスピナーまたは任意の方法で使用できます
_String languageToLoad = "en"; // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
_
次に、このように言語を保存する必要があります
_SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE);
SharedPreferences.Editor editor = languagepref.edit();
editor.putString("languageToLoad",languageToLoad );
editor.commit();
_
onCreate()
のすべてのアクティビティで同じコードを使用して、SharedPreferencesからlanguageToLoad
をロードします
これは古い質問ですが、とにかく答えます:-) Applicationクラスを拡張して、すべてのアクティビティにAbol3zのソリューションを適用できます。クラスを作成します。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String lang = preferences.getString("lang", "en");
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}
そして、マニフェストでMyApplicationをアプリケーションクラスとして設定します。
<application
Android:name=".MyApplication"
...
/>
(スピナーで)lang値を設定できます。
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
preferences.edit().putString("lang", "en").commit();
SharedPreferencesを使用して、ユーザーが選択した言語を追跡し、onCreate()、場合によってはonResume()メソッドでその言語を使用するようにアクティビティを設定します。このようにして、アプリの再起動などの間も持続します。
btnChange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
//preferences.edit().putString("lang", "bn").commit();
String lang = preferences.getString("lang", "en");
//Log.e("lang", "lang in Main Activity:"+lang);
if (lang.equalsIgnoreCase("en")){
setLocale("bn");
preferences.edit().putString("lang", "bn").commit();
btnChange.setText("Eng");
}else if(lang.equalsIgnoreCase("bn")){
setLocale("en");
preferences.edit().putString("lang", "en").commit();
btnChange.setText("বাংলা");
}
}
});
public void setLocale(String lang) {
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, MainActivity.class);
startActivity(refresh);
finish();
}
テスト目的で2つの言語を使用します。すべての文字列をvaluesおよびvalues-bnという名前の異なるフォルダーに保持します。