lingui-workflow · git:20260905.8844a98 · 2026-09-05 · sha256 8facd6f1f8354860
lingui-workflow git:20260905.8844a98A
Immutable. This exact content never changes and is served at /api/v1/blob/8facd6f1f8354860.
--- name: lingui-workflow description: Choose and troubleshoot extract, translation-check, compile, and catalog-manifest commands in an existing Lingui project. Use for daily catalog maintenance and command semantics, not initial setup, plain text translation, or choosing an i18n library. metadata: author: adonis --- # Lingui Workflow 处理已经接入 Lingui 的项目。先回答当前问题或执行已授权的步骤;只有用户要完整速查时才输出命令表。 ## Resolve the Project Contract - 复用本轮已确认的项目、包管理器和脚本信息。缺少时先读目标包的 `package.json` 与 Lingui 配置,再按问题查看对应入口;不预先读取所有脚本。 - `i18n:*` 是项目自定义名称,不是 Lingui 标准接口。下文示例来自已退役的 `lingui-next-init` 历史模板,仅用于维护既有项目;所有项目以实际脚本为准。不要因缺少 `scripts/i18n`、manifest 或 Next.js SWC 配置就判定普通 React/Lingui 接入不完整。 - `@your/web` 是占位符,先替换成已核实的包名;非 workspace 项目在目标包目录运行相应脚本。沿用已有包管理器。 - 首次接入不属于本 skill 范围,优先复用用户已选定的项目模板;不要调用已退役的初始化 skill。单纯问命令含义不运行写入命令。 ## Choose the Shortest Relevant Flow - **源码文案改变**:extract → 检查缺失翻译 → 完成翻译后 compile。 - **仅修改已有翻译**:检查目标 catalog → compile;没有词条漂移证据就不重复 extract。 - **只检查缺失翻译**:已存在的只读严格检查命令,例如 `i18n:check`;不附加 extract、占位回填或 compile。 - **只重建 manifest**:确认编译产物已经存在且新鲜,再运行 `i18n:manifest`。 - **编译或构建**:先确认 `i18n:compile` / build 是否已包含 manifest 或 compile,避免重复执行。 采用该历史脚本约定的既有项目,新增源码文案的示例: ```bash pnpm --filter @your/web run i18n:extract pnpm --filter @your/web run i18n:translate pnpm --filter @your/web run i18n:compile ``` `i18n:translate` 默认统计缺失,并不调用翻译服务。只有明确接受源文案占位时才用 `--fill-source`,不能把占位回填报告为完成翻译。 ## Command Semantics and Side Effects 需要参数或输入/输出细节时读 [references/i18n-commands.md](references/i18n-commands.md)。需要场景例子时读 [references/workflow-daily.md](references/workflow-daily.md)。不要为一个命令问题同时加载全部参考。 仅对经核对仍采用以下历史脚本约定的项目: - `i18n` 默认 extract + translate,显式 `--compile` 才编译;`i18n:sync` 仅 extract。 - `i18n:compile` 包含 manifest;`i18n:manifest` 不生成编译 catalog。 - `i18n:check` 是只读严格检查。组合入口的 `--strict` 仍会先 extract,不能作为只读检查的替代。 - extract 会改写 catalog,并可能清理不再归属的 entry。`I18N_DRY_RUN=1` 只预览清理阶段,**不阻止 extract 写入**;需要只读探测时选只读命令或可丢弃副本。 - CLI 失败与“没有缺失翻译”不同。保留实际退出状态;旧脚手架缺少新命令时说明版本差异,不假装执行成功。 ## Diagnose from the Observed Failure 从失败阶段开始,不固定重跑整个流程: 1. 文案未提取:检查对应源码、catalog include/entry 和 extract 结果。 2. 翻译未显示:核对目标 `po`、编译产物与实际 locale loader;有 manifest 的项目再检查它。 3. `Attempted to call a translation function without setting a locale`:先查 locale 初始化与调用顺序,不先修改翻译内容。 4. Next.js App Router / RSC:确认使用翻译的 server layout/page 在调用前完成 locale 初始化;共享服务端组件按已有版本和 `useLingui`/`Trans` 约定取上下文。此项不适用于普通 React 客户端项目。 运行命令只能证明对应步骤。涉及页面显示时,还需在目标 locale 的真实页面核对文案;没运行就标记 `UNVERIFIED`。 ## Maintaining These Skills 仅在修改本仓库 Lingui 工作流文档时读取 [references/maintenance-playbook.md](references/maintenance-playbook.md)。已有项目的命令语义变化经核实后,同步此入口与命令参考;不再维护或同步已退役的初始化模板,也不把仓库维护流程加入下游项目的日常翻译任务。