用途
fhir-ig-translation 用于为基于 IG-Publisher 的 FHIR 实施指南(IG)生成其在非默认语言下的翻译补充文件,并将它们放到发布器实际查找的位置。某份指南的配置决定哪个语言是源语言、哪些是目标语言,技能读取该配置而不是自行假定。
主要能力
- 定位并识别 IG 项目:在工作目录下预期存在 input/pagecontent/ 与 sushi-config.yaml 或 ig.ini。脚本 scripts/ig-translate.sh 会自行检查,若目录不是 IG 项目则以退出码 2 并给出消息退出,明确不报告"没有可翻译内容",以免掩盖静默失败。
- 推导语言对:读取指南自身的 sushi-config.yaml。i18n-default-lang 为源语言(即 input/pagecontent/ 所使用的语言,也是权威文本);每个 i18n-lang 条目为目标语言,会得到 /<lang>/ 下的渲染。若缺少 i18n-default-lang,采用发布器默认值且源语言未声明,技能会报告并询问而不是猜测。若未配置任何 i18n-lang,则尚无目标语言,添加目标语言属于对指南配置的更改,应由维护者决定。
- 先构建:资源补充文件需要已生成的资源,发布器会在每次构建时写入 fsh-generated/resources/ 并生成每个资源的补充模板。在构建通过前翻译意味着凭空创造 msgid 值。
- 区分职责边界:本技能负责指南自身内容(补丁与 input/translations/<lang>/ 下的翻译页面);模板包负责语言机制与策略(语言中立的页眉/页脚/CSS、继承的 UI 字符串目录、默认语言的选择)。
使用方式
脚本路径需先解析:SKILL_DIR=<包含此 SKILL.md 的目录>,然后在每次调用中使用它,不要从项目根目录直接运行 scripts/...(可能被项目自身的同名脚本静默覆盖)。
扫描以获得每个页面与资源的目标路径:
bash "$SKILL_DIR/scripts/ig-translate.sh" --scan <lang> # cwd = 指南根目录 bash "$SKILL_DIR/scripts/ig-translate.sh" --scan <lang> path/to/ig # 或指向它
语言参数为必填,脚本拒绝默认,任何运行都不会在无人选择语言的情况下静默翻译。
资源补充文件:每个 StructureDefinition、CodeSystem 或 Questionnaire 一个文件,位于 input/translations/<lang>/<Type>-<id>.po,msgid 为来自 fsh-generated/resources/<Type>-<id>.json 的精确源文本,msgstr 为译文。应复制发布器生成的模板而非手写 msgid。
叙述页面:每个页面一份翻译,位于 input/translations/<lang>/pagecontent/<相同文件名>.md——同名、同结构、同链接,FHIR 标识符不变。不要使用 input/pagecontent/ 下的 <name>-<lang>.md 兄弟文件。
菜单(若指南有):input/translations/<lang>/includes/menu.xml,对应 input/includes/menu.xml。sushi-config.yaml 中的 menu: 属性会生成一份无法翻译的菜单并与此竞争,二者不得并用。
IG 级目录:input/translations/<lang>/ImplementationGuide-<ig-id>.po,这不是资源补充文件,也非可选:没有它,pages:-tree 的页面标题会停留在默认语言。单位集应从 fsh-generated/resources/ImplementationGuide-<id>.json 的 definition.page 树构建(权威页面集),仅将 input/includes/menu.xml 用作措辞种子,对每处未翻译标题输出空 msgstr 与审阅标记。
校验:
bash "$SKILL_DIR/scripts/ig-translate.sh" --validate <lang>
发现 [WARN] 则以退出码 1 退出;无内容可校验会明确说明并以 0 退出(--strict 可让空翻译集也失败,适合 CI)。
适用场景
适用于为基于 IG-Publisher 的 FHIR 实施指南添加或核对其非默认语言的翻译补充文件,包括资源文本、叙述页面、菜单、IG 级目录与页面标题的本地化。也提供"harvest 模式":当目标语言的渲染已存在于某处时,采用它而不是重新翻译——填写 references/harvest-config.yaml 中的源与页面/制品映射,将现有 designation 或翻译扩展移入 .po 文件,将页面内容复制到对应路径并逐页引用源路径。
限制
该技能标注为实验性,自上次更改以来未对照真实任务验证,依赖其输出前需先验证。译文是呈现辅助,永远不是规范性文本;默认语言源文本始终领先且具有约束力。不得更改源文件,翻译只以增量方式放在 input/translations/<lang>/ 下。FHIR 标识符(name、id、codes、规范 URL)不翻译。禁止凭空编造,所有机器翻译须标记 TODO:REVIEW,双语人工审核为强制要求。默认行为是干跑扫描,仅在确认后才实际写入。变更以拉取请求形式交付,目标分支需依据仓库自身约定确定,不假定某个分支。当 i18n-lang 中声明某语言但 translation-sources 中缺失时,其 .po 文件会被静默忽略且默认语言渲染。工具链对 ValueSet 的 concept.display/concept.definition 是否可从普通 .po 补充文件翻译存在未解决的冲突记载,尚未经构建验证。相关文档也记录了若干已废弃的旧说法(如使用 <name>-<lang>.md 兄弟文件、声称叙述页面不可渲染等)以免被重新引入。