私のアプリでは、次のコードを使用して特定の言語を設定しています。言語はアプリ内のSharedPreferences
に保存されます。 これはAPIレベル23まで完全に動作します。 Android N SharedPreferences
も正しく動作しますが、正しい言語コード文字列を返しますが、ロケールは変更されません(電話機のデフォルト言語を設定します)。何が間違っていますか?言語をプログラムで変更する(Android N 7.0 - API 24)
アップデート1:私はそれが正しいロケールを返しますが、アプリの言語が変更されていないLog.v("MyLog", config.locale.toString());
すぐres.updateConfiguration(config, dm)
後に使用する場合。
アップデート2:はまた、私は活動を再開(古いものに新しい意図と仕上げを使用して)、その後、ロケールと変更した場合、それが適切に言語を変更し、それがさらに回転後の正しい言語が表示されていることを述べました。しかし、私は、アプリケーションを閉じて、再び開いて、私はデフォルトの言語を取得します。それは奇妙だ。
public class ActivityMain extends AppCompatActivity {
//...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set locale
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
String lang = pref.getString(ActivityMain.LANGUAGE_SAVED, "no_language");
if (!lang.equals("no_language")) {
Resources res = context.getResources();
Locale locale = new Locale(lang);
Locale.setDefault(locale);
DisplayMetrics dm = res.getDisplayMetrics();
Configuration config = res.getConfiguration();
if (Build.VERSION.SDK_INT >= 17) {
config.setLocale(locale);
} else {
config.locale = locale;
}
}
res.updateConfiguration(config, dm);
setContentView(R.layout.activity_main);
//...
}
//...
}
アップデート3:答えはここにもあります:https://stackoverflow.com/a/40849142/3935063
https://developer.android.com/preview/features/multilingual-support.html – CommonsWare
@CommonsWare再生のためのおかげで、残念ながらこのリンクは役立ちません。今、ロケールを変更して新しい意図を使用してアクティビティを再起動し、古いものを終了すると、言語が適切に変更され、ローテーション(アクティビティの再作成)後に正しい言語が表示されることにも言及しました。しかし、私は、アプリケーションを閉じて、再び開いて、私はデフォルトの言語を取得します。理解できません。それは奇妙だ。 – user35603
@ user35603解決策は見つかりましたか? – Jamal