【发布时间】:2021-07-12 08:09:24
【问题描述】:
我的 kotlin 应用程序中有一个启动画面,我可以在其中执行一些操作,例如加载数据。目前它只有德语,我想添加英语作为附加语言。 我已经创建了字符串资源等等。 现在我在 Splash-Screen 中添加了一些代码,它会检查用户是否已经设置了偏好语言(保存在 sharedPreferences 中)。
当没有保存任何内容时,会弹出一个简单的警报对话框,询问用户的偏好并相应地设置所有内容。 然后重新加载启动画面。当我在我的设备上选择英语(系统语言为德语)时,启动屏幕会获取正确的字符串资源(英语)。
但是当它更改为 MainActivity 时,它又是德语了。只有重新启动应用程序后,一切都是英文的。
以下是我如何更改初始屏幕上的语言:
private lateinit var mainIntent : Intent
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val prefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
var localeToSet: String? = prefs.getString("language", "")
if(localeToSet == null || localeToSet.equals("")){
val languages = arrayOf("Deutsch", "English")
val langSelectorBuilder = AlertDialog.Builder(this)
langSelectorBuilder.setTitle(R.string.selectLanguageText)
langSelectorBuilder.setCancelable(false)
langSelectorBuilder.setSingleChoiceItems(languages, -1) { dialog, selection ->
when(selection) {
0 -> {
localeToSet = "de"
setLocale("de")
}
1 -> {
localeToSet = "en"
setLocale("en")
}
}
recreate()
dialog.dismiss()
}.setOnDismissListener {
Handler().postDelayed({
startActivity(mainIntent)
finish()
}, SPLASH_TIME_OUT)
}
langSelectorBuilder.create().show()
}
else{
setLocale(localeToSet!!)
Handler().postDelayed({
startActivity(mainIntent)
finish()
}, SPLASH_TIME_OUT)
}
setContentView(R.layout.activity_splash_screen)
}
private fun createIntent(localeToSet: String){
mainIntent = Intent(this@SplashScreenActivity, MainActivity::class.java).apply {
//Do stuff and pass data to mainactivity
}
private fun setLocale(localeToSet: String) {
createIntent(localeToSet)
val config = resources.configuration
val locale = Locale(localeToSet)
Locale.setDefault(locale)
config.locale = locale
resources.updateConfiguration(config, resources.displayMetrics)
val prefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
val editor: SharedPreferences.Editor = prefs.edit()
editor.putString("language", localeToSet)
editor.apply()
}
【问题讨论】:
-
请原谅我在英语国家生活的无知,但我很好奇。在人们试图在他们的应用程序中放置语言设置之前,我在这里看到过一些问题。这在 Google Play 上的应用程序中是否常见?为什么不依赖语言的系统设置?如果系统设置为德语并且您的应用程序具有德语资源,那么它将自动以德语显示您的应用程序。用户必须在每个单独的应用程序中手动设置语言,这会不会很烦人?
-
问题是,当某人住在德国,但例如他的手机设置为匈牙利语时,Android 管理它的方式就好像它不是德语一样,因此该用户将获得英语(如果英语设置为默认值),即使该用户更喜欢使用德语作为语言。不是每个人都能流利地说或读英语:)
-
哦,我没有意识到 Android 不允许您按优先顺序设置语言队列。看起来它应该有一个明显的功能。