如何在整个应用程序中更改语言并记住它?

时间:2019-04-01 09:04:48

标签: android localization

我想更改应用程序语言,然后在所有活动中都记得使用。没有自定义库怎么办?

1 个答案:

答案 0 :(得分:0)

这是我的第一个自我回应,但我想与需要它的每个人分享我自己的语言改变方式。您可以在下面看到简单的步骤:

  1. 您必须使用所需的语言(如en,ru或smth)创建所有字符串资源。
  2. 然后,您必须在应用xml中添加smth来更改语言,例如按钮或复选框。
  3. 在活动中添加两个方法,以更改lang:

    private void changeLang(String lang) {
        if (lang.equalsIgnoreCase(""))
            return;
        Locale myLocale = new Locale(lang);
        Locale.setDefault(myLocale);
        android.content.res.Configuration config = new android.content.res.Configuration();
        config.locale = myLocale;
        this.getResources().updateConfiguration(config, this.getResources().getDisplayMetrics());
        sp = Objects.requireNonNull(getActivity()).getSharedPreferences("app_data", 0);
        saveLocale(lang);
    }
    
    private void saveLocale(String lang) {
        String langPref = "Language";
        SharedPreferences.Editor editor = sp.edit();
        editor.putString(langPref, lang).apply();
    }
    

changeLang方法中,您必须使用本地标识符。 最后,您必须在setContentView(...)之前在每个活动中检查您的sharedPreferences:

sp = getSharedPreferences("app_data", 0);
super.onCreate(savedInstanceState);
String lang = sp.getString("Language", Locale.getDefault().getLanguage());
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config,getResources().getDisplayMetrics());

我同意我的方法可能太简单,也可能创建错误,但这对我有帮助,因此我决定与您分享。也许smb将在他或她的项目中使用它。祝你好运:)