(Android)更改语言无法正常工作

时间:2016-06-15 13:46:59

标签: java android android-studio locale

我在MainActivity.java中选择了我的应用的语言,有时它无法正常使用。

这是我在onCreate方法上的代码:

if(!SaveSharedPreference.getUserId(MainActivity.this).equals("")) {
    if (SaveSharedPreference.getWhoLoggedIn(MainActivity.this).equals("Main_User")) {
        FetchUserLanguage fetchUserLanguage = new FetchUserLanguage();
        fetchUserLanguage.execute();
    } 
} else {
    sDefSystemDefaultLanguage = Resources.getSystem().getConfiguration().locale;
    Configuration configuration = new Configuration();
    configuration.locale = sDefSystemDefaultLanguage;
    getBaseContext().getResources().updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics());
}

FetchUserLanguage我从我的数据库中获取每个用户的语言(它正确地返回值)。

我设置Locale的方法是下一个:

@Override
protected void onPostExecute(String result) {
    switch (result) {
        case "English":
            locale = new Locale("en");
            configuration = new Configuration();
            configuration.locale = locale;
            getBaseContext().getResources().updateConfiguration(configuration,
                    getBaseContext().getResources().getDisplayMetrics());
            break;
        case "Deutsch":
            locale = new Locale("de");
            configuration = new Configuration();
            configuration.locale = locale;
            getBaseContext().getResources().updateConfiguration(configuration,
                    getBaseContext().getResources().getDisplayMetrics());
            break;
        default:
            locale = Resources.getSystem().getConfiguration().locale;
            configuration = new Configuration();
            configuration.locale = locale;
            getBaseContext().getResources().updateConfiguration(configuration,
                    getBaseContext().getResources().getDisplayMetrics());
            break;
    }
}

当我从Android Studio运行应用程序时,它运行完美,所有应用程序都以所选语言设置,但是,如果我关闭并再次打开它,第一个屏幕将以英语显示,(另一个是在德国)。设备的语言是英语,因此Android项目的默认语言也是如此。

也许我错过了什么。

非常感谢。

1 个答案:

答案 0 :(得分:1)

最后我找到了解决方案。

问题是我在异步线程中进行翻译过程,因此应用程序仍在运行,并且在屏幕更改之前,某些布局未更改为新语言。

解决方案是在onPostExecute()方法的末尾创建Intent:

@Override
protected void onPostExecute(String result) {
    switch (result) {
        case "English":
            locale = new Locale("en");
            Locale.setDefault(locale);
            configuration = new Configuration();
            configuration.locale = locale;
            SaveSharedPreference.setUserLanguage(MainActivity.this, locale.getLanguage());
            getBaseContext().getResources().updateConfiguration(configuration,
                    getBaseContext().getResources().getDisplayMetrics());
            break;
        case "Deutsch":
            locale = new Locale("de");
            Locale.setDefault(locale);
            configuration = new Configuration();
            configuration.locale = locale;
            SaveSharedPreference.setUserLanguage(MainActivity.this, locale.getLanguage());
            getBaseContext().getResources().updateConfiguration(configuration,
                    getBaseContext().getResources().getDisplayMetrics());
            break;
        default:
            locale = Resources.getSystem().getConfiguration().locale;
            Locale.setDefault(locale);
            SaveSharedPreference.setUserLanguage(MainActivity.this, locale.getLanguage());
            configuration = new Configuration();
            configuration.locale = locale;
            getBaseContext().getResources().updateConfiguration(configuration,
                    getBaseContext().getResources().getDisplayMetrics());
            break;
    }
    Intent intent = new Intent(MainActivity.this, MainMenuActivity.class);
    if(SaveSharedPreference.getUserType(MainActivity.this).equals("Full")) {
        intent.putExtra("Type", "Full");
    }
    startActivity(intent);
    finish();
}