2012-10-16 2 views
1

저는 Android 개발에 아주 익숙하며 약간의 현지화 문제가 있습니다. 사용자가 기기의 현재 언어가 아닌 다른 기본 언어를 사용하도록 선택할 수있는 앱이 있습니다. 예를 들어 독일에 거주하고 휴대 전화가 "독일어"로 설정된 프랑스 사용자는 프랑스어로 내 앱을 사용하고 싶지만 다양한 언어로 휴대 전화의 기본 언어를 설정할 수는 없습니다.android 기기의 전원을 끈 후에도 앱의 기본 언어를 올바르게 설정하는 방법

내 앱에는 일부보기 만로드되고 언로드되는 하나의 활동 만 있습니다. 매우 간단한 앱이지만 큰 콘텐츠 (텍스트 및 이미지)가 있습니다.

이렇게하려면 아래 코드를 사용하십시오.

그것은 잘 작동하지만 몇 가지 문제가 있습니다 : 사용자가 해당 버튼에 새로운 언어를 선택하고 응용 프로그램을 다시 시작

  • (또는 내가 마무리 앱을 강제하는 경우() ..) : FIRST VIEW 만 새로운 언어를 사용합니다. 다음보기는 여전히 이전 언어로 설정됩니다.

  • 사용자가 장치를 끄기로 선택한 경우 동일한 문제가 발생합니다. 활동의 첫 번째보기 만 선택한 언어로 설정됩니다 (변수는 환경 설정에서 읽음).

  • 그러나 사용자가 앱을 다시 실행하기로 선택한 경우 모든보기 및 하위보기가 새 언어로 올바르게 설정됩니다.

  • 사용자가 이미 앱을 적어도 한 번 이상 다시 시작한 경우 각 언어 변경이 성공적으로 완료됩니다. 두 번째로 앱을 다시 시작할 필요가 없습니다. 사용자가 이전의 자신의 장치를 켠 경우

그래서 제대로 응용 프로그램

  • 의 첫 번째 재발 후 즉시 새로운 언어

    • 를 설정하는 방법은 무엇입니까

    도움이 되겠습니다. 여기 내가 사용하는 코드 (간체)이다 : 것은 다음

    public void onCreate(Bundle savedInstanceState) { 
        SharedPreferences myPrefs; 
        myPrefs = getSharedPreferences("langage", MODE_PRIVATE); 
        String langageToLoad = myPrefs.getString("langageToLoad", ""); 
        changeLangage(langageToLoad); 
    
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        (...some other code...) 
        } 
    
    public void setLangageEn(View view){ 
        changeLangage("en"); 
        setPreference("en"); 
        // finish(); // optionnal 
        } 
    
    public void changeLangage(String langage) { 
        Locale locale = new Locale(langage); 
        Locale systemLocale = Locale.getDefault(); 
        if (systemLocale != null && systemLocale.equals(locale)) { 
        return; 
        } 
        Locale.setDefault(locale); 
        android.content.res.Configuration config = new android.content.res.Configuration(); 
        config.locale = locale; 
        getResources().updateConfiguration(config, getResources().getDisplayMetrics()); 
        } 
    
    public void setPreference(String langage){ 
        SharedPreferences languagepref = getSharedPreferences("langage",MODE_PRIVATE); 
        SharedPreferences.Editor editor = languagepref.edit(); 
        editor.putString("langageToLoad",langage); 
        editor.commit(); 
        } 
    
  • 답변

    0

    : 당신이() 하나 개의 활동을 마무리해서, 이전 활동이 종료 할 필요가 없습니다 및 그가 onResume를 호출 할 수 있습니다()와 단지 "jump over"onCreate(), 그들은 아직 메모리 부족 상태가 아니며 onCreate() (onResume() 전에옵니다)를 호출하지 않습니다. 여기서 언어 검사를 구현합니다. 이 문제를 방지하기 위해


    한가지는 지역화 - 환경 설정을 확인하고 getter와 setter 메소드와 필드로 설정, 거기에 사용자 정의 "응용 프로그램 클래스"를 만들 수 (응용 프로그램 확장)하고 있습니다. 응용 프로그램 인스턴스를 가져 오려면 (응용 프로그램 시작시 생성됩니다!) (두 번째 활동을 시작할 때가 아니라) ((CustomApp) Context.getApplicationContext) .getCustomLocalization()을 수행 할 수 있습니다.

    하나.모든 활동에서 새로운 언어 설정을 실제로로드하려면 onResume()에서 언어 설정을 확인하고 CustomApp의 필드에 언어 1을 설정하고 환경 설정을 변경했을 때 (동일한 설정 메소드를 사용했을 때)? . 그런 다음 설정 작업을 완료하고 다시 만들어 새 설정을로드하십시오.

    관련 문제