首页
/ Apache Airflow UI 希伯来语(Hebrew)国际化翻译指南:术语规范、复数规则与 RTL 实现细节

Apache Airflow UI 希伯来语(Hebrew)国际化翻译指南:术语规范、复数规则与 RTL 实现细节

2026-09-05 17:17:43作者:蔡怀权

本文围绕 Airflow 前端 UI 国际化(i18n)体系中的希伯来语(he)翻译规范展开。读完本文,你将掌握:Airflow UI 中哪些术语在希伯来语环境下必须保留英文、哪些术语必须使用既定希伯来语译名(如 Asset → נכס、Backfill → השלמה למפרע)、希伯来语特有的复数形式(_one / _two / _other)如何落地到 i18next 资源文件,以及 RTL(从右到左)排版下占位符与混合文本的处理规则——这些规范直接约束着 he 语言包目录 中 10 个命名空间 JSON 文件的编写与维护。

1. 背景:Airflow UI 的 i18n 体系与希伯来语的位置

Airflow Web UI 使用 i18next 体系进行国际化:语言代码、命名空间与加载路径都在 i18n 配置文件 中定义。希伯来语是受支持语言之一:

// airflow-core/src/airflow/ui/src/i18n/config.ts
export const supportedLanguages = [
  { code: "en", name: "English" },
  // ...
  { code: "he", name: "עברית" },
  // ...
] as const;

export const defaultLanguage = "en";
export const namespaces = [
  "common", "dashboard", "dags", "admin", "browse",
  "assets", "components", "hitl",
] as const;

翻译资源按命名空间组织,英文(en)是默认语言与翻译源语言,其他语言包的目录结构镜像英文包。希伯来语语言包当前包含以下文件(合计约 1500 行翻译键值):

airflow-core/src/airflow/ui/public/i18n/locales/he/
├── admin.json        # 管理页(配置、连接、插件、资源池、Provider、变量)
├── assets.json       # 资产(Asset)相关界面
├── browse.json       # 浏览页(审计日志、作业、XComs)
├── common.json       # 公共词汇表(状态、复数键、表格列等)
├── components.json   # 通用组件
├── dag.json          # 单 Dag 详情页
├── dags.json         # Dag 列表页
├── dashboard.json    # 仪表盘
├── hitl.json        # 人工介入(Human-in-the-loop)
└── tasks.json        # 任务筛选相关

运行时通过 i18next-http-backend${basePath}/static/i18n/locales/{{lng}}/{{ns}}.json 路径按需加载(见 config.ts 的 initI18n 实现),因此任何一个 {{lng}}=he 的 JSON 键缺失都会回退到英文——这正是"翻译完整性检查"机制存在的意义。

he.md 翻译规范 就是为希伯来语环境量身定制的语言细则(locale-specific guideline):它规定术语表、语气、格式约定,目标是让新增的希伯来语字符串与既有翻译完全一致。该规范派生自现有 he/*.json 语言文件(文档标注 Version 1.0),是整个 airflow-translations 技能 中"Locale-Specific Guidelines"表格为 he 代码登记的文件。

2. 核心 Airflow 术语:永不翻译项与既定希伯来语译名

2.1 全语言通用的"永不翻译"术语

以下术语在所有 Airflow 语言包中都保持英文原文,希伯来语环境也不例外:

术语 保持英文的原因
Airflow 产品名
Dag / Dags Airflow 约定概念,且永远写作 "Dag",绝不写 "DAG"
XCom / XComs Airflow 跨任务通信机制名称
UTC 时间标准
JSON 标准技术格式名
REST API 标准技术术语
Unix 操作系统名称
日志级别:CRITICALERRORWARNINGINFODEBUG 日志级别标识

可以对照验证:he/common.jsondag_one 的值就是 "Dag"dag_other"Dags"——希伯来语包对 Dag 本身不做意译,只在外围搭配希伯来语(如 dagRun_one"הרצת Dag",即"运行 Dag")。

2.2 希伯来语特有约定译名(必须一致复用)

与多数语言保留英文不同,既有希伯来语翻译把大部分 Airflow 概念译成了希伯来语。这些既定译名在新翻译中必须一致使用:

英文 希伯来语译名 说明
Asset / Assets נכס / נכסים 单数/复数
Backfill השלמה למפרע / השלמות למפרע 补数据
Plugin / Plugins תוסף / תוספים 插件
Pool / Pools מאגר משאבים 资源池
Provider / Providers חבילות עזר 辅助包
Trigger / Triggerer מפעיל 组件名词形式
Executor Executor 例外:保留英文
Heartbeat אות חיים 如 "Latest Heartbeat" → "אות חיים אחרון"(最新心跳)

这些译名可以在仓库中逐一验证。以 he/admin.json 的管理菜单为例,ConnectionsחיבוריםPluginsתוספיםPoolsמאגר משאביםProvidersחבילות עזרVariablesמשתניםhe/common.jsonasset_one: "נכס"asset_other: "נכסים"backfill_one: "השלמה למפרע"backfill_other: "השלמות למפרע" 均与规范完全一致。

实践要点:新增翻译前必须先查既有 he/*.json 文件中同一术语已经怎么译——"如果某个术语已经用某种方式翻译过,就复用那个精确译法",这是 SKILL.md 中更新已有翻译时的硬性要求,禁止自造新词汇。

3. 标准翻译词汇表(English → Hebrew)

规范第 2 节给出的标准翻译表是 UI 高频词汇的权威对照,完整继承如下:

English Term Hebrew Translation Notes
Task משימה
Task Instance מופע משימה
Task Group קבוצת משימות
Dag Run הרצת Dag
Trigger (verb) הפעלה "Triggered by" 译为 "מופעל על-ידי"
Trigger Rule כלל הפעלה
Scheduler מתזמן
Schedule (noun) תזמון
Operator אופרטור
Connection חיבור
Variable משתנה
Configuration הגדרות
Audit Log יומן ביקורת
State מצב
Queue (noun) בתור "queued" 用 תור
Duration משך זמן
Owner בעלים
Tags תגיות
Description תיאור
Documentation תיעוד
Timezone אזור זמן
Dark Mode מצב כהה
Light Mode מצב בהיר
Asset Event אירוע נכס
Dag Processor מעבד Dag
Try Number מספר נסיון

部分词条可在源码中交叉印证:he/tasks.jsonretriesניסיונות חוזרים(重试)、selectOperatorבחר אופרטורים(选择 Operator,印证 Operator 音译);he/common.jsonappearance.darkModeמצב כההlightModeמצב בהיר,与词汇表一致。

值得注意的一个细节:Scheduler(组件)译为 מתזמן(调度器,名词形态),而 Schedule(名词概念)译为 תזמון——两者词根相同但形态不同,翻译时不可混用。

4. Task/Run 状态映射表

UI 中任务实例(Task Instance)与运行(Run)的状态徽标使用固定映射,完整表如下:

English State Hebrew Translation
running בריצה
failed נכשלו
success הצליחו
queued בתור
scheduled בתזמון
skipped דולגו
deferred בהשהייה
removed הוסרו
restarting בהפעלה מחדש
up_for_retry בהמתנה לניסיון חוזר
up_for_reschedule בהמתנה לתזמון מחדש
upstream_failed משימות קודמות נכשלו
no_status / none ללא סטטוס
planned בתכנון

这一整张表可以直接在 he/common.json 的 states 键下 找到,实现与规范一一对应:

"states": {
  "awaiting_input": "ממתין לקלט",
  "deferred": "בהשהייה",
  "failed": "נכשלו",
  "no_status": "ללא סטטוס",
  "none": "ללא סטטוס",
  "open": "פנוי",
  "planned": "בתכנון",
  "queued": "בתור",
  "removed": "הוסרו",
  "restarting": "בהפעלה מחדש",
  "running": "בריצה",
  "scheduled": "בתזמון",
  "skipped": "דולגו",
  "success": "הצליחו",
  "up_for_reschedule": "בהמתנה לתזמון מחדש",
  "up_for_retry": "בהמתנה לניסיון חוזר",
  "upstream_failed": "משימות קודמות נכשלו"
}

从源码结构看,实现里还包含规范表未列出的 awaiting_input("ממתין לקלט")与 open("פנוי")两个键,说明语言包是规范的上位集:规范覆盖高频状态,实现侧按键补全。

5. 希伯来语特有规则

5.1 语气与语域

  • 使用中性、专业的希伯来语,适合技术软件 UI;
  • 既有翻译对祈使句和泛指场景使用阳性形式,新翻译须沿用这一既定约定;
  • UI 字符串要简短——它们出现在按钮、标签和 tooltip 中。

5.2 从右到左(RTL)排版注意事项

希伯来语是 RTL 语言,UI 布局需相应翻转。规范给出两条混合文本规则:

  1. 希伯来语 + 英文混排(如 "הרצת Dag")时,LTR 英文词在 RTL 上下文中会自然落在正确的阅读顺序位置,无需额外处理;
  2. i18next 占位符必须原样保留{{count}}{{dagName}}{{hotkey}} 等一律不得翻译、删除或改大小写,只允许按自然语序移动位置。

占位符在真实文件中有大量范例,例如 he/dag.json 中:

"mappedTaskInstances_one": "מופע משימה [{{count}}]",
"mappedTaskInstances_other": "מופעי משימה [{{count}}]"

此外 SKILL.md 的全局规则 进一步强调:{{...}} 内变量名永不翻译,但占位符位置可以调整以适配自然语序(例如把 {{dagDisplayName}} 从句首移到句尾)。

5.3 复数形式:_one / _two / _other

希伯来语使用 i18next 的复数后缀 _one_two_other。对于多数 Airflow UI 字符串,_two_other 相同,但只要既有文件中存在 _two 键就应保留。规范还提醒:口语希伯来语存在真正的双数形式(如一只袜子 גרב,两只袜子 גרביים,而非 "2 גרבים"),这在 Airflow UI 术语中极少涉及但需知晓。

这一语言级约定在构建工具侧有精确对应:breeze 的 ui_commands.py 中维护了每种语言的复数后缀表,其中:

PLURAL_SUFFIXES = {
    # ...
    "he": ["_one", "_two", "_other"],
}

也就是说,完整性检查工具会按 ["one", "two", "other"] 三个后缀校验希伯来语语言包。这与语言包中的实际数据吻合,he/common.json 中的复数键成组出现:

"asset_one": "נכס",
"asset_other": "נכסים",
"asset_two": "נכסים",

"backfill_one": "השלמה למפרע",
"backfill_other": "השלמות למפרע",
"backfill_two": "השלמות למפרע"

规范第 5 节给出的复数键示例(可直接复制为模式参考):

"task_one": "משימה",
"task_other": "משימות"
"dagRun_one": "הרצת Dag",
"dagRun_other": "הרצת Dags"

5.4 嵌入英文术语的大小写

希伯来语句中嵌入的英文术语必须保留原始大小写:Dag 不能写成 DAGdagXCom 不能写成 xcom。从 he/browse.json 可以看到 xcoms 键的值保持 "XComs" 原样。

6. 常见翻译模式实例(来自既有翻译)

规范第 5 节沉淀了四类可直接套用的模式,全部可在现有 he/*.json 中验证:

按钮动作动词(祈使句,阳性形式):

Add      → "הוסף"
Delete   → "מחק"
Save     → "שמור"
Reset    → "אתחל"
Cancel   → "בטל"
Confirm  → "אשר"
Download → "הורד"
Expand   → "הרחב"
Collapse → "צמצם"
Filter   → "סנן"

触发器(Triggerer)复合名词(采用希伯来语同格/סמיכות 复合结构):

triggerer.class           → "סוג מפעיל"        (触发器类型)
triggerer.id              → "מזהה מפעיל"        (触发器 ID)
triggerer.createdAt       → "זמן יצירת מפעיל"   (触发器创建时间)
triggerer.assigned        → "מפעיל מוקצה"       (已分配触发器)
triggerer.latestHeartbeat → "אות חיים אחרון"   (最新心跳)
triggerer.title           → "פרטי מפעיל"        (触发器详情)

计数式复数键(列表标题常用):

task_one                → "משימה"                task_other            → "משימות"
dagRun_one              → "הרצת Dag"              dagRun_other          → "הרצת Dags"
backfill_one            → "השלמה למפרע"          backfill_other        → "השלמות למפרע"
taskInstance_one        → "מופע משימה"           taskInstance_other    → "מופעי משימות"

状态键(单键映射,非复数):

running     → "בריצה"
failed      → "נכשלו"
success     → "הצליחו"
queued      → "בתור"
scheduled   → "בתזמון"

这些模式覆盖了 UI 中约一半的字符串形态:动词按钮、复合名词、{{count}} 复数标题、状态徽标。

7. 翻译工作流:脚手架、补全与校验

he.md 规范 的落地依托 SKILL.md 定义的标准流程。由于 he 语言包已存在,属于"更新已有翻译"路径,操作顺序为:

  1. 读语言细则:先读 locales/he.md,确立术语表与格式规则;
  2. 读既有 JSON:读 airflow-core/src/airflow/ui/public/i18n/locales/he/ 下现有文件,学习已用术语,保持一致;
  3. 检查完整性
breeze ui check-translation-completeness --language he
  1. 补齐缺失键(生成 TODO: translate: 占位):
breeze ui check-translation-completeness --language he --add-missing

生成的脚手架形如:

{
  "allRuns": "TODO: translate: All Runs",
  "blockingDeps": {
    "dependency": "TODO: translate: Dependency",
    "reason": "TODO: translate: Reason"
  }
}
  1. 清理无用键(英文语言包中不存在的键、或本语言不需要的复数后缀):
breeze ui check-translation-completeness --language he --remove-unused
  1. 翻译:替换所有 TODO: translate: 条目(含前缀),遵循本文第 2–6 节的术语与复数规则;
  2. 校验:完整性表应显示 0 missing、0 TODOs、0 unused、100% 覆盖率,然后运行 pre-commit 钩子修复格式、许可证与 lint 问题:
prek run --from-ref main --hook-stage pre-commit

注意希伯来语场景下第 5 步的判定依据正是 PLURAL_SUFFIXES["he"] = ["_one", "_two", "_other"]:如果某键只缺 _two 而该语言确实需要它,会被判为缺失;反之多余的 _two 若语言规则不需要则会被判为 unused。

8. Agent 指令清单:DO / DON'T

规范第 6 节给出了针对希伯来语翻译的硬性行为约束,完整继承如下:

DO(必须做):

  • 语气、风格、术语与既有 he/*.json 文件保持一致;
  • 使用专业、中性的希伯来语;
  • 保留所有 i18next 占位符:{{count}}{{dagName}}{{hotkey}} 等;
  • 复合名词沿用已确立的同格(סמיכות)结构;
  • 为每个复数键提供所需的全部复数后缀(_one_other,希伯来语含 _two);
  • 新增翻译前先检查既有翻译,维护一致性。

DON'T(禁止做):

  • 写 "DAG"——永远写 "Dag";
  • 使用口语或俚语希伯来语;
  • 在已有等价译法时自造新词汇;
  • 更改快捷键值(如 "hotkey": "e" 必须保持 "e");
  • 翻译 {{...}} 内的变量名或占位符;
  • 为英文术语附加希伯来语前置介词造成混写(如规范示例:不要写成 "ב-Dag",除非既有翻译已确立该形式)。

9. 小结

希伯来语翻译规范的技术核心可以浓缩为三点:

  1. 术语双轨制AirflowDagXComUTCJSONREST API、日志级别等全语言保留英文;而 Asset、Backfill、Pool、Provider、Plugin、Trigger、Heartbeat 等概念使用既定希伯来语译名并严格复用,Executor 是例外(保留英文);
  2. 希伯来语形态学约束:复数按 _one / _two / _other 三后缀生成(与 breeze 校验工具PLURAL_SUFFIXES["he"] 精确对应)、祈使句用阳性形式、复合名词用同格结构、嵌入英文保留原始大小写;
  3. 工程闭环:规范服务于 airflow-core/src/airflow/ui/public/i18n/locales/he/ 下 10 个命名空间 JSON 文件的增量维护,通过 breeze ui check-translation-completeness 的缺失/无用键检测 + pre-commit 钩子形成可验证的翻译质量闭环。

对照 he.md 规范SKILL.md 总流程he 语言包实现,即可完成希伯来语 UI 字符串的一致、可校验、可运行的翻译工作。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
588
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
906
1.83 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
891
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.53 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.34 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
987
506
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384