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

标签 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中,我从数据库中获取每个用户的语言(它正确返回值)。

我设置区域设置的方法是下一个:

@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项目的默认语言也是英语。

也许我错过了一些东西。

非常感谢。

最佳答案

终于找到解决办法了。

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

解决方案是在 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();
}

关于java - (Android) 更改语言无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37837341/

相关文章:

java - 读取属于正在运行的 jar 一部分的文本文件

java - 如何在 ibm i 服务器上运行 java 程序

java - AspectJ - 从建议中访问类变量/方法值?

java - 将 Bouncy CastLe 的 AsymmetryCipherKeyPair (RSA) 转换为 java.security.KeyPair

Android 自定义 Drawable 与自定义 View

android - 无法在 Eclipse 中设置断点

android - 重用本地下载的 Android 库

"&"标记后无法读取使用 SAX 的 Android XML 解析

android-studio - Jetpack Compose 和 Hilt 冲突

android-studio - 如何在 Android Studio 中查看 NDK 的原始 Gradle 构建日志?