使用 Kotlin 在 Android 应用中实现多语言切换
1. 准备多语言资源文件
在 res/values 目录下创建不同语言的字符串资源文件,例如:
- 默认英语:
values/strings.xml - 中文(简体):
values-zh-rCN/strings.xml - 西班牙语:
values-es-rES/strings.xml
示例内容(strings.xml):
<string name="welcome_message">Welcome</string>
2. 获取设备区域信息
通过 Locale 类获取当前系统语言和国家代码:
val currentLocale = Locale.getDefault()
val countryCode = currentLocale.country // 例如 "CN"、"US"
val languageCode = currentLocale.language // 例如 "zh"、"en"
3. 动态切换应用语言
在 Activity 或 Application 中重写语言配置:
fun setAppLocale(languageCode: String, countryCode: String?) {
val locale = countryCode?.let { Locale(languageCode, it) } ?: Locale(languageCode)
Locale.setDefault(locale)
val config = resources.configuration
config.setLocale(locale)
resources.updateConfiguration(config, resources.displayMetrics)
}
4. 根据国家/地区显示不同文本
通过条件判断加载对应字符串:
when (countryCode) {
"CN" -> textView.text = getString(R.string.welcome_message_chinese)
"US" -> textView.text = getString(R.string.welcome_message_english)
else -> textView.text = getString(R.string.welcome_message_default)
}
5. 处理运行时语言变更
在 Activity 中监听配置变化:
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
// 重新加载界面元素
recreate()
}
6. 持久化语言设置
使用 SharedPreferences 保存用户选择的语言:
val prefs = getSharedPreferences("Settings", Context.MODE_PRIVATE)
prefs.edit().putString("user_lang", languageCode).apply()
7. 应用启动时加载设置
在 Application 或基类 Activity 中初始化语言:
val savedLang = prefs.getString("user_lang", null)
savedLang?.let { setAppLocale(it, null) }
注意事项
- 测试时需模拟不同区域设备:通过开发者选项中的"模拟位置"或ADB命令修改区域设置
- 对于Android 7.0及以上版本,需使用
createConfigurationContext替代updateConfiguration - 考虑将语言切换逻辑封装至工具类,便于全局调用
646

被折叠的 条评论
为什么被折叠?



