다른 언어로 번역 된 앱이 있습니다. 이를 위해 locale
을 사용했고 사용자가 선호하는 언어를 저장하기 위해 나는 SharedPreferences
을 사용했습니다.`onResume` 메소드 이후 로케일 변경이 작동하지 않습니까?
이것을 사용하여 앱 내/모든 활동에서 선호 언어를로드 할 수있었습니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pick);
findViewById(R.id.flagcollection).setVisibility(View.GONE);
findViewById(R.id.worldmapswitch)
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (flagWorld) {
// means true
findViewById(R.id.flagcollection).setVisibility(View.GONE);
flagWorld = false;
} else {
findViewById(R.id.flagcollection).setVisibility(View.VISIBLE);
flagWorld = true;
}
}
});
preferences = getSharedPreferences("settings_values", MODE_PRIVATE);
String SavedLocaleLang = preferences.getString("LocalLang", null);
Locale locale = new Locale(SavedLocaleLang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
....
문제는 어떤 이유로 내가 응용 프로그램을 떠나면 내가 응용 프로그램에 돌아올 때 잠시 후, (활동 종료/종료하지 않음) 즉, 휴대 전화의 기본 언어가 아닌 저장된 값을 사용하여 실행 장소.
그런 다음 내 자바와 결합 onResume의 기적에 관한 수많은 글을 읽은 후 더-능력이 시도하지 :
@Override
public void onResume(){
super.onResume();
// put your code here...
preferences = getSharedPreferences("settings_values", MODE_PRIVATE);
String SavedLocaleLang = preferences.getString("LocalLang", null);
Locale locale = new Locale(SavedLocaleLang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
}
나는 내 문제를 해결 한 것으로 생각
, 미만에 결과를 테스트 후 1 시간 이상 나는 아무것도하지 않았다는 것을 깨달았다. 어딘가 잘못하고 있어요.
기술, 인내, 그리고 많은 의지가있는 사람이 있다면, 내가 뭘 잘못하고 있는지 이해하도록 도와주세요.
도움이 될 것입니다. 그래도 풍자는 없어. 나는 잘하고있다 : P
감사합니다 !!!
P.
findViewById(R.id.flaghungary)
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String localeHU = "hu";
SharedPreferences settings = getSharedPreferences("settings_values", MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString("LocalLang", localeHU);
editor.apply();
Locale locale = new Locale("hu");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
setContentView(R.layout.activity_pick);
Context context = getApplicationContext();
Toast.makeText(context, "Magyar nyelv kiválasztva", Toast.LENGTH_SHORT).show();
recreate();
}
});
대부분의 경우, 프로세스를 사용자 "Cochi은"그래서 여기 당신이 가서 ... Prefereces의 로케일을 저장하기위한 코드를 요청 앱이 백그라운드에있는 동안 종료되었습니다. [이것은 완벽하게 정상입니다.] (https://developer.android.com/guide/components/processes-and-threads.html#Lifecycle). 그 외에도 "내가 잘못한 일을하는 곳"이라는 뜻을 설명하십시오. – CommonsWare
로캘을 저장할 때'SharedPreferences.Editor' 객체에서'commit()'또는'apply()'를 호출하고 싶습니다. 일반적인 감시이며 sharedPreferences는 업데이트하지 않으면 업데이트되지 않습니다. – DeeV
안녕하세요. 빠른 답장을 보내 주셔서 감사합니다. 이전처럼 onCreate에서 코드를 업데이트했습니다. 이제 Nika Kurdadze의 솔루션을 시도하고 있습니다. 어쩌면 작동 할 수 있습니다 : D – Robert