Apache Airflow UI 泰语翻译指南:术语保留策略、数式模式与本地化实现要点
本文为 Apache Airflow 国际化(i18n)体系中泰语(th)语言专属翻译指南的完整解读。它对应仓库中 th.md 这份 locale 级规范,读者读完后可掌握:哪些 Airflow 术语在泰语界面中必须保留英文、核心术语的标准泰语译法、泰语特有的数词与无性数变化规则,以及这些指南在 breeze 翻译校验工具 和 UI 语言配置中的落地方式。
文档定位:泰语翻译规范在 i18n 体系中的角色
Apache Airflow UI 的翻译工作由技能文档 SKILL.md 统一编排。该文档规定:翻译任务分为“新增语言”与“更新已有语言”两类,所有翻译 JSON 文件位于 airflow-core/src/airflow/ui/public/i18n/locales/<locale>/,英文 locale(en)是默认语言,也是所有翻译的主要来源。
在开始翻译某个语言前,必须先阅读该语言的 locale 专属指南;指南中规定了术语表(glossary)、语气规则与格式约定。SKILL.md 的“Locale-Specific Guidelines”表格列出了 19 种语言的指南文件,泰语对应 locales/th.md。其明确声明:
This document inherits all global rules from the parent SKILL.md.
也就是说,th.md 继承父文档的全部全局规则(如 {{variable}} 占位符不可翻译、hotkey 键值不翻译等),只在泰语特有的术语处理、数式模式、书写系统等方面给出补充规定。若 locale 指南与全局规则冲突,以 locale 指南为准。
从源码结构看,泰语目前已在 Airflow UI 中完整注册:config.ts 的 supportedLanguages 数组中包含 { code: "th", name: "ไทย" },且 locales/th/ 目录下已有 admin.json、assets.json、browse.json、common.json、components.json、dag.json、dags.json、dashboard.json、hitl.json、tasks.json 共 10 个命名空间文件,与英文 locale 的命名空间一一对应。
必须保留英文的核心术语
th.md 的第一部分规定了泰语翻译中必须保留英文的术语,分为三组。
核心技术术语(คำศัพท์ทางเทคนิค)
| 术语 | 处理方式 |
|---|---|
| Dag | 保留为 "Dag"(Airflow 惯例;绝不写成 "DAG") |
| Dag Run | 保留为 "Dag Run" |
| Task Instance | 保留为 "Task Instance" |
| XCom | 保留为 "XCom" |
| Asset | 保留为 "Asset" |
| Backfill | 保留为 "Backfill" |
| Dataset | 保留为 "Dataset" |
| Pool | 保留为 "Pool" |
| Sensor | 保留为 "Sensor" |
| Hook | 保留为 "Hook" |
| Operator | 译为 "โอเปอเรเตอร์" 或保留英文 |
| DagBag | 保留为 "DagBag" |
其中 "Dag 绝不用 DAG 全大写" 与父文档 SKILL.md 全局规则表中 "Dag / Dags:Airflow convention; always Dag, never DAG" 的要求完全一致。
UI 组件术语(ส่วนประกอบของอินเทอร์เฟซ)
| 术语 | 处理方式 |
|---|---|
| Tree View | 保留为 "Tree View" 或译为 "มุมมองต้นไม้" |
| Graph View | 保留为 "Graph View" 或译为 "มุมมองกราฟ" |
| Grid View | 保留为 "Grid View" 或译为 "มุมมองกริด" |
| Calendar View | 保留为 "Calendar View" 或译为 "มุมมองปฏิทิน" |
| Gantt Chart | 保留为 "Gantt Chart" 或译为 "แผนภูมิแกนต์" |
代码与技术引用
以下内容在泰语翻译中一律不翻译:
- 所有 Python 类名、函数名、变量名;
- 配置键(如
dag_id、task_id); - 命令行参数与 flag;
- 文件路径与 URL。
这一规则在实际翻译文件中可以得到印证。查看 th/common.json 可以看到:"dagId": "Dag ID"、"asset_one": "Asset"、"backfill_one": "Backfill" 等条目完整保留了英文术语,仅对说明性文字做了泰语翻译,例如 "dagRunTimeout": "ระยะหมดเวลาของ Dag Run"(Dag Run 超时时间)、"maxActiveTasks": "จำนวนงานที่ทำงานพร้อมกันสูงสุด"(同时运行任务数上限)。
常见 Airflow 术语的泰语译法
th.md 的“Common Airflow Terms in Thai”给出了三组标准译法表,是泰语翻译的权威术语对照。
核心概念(แนวคิดหลัก)
| English | Thai | Notes |
|---|---|---|
| Task | งาน | 标准译法 |
| Workflow | เวิร์กโฟลว์ | 音译 |
| Pipeline | ไปป์ไลน์ | 音译 |
| Connection | การเชื่อมต่อ | 标准译法 |
| Variable | ตัวแปร | 标准译法 |
| Provider | ผู้ให้บริการ | 标准译法 |
| Trigger | ทริกเกอร์ | 音译 |
| Scheduler | ตัวกำหนดการ | 标准译法 |
| Executor | ผู้ดำเนินการ | 标准译法 |
| Worker | ผู้ปฏิบัติงาน | 标准译法 |
| Webserver | เว็บเซิร์ฟเวอร์ | 音译 |
| Database | ฐานข้อมูล | 标准译法 |
动作(การกระทำ)
| English | Thai | Notes |
|---|---|---|
| Run | รัน / ทำงาน | 用音译 "รัน" 或 "ทำงาน" |
| Execute | ดำเนินการ | 标准译法 |
| Clear | ล้าง | 标准译法 |
| Retry | ลองใหม่ | 标准译法 |
| Fail | ล้มเหลว | 标准译法 |
| Mark as Failed | ทำเครื่องหมายว่าล้มเหลว | 短语 |
| Success | สำเร็จ | 标准译法 |
| Mark as Success | ทำเครื่องหมายว่าสำเร็จ | 短语 |
| Pause | หยุดชั่วคราว | 标准译法 |
| Unpause | ยกเลิกการหยุดชั่วคราว | 短语 |
状态(สถานะ)
| English | Thai | Notes |
|---|---|---|
| success | สำเร็จ | 标准译法 |
| running | กำลังดำเนินการ | 标准译法 |
| failed | ล้มเหลว | 标准译法 |
| upstream_failed | ต้นน้ำล้มเหลว | 直译 |
| skipped | ถูกข้าม | 标准译法 |
| queued | อยู่ในคิว | 标准译法 |
| scheduled | มีกำหนดการ | 标准译法 |
| deferred | เลื่อนเวลา | 标准译法 |
这组状态译法覆盖了 Airflow 任务实例状态机的主要状态,译者维护 UI 状态徽章、日志提示时可以直接引用。
泰语的数式模式(Pluralization)
泰语与英语不同,名词没有语法上的复数形态——无论数量多少,名词形式不变,数量信息由数字和限定词表达。
数字与名词搭配
在 Airflow UI 和消息中,数字通常按以下格式表达:
- 1 Task →
1 งาน - 2 Tasks →
2 งาน(名词形式不变) - Multiple Tasks →
งานหลายงาน(用限定词 "หลาย" 表示复数) - All Tasks →
งานทั้งหมด
数量指示词
| 泰语 | 含义 |
|---|---|
| ไม่มี | 无(0 项) |
| หนึ่ง | 一(1 项) |
| สอง | 二(2 项) |
| หลาย | 多个(3 项及以上) |
| ทั้งหมด | 全部 |
| บางส่วน | 部分 |
在 gettext(.po 文件)中的多式
文档给出的 gettext 多式写法为:
# Plural expression: 0
# Forms: _one, _other
msgid "%d task"
msgid_plural "%d tasks"
msgstr[0] "%d งาน"
msgstr[1] "%d งาน"
泰语的单数与复数形式使用相同翻译,数字后缀不随数量变化;需要表达复数语境时可用 "ทั้งหมด"(全部)等词。
需要注意仓库工具链中的实际配置:ui_commands.py 中 PLURAL_SUFFIXES 字典为泰语注册的是 "th": ["_other"](与日语、韩语、中文一致,只需 _other 一种 i18next 后缀),而阿拉伯语则有 _zero/_one/_two/_few/_many/_other 六种形态。从源码结构看,breeze 的 check-translation-completeness 校验会以该字典判定某语言“必需”的多式键——也就是说泰语 locale 只需保证 _other 键存在即可通过完整性检查。而实际的 th/common.json 中同时存在 dag_one/dag_other、asset_one/asset_other 等键,与英文 locale 的键结构保持对齐,这体现了指南中“与既有翻译保持一致”的要求。
书写系统与排版规则
th.md 对泰文书写系统给出 5 条规则:
- 书写方向:泰语自左向右书写(LTR),与英语相同;
- 文字系统:泰语翻译使用泰文字母(ตัวอักษรไทย);
- 混合内容:泰语与英文术语混排时,需保持合适的空格;
- 标点:泰语在使用标准标点的同时有其特定标点符号;
- 数字:技术语境中通用阿拉伯数字(0-9)。
文档给出的混合排版示例:
งาน Dag รันสำเร็จ (Dag run successful)
翻译风格指南(六条)
1. 技术术语何时保留英文
满足以下任一条件时,Dag、XCom、Operator 等术语保留英文:
- 出现在代码或配置示例中;
- 不存在清晰的泰语对应词;
- 该术语在技术社区中普遍以英语使用;
- 音译会使术语变得不清晰。
2. 音译 vs 意译
优先音译:专有名词与品牌名(Python、Apache、GitHub)、无直接译法的技术词(Workflow、Pipeline、Plugin)。
优先意译:常见概念(Task = งาน、Variable = ตัวแปร、Connection = การเชื่อมต่อ)、UI 元素(按钮 = ปุ่ม、菜单 = เมนู、视图 = มุมมอง)。
3. UI 标签
- 保持简洁且前后一致;
- 有标准泰语技术译法时使用标准译法;
- 例如 "Tree View" → "มุมมองต้นไม้" 或保留 "Tree View";
- 技术术语倾向于保留英文以保证清晰。
4. 动词与动作
UI 元素使用正式语体(รูปคำเป็นทางการ):
- "Run" → "รัน"(祈使)或 "ดำเนินการ"(正式);
- "Clear" → "ล้าง"(祈使);
- "Trigger" → "เรียก"(祈使)或 "ทริกเกอร์"(音译)。
5. 文档
- 使用正式泰语(ภาษาไทยรูปแบบทางการ);
- 全文术语保持一致;
- 首次引入新技术术语时给出英文原词作括注;
- 在合适处使用敬语。
6. 错误消息
- 错误消息必须清晰、可操作;
- 必要时在消息中保留英文技术细节,例如:
"การรันงานล้มเหลว: Task instance not found"; - 用礼貌但直接的语言表述错误。
常见翻译模式(Context Patterns)
针对高频出现的多义术语,指南给出了分语境的标准译法:
"Run" 语境
| 英文 | 泰语 |
|---|---|
| Run Dag | "รัน Dag" 或 "ดำเนินการ Dag" |
| Dag run(名词) | "การรัน Dag" 或 "Dag Run" |
| Run ID | "รันไอดี" 或 "Run ID" |
"Task" 语境
| 英文 | 泰语 |
|---|---|
| Task failed | "งานล้มเหลว" |
| Task instance | "Task Instance" 或 "อินสแตนซ์งาน" |
| Task ID | "Task ID" 或 "ไอดีงาน" |
"Dag" 语境
| 英文 | 泰语 |
|---|---|
| Dag run | "การรัน Dag" 或 "Dag Run" |
| Dag ID | "Dag ID" 或 "ไอดี Dag" |
| Sub Dag | "Dag ย่อย" 或 "Sub Dag" |
配置(Configuration)
| 英文 | 泰语 |
|---|---|
| Airflow Config | "การกำหนดค่า Airflow" 或 "Airflow Config" |
| Connection ID | "Connection ID" 或 "ไอดีการเชื่อมต่อ" |
| Pool name | "Pool name" 或 "ชื่อพูล" |
泰语语言特征对翻译的影响
1. 语序
泰语采用 SVO(主-谓-宾)语序,与英语相似:
- 英语:"Task runs successfully"
- 泰语:"งานรันสำเร็จ"(Task run successful)
2. 无冠词
泰语不使用冠词(a、an、the):
- "the task" → "งาน"
- "a connection" → "การเชื่อมต่อ"
3. 无动词时态变化
泰语动词不因时态而变形,时态由时间词和语境表达:
- "ran" → "รันแล้ว"(已运行)或 "รันไปแล้ว"(过去运行)
- "will run" → "จะรัน"(将要运行)
4. 敬语词尾
正式文档和 UI 中可使用语气词:
- ครับ(khrap)——男性使用者;
- ค่ะ(kha)——女性使用者。
但在技术文档中为保持简洁通常省略;UI 文本中为保持性别中立也一般不使用敬语词尾。
翻译者资源与实操要点
th.md 为泰语翻译者列出 6 类资源:
- 泰语技术术语:使用既定的泰语计算机术语;
- 风格指南:遵循正式泰语规范;
- 术语表:与既往翻译的 Airflow 内容保持一致;
- 测试:测试翻译,确保渲染与可读性正确;
- 社区:参考泰语技术文档社区保证一致性;
- 既有泰语 locale 文件:以现有泰语 locale 文件为权威术语来源,保证与既有翻译一致。
指南末尾的 Notes 进一步强调:该文档基于对现有 Airflow locale 文件和泰语翻译模式分析;随着翻译演进应更新指南以反映社区共识;拿不准时,优先保留英文术语并配泰语解释;一致性是关键——同一术语在 UI 全程使用同一译法;泰语用户对英文技术术语接受度较高,保留英文通常可被接受。
仓库中的实现佐证
将 th.md 的规则与仓库实际实现对照,可以确认三条落地证据:
- 语言注册:config.ts 将
{ code: "th", name: "ไทย" }加入supportedLanguages,UI 语言切换器因此能展示泰语选项(父文档 SKILL.md 规定新增语言必须更新该文件)。 - 多式校验:ui_commands.py 中
PLURAL_SUFFIXES字典为"th": ["_other"],breeze 的check-translation-completeness命令据此判定泰语必需的多式键。执行流程为:breeze ui check-translation-completeness --language th检查完整性;- 加
--add-missing为缺失键生成TODO: translate:桩; - 加
--remove-unused清理该语言不需要的多余键(如多余的多式后缀)。
- PR 标签:boring-cyborg.yml 中配置了
translation:th标签规则,指向airflow-core/src/airflow/ui/public/i18n/locales/th/*,使泰语翻译的 PR 自动获得独立标签,便于评审分流。
实际翻译样例上,th/common.json 体现了指南的全部要点:"Pools": "พูล"(音译保留)、"Connections": "การเชื่อมต่อ"(标准意译)、"dagId": "Dag ID"(术语保留英文)、"darkMode": "โหมดมืด"(UI 元素意译)。这与 th.md 中"音译/意译分场景选择、技术术语保留英文"的规则逐条对应。
小结
泰语 locale 指南 th.md 的核心可归纳为四点:
- 术语二分法:Dag、XCom、Asset、Backfill、Pool、Sensor、Hook、DagBag 等核心词保留英文(且 Dag 绝不全大写),Task、Variable、Connection 等通用概念用标准泰语译法,Workflow、Trigger 等用音译;
- 无复数形态:名词不随数量变化,数量由数字与限定词(หลาย、ทั้งหมด 等)表达,i18next 层面仓库只为泰语注册
_other一种多式后缀; - 排版约定:LTR 书写、中英混排留空格、技术语境用阿拉伯数字、UI 不强制敬语词尾;
- 一致性优先:与 locales/th/ 下既有翻译保持一致,拿不准时保留英文并附泰语解释。
遵循这套规则,配合 breeze 完整性校验与 pre-commit 钩子,即可产出与 Airflow UI 既有翻译风格一致的泰语本地化内容。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00