1

I can change my app to Persian language, but whenever I close the app and reopen it, It goes back to default English. Another problem that I'm facing is that when I changed language back to English it didn't change! And after I changed language when I click back it's back to English.

@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","فارسی" };
}
Sadegh.t
  • 205
  • 3
  • 10
  • possible duplicate of http://stackoverflow.com/questions/12908289/how-to-change-language-of-app-when-user-selects-language – vimal raj Feb 01 '17 at 11:49

2 Answers2

0

You may try out the following code:

@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;

            }

        }
    }
tahsinRupam
  • 6,325
  • 1
  • 18
  • 34
0

In your onCreate check for last language selection.

      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();
    }
  }
Adnan Bin Mustafa
  • 1,229
  • 10
  • 20