Skip to content

@sheng/no-i18n-t-fallback ​

禁止在 i18n 翻译函数调用里传 fallback,避免缺失 key 被调用点静默掩盖。

所属 config ​

  • i18n:翻译 key、调用点 fallback 和用户可见中文文案约定。

翻译函数里的 fallback 会掩盖缺失 key。页面短期能显示文字,但文案来源会变成「语言包 + 调用点兜底」两套体系,QA、静态扫描和翻译平台都更难发现问题。

调用点兜底会改变文案来源。后续整理多语言时,维护者需要同时相信语言包和组件内部 fallback;页面显示正常也不能证明 key 已经进入正式翻译流程。

会提示 ​

ts
t('profile_edit_title', { fallback: '基本信息' })
$t('string_save', { fallback: 'Save' })

推荐 ​

ts
t('profile_edit_title')
t('string_save')

没有 key 但设计稿已经给了具体文案时,直接保留真实文案并登记到文案流程,比临时造一个 key 再塞 fallback 更诚实。后续补齐语言包后,再统一替换成正式 key。

处理口径 ​

命中这条规则时,优先判断当前文案所处阶段:

  • 已有正式 key:删掉 fallback,只保留 t('key')。
  • 还没有正式 key:不要临时塞 fallback,先把真实文案进入文案清单或语言包流程。
  • 历史兼容层确实要兜底:把例外集中到项目 i18n 封装里,不要散落在每个组件调用点。

配置 ​

默认检查 t()、$t() 和 translateLegacy()。如果项目没有 translateLegacy(),可以通过 functionNames 改成自己的翻译函数名单。

相关阅读 ​

这条规则的方法论背景见中文文章 Skill 管不住代码风格时:把项目约定写成 ESLint 护栏。具体触发条件、示例、配置和维护入口以本页为准。

在线试一下 ​

接入方式 ​

@sheng/eslint-plugin 的内置 config 会以 warn 开启这条规则。需要单独配置时,可以这样写:

js
import sheng from '@sheng/eslint-plugin'

export default [
  {
    plugins: {
      '@sheng': sheng,
    },
    rules: {
      '@sheng/no-i18n-t-fallback': 'warn',
    },
  },
]

选项 ​

这条规则支持 options,具体 schema 以规则实现和测试用例为准。补充或调整选项时,同步更新本页示例。

维护入口 ​

  • 规则源码:src/rules/no-i18n-t-fallback/index.mjs
  • 规则短说明:src/rules/no-i18n-t-fallback/README.md
  • 测试用例:tests/unit/architecture/

基于 MIT 协议发布。