You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 12与13应用内语言适配:getString返回不一致求兼容方案

兼容Android 12/13的应用内语言字符串获取方案

要统一在Android 12和13中获取应用内选中语言的字符串,核心是手动构建适配应用语言配置的Context,绕过系统默认Context的语言差异问题。

实现步骤

  1. 获取应用当前选中的语言配置
    从存储用户语言选择的地方(比如SharedPreferences)取出语言代码,构建对应的Locale对象,再创建包含该Locale的Configuration。

  2. 基于原Context创建适配语言的新Context
    使用Context.createConfigurationContext()方法,传入我们构建的配置,得到一个强制使用应用内语言的Context。

  3. 使用新Context获取字符串
    用这个新Context调用getString(),就能在所有系统版本中得到应用内选中语言的字符串。

完整代码示例

// 假设你已经有获取用户选中语言的方法,比如从SharedPreferences读取
fun getSelectedLocale(): Locale {
    val savedLang = // 从存储中获取用户选择的语言代码,比如"zh-CN"、"en-US"
    return Locale.forLanguageTag(savedLang)
}

// 扩展函数:获取适配应用语言的Context
fun Context.getAppLanguageContext(): Context {
    val selectedLocale = getSelectedLocale()
    val config = resources.configuration.apply {
        setLocale(selectedLocale)
        // 针对Android 17+,设置布局方向
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            setLayoutDirection(selectedLocale)
        }
    }
    return createConfigurationContext(config)
}

// 使用方式
val appLangContext = appContext.getAppLanguageContext()
val targetString = appLangContext.getString(R.string.your_string_key)

关键说明

  • Android 12及以下:系统默认Context的配置跟随系统语言,而我们创建的新Context强制使用应用内选中的Locale,因此能得到正确的应用语言字符串。
  • Android 13及以上:该方法的行为和系统默认getString()一致,但能保证在所有版本中逻辑统一,避免版本差异带来的问题。
  • 注意要确保getSelectedLocale()返回的是用户实际选中的语言,而不是系统语言,这样才能保证正确性。

内容的提问来源于stack exchange,提问作者Jithin Murali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:52:38