如何禁用Flutter gen-l10n针对国别arb文件的未翻译消息警告
问题场景
项目本地化使用两套.arb文件:
en:存储全量英文翻译词条en_AU:仅存储澳大利亚英文和基础英文存在表述差异的词条
现有回退逻辑运行正常:en_AU区域下未收录的词条会自动复用en的对应内容。但执行flutter gen-l10n命令时,工具会针对en_AU的缺失词条抛出untranslated message(s)警告,需要实现仅关闭同语言国别变体的这类告警,同时保留其他不同语言文件的未翻译提示。
解决方案
方案1:配置基准语言(官方推荐,无副作用)
直接在项目根目录的l10n.yaml中添加base-locale配置,将全量词条所在的en设为基准语言:
arb-dir: lib/l10n # 替换为你项目中实际的en arb文件名 template-arb-file: app_en.arb output-localization-file: app_localizations.dart # 新增以下配置 base-locale: en
配置后重新执行flutter gen-l10n即可达到预期效果:
- 所有和基准语言语言代码一致的国别变体(包括
en_AU、en_GB等所有en_*区域),缺失词条时不会再抛出未翻译警告,正常走原有回退逻辑 - 其他和基准语言代码不同的语言文件(如
zh、ja、fr等),如果存在缺失词条,依然会正常抛出未翻译警告。
该配置兼容Flutter 3.0及以上所有稳定版本,不需要修改现有arb文件内容,不影响现有翻译逻辑。
方案2:单文件级警告忽略(适合多基准语言场景)
如果项目存在多组同语言国别变体(比如同时维护zh基准下的zh_HK、zh_TW变体,en基准下的en_AU、en_GB变体),不方便全局配置基准语言,可以在需要忽略警告的单个变体arb文件顶层添加元数据标记:
{ "@@locale": "en_AU", "@@suppressUnimplementedWarnings": true, // 下方仅保留和基础en有差异的翻译词条即可 "common.confirm": "Confirm (AU)" }
该标记仅对当前arb文件生效,不会影响其他语言文件的警告规则,Flutter 3.16及以上版本原生支持该配置。
低版本兼容方案
如果使用的Flutter版本低于3.0,无法使用上述官方配置,可以写一个轻量预处理脚本:执行flutter gen-l10n前,将en.arb的全量key同步到en_AU.arb(已存在的差异化key不覆盖),命令执行完成后再移除临时同步的冗余key即可。该方案维护成本较高,优先升级Flutter版本使用原生配置。
内容的提问来源于stack exchange,提问作者Grok_Narok
相关产品推荐
相关产品推荐

