2017-10-18 13 views
1

私はこの方法で私のAndroidアプリの言語を変更:変更アプリの言語

private void setLocal(String language) { 

    Locale myLocale = new Locale(language); 
    Resources res = getActivity().getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    HeaderSettingFragment frag = new HeaderSettingFragment(); 
    getFragmentManager().beginTransaction() 
      .replace(R.id.setting_container, frag).addToBackStack(null).commit(); 
} 

と言語を正しく変更しましたが、私はアプリを閉じて再度開いたときに、以前の言語が残りました。

これを回避するにはどうすればよいですか?

+0

あなたは 'にsetLocal()'アプリケーション内の 'のonCreate()'メソッドを呼び出そうとしましたか? –

答えて

1

これを試してください。

LanguageUtils

public class LanguageUtils { 

/** 
* change language 
* 
* @param context 
* @param language 
*/ 
public static void shiftLanguage(Activity context, String language) { 
    if (language.equals("en")) { 
     Locale.setDefault(Locale.ENGLISH); 
     Configuration config = context.getResources().getConfiguration(); 
     config.locale = Locale.ENGLISH; 
     context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); 
     SharedPreferenceUtils.createSP(context, "en"); 
    } else { 
     Locale.setDefault(Locale.CHINESE); 
     Configuration config = context.getResources().getConfiguration(); 
     config.locale = Locale.CHINESE; 
     context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); 
     SharedPreferenceUtils.createSP(context, "zh"); 
    } 
    context.recreate(); 
} 

/** 
* app start setting language 
* 
* @param context 
* @param language 
*/ 
public static void startLanguage(Context context, String language) { 
    if (language.equals("zh")) { 
     Locale.setDefault(Locale.CHINESE); 
     Configuration config = context.getResources().getConfiguration(); 
     config.locale = Locale.CHINESE; 
     context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); 
    } else { 
     Locale.setDefault(Locale.ENGLISH); 
     Configuration config = context.getResources().getConfiguration(); 
     config.locale = Locale.ENGLISH; 
     context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); 
    } 
} 
} 

switch (item.getItemId()) { 
     case R.id.hn: 
      String languageToLoad = "hi"; 
      LanguageUtils.shiftLanguage(this, languageToLoad); 
      break; 
     case R.id.eng: 
      languageToLoad = "en"; // your language 
      LanguageUtils.shiftLanguage(this, languageToLoad); 
      break; 

     default: 
} 

そして、あなたはアプリを再起動すると、それは言語を設定しますアプリケーション

でそれを使用して使用してください。

public class MyApplication extends Application { 

@Override 
public void onCreate() { 
    super.onCreate(); 
    if (TextUtils.equals(SharedPreferenceUtils.getLanguage(this), "en")) { 
     LanguageUtils.startLanguage(getApplicationContext(), "en"); 
    } else { 
     LanguageUtils.startLanguage(getApplicationContext(), "zh"); 
    } 
} 

} 

SharedPreferenceUtils

public class SharedPreferenceUtils { 

private static final String SP_NAME = "sp"; 
public static final String LANGUAGE = "language"; 


// create 
public static boolean createSP(Context context, String language) { 
    SharedPreferences.Editor editor = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE).edit(); 
    editor.putString(LANGUAGE, language); 
    return editor.commit(); 
} 


// get language 
public static String getLanguage(Context context) { 
    SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE); 
    return sp.getString(LANGUAGE, ""); 
} 

} 
+0

私は言語ペルシア語を設定したいと思います。アンドロイドには、ペルシア語のLocale.CHINESEのようなものはありません。私に何ができる? –

+0

私は新しいLocal( "fa")を使用しています。ありがとう:) –

0

何らかの理由で言語の状態を保存する必要があります。たとえば、SharedPreferenceのように、アプリの起動時にそれを読むことができます。実際にあなたはちょうどチャニングしていますが、ノッチは状態を保存しています。

+0

私はsharedPreferenceで言語を保存したときにアプリケーションを開くたびにsetLocal()を呼び出す必要がありますが、主なアクティビティ言語は他のアクティビティに移動して返されるまで変更されませんでした。 –

関連する問題