Java 在应用程序中更改应用程序语言

Java 在应用程序中更改应用程序语言,java,android,Java,Android,我可以将我的应用程序更改为波斯语,但每当我关闭并重新打开应用程序时,它都会恢复为默认英语。另一个问题是,当我点击它时,英语不起作用,当我点击后退按钮时,它又回到了以前的活动英语 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activ

我可以将我的应用程序更改为波斯语,但每当我关闭并重新打开应用程序时,它都会恢复为默认英语。另一个问题是,当我点击它时,英语不起作用,当我点击后退按钮时,它又回到了以前的活动英语

 @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","فارسی" };
    }
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u设置);
SharedReferences设置=PreferenceManager.GetDefaultSharedReferences(此);
配置配置=getBaseContext().getResources().getConfiguration();
最后一个字符串lang=settings.getString(“lang”,即“”);
如果(!“”.equals(lang)和&!config.locale.getLanguage().equals(lang)){
语言环境=新语言环境(lang);
setDefault(Locale);
config.locale=locale;
getBaseContext().getResources().updateConfiguration(配置,getBaseContext().getResources())
.getDisplayMetrics());
}
微调器微调器=(微调器)findViewById(R.id.spinner1);
spinner.setPrompt(“选择语言”);
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple\u微调器\u项目,语言);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
旋转器。设置适配器(适配器);
spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener()
{
已选择公共视图(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
配置配置=新配置();
地点;
开关(arg2){
案例0:
config.locale=locale.ENGLISH;
打破
案例1:
PreferenceManager.GetDefaultSharedReferences(getApplicationContext())
.edit().putString(“LANG”,“fa”).apply();
config.locale=新语言环境(“fa”);
startActivity(新意图(getBaseContext(),MainActivity.class));
完成();
打破
}
getResources().updateConfiguration(配置,null);
}
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
});
}
私有字符串[]语言={“英语”,“فاسی”};
}

为什么要更改应用程序中的语言?系统上有语言配置是有原因的。如果有人想改变语言,他们会用它。应用程序中很少有语言改变者,更不用说使用了。正如你自己所看到的,与系统设置语言环境的方法作斗争容易出现错误。我知道,但有时人们希望在系统中使用英语,但在他们的语言中使用应用程序的比例却微乎其微。更多的人希望用键盘(如果是双语的话)来实现这一点,但这就是为什么键盘支持切换输出语言。你只是在为痛苦的世界做准备。每次从intent重新启动时,它将保持系统区域设置,并且您必须在每个活动中切换和重新启动功能。事实上,我想说,如果你要这样做,最好不要使用内置翻译系统,最好不要使用第三方。我有个想法,比如“互联网速度表Lite应用程序”改变语言方法,我认为这很容易,但现在!!无论如何,谢谢你helping@GabeSechan我并不反对它容易出现错误(并要求一个痛苦的世界),但有充分的理由需要这个功能。例如,您会发现很难用世界语(
eo
)或系统不支持的任何其他语言提供应用程序的翻译。忽略这些用户可能不是你的问题,但可能是(特别是如果他们大声抱怨的话)。无论如何,不要仅仅因为这个问题不被认为是“最佳实践”就质疑它。