如何在 android 中通过区域设置设置俄语? Android 应用本地化

How to set Russian Language over Locale in android? Android App Localization

我的应用程序支持 3 种语言(英语、德语、俄语)。我使用 LocaleHelper class 进行语言设置,并将语言设置如下:

lateinit var alert: AlertDialog
                val options = arrayOf(
                    resources.getString(R.string.en_lang),
                    resources.getString(R.string.de_lang),
                    resources.getString(R.string.ru_lang))
                val dialogBuilder = AlertDialog.Builder(this, R.style.AboutAlertDialogStyle)
                dialogBuilder.setTitle(resources.getString(R.string.app_language))
                    .setSingleChoiceItems(options, position) { _, which ->
                        when {
                            options[which] == resources.getString(R.string.en_lang) -> {
                                LocaleHelper.setLocale(baseContext, "en").resources
                                alert.dismiss()
                                recreate()
                            }
                            options[which] == resources.getString(R.string.de_lang) -> {
                                LocaleHelper.setLocale(baseContext, "de").resources
                                alert.dismiss()
                                recreate()
                            }
                            else -> {
                                LocaleHelper.setLocale(baseContext, "ru").resources
                                alert.dismiss()
                                recreate()
                            }
                        }
                    }
                    .setNegativeButton(resources.getString(R.string.cancel)) { dialog, _ ->
                        dialog.cancel()
                    }
                alert = dialogBuilder.create()
                alert.show()

英语和德语一切正常。但不适合俄罗斯人。 我还根据这个 post 的第一个答案更改了 LocaleHelper class 中 Locale 的输入,如下所示:

public static Context setLocale(Context context, String language) {
        persist(context, language);
        Configuration configuration;
        Resources resources;
        Locale locale = null;

        if (language.equals("ru")) {
            locale = new Locale(language, "RU");
            Locale.setDefault(locale);
        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            configuration = context.getResources().getConfiguration();
            configuration.setLocale(locale);
            configuration.setLayoutDirection(locale);
            return context.createConfigurationContext(configuration);
        }

        locale = new Locale(language);
        Locale.setDefault(locale);
        resources = context.getResources();
        configuration = resources.getConfiguration();
        configuration.locale = locale;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
            configuration.setLayoutDirection(locale);
        resources.updateConfiguration(configuration, resources.getDisplayMetrics());
        return context;
    }

如何获得俄语 运行。当用户选择它时,应用会将语言更改为英语。

非常感谢!

我找到问题了!

我改变了

if (language.equals("ru")) {
        locale = new Locale(language, "RU");
        Locale.setDefault(locale);
}

if (language.equals("ru"))
        locale = new Locale(language, "RU");
else
        locale = new Locale(language);
Locale.setDefault(locale);

并移除

locale = new Locale(language);
Locale.setDefault(locale);

在第二个 if 语句之后