2017-02-01 77 views
1

我可以將應用程序更改爲波斯語,但每當我關閉應用程序並重新打開它時,它就會回到默認英語。我面臨的另一個問題是,當我將語言改回英文時,它並沒有改變!當我點擊返回英語後,我改變了語言。在Android中使用微調器更改應用程序語言

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_settings); 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
     Configuration config = getBaseContext().getResources().getConfiguration(); 

     final String lang = settings.getString("LANG", ""); 
     if (!"".equals(lang) && !config.locale.getLanguage().equals(lang)) { 
      Locale locale = new Locale(lang); 
      Locale.setDefault(locale); 
      config.locale = locale; 
      getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources() 
        .getDisplayMetrics()); 
     } 

     Spinner spinner = (Spinner) findViewById(R.id.spinner1); 
     spinner.setPrompt("select language"); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, languages); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 
     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
     { 
      public void onItemSelected(AdapterView<?> arg0, View arg1, 
             int arg2 ,long arg3) { 
       Configuration config = new Configuration(); 
       Locale locale; 
       switch (arg2) { 
        case 0: 
         config.locale = Locale.ENGLISH; 
         break; 
        case 1: 
        PreferenceManager.getDefaultSharedPreferences(getApplicationContext()) 
           .edit().putString("LANG", "fa").apply(); 
         config.locale = new Locale("fa"); 
         startActivity(new Intent(getBaseContext(), MainActivity.class)); 
         finish(); 
         break; 
       } 
       getResources().updateConfiguration(config, null); 
      } 

      public void onNothingSelected(AdapterView<?> arg0) { 
       // TODO Auto-generated method stub 
      } 
     }); 
    } 
    private String[] languages = { "English","فارسی" }; 
} 
+0

http://stackoverflow.com/questions/12908289/how-to-change-language-of-app-when-user-selects-language –

回答

0

你可以試試下面的代碼:

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_settings); 


    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
    settings = PreferenceManager.getDefaultSharedPreferences(this); 
    if(settings.contains("LANG")) 
    { 
     if (settings.getString("LANG", "").equals("fa")) 
     { 
      String languageToLoad = "fa"; 
      Locale locale = new Locale(languageToLoad); 
      //Locale.setDefault(locale); 
      Configuration config = new Configuration(); 
      config.locale = locale; 
      getBaseContext().getResources().updateConfiguration(
       config, getBaseContext().getResources().getDisplayMetrics()); 
     } 
     else 
     { 
      String languageToLoad = "en"; 
      Locale locale = new Locale(languageToLoad); 
      Locale.setDefault(locale); 
      Configuration config = new Configuration(); 
      config.locale = locale; 
      getBaseContext().getResources().updateConfiguration(
       config, getBaseContext().getResources().getDisplayMetrics()); 
     } 
    } 


    Spinner spinner = (Spinner) findViewById(R.id.spinner1); 
    spinner.setPrompt("select language"); 


    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, languages); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
    { 


     public void onItemSelected(AdapterView<?> arg0, View arg1, 
            int arg2 ,long arg3) 
     { 
      switch (arg2) 
      { 
      case 0: 
       settings.edit().putString("LANG", "en").apply(); 
       startActivity(new Intent(getBaseContext(), MainActivity.class)); 
       finish(); 

       break; 

      case 1: 
       settings.edit().putString("LANG", "fa").apply(); 
       startActivity(new Intent(getBaseContext(), MainActivity.class)); 
       finish(); 

       break; 

      } 

     } 
    } 
0

在你去年語言選擇的onCreate檢查。

 SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
     settings = PreferenceManager.getDefaultSharedPreferences(this); 


     if (settings.getString("LANG", "").equals("fa")) 
     { 
      changeLanguage("fa"); 
      else 
      { 
      changeLanguage("en"); 
     } 


    Spinner spinner = (Spinner) findViewById(R.id.spinner1); 
    spinner.setPrompt("select language"); 


     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
     android.R.layout.simple_spinner_item, languages); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
spinner.setAdapter(adapter); 

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
    { 

    public void onItemSelected(AdapterView<?> arg0, View arg1, 
           int arg2 ,long arg3) 
    { 
     Configuration config = new Configuration(); 
     Locale locale; 
     switch (arg2) 
     { 
     case 0: 

      changeLanguage("en"); 
      break; 
     case 1: 

      changeLanguage("fa"); 

      break; 

     } 

    } 


    private void changeLanguage(String lng) 
    { 
    String languageToLoad = "en"; 

    if(lng.quals("fa")) 
    { 
     languageToLoad=lng; 
     Locale locale = new Locale(languageToLoad); 
     //Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     getBaseContext().getResources().updateConfiguration(
      config, getBaseContext().getResources().getDisplayMetrics()); 

     settings.edit().putString("LANG", languageToLoad).apply(); 
      startActivity(new Intent(getBaseContext(), MainActivity.class)); 
      finish(); 
    } 
    } 
相關問題