Apache Airflow UI 希伯来语(Hebrew)国际化翻译指南:术语规范、复数规则与 RTL 实现细节
本文围绕 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 |
操作系统名称 |
日志级别:CRITICAL、ERROR、WARNING、INFO、DEBUG |
日志级别标识 |
可以对照验证:he/common.json 中 dag_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.json 中 asset_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.json 中 retries → ניסיונות חוזרים(重试)、selectOperator → בחר אופרטורים(选择 Operator,印证 Operator 音译);he/common.json 中 appearance.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 布局需相应翻转。规范给出两条混合文本规则:
- 希伯来语 + 英文混排(如
"הרצת Dag")时,LTR 英文词在 RTL 上下文中会自然落在正确的阅读顺序位置,无需额外处理; - 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 不能写成 DAG 或 dag,XCom 不能写成 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 语言包已存在,属于"更新已有翻译"路径,操作顺序为:
- 读语言细则:先读 locales/he.md,确立术语表与格式规则;
- 读既有 JSON:读
airflow-core/src/airflow/ui/public/i18n/locales/he/下现有文件,学习已用术语,保持一致; - 检查完整性:
breeze ui check-translation-completeness --language he
- 补齐缺失键(生成
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"
}
}
- 清理无用键(英文语言包中不存在的键、或本语言不需要的复数后缀):
breeze ui check-translation-completeness --language he --remove-unused
- 翻译:替换所有
TODO: translate:条目(含前缀),遵循本文第 2–6 节的术语与复数规则; - 校验:完整性表应显示 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. 小结
希伯来语翻译规范的技术核心可以浓缩为三点:
- 术语双轨制:
Airflow、Dag、XCom、UTC、JSON、REST API、日志级别等全语言保留英文;而 Asset、Backfill、Pool、Provider、Plugin、Trigger、Heartbeat 等概念使用既定希伯来语译名并严格复用,Executor 是例外(保留英文); - 希伯来语形态学约束:复数按
_one/_two/_other三后缀生成(与 breeze 校验工具 中PLURAL_SUFFIXES["he"]精确对应)、祈使句用阳性形式、复合名词用同格结构、嵌入英文保留原始大小写; - 工程闭环:规范服务于
airflow-core/src/airflow/ui/public/i18n/locales/he/下 10 个命名空间 JSON 文件的增量维护,通过breeze ui check-translation-completeness的缺失/无用键检测 + pre-commit 钩子形成可验证的翻译质量闭环。
对照 he.md 规范、SKILL.md 总流程 与 he 语言包实现,即可完成希伯来语 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