Apache Airflow 希腊语(el)UI 翻译规范:术语表、语法规则与实现细节
本文基于仓库内的 Airflow UI 希腊语(el)翻译 Agent 技能文件 el.md,系统讲解 Apache Airflow 新 UI 国际化(i18n)体系中希腊语翻译的完整规范:哪些 Airflow 核心术语必须保留英文、哪些术语有既定希腊语译法、任务状态与日志级别如何映射,以及希腊语特有的语法要求(性数、所有格、变音符、问号等)如何在 i18next 翻译 JSON 中落地。读完后,你将能够为 Airflow UI 新增或维护希腊语翻译,并保证与现有译文 100% 一致。
1. 希腊语在 Airflow UI 国际化体系中的位置
Airflow 的 UI 翻译采用 i18next 方案,翻译文件以 namespace 为单位的 JSON 文件存放于 airflow-core/src/airflow/ui/public/i18n/locales/<locale>/ 目录下。希腊语对应的 locale code 为 el,现有 10 个 namespace 文件与英语 locale(en/,默认语言)一一对应:
airflow-core/src/airflow/ui/public/i18n/locales/el/
├── admin.json
├── assets.json
├── browse.json
├── common.json
├── components.json
├── dag.json
├── dags.json
├── dashboard.json
├── hitl.json
└── tasks.json
SKILL.md 中列出的 18 个受支持 locale 均配有 locale-specific guideline 文件,希腊语对应 locales/el.md(即本文主体)。该文件的定位是:locale 特定指南——当它与全局翻译规则冲突时,以它为准。
从仓库源码可以确认希腊语已被完整接入 UI:
- config.ts 的
supportedLanguages数组中包含{ code: "el", name: "Ελληνικά" }; - ui_commands.py 的
PLURAL_SUFFIXES字典中"el"映射到MOST_COMMON_PLURAL_SUFFIXES = ["_one", "_other"],即希腊语只需提供单数与复数两种形式——这一点与本文 §5.3 的复数规则直接对应。
2. 必须保留英文的核心术语(§1)
希腊语指南的第一条硬性规则:以下 Airflow 核心术语必须保持英文原样(区分大小写),不得翻译:
| 术语 | 说明 |
|---|---|
Dag / Dags |
Airflow 约定,永远写作 "Dag",禁止写 "DAG" |
XCom / XComs |
Airflow 跨任务通信机制 |
Backfill / Backfills |
历史数据回补,作为可识别的技术术语保留 |
Pool / Pools |
资源约束机制 |
Map Index |
任务映射索引(注意:希腊语 UI 中有对应的希腊语译法 "Δείκτης Χάρτη",见 §3) |
PID |
Unix 进程标识符 |
ID |
通用缩写 |
UTC |
时间标准 |
JSON |
标准技术格式名 |
REST API |
标准技术术语 |
URI |
统一资源标识符 |
Gantt |
图表类型名 |
Catchup |
Dag 的 catchup 调度设置 |
日志级别 INFO、DEBUG |
保留英文(而 CRITICAL、ERROR、WARNING 需翻译,见 §4) |
这条规则与全局术语表(SKILL.md 中的 "Terms Kept in English" 一节的 Dag/XCom/Provider/REST API/JSON/ID/PID/UTC/Schema)叠加生效:希腊语指南在 Dag 上进一步收紧了大小写约束(不得写 "DAG")。
在 common.json 中可以直接验证该规则的实际落地:"Pools": "Pools"、"dag_one": "Dag"、"backfill_one": "Backfill" 均保留了英文原文。
3. 标准术语译表(§2)
以下是 Airflow 专有术语的既定希腊语译法,必须一致使用:
| 英文术语 | 希腊语译法 | 备注 |
|---|---|---|
| Task | Εργασία | 复数:"Εργασίες" |
| Task Instance | Εκτέλεση Εργασίας | 复数:"Εκτελέσεις Εργασίας" |
| Task Group | Ομάδα Εργασιών | 所有格构词 |
| Dag Run | Εκτέλεση Dag | 复数:"Εκτελέσεις Dag" |
| Run | Εκτέλεση | 复数:"Εκτελέσεις";可独立使用 |
| Trigger(名词) | Ενεργοποίηση | |
| Trigger Rule | Κανόνας Ενεργοποίησης | |
| Triggerer | Ενεργοποιητής | 组件名 |
| Scheduler | Προγραμματιστής | |
| Schedule(名词) | Πρόγραμμα | |
| Executor | Εκτελεστής | |
| Connection | Σύνδεση | 复数:"Συνδέσεις" |
| Variable | Μεταβλητή | 复数:"Μεταβλητές" |
| Audit Log | Καταγραφή Ελέγχου | 所有格构词 |
| Log | Καταγραφή | |
| State | Κατάσταση | |
| Queue(名词) | Ουρά | 例如 "queued" 译为 "Σε Ουρά" |
| Config / Configuration | Ρυθμίσεις | |
| Operator | Τελεστής | 复数:"Τελεστές" |
| Asset | Οντότητα | 复数:"Οντότητες"——希腊语特有处理,做了翻译 |
| Asset Event | Συμβάν Οντότητας | 复数:"Συμβάντα Οντοτήτων" |
| Plugin | Πρόσθετο | 复数:"Πρόσθετα" |
| Provider | Πάροχος | 复数:"Πάροχοι" |
| Dag Processor | Επεξεργαστής Dag | 组件名 |
| Heartbeat | Παλμός | |
| Map Index | Δείκτης Χάρτη | |
| Upstream(依赖关系) | Ανάντη | 用于状态,如 "Αποτυχία Ανάντη" |
| Upstream(动作) | Άνοδος | 用于 clear-task 操作选项 |
| Downstream(动作) | Κάθοδος | 用于 clear-task 操作选项 |
| Job(进程) | Διεργασία | |
| Slot | Θέση | 复数:"Θέσεις";如 "Θέσεις Pool" |
Asset 的希腊语特有处理
指南特别强调:与法语、加泰罗尼亚语等其他 locale("Asset" 保留英文)不同,希腊语将 "Asset" 翻译为 Οντότητα("实体"),且所有希腊语翻译中必须一致使用该译法。这一点在真实翻译文件中得到印证——assets.json 与 common.json 中大量使用 "Οντότητα/Οντότητες":
"asset_one": "Οντότητα",
"asset_other": "Οντότητες",
"assetEvent_one": "Συμβάν Οντότητας",
"assetEvent_other": "Συμβάντα Οντοτήτων"
4. 任务/运行状态与日志级别映射(§3)
4.1 状态(States)
| 英文状态 | 希腊语译法 |
|---|---|
| running | Εκτελείται |
| failed | Αποτυχία |
| success | Επιτυχία |
| queued | Σε Ουρά |
| scheduled | Προγραμματισμένο |
| skipped | Παραλείφθηκε |
| deferred | Αναβληθέν |
| removed | Αφαιρέθηκε |
| restarting | Επανεκκίνηση |
| up_for_retry | Προς Επανάληψη |
| up_for_reschedule | Προς Επαναπρογραμματισμό |
| upstream_failed | Αποτυχία Ανάντη |
| no_status / none | Χωρίς Κατάσταση |
| planned | Προγραμματισμένο |
4.2 日志级别(Log Levels)
希腊语对日志级别采取混合策略——高级别翻译为希腊语,低级别保留英文:
| 英文级别 | 希腊语译法 |
|---|---|
| CRITICAL | ΚΡΙΣΙΜΟ |
| ERROR | ΣΦΑΛΜΑ |
| WARNING | ΠΡΟΕΙΔΟΠΟΙΗΣΗ |
| INFO | INFO(保留) |
| DEBUG | DEBUG(保留) |
这与 §2 术语表中"日志级别 INFO、DEBUG 保留英文"的规定相互呼应。
5. 希腊语特有语言规范(§4)
这是本指南区别于其他 locale 的核心部分——希腊语的形态学要求在 UI 翻译中必须逐条落实。
5.1 语域与语气
- 一律使用正式体("εσείς/σας" 第二人称复数/尊称形式),禁止使用非正式的 "εσύ/σου";
- 使用中性、专业的语气,适合软件 UI;
- UI 字符串保持简洁——它们出现在按钮、标签和 tooltip 中。
5.2 名词的性(Gender)
希腊语名词分阳性(αρσενικό)、阴性(θηλυκό)、中性(ουδέτερο),形容词与冠词须与之匹配。指南给出了核心术语的定性:
| 术语 | 性 | 示例 |
|---|---|---|
| Dag | 中性 | "το Dag"、"ένα Dag" |
| Εργασία(Task) | 阴性 | "η εργασία"、"μια εργασία" |
| Εκτέλεση(Run/Execution) | 阴性 | "η εκτέλεση"、"μια εκτέλεση" |
| Σύνδεση(Connection) | 阴性 | "η σύνδεση" |
| Μεταβλητή(Variable) | 阴性 | "η μεταβλητή" |
| Οντότητα(Asset) | 阴性 | "η οντότητα" |
| Καταγραφή(Log) | 阴性 | "η καταγραφή" |
| Κατάσταση(State) | 阴性 | "η κατάσταση" |
值得注意的技术细节:借入的英文词 "Dag" 在希腊语中被约定为中性名词(το Dag),而本土译出的概念名词(Εργασία、Εκτέλεση 等)几乎全部为阴性。翻译含冠词的短语时必须按此配性,否则会产生语法错误。
5.3 复数形式(i18next _one / _other 后缀)
希腊语使用 i18next 的 _one 和 _other 两个复数后缀(与 ui_commands.py 中 "el": MOST_COMMON_PLURAL_SUFFIXES 的配置一致),必须使用术语表中的既定复数形式:
"task_one": "Εργασία",
"task_other": "Εργασίες"
"dagRun_one": "Εκτέλεση Dag",
"dagRun_other": "Εκτελέσεις Dag"
"asset_one": "Οντότητα",
"asset_other": "Οντότητες"
每个复数 key 都必须同时提供 _one 和 _other 两个变体,缺一不可。
5.4 所有格(Genitive Case)
希腊语用所有格表达 "of X" 关系,这对应英语中"名词作定语"的复合术语。常见模式示例:
"dagRunId": "ID Εκτέλεσης Dag", // "Dag 运行的 ID"
"taskGroup": "Ομάδα Εργασιών", // "任务组"
"auditLog": "Καταγραφή Ελέγχου", // "审计日志"
"assetEvent_one":"Συμβάν Οντότητας", // "资产事件"
"triggerRule": "Κανόνας Ενεργοποίησης" // "触发规则"
可以看到所有格通常体现为名词词尾变化(Εργασιών、Οντότητας),而非增加 "的" 字。
5.5 大小写
- 描述性文字与长字符串使用句首大写(sentence case);
- 标题、标签、按钮文本采用类标题式大写(与既有希腊语译文风格保持一致);
- 专有技术词始终首字母大写:"Dag"、"XCom"、"Backfill"、"Pool" 等。
5.6 变音符(Diacritics)——tonos
希腊语使用重音符号 tonos(΄)。必须始终保留重音字符——缺失变音符会改变词义或导致文本不可读。禁止写出 "Εκτελεση"、"Συνδεση"、"Εργασια"、"Οντοτητα"、"Καταγραφη"、"Κατασταση" 等无重音形式,必须使用 §3 术语表中带重音的标准形式(Εκτέλεση、Σύνδεση、Εργασία……)。
5.7 问号:erotimatiko(;)
希腊语问号是 erotimatiko(;),外观类似分号。翻译英文句子的 ? 时必须使用 ;:
"confirmation": "Είστε σίγουροι ότι θέλετε να διαγράψετε το {{resourceName}}; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί."
5.8 占位符与变量
- 所有
{{variable}}占位符必须原样保留,占位符名称永不翻译; - 需要时可调整语序以符合自然的希腊语句法,但变量名大小写必须严格保持不变(如
{{dagDisplayName}})。
6. 按钮动作动词标准译法(§5)
常用动作按钮的既定译法如下,翻译按钮类 key 时应直接复用:
Add → "Προσθήκη"
Delete → "Διαγραφή"
Edit → "Επεξεργασία"
Save → "Αποθήκευση"
Reset → "Επαναφορά"
Cancel → "Ακύρωση"
Confirm → "Επιβεβαίωση"
Clear → "Εκκαθάριση"
Search → "Αναζήτηση"
Copy → "Αντιγραφή"
这些译法在 tasks.json 等现有文件中均可验证,例如 "searchTasks": "Αναζήτηση εργασιών"(Search + Tasks 组合)、"selectOperator": "Επιλογή τελεστή"(复用了术语表中的 Τελεστής)。
7. Agent 工作守则:DO / DON'T(§6)
指南最后以清单形式给出 AI 翻译 Agent 的行为约束。
必须做(DO):
- 全程使用正式希腊语("εσείς/σας" 形式);
- 保留所有 i18next 占位符:
{{count}}、{{dagName}}、{{type}}等; - 对 "of X" 结构正确应用希腊语所有格;
- 为每个复数 key 提供
_one和_other两个后缀; - 将 "Asset" 译为 "Οντότητα"(希腊语特有,不保留英文);
- 翻译日志级别:CRITICAL→"ΚΡΙΣΙΜΟ"、ERROR→"ΣΦΑΛΜΑ"、WARNING→"ΠΡΟΕΙΔΟΠΟΙΗΣΗ";
- 所有希腊语单词保留 tonos 重音;
- 希腊语句中使用
;(erotimatiko)作为问号。
禁止做(DON'T):
- 写 "DAG"——必须用 "Dag";
- 翻译
XCom、Backfill、Pool、ID、JSON、REST API、UTC、PID; - 翻译
{{variable}}占位符名称; - 丢失希腊语变音符(例如绝不写 "Εκτελεση" 替代 "Εκτέλεση");
- 使用非正式的 "εσύ" 形式;
- 翻译 "INFO" 或 "DEBUG" 日志级别标签;
- 在希腊语句中使用英文
?作为问号。
8. 翻译工作流:与 Breeze 校验命令的衔接
el.md 是"语言规则层",实际翻译作业还要配合 SKILL.md 定义的工程流程:
-
读取术语基准:翻译前先阅读现有 locale 文件
airflow-core/src/airflow/ui/public/i18n/locales/el/(el.md §5 明确将其列为权威术语表)。已存在的译法必须原样复用;未翻译过的术语参照en/源文件并按本文规则处理。 -
补齐缺失 key:
breeze ui check-translation-completeness --language el breeze ui check-translation-completeness --language el --add-missing该命令会把英文 namespace 文件脚手架到
el/目录,每个 key 填充TODO: translate: <英文原文>占位符。 -
清理多余 key(英文 locale 中不存在、或该语言不需要的复数后缀):
breeze ui check-translation-completeness --language el --remove-unused -
翻译后验证:再次运行 completeness 检查,输出表应显示 0 missing、0 TODOs、0 unused、100% 覆盖率;随后运行 pre-commit 钩子(
prek run --from-ref main --hook-stage pre-commit)修复格式、license 与 lint 问题。
从源码结构看,--add-missing / --remove-unused 的复数后缀判断正是依赖 ui_commands.py 中 PLURAL_SUFFIXES 对 "el": ["_one", "_other"] 的登记——如果某个 locale 目录里出现 _few/_many 等希腊语不需要的后缀,就会被识别为 unused key 而清除。
9. 要点回顾
- 希腊语(
el)译文必须与airflow-core/src/airflow/ui/public/i18n/locales/el/下 10 个 namespace 文件的既有术语 100% 一致,现有 JSON 文件就是权威术语表; Dag(禁止 "DAG")、XCom、Backfill、Pool等 14 类术语保留英文;而INFO/DEBUG之外,CRITICAL/ERROR/WARNING须译为希腊语;- "Asset" 在希腊语中是少数派处理:译为 "Οντότητα" 而非保留英文,与法语等 locale 相反;
- 语法上须落实:正式语气、名词配性(Dag 为中性)、
_one/_other双复数、所有格构词、tonos 重音、erotimatiko 问号;; - 所有
{{placeholder}}原样保留,只允许调序、不允许改名单元或大小写; - 工程上以
breeze ui check-translation-completeness --language el系列命令闭环校验,PLURAL_SUFFIXES配置保证复数后缀与语言规则一致。
遵循以上规范,即可在 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