把 i18n 语言文件摊成译者能改的 Excel,改完再原样收回 YAML——嵌套键、序列、占位符、转义、键顺序全保真,回填不串行、层级不塌。不是泛 YAML 转表格,是给本地化工作流的那一道工序。
这一转换存在的理由,是让工程和译者各用自己顺手的工具,中间不丢东西。
后端 / Rails / Flutter / CI 最常用的语言文件:缩进键值对,常带嵌套(menu.start.label)、序列与复数分支(items[0]),值里夹着占位符({name}、%{count}、%s)。工程顺手,但不是给人在里头逐条改的。
译者、审校、外包最顺手的界面。一行一条,key 与译文并排,筛选、批量改、加批注都自然。代价是:裸 Excel 会把嵌套层级拍平、把 {name} 当普通文字,还会把没加引号的 NO、42 重新当成布尔或数字——回工程那头就装不回去了。
本工具守住的就是那点「装不回去」:导出时把嵌套键、序列索引、占位符、转义全部如实带进表格,并保住每个标量的类型——带引号的 "42" 仍是字符串、没加引号的 NO 绝不翻成布尔;导回时按 key 精确回填、还原层级。少数 YAML 结构无法塞进表格,会如实标注、绝不悄悄丢:注释、锚点 / 别名 / 合并键(展开为实际值)、多文档流(只转第一篇)、块标量样式(值保留、逐字节样式不保)。