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

关于strings.xml中翻译lint错误与translatable=false的技术疑问

解答Android Lint报错:"is translated here but not found in default locale"的三个疑问

这种lint报错确实挺迷惑的,尤其是你明明按规范配置了还出问题,我结合自己踩过的坑给你逐个拆解:

1. 编辑默认语言环境文件为何提示“未在默认语言环境中找到”?

  • lint缓存搞的鬼:Android Studio的lint经常会缓存旧的扫描状态,哪怕你已经在默认values/strings.xml里补全了字符串,它还拿着旧数据瞎判断。亲测有效的解决办法是:File > Invalidate Caches... > Invalidate and Restart,清理缓存后重启AS再扫一遍,大概率能解决。
  • 默认locale识别偏差:有没有可能你项目里存在values-en这类文件夹,或者在build.gradle的defaultConfig里把某个非默认locale设成了基准?比如不小心加了resConfigs "en"或者locale "en",导致lint把values-en当成了默认语言文件夹,自然会觉得你真正的默认values里没对应字符串。
  • 字符串key拼写不一致:仔细核对下lint报错提示的key和你默认文件里的key,有没有大小写错误、多打/少打下划线这类细微差别——有时候眼睛一晃就漏过去了。

2. 设置translatable="false"为何仍触发翻译lint错误?

  • 属性写法不对:先确认你是不是把translatable="false"放在了<string>标签内部?正确的写法应该是:
    <string name="your_key" translatable="false">你的内容</string>
    
    如果写错了位置(比如放在<resources>标签里)或者拼写错误(比如写成translatable="flase"),lint根本识别不到这个属性。
  • 旧版lint的bug:某些老版本的Android Lint对translatable="false"的支持有问题,会忽略这个属性继续触发翻译检查。可以尝试把Android Studio升级到最新稳定版,或者在项目根目录的lint.xml里临时禁用这个规则(不过优先建议解决根源):
    <lint>
        <issue id="MissingTranslation" severity="ignore" />
    </lint>
    
  • 其他引用源干扰:有没有可能这个字符串在第三方库、或者你用的翻译工具里被标记为需要翻译?比如某些工具会自动给字符串加@Translatable注释,导致lint误判。

3. 为何俄语字符串未出现该错误?

这个其实很好理解:lint触发“is translated here but not found in default locale”报错的前提是——某个语言的翻译文件夹里存在这个字符串,但默认locale文件夹里没有。

俄语的values-ru文件夹里确实没有这个字符串,所以lint没的可检测,自然不会报错。而报错的那些语言(比如pl、iw),大概率是之前不小心在对应的values-pl/strings.xml、values-iw/strings.xml里添加过这个字符串,后来删除不彻底(比如残留了空标签),或者lint缓存里还存着旧的扫描记录,导致lint误以为这些文件夹里有这个字符串,从而触发报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:31:19