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

Fragment中Resources与getString()返回不同语言翻译的问题

Fragment中getString与resources.getString语言不一致问题

问题根源

Fragment的getString(int resId)和resources.getString(int resId)看似调用同一方法,实则依赖的上下文语言配置不同:

  • getString(int resId):Fragment的这个方法内部会调用关联Activity的getString(),用的是Activity当前的语言配置。
  • resources.getString(int resId):这里的resources来自Fragment自身的Context,要是Fragment的Context语言被单独修改过(比如手动设置Locale,或者语言切换后Fragment没重建),就会和Activity的语言配置脱节,导致返回不同语言的字符串。

排查与解决步骤

  1. 确认Locale差异
    先打印两者的Locale,验证配置是否不一致:

    // 打印Activity的语言配置
    Log.d("LangCheck", "Activity Locale: ${requireActivity().resources.configuration.locales[0]}")
    // 打印Fragment resources的语言配置
    Log.d("LangCheck", "Fragment Res Locale: ${resources.configuration.locales[0]}")
    
  2. 统一上下文使用
    要保证语言和Activity一致,直接用Fragment的getString(resId)或者requireActivity().getString(resId),别直接调用resources.getString()。

  3. 同步Fragment语言配置
    如果必须用Fragment的resources,可以手动同步Activity的配置:

    val activityConfig = requireActivity().resources.configuration
    val fragmentRes = resources
    fragmentRes.updateConfiguration(activityConfig, fragmentRes.displayMetrics)
    

    或者在语言切换后重新创建Fragment,让它自动加载最新的全局配置。

注意点

  • 尽量不要单独修改Fragment的Context语言,依赖Activity的全局配置能避免这类上下文不一致的问题。
  • 语言切换后,确保Activity和所有关联Fragment都能重新加载配置,避免残留旧语言资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:40:26