文档 · 参考
XLSX 与 CSV 文件格式
往返工作簿的架构:每个区域性一个工作表、Daxlate 读回的列布局,以及决定某一行能否导入的规则。
最后更新:
Daxlate 把翻译导出为 XLSX(通过 ClosedXML)或 CSV(通过 CsvHelper)。带报表层的
文件会导出两张工作表,模型和报表(或配对的 .model.csv 与
.report.csv);只有模型的文件则只导出模型这一层。本页先详细说明模型工作表,
然后说明报表工作表。
模型工作表的布局 #
模型工作表名为 Model(较早版本只有单层时把它命名为 Translations)。它的行
结构是:
| 行 | 内容 |
|---|---|
| 1 | 单元格 A1 中的架构版本标记(Daxlate/1.0,斜体,灰色) |
| 2 | 表头行,加粗,米色背景 |
| 3 及以后 | 每个可翻译对象一行 |
表头行会冻结,这样译者滚动时列标题始终可见。前四列同样冻结,这样向右滚过各个 区域性列时,身份列依然可见。
列 #
最前面是四个固定的信息列:
| 列 | 说明 |
|---|---|
Object ID | 导入时的身份键。请勿编辑。 |
Type | Table、Column、Measure、Hierarchy、Level 之一。 |
Parent | 所属对象的名称(例如度量值所在的表)。 |
Name | 该对象在模型中的名称(默认区域性的标题)。 |
之后,模型中的每个区域性各占两列:
Caption ({culture}) Description ({culture})
模型默认区域性所在的列带底纹背景,这样一眼就能看出哪一列是事实来源。
这两列中哪些会被写出,取决于导出时网格的视图开关:标题只写标题列, 描述只写描述列,两者则都写。无论哪种模式,每个对象都会占一行,包括还没有 描述的对象。
Object ID 约定 #
Daxlate 用对象的种类和限定名组合出 ID:
| 种类 | 形式 | 示例 |
|---|---|---|
| 表 | t.{Name} | t.Sales |
| 列 | c.{Table}.{Name} | c.Sales.Revenue |
| 度量值 | m.{Table}.{Name} | m.Sales.Total Revenue |
| 层次结构 | h.{Table}.{Name} | h.Date.Calendar |
| 层次结构级别 | {HierarchyId}.l{Ordinal} | h.Date.Calendar.l1 |
在模型中重命名对象会改变它的 ID。重新导入时,带有未知 Object ID 的行会在预览 对话框中以警告形式列出并被跳过;导入不会悄悄丢弃它们。
架构版本 #
XLSX 的单元格 A1(或 CSV 的第一行注释)承载架构版本。读取端会用明确的警告拒绝
主版本号更新的文件,并把缺失的标记按 1.0 处理,以兼容加入版本管理之前的导出。
当前标记是 Daxlate/1.0。新增列属于小版本变更(新列会被忽略并给出警告),破坏性
变更(例如换一套 Object ID 约定)属于大版本变更。
报表工作表 #
对带报表层的文件,第二张名为 Report 的工作表承载报表画布文字(视觉对象标题、
页眉、按钮、文本框)。它采用宽表、对译者友好的形式:每个文字元素一行,每种
语言一列 Value ({culture}),而不是模型工作表那种标题与描述成对的形式,这样译者
在一行里就能填完一条字符串的所有语言。导入会根据内容判断文件是模型工作表、报表
工作表还是双表工作簿,并应用对应的层。
在磁盘上,报表翻译作为按文件划分的伴随文件放在文件旁边,名为
{file}.daxlate.csv,也就是 Power BI 刷新时读取的那份实际生效的 CSV。模型翻译则
存在 .pbit 内部;要拿到它们的副本,请用导出。参见
翻译报表视觉对象。
CSV 布局 #
CSV 采用同样的列布局,以逗号分隔。第 1 行以注释形式承载架构标记:
# Daxlate/1.0
Object ID,Type,Parent,Name,Caption (en-US),Description (en-US),Caption (fr-FR),Description (fr-FR)
t.Sales,Table,,Sales,Sales,,Ventes,
c.Sales.Revenue,Column,Sales,Revenue,Revenue,,Chiffre d'affaires,
带 BOM 的 UTF-8、CRLF 换行,以便在 Excel 中双击打开。
空单元格 #
空白单元格表示**“尚未翻译”,导入时会被原样保留;它不会清除已有的翻译。这与 XLIFF、gettext 以及主流翻译平台的做法一致,因此交回一份只做了一半的文件,永远 不会抹掉译者还没顾上的行。导入预览会报告跳过了多少个空白。要删除某条翻译,请在 网格中清空它,或从区域性**下拉菜单中移除该语言。完整的重新导入流程参见 Excel 往返。