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

如何禁用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:51:26