如何在 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
语句之后
我的应用程序支持 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
语句之后