更改默认的Locale语言android

时间:2017-08-09 08:00:02

标签: java android localization locale

我制作了2个不同的strings.xml,1个用于瑞典语,1个用于英语。

更改区域设置的代码

 public void setLocale(String lang) {
    Locale myLocale = new Locale(lang);
    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = myLocale;
    res.updateConfiguration(conf, dm);
    Intent refresh = new Intent(getContext(), BaseActivity.class);
    startActivity(refresh);
}

用于切换语言的Onclicklisteners

swedish.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setLocale("sv");
        }
    });
    english.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setLocale("en");
        }
    });

问题是,该应用程序单独使用它来启动瑞典语应用程序,据我所知,该应用程序并非由我自己设置。如何在应用启动时更改默认语言环境?

问题

  1. 如何设置应用程序以使用英语xml开始?
  2. 有没有人知道如何存储用户的选择?如果用户在关闭应用程序时按下使用瑞典语,我希望它存储。

3 个答案:

答案 0 :(得分:2)

这仅适用于某些语言。

我发现当我使用android studio的翻译器编辑器来添加语言环境(例如Persian(fa))时,而不是values-fa android studio中添加了values-fa-rIR,因此当我们要求Locale("fa")时它不会起作用。因此,如果行不通,请转到project view并重命名您的文件夹(对于我的示例,将res/values-fa-rIR重命名为res/values-fa)。

然后是setContentView()

祝你好运

答案 1 :(得分:0)

当用户按语言选择时,将此值存储到prefrence中,一旦再次返回,则您已经存储了prefrence值。现在只需调用以下方法: - setLocale_forstartup("en");

`public void setLocale_forstartup(String lang) {

        myLocale = new Locale(lang);
        Locale.setDefault(myLocale);
        Resources res = getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        conf.locale = myLocale;
        res.updateConfiguration(conf, dm);

    }`

答案 2 :(得分:0)

public void changeLanguage(){         试试{

        Resources res = mContext.getResources();
        // Change locale settings in the app.
        DisplayMetrics dm = res.getDisplayMetrics();
        android.content.res.Configuration conf = res.getConfiguration();
        conf.locale = new Locale("en");
        // conf.locale = new Locale("en");
        res.updateConfiguration(conf, dm);
    } catch (Throwable throwable) {
        throwable.printStackTrace();
    }
}