Search code examples
androidlocalemultilingual

Android Locale Issues


I need a text to be shown in English and Hindi but, by default it is shown in English.

I have two buttons with labels "English" and "Hindi"

When clicked on Hindi, it is showing in hindi, but when i click english, text is not getting back to english again.

The following is the code i am using

Button en_Button,hi_Button;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setLanguage("en");

    en_Button = (Button)findViewById(R.id.en_Button);
    hi_Button = (Button)findViewById(R.id.hi_Button);

    en_Button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setLanguage("en");
        }
    });

    hi_Button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setLanguage("hi");
        }
    });
}

public void setLanguage(String language)
{
    String languageToLoad  = language; // your language
    Locale locale = new Locale(languageToLoad);
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config,
            getBaseContext().getResources().getDisplayMetrics());
    this.setContentView(R.layout.activity_main);
}

What is that I am missing?

Thanks.


Solution

  • This is not give you effect runtime. You need to start your activity again with the language hi.

    Simple Workaround for that

    1. Store language you want to change in sharedPreference.
    2. After set preference. startActivity(getIntent());
    3. now every time you loading "en". instead of that load value form the SharedPreferences

      public String getAppLanguage() {
          SharedPreferences pref; = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
          return pref.getString(APP_LANG, "en");
      }
      
      public void setAppLanguage(String language) {
          SharedPreferences pref; = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
          Editor editor = pref.edit();
          editor.putString(APP_LANG, language);
          editor.commit();
      }