Язык не меняется в приложении для Android - PullRequest
0 голосов
/ 28 апреля 2018

Я новичок в разработке приложений для Android. Я работаю над приложением, где язык может быть изменен. Пример: с английского на хинди или каннада. Смена языка работает нормально на эмуляторе. Но когда я меняю язык на телефоне Android, он не меняется, если я не изменю язык с Настройки на этот конкретный язык.

Я хотел динамически менять язык в самом приложении вместо перехода к настройкам. Это возможно, или мы должны идти только вышеописанным путем?

P.S. Android-телефон имеет 7.0 нуг

Любая помощь будет высоко ценится. Спасибо.

Это то, что я написал.

    private void setLocale(String lang){
    Locale locale=new Locale(lang);
    locale.setDefault(locale);
    Resources resources = getResources();
    Configuration configuration = resources.getConfiguration();
    DisplayMetrics displayMetrics = resources.getDisplayMetrics();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
        configuration.setLocale(locale);
    } else{
        configuration.locale=locale;
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
        getApplicationContext().createConfigurationContext(configuration);
    } else {
        resources.updateConfiguration(configuration,displayMetrics);
    }
    //save data to sharedPreferences
    SharedPreferences.Editor editor=getSharedPreferences("Settings",MODE_PRIVATE).edit();
    editor.putString("My_Lang",lang);
    editor.apply();
}

    public void showChangeLanguageDialog()
{
    final String[] listItems={"हिंदी","ಕನ್ನಡ","मराठी","தமிழ்","اردو","English"};

    AlertDialog.Builder mBuilder=new AlertDialog.Builder(MainActivity.this);
    mBuilder.setTitle("Change Language..");
    mBuilder.setSingleChoiceItems(listItems, -1, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch (which)
            {
                case 0: //Hindi
                    setLocale("hi");
                    recreate();
                    break;
                case 1://Kannda
                    setLocale("kn");
                    recreate();
                    break;
                case 2://English
                    setLocale("en");
                    recreate();
                    break;
            }
            //dismiss dialog when language selected
            dialog.dismiss();
        }
    });

    AlertDialog mDialog=mBuilder.create();
    //show create dialog
    mDialog.show();
}
//showChangeLanguageDialog is called on button click

1 Ответ

0 голосов
/ 28 апреля 2018

Установите местный язык на вашем BaseActivity в attachBaseContext

    public class BaseActivity extends AppCompatActivity {

             @Override
                protected void attachBaseContext(Context newBase) {
                    String lngCode=PreferenceManager.
getDefaultSharedPreferences(context).getString(CURRENT_LANGUAGE_CODE, Locale.getDefault().getLanguage())
                    Locale newLocale = new Locale(lngCode);

                    Context context = ContextWrapperLanguage.wrap(newBase, newLocale);
                    super.attachBaseContext(context);
                }
            }

Установить язык в настройках, таких как en, ar, it

и при смене языка не забывайте перезапускать приложение.

...