【问题标题】:Language not changing in android applicationandroid应用程序中的语言没有改变
【发布时间】:2018-10-09 01:58:24
【问题描述】:

我是 android 应用程序开发的新手。我正在开发可以更改语言的应用程序。示例:英语到印地语或卡纳达语。语言更改在模拟器上运行良好。但是,当我在 android 手机上更改语言时,除非我将语言从设置更改为该特定语言,否则它不会改变。

我想动态更改应用程序本身的语言,而不是进入设置。这是可能的还是我们只能通过上述方式?

附: Android 手机有 7.0 Nougat

任何帮助将不胜感激。谢谢。

这是我写的。

    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

【问题讨论】:

标签: android android-studio localization android-7.0-nougat


【解决方案1】:

attachBaseContextBaseActivity中设置本地语言

    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

当您更改语言时,不要忘记重新启动应用程序。

【讨论】:

  • 我正在使用这一切。正如我所说,它在 android 模拟器中运行良好。我正在寻找问题描述的问题。
  • 谁来确定你要设置哪种语言?
  • 在上面的例子中,我使用了默认语言Locale.getDefault().getLanguage(),所以它定义了设备的默认语言,如果你不更改任何首选语言
  • 你从哪里调用了setLocale方法?
  • 此答案已从此处公然复制。不解释好笑!原帖在这里stackoverflow.com/a/40849142/1149398
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多