jscheffl commented on code in PR #65115: URL: https://github.com/apache/airflow/pull/65115#discussion_r3106946921
########## airflow-core/src/airflow/ui/public/i18n/locales/de/README.md: ########## Review Comment: In my view you can delete the file after content is transferred to the new format ########## .github/skills/airflow-translations/locales/de.md: ########## @@ -0,0 +1,307 @@ +<!-- SPDX-License-Identifier: Apache-2.0 + https://www.apache.org/licenses/LICENSE-2.0 --> + +# German (de) Translation Agent Skill + +**Locale code:** `de` +**Preferred variant:** Standard German (de), using formal "Sie" register, consistent with existing translations in `airflow-core/src/airflow/ui/public/i18n/locales/de/` + +This file contains locale-specific guidelines so AI translation agents produce +new German strings that stay 100% consistent with the existing translations. + +## 1. Core Airflow Terminology + +### Global Airflow terms (never translate) + +These terms are defined as untranslatable across **all** Airflow locales. +Do not translate them regardless of language: + +- `Airflow` — Product name +- `Dag` / `Dags` — Airflow concept; never write "DAG" Review Comment: Missing detail: ```suggestion - `Dag` / `Dags` — Airflow concept; never write "DAG". Use neuter form (not male, female). ``` ########## .github/skills/airflow-translations/locales/de.md: ########## @@ -0,0 +1,307 @@ +<!-- SPDX-License-Identifier: Apache-2.0 + https://www.apache.org/licenses/LICENSE-2.0 --> + +# German (de) Translation Agent Skill + +**Locale code:** `de` +**Preferred variant:** Standard German (de), using formal "Sie" register, consistent with existing translations in `airflow-core/src/airflow/ui/public/i18n/locales/de/` + +This file contains locale-specific guidelines so AI translation agents produce +new German strings that stay 100% consistent with the existing translations. + +## 1. Core Airflow Terminology + +### Global Airflow terms (never translate) + +These terms are defined as untranslatable across **all** Airflow locales. +Do not translate them regardless of language: + +- `Airflow` — Product name +- `Dag` / `Dags` — Airflow concept; never write "DAG" +- `PID` — Unix process identifier +- `ID` — Universal abbreviation +- `UTC` — Time standard +- `JSON` — Standard technical format name +- `REST API` — Standard technical term +- Log levels: `CRITICAL`, `ERROR`, `WARNING`, `INFO`, `DEBUG` + +### Translated by convention (German-specific) + +The existing German translations translate many Airflow terms into native German. +These established translations **must be used consistently**: + +- `Asset` / `Assets` → `Datenset (Asset)` / `Datensets (Assets)` — includes English term in parentheses +- `XCom` / `XComs` → `Task Kommunikation (XComs)` — descriptive with English in parentheses +- `Backfill` → `Auffüllung` / `Auffüllungen` +- `Catchup` → `Nachgeholt` +- `Plugin` / `Plugins` → `Plug-in` / `Plug-ins` — hyphenated German spelling +- `Pool` / `Pools` → `Pool` / `Pools` — kept in English +- `Provider` / `Providers` → `Provider` / `Providers` — kept in English +- `Executor` → `Ausführungsumgebung` +- `Trigger` / `Triggerer` → `Abrufumgebung` / `Abrufumgebungs-Information` (component); translated in context + +## 2. Standard Translations + +The following Airflow-specific terms have established German translations +that **must be used consistently**: + +| English Term | German Translation | Notes | +| --------------------- | ------------------------------------- | ---------------------------------------------- | +| Task | Task | Kept in English; plural: "Tasks" | +| Task Instance | Task Instanz | Plural: "Task Instanzen" | +| Task Group | Task Gruppe | | +| Dag Run | Dag Lauf | Plural: "Dag Läufe" | +| Trigger (verb) | Auslösen | "Ausgelöst durch" for "Triggered by" | +| Trigger Rule | Auslöse-Regel | | +| Scheduler | Zeitplaner | | +| Schedule (noun) | Zeitplan | | +| Operator | Operator | Plural: "Operatoren" | +| Connection | Verbindung | Plural: "Verbindungen" | +| Variable | Variable | Plural: "Variablen" | +| Configuration | Konfiguration | | +| Audit Log | Prüf-Log | | +| State | Status | | +| Queue (noun) | Warteschlange | "Wartend" for "queued" | +| Duration | Laufzeit | | +| Owner | Eigentümer | | +| Tags | Markierungen | | +| Description | Beschreibung | | +| Documentation | Dokumentation | Short form in nav: "Doku" | +| Timezone | Zeitzone | | +| Dark Mode | Dunkelmodus | | +| Light Mode | Hellmodus | | +| Asset Event | Ereignis zu Datenset (Asset) | Plural: "Ereignisse zu Datensets (Asset)" | +| Dag Processor | Dag Prozessor | | +| Heartbeat | Lebenszeichen | e.g., "Letztes Lebenszeichen" | +| Upstream / Downstream | Vorgelagert / Nachgelagert | | + +## 3. Task/Run States + +| English State | German Translation | +| ------------------- | ----------------------------- | +| running | Laufend | +| failed | Fehlgeschlagen | +| success | Erfolgreich | +| queued | Wartend | +| scheduled | Geplant | +| skipped | Übersprungen | +| deferred | Delegiert | +| removed | Entfernt | +| restarting | Im Neustart | +| up_for_retry | Wartet auf neuen Versuch | +| up_for_reschedule | Wartet auf Neuplanung | +| upstream_failed | Vorgelagerte fehlgeschlagen | +| no_status / none | Kein Status | +| planned | Geplant | + +## 4. German-Specific Guidelines + +### Tone and Register + +- Use **formal German** ("Sie" form). Do not use "du". +- Use a professional, precise tone suitable for technical software UIs. +- Keep UI strings concise — they appear in buttons, labels, and tooltips. + +### Gender and Articles + +- German nouns have grammatical gender; match articles and adjectives accordingly: + - "Dag" is treated as **masculine**: "der Dag", "ein Dag" Review Comment: Wrong ```suggestion - "Dag" is treated as **neuter**: "das Dag", "ein Dag" ``` ########## .github/skills/airflow-translations/locales/de.md: ########## @@ -0,0 +1,307 @@ +<!-- SPDX-License-Identifier: Apache-2.0 + https://www.apache.org/licenses/LICENSE-2.0 --> + +# German (de) Translation Agent Skill + +**Locale code:** `de` +**Preferred variant:** Standard German (de), using formal "Sie" register, consistent with existing translations in `airflow-core/src/airflow/ui/public/i18n/locales/de/` + +This file contains locale-specific guidelines so AI translation agents produce +new German strings that stay 100% consistent with the existing translations. + +## 1. Core Airflow Terminology + +### Global Airflow terms (never translate) + +These terms are defined as untranslatable across **all** Airflow locales. +Do not translate them regardless of language: + +- `Airflow` — Product name +- `Dag` / `Dags` — Airflow concept; never write "DAG" +- `PID` — Unix process identifier +- `ID` — Universal abbreviation +- `UTC` — Time standard +- `JSON` — Standard technical format name +- `REST API` — Standard technical term +- Log levels: `CRITICAL`, `ERROR`, `WARNING`, `INFO`, `DEBUG` + +### Translated by convention (German-specific) + +The existing German translations translate many Airflow terms into native German. +These established translations **must be used consistently**: + +- `Asset` / `Assets` → `Datenset (Asset)` / `Datensets (Assets)` — includes English term in parentheses +- `XCom` / `XComs` → `Task Kommunikation (XComs)` — descriptive with English in parentheses +- `Backfill` → `Auffüllung` / `Auffüllungen` +- `Catchup` → `Nachgeholt` +- `Plugin` / `Plugins` → `Plug-in` / `Plug-ins` — hyphenated German spelling +- `Pool` / `Pools` → `Pool` / `Pools` — kept in English +- `Provider` / `Providers` → `Provider` / `Providers` — kept in English +- `Executor` → `Ausführungsumgebung` +- `Trigger` / `Triggerer` → `Abrufumgebung` / `Abrufumgebungs-Information` (component); translated in context + +## 2. Standard Translations + +The following Airflow-specific terms have established German translations +that **must be used consistently**: + +| English Term | German Translation | Notes | +| --------------------- | ------------------------------------- | ---------------------------------------------- | +| Task | Task | Kept in English; plural: "Tasks" | +| Task Instance | Task Instanz | Plural: "Task Instanzen" | +| Task Group | Task Gruppe | | +| Dag Run | Dag Lauf | Plural: "Dag Läufe" | +| Trigger (verb) | Auslösen | "Ausgelöst durch" for "Triggered by" | +| Trigger Rule | Auslöse-Regel | | +| Scheduler | Zeitplaner | | +| Schedule (noun) | Zeitplan | | +| Operator | Operator | Plural: "Operatoren" | +| Connection | Verbindung | Plural: "Verbindungen" | +| Variable | Variable | Plural: "Variablen" | +| Configuration | Konfiguration | | +| Audit Log | Prüf-Log | | +| State | Status | | +| Queue (noun) | Warteschlange | "Wartend" for "queued" | +| Duration | Laufzeit | | +| Owner | Eigentümer | | +| Tags | Markierungen | | +| Description | Beschreibung | | +| Documentation | Dokumentation | Short form in nav: "Doku" | +| Timezone | Zeitzone | | +| Dark Mode | Dunkelmodus | | +| Light Mode | Hellmodus | | +| Asset Event | Ereignis zu Datenset (Asset) | Plural: "Ereignisse zu Datensets (Asset)" | +| Dag Processor | Dag Prozessor | | +| Heartbeat | Lebenszeichen | e.g., "Letztes Lebenszeichen" | +| Upstream / Downstream | Vorgelagert / Nachgelagert | | + +## 3. Task/Run States + +| English State | German Translation | +| ------------------- | ----------------------------- | +| running | Laufend | +| failed | Fehlgeschlagen | +| success | Erfolgreich | +| queued | Wartend | +| scheduled | Geplant | +| skipped | Übersprungen | +| deferred | Delegiert | +| removed | Entfernt | +| restarting | Im Neustart | +| up_for_retry | Wartet auf neuen Versuch | +| up_for_reschedule | Wartet auf Neuplanung | +| upstream_failed | Vorgelagerte fehlgeschlagen | +| no_status / none | Kein Status | +| planned | Geplant | + +## 4. German-Specific Guidelines + +### Tone and Register + +- Use **formal German** ("Sie" form). Do not use "du". +- Use a professional, precise tone suitable for technical software UIs. +- Keep UI strings concise — they appear in buttons, labels, and tooltips. + +### Gender and Articles + +- German nouns have grammatical gender; match articles and adjectives accordingly: + - "Dag" is treated as **masculine**: "der Dag", "ein Dag" Review Comment: Was explicit mentioned in https://github.com/boschglobal/airflow/blob/main/airflow-core/src/airflow/ui/public/i18n/locales/de/README.md ########## .github/skills/airflow-translations/locales/de.md: ########## @@ -0,0 +1,307 @@ +<!-- SPDX-License-Identifier: Apache-2.0 + https://www.apache.org/licenses/LICENSE-2.0 --> + +# German (de) Translation Agent Skill + +**Locale code:** `de` +**Preferred variant:** Standard German (de), using formal "Sie" register, consistent with existing translations in `airflow-core/src/airflow/ui/public/i18n/locales/de/` + +This file contains locale-specific guidelines so AI translation agents produce +new German strings that stay 100% consistent with the existing translations. + +## 1. Core Airflow Terminology + +### Global Airflow terms (never translate) + +These terms are defined as untranslatable across **all** Airflow locales. +Do not translate them regardless of language: + +- `Airflow` — Product name +- `Dag` / `Dags` — Airflow concept; never write "DAG" +- `PID` — Unix process identifier +- `ID` — Universal abbreviation +- `UTC` — Time standard +- `JSON` — Standard technical format name +- `REST API` — Standard technical term +- Log levels: `CRITICAL`, `ERROR`, `WARNING`, `INFO`, `DEBUG` + +### Translated by convention (German-specific) + +The existing German translations translate many Airflow terms into native German. +These established translations **must be used consistently**: + +- `Asset` / `Assets` → `Datenset (Asset)` / `Datensets (Assets)` — includes English term in parentheses +- `XCom` / `XComs` → `Task Kommunikation (XComs)` — descriptive with English in parentheses +- `Backfill` → `Auffüllung` / `Auffüllungen` +- `Catchup` → `Nachgeholt` +- `Plugin` / `Plugins` → `Plug-in` / `Plug-ins` — hyphenated German spelling +- `Pool` / `Pools` → `Pool` / `Pools` — kept in English +- `Provider` / `Providers` → `Provider` / `Providers` — kept in English +- `Executor` → `Ausführungsumgebung` +- `Trigger` / `Triggerer` → `Abrufumgebung` / `Abrufumgebungs-Information` (component); translated in context + +## 2. Standard Translations + +The following Airflow-specific terms have established German translations +that **must be used consistently**: + +| English Term | German Translation | Notes | +| --------------------- | ------------------------------------- | ---------------------------------------------- | +| Task | Task | Kept in English; plural: "Tasks" | +| Task Instance | Task Instanz | Plural: "Task Instanzen" | +| Task Group | Task Gruppe | | +| Dag Run | Dag Lauf | Plural: "Dag Läufe" | +| Trigger (verb) | Auslösen | "Ausgelöst durch" for "Triggered by" | +| Trigger Rule | Auslöse-Regel | | +| Scheduler | Zeitplaner | | +| Schedule (noun) | Zeitplan | | +| Operator | Operator | Plural: "Operatoren" | +| Connection | Verbindung | Plural: "Verbindungen" | +| Variable | Variable | Plural: "Variablen" | +| Configuration | Konfiguration | | +| Audit Log | Prüf-Log | | +| State | Status | | +| Queue (noun) | Warteschlange | "Wartend" for "queued" | +| Duration | Laufzeit | | +| Owner | Eigentümer | | +| Tags | Markierungen | | +| Description | Beschreibung | | +| Documentation | Dokumentation | Short form in nav: "Doku" | +| Timezone | Zeitzone | | +| Dark Mode | Dunkelmodus | | +| Light Mode | Hellmodus | | +| Asset Event | Ereignis zu Datenset (Asset) | Plural: "Ereignisse zu Datensets (Asset)" | +| Dag Processor | Dag Prozessor | | +| Heartbeat | Lebenszeichen | e.g., "Letztes Lebenszeichen" | +| Upstream / Downstream | Vorgelagert / Nachgelagert | | + +## 3. Task/Run States + +| English State | German Translation | +| ------------------- | ----------------------------- | +| running | Laufend | +| failed | Fehlgeschlagen | +| success | Erfolgreich | +| queued | Wartend | +| scheduled | Geplant | +| skipped | Übersprungen | +| deferred | Delegiert | +| removed | Entfernt | +| restarting | Im Neustart | +| up_for_retry | Wartet auf neuen Versuch | +| up_for_reschedule | Wartet auf Neuplanung | +| upstream_failed | Vorgelagerte fehlgeschlagen | +| no_status / none | Kein Status | +| planned | Geplant | + +## 4. German-Specific Guidelines + +### Tone and Register + +- Use **formal German** ("Sie" form). Do not use "du". +- Use a professional, precise tone suitable for technical software UIs. +- Keep UI strings concise — they appear in buttons, labels, and tooltips. + +### Gender and Articles + +- German nouns have grammatical gender; match articles and adjectives accordingly: + - "Dag" is treated as **masculine**: "der Dag", "ein Dag" + - "Task" is treated as **masculine**: "der Task" + - "Lauf" (Run) is **masculine**: "der Lauf", plural: "die Läufe" + - "Verbindung" is **feminine**: "die Verbindung" + - "Variable" is **feminine**: "die Variable" + - "Datenset" is **neuter**: "das Datenset" + +### Compound Nouns + +- German forms compound nouns. The existing translations use spaces between Airflow terms + for readability: "Dag Lauf" (not "Daglauf"), "Task Instanz" (not "Taskinstanz"). +- Follow this established pattern for consistency. + +### Plural Forms + +- German uses i18next plural suffixes `_one` and `_other` only: + + ```json + "task_one": "Task", + "task_other": "Tasks" + ``` + + ```json + "dagRun_one": "Dag Lauf", + "dagRun_other": "Dag Läufe" + ``` + +### Capitalization + +- All German **nouns** are capitalized (standard German orthography). +- Use **title case** for UI headers and navigation items. +- Use **sentence case** for descriptions and longer messages. + +### Parenthetical English Terms + +- The German locale uses a unique pattern of including the English term in parentheses + after the German translation for clarity: + - "Datenset (Asset)" — helps users recognize the Airflow concept + - "Task Kommunikation (XComs)" + - "Durch Datenset (Asset) ausgelöst" for "Asset triggered" +- Follow this pattern for any new terms that have well-known English equivalents in Airflow. + +## 5. Examples from Existing Translations + +**Terms with parenthetical English:** + +``` +Asset → "Datenset (Asset)" +Assets → "Datensets (Assets)" +XCom → "Task Kommunikation (XComs)" +Asset Event → "Ereignis zu Datenset (Asset)" +``` + +**Common translation patterns:** + +``` +task_one → "Task" +task_other → "Tasks" +dagRun_one → "Dag Lauf" +dagRun_other → "Dag Läufe" +backfill_one → "Auffüllung" +backfill_other → "Auffüllungen" +taskInstance_one → "Task Instanz" +taskInstance_other → "Task Instanzen" +allRuns → "Alle Läufe" +running → "Laufend" +failed → "Fehlgeschlagen" +success → "Erfolgreich" +queued → "Wartend" +scheduled → "Geplant" +``` + +**Triggerer compound nouns — translated to German:** + +``` +triggerer.class → "Abruf-Klasse" +triggerer.id → "Abrufungs ID" +triggerer.createdAt → "Zeitpunkt der Erstellung" +triggerer.assigned → "Zugewiesene Abrufumgebung" +triggerer.latestHeartbeat → "Letztes Lebenszeichen" +triggerer.title → "Abrufumgebungs-Information" +``` + +**Action verbs (buttons):** + +``` +Add → "Hinzufügen" +Delete → "Löschen" +Edit → "Bearbeiten" +Save → "Speichern" +Reset → "Zurücksetzen" +Cancel → "Abbrechen" +Confirm → "Bestätigen" +Import → "Importieren" +Search → "Suche" +Filter → "Filter" +Download → "Herunterladen" +Expand → "Ausblenden" +Collapse → "Einblenden" +``` + +**Health/status labels:** + +``` +Healthy → "Gesund" +Unhealthy → "Fehlerhaft" +``` + +## 6. Agent Instructions (DO / DON'T) + +**DO:** + +- Match tone, style, gender agreement, and casing from existing `de/*.json` files +- Use formal German ("Sie" form) throughout +- Preserve all i18next placeholders: `{{count}}`, `{{dagName}}`, `{{hotkey}}`, etc. +- Capitalize all nouns (standard German orthography) +- Include English terms in parentheses for Airflow-specific concepts where the existing translations do so +- Provide all needed plural suffixes (`_one`, `_other`) for each plural key +- Check existing translations before adding new ones to maintain consistency + +**DON'T:** + +- Write "DAG" — always write "Dag" +- Use informal "du" — always use "Sie" register +- Use colloquial or regional German expressions +- Invent new vocabulary when an equivalent already exists in the current translations +- Change hotkey values (e.g., `"hotkey": "e"` must stay `"e"`) +- Translate variable names or placeholders inside `{{...}}` +- Omit parenthetical English terms where the pattern has been established + +## 7. Rationale for Translation Choices + +This section documents *why* each translation decision was made. It is derived +from `airflow-core/src/airflow/ui/public/i18n/locales/de/README.md`, which is +now superseded by this skill file as the single source of truth. + +### Formal register ("Sie") + +German distinguishes formal from informal address. Because the user group is +unknown, the formal "Sie" register was chosen throughout. + +### Why certain terms are not translated + +- **Dag / Dags** — Following the devlist discussion + ["Airflow should deprecate the term 'DAG' for end users"](https://lists.apache.org/thread/lktrzqkzrpvc1cyctxz7zxfmc0fwtq2j) + and the global rename to `Dag`, this brand-like term is retained. Translating + it as "Workflow" would be misleading for experienced Airflow users. `Dag` is + treated as neuter in German ("der Dag"). +- **Log levels (CRITICAL, ERROR, WARNING, INFO, DEBUG)** — These strings also + appear verbatim in log output, so they must not be translated. +- **Pool / Pools** — Directly understood in German; "Schwimmbad" would be + absurd, and "Ressourcen-Pool" is too verbose. +- **Provider / Providers** — Translating this does not improve comprehension; + the English term is well understood in German. +- **Operator / Operatoren** — Mathematical/technical term that also appears in + code; alternatives like "Betreiber-Implementierung" are too cumbersome. + +### Why specific translations were chosen + +- **`Asset` → `Datenset (Asset)`** — New term in Airflow 3, so a meaningful + German translation is appropriate. The English original is kept in + parentheses so new users can recognise the Airflow concept. Exception: in + the navigation bar the shorter form "Datensets" is used without the + parenthetical to save space. +- **`Asset Event` → `Ereignis zu Datenset (Asset)`** — Logical consequence of + the Asset translation; avoids the clumsy "Datensatz-Ereignis". +- **`Backfill` → `Auffüllen` / `Auffüllung`** — The technical meaning (filling + gaps in historical runs) maps well to the German concept of "auffüllen". +- **`Bundle` → `Bündel`** — Direct translation that matches the intended meaning. +- **`Catchup` → `Nachholen`** — Direct translation. +- **`Connection` → `Verbindung`** — Although a technical Airflow construct, the + direct translation is immediately accessible to new users. Review Comment: Dag ID is missing from the take-over of the other document ```suggestion direct translation is immediately accessible to new users. - **`Dag ID`**: No translation. `ID` should be favored to be upper case following German Duden. ``` ########## .github/skills/airflow-translations/locales/de.md: ########## @@ -0,0 +1,307 @@ +<!-- SPDX-License-Identifier: Apache-2.0 + https://www.apache.org/licenses/LICENSE-2.0 --> + +# German (de) Translation Agent Skill + +**Locale code:** `de` +**Preferred variant:** Standard German (de), using formal "Sie" register, consistent with existing translations in `airflow-core/src/airflow/ui/public/i18n/locales/de/` + +This file contains locale-specific guidelines so AI translation agents produce +new German strings that stay 100% consistent with the existing translations. + +## 1. Core Airflow Terminology + +### Global Airflow terms (never translate) + +These terms are defined as untranslatable across **all** Airflow locales. +Do not translate them regardless of language: + +- `Airflow` — Product name +- `Dag` / `Dags` — Airflow concept; never write "DAG" +- `PID` — Unix process identifier +- `ID` — Universal abbreviation +- `UTC` — Time standard +- `JSON` — Standard technical format name +- `REST API` — Standard technical term +- Log levels: `CRITICAL`, `ERROR`, `WARNING`, `INFO`, `DEBUG` + +### Translated by convention (German-specific) + +The existing German translations translate many Airflow terms into native German. +These established translations **must be used consistently**: + +- `Asset` / `Assets` → `Datenset (Asset)` / `Datensets (Assets)` — includes English term in parentheses +- `XCom` / `XComs` → `Task Kommunikation (XComs)` — descriptive with English in parentheses +- `Backfill` → `Auffüllung` / `Auffüllungen` +- `Catchup` → `Nachgeholt` +- `Plugin` / `Plugins` → `Plug-in` / `Plug-ins` — hyphenated German spelling +- `Pool` / `Pools` → `Pool` / `Pools` — kept in English +- `Provider` / `Providers` → `Provider` / `Providers` — kept in English +- `Executor` → `Ausführungsumgebung` +- `Trigger` / `Triggerer` → `Abrufumgebung` / `Abrufumgebungs-Information` (component); translated in context + +## 2. Standard Translations + +The following Airflow-specific terms have established German translations +that **must be used consistently**: + +| English Term | German Translation | Notes | +| --------------------- | ------------------------------------- | ---------------------------------------------- | +| Task | Task | Kept in English; plural: "Tasks" | +| Task Instance | Task Instanz | Plural: "Task Instanzen" | +| Task Group | Task Gruppe | | +| Dag Run | Dag Lauf | Plural: "Dag Läufe" | +| Trigger (verb) | Auslösen | "Ausgelöst durch" for "Triggered by" | +| Trigger Rule | Auslöse-Regel | | +| Scheduler | Zeitplaner | | +| Schedule (noun) | Zeitplan | | +| Operator | Operator | Plural: "Operatoren" | +| Connection | Verbindung | Plural: "Verbindungen" | +| Variable | Variable | Plural: "Variablen" | +| Configuration | Konfiguration | | +| Audit Log | Prüf-Log | | +| State | Status | | +| Queue (noun) | Warteschlange | "Wartend" for "queued" | +| Duration | Laufzeit | | +| Owner | Eigentümer | | +| Tags | Markierungen | | +| Description | Beschreibung | | +| Documentation | Dokumentation | Short form in nav: "Doku" | +| Timezone | Zeitzone | | +| Dark Mode | Dunkelmodus | | +| Light Mode | Hellmodus | | +| Asset Event | Ereignis zu Datenset (Asset) | Plural: "Ereignisse zu Datensets (Asset)" | +| Dag Processor | Dag Prozessor | | +| Heartbeat | Lebenszeichen | e.g., "Letztes Lebenszeichen" | +| Upstream / Downstream | Vorgelagert / Nachgelagert | | + +## 3. Task/Run States + +| English State | German Translation | +| ------------------- | ----------------------------- | +| running | Laufend | +| failed | Fehlgeschlagen | +| success | Erfolgreich | +| queued | Wartend | +| scheduled | Geplant | +| skipped | Übersprungen | +| deferred | Delegiert | +| removed | Entfernt | +| restarting | Im Neustart | +| up_for_retry | Wartet auf neuen Versuch | +| up_for_reschedule | Wartet auf Neuplanung | +| upstream_failed | Vorgelagerte fehlgeschlagen | +| no_status / none | Kein Status | +| planned | Geplant | + +## 4. German-Specific Guidelines + +### Tone and Register + +- Use **formal German** ("Sie" form). Do not use "du". +- Use a professional, precise tone suitable for technical software UIs. +- Keep UI strings concise — they appear in buttons, labels, and tooltips. + +### Gender and Articles + +- German nouns have grammatical gender; match articles and adjectives accordingly: + - "Dag" is treated as **masculine**: "der Dag", "ein Dag" + - "Task" is treated as **masculine**: "der Task" + - "Lauf" (Run) is **masculine**: "der Lauf", plural: "die Läufe" + - "Verbindung" is **feminine**: "die Verbindung" + - "Variable" is **feminine**: "die Variable" + - "Datenset" is **neuter**: "das Datenset" + +### Compound Nouns + +- German forms compound nouns. The existing translations use spaces between Airflow terms + for readability: "Dag Lauf" (not "Daglauf"), "Task Instanz" (not "Taskinstanz"). +- Follow this established pattern for consistency. + +### Plural Forms + +- German uses i18next plural suffixes `_one` and `_other` only: + + ```json + "task_one": "Task", + "task_other": "Tasks" + ``` + + ```json + "dagRun_one": "Dag Lauf", + "dagRun_other": "Dag Läufe" + ``` + +### Capitalization + +- All German **nouns** are capitalized (standard German orthography). +- Use **title case** for UI headers and navigation items. +- Use **sentence case** for descriptions and longer messages. + +### Parenthetical English Terms + +- The German locale uses a unique pattern of including the English term in parentheses + after the German translation for clarity: + - "Datenset (Asset)" — helps users recognize the Airflow concept + - "Task Kommunikation (XComs)" + - "Durch Datenset (Asset) ausgelöst" for "Asset triggered" +- Follow this pattern for any new terms that have well-known English equivalents in Airflow. + +## 5. Examples from Existing Translations + +**Terms with parenthetical English:** + +``` +Asset → "Datenset (Asset)" +Assets → "Datensets (Assets)" +XCom → "Task Kommunikation (XComs)" +Asset Event → "Ereignis zu Datenset (Asset)" +``` + +**Common translation patterns:** + +``` +task_one → "Task" +task_other → "Tasks" +dagRun_one → "Dag Lauf" +dagRun_other → "Dag Läufe" +backfill_one → "Auffüllung" +backfill_other → "Auffüllungen" +taskInstance_one → "Task Instanz" +taskInstance_other → "Task Instanzen" +allRuns → "Alle Läufe" +running → "Laufend" +failed → "Fehlgeschlagen" +success → "Erfolgreich" +queued → "Wartend" +scheduled → "Geplant" +``` + +**Triggerer compound nouns — translated to German:** + +``` +triggerer.class → "Abruf-Klasse" +triggerer.id → "Abrufungs ID" +triggerer.createdAt → "Zeitpunkt der Erstellung" +triggerer.assigned → "Zugewiesene Abrufumgebung" +triggerer.latestHeartbeat → "Letztes Lebenszeichen" +triggerer.title → "Abrufumgebungs-Information" +``` + +**Action verbs (buttons):** + +``` +Add → "Hinzufügen" +Delete → "Löschen" +Edit → "Bearbeiten" +Save → "Speichern" +Reset → "Zurücksetzen" +Cancel → "Abbrechen" +Confirm → "Bestätigen" +Import → "Importieren" +Search → "Suche" +Filter → "Filter" +Download → "Herunterladen" +Expand → "Ausblenden" +Collapse → "Einblenden" +``` + +**Health/status labels:** + +``` +Healthy → "Gesund" +Unhealthy → "Fehlerhaft" +``` + +## 6. Agent Instructions (DO / DON'T) + +**DO:** + +- Match tone, style, gender agreement, and casing from existing `de/*.json` files +- Use formal German ("Sie" form) throughout +- Preserve all i18next placeholders: `{{count}}`, `{{dagName}}`, `{{hotkey}}`, etc. +- Capitalize all nouns (standard German orthography) +- Include English terms in parentheses for Airflow-specific concepts where the existing translations do so +- Provide all needed plural suffixes (`_one`, `_other`) for each plural key +- Check existing translations before adding new ones to maintain consistency + +**DON'T:** + +- Write "DAG" — always write "Dag" +- Use informal "du" — always use "Sie" register +- Use colloquial or regional German expressions +- Invent new vocabulary when an equivalent already exists in the current translations +- Change hotkey values (e.g., `"hotkey": "e"` must stay `"e"`) +- Translate variable names or placeholders inside `{{...}}` +- Omit parenthetical English terms where the pattern has been established + +## 7. Rationale for Translation Choices + +This section documents *why* each translation decision was made. It is derived +from `airflow-core/src/airflow/ui/public/i18n/locales/de/README.md`, which is +now superseded by this skill file as the single source of truth. + +### Formal register ("Sie") + +German distinguishes formal from informal address. Because the user group is +unknown, the formal "Sie" register was chosen throughout. + +### Why certain terms are not translated + +- **Dag / Dags** — Following the devlist discussion + ["Airflow should deprecate the term 'DAG' for end users"](https://lists.apache.org/thread/lktrzqkzrpvc1cyctxz7zxfmc0fwtq2j) + and the global rename to `Dag`, this brand-like term is retained. Translating + it as "Workflow" would be misleading for experienced Airflow users. `Dag` is + treated as neuter in German ("der Dag"). +- **Log levels (CRITICAL, ERROR, WARNING, INFO, DEBUG)** — These strings also + appear verbatim in log output, so they must not be translated. +- **Pool / Pools** — Directly understood in German; "Schwimmbad" would be + absurd, and "Ressourcen-Pool" is too verbose. Review Comment: ```suggestion - **Pool / Pools** — Directly understood in German; "Schwimmbad" (swimming pool) would be absurd, and "Ressourcen-Pool" is too verbose. ``` ########## .github/skills/airflow-translations/locales/de.md: ########## @@ -0,0 +1,307 @@ +<!-- SPDX-License-Identifier: Apache-2.0 + https://www.apache.org/licenses/LICENSE-2.0 --> + +# German (de) Translation Agent Skill + +**Locale code:** `de` +**Preferred variant:** Standard German (de), using formal "Sie" register, consistent with existing translations in `airflow-core/src/airflow/ui/public/i18n/locales/de/` + +This file contains locale-specific guidelines so AI translation agents produce +new German strings that stay 100% consistent with the existing translations. + +## 1. Core Airflow Terminology + +### Global Airflow terms (never translate) + +These terms are defined as untranslatable across **all** Airflow locales. +Do not translate them regardless of language: + +- `Airflow` — Product name +- `Dag` / `Dags` — Airflow concept; never write "DAG" +- `PID` — Unix process identifier +- `ID` — Universal abbreviation +- `UTC` — Time standard +- `JSON` — Standard technical format name +- `REST API` — Standard technical term +- Log levels: `CRITICAL`, `ERROR`, `WARNING`, `INFO`, `DEBUG` + +### Translated by convention (German-specific) + +The existing German translations translate many Airflow terms into native German. +These established translations **must be used consistently**: + +- `Asset` / `Assets` → `Datenset (Asset)` / `Datensets (Assets)` — includes English term in parentheses +- `XCom` / `XComs` → `Task Kommunikation (XComs)` — descriptive with English in parentheses +- `Backfill` → `Auffüllung` / `Auffüllungen` +- `Catchup` → `Nachgeholt` +- `Plugin` / `Plugins` → `Plug-in` / `Plug-ins` — hyphenated German spelling +- `Pool` / `Pools` → `Pool` / `Pools` — kept in English +- `Provider` / `Providers` → `Provider` / `Providers` — kept in English +- `Executor` → `Ausführungsumgebung` +- `Trigger` / `Triggerer` → `Abrufumgebung` / `Abrufumgebungs-Information` (component); translated in context + +## 2. Standard Translations + +The following Airflow-specific terms have established German translations +that **must be used consistently**: + +| English Term | German Translation | Notes | +| --------------------- | ------------------------------------- | ---------------------------------------------- | +| Task | Task | Kept in English; plural: "Tasks" | +| Task Instance | Task Instanz | Plural: "Task Instanzen" | +| Task Group | Task Gruppe | | +| Dag Run | Dag Lauf | Plural: "Dag Läufe" | +| Trigger (verb) | Auslösen | "Ausgelöst durch" for "Triggered by" | +| Trigger Rule | Auslöse-Regel | | +| Scheduler | Zeitplaner | | +| Schedule (noun) | Zeitplan | | +| Operator | Operator | Plural: "Operatoren" | +| Connection | Verbindung | Plural: "Verbindungen" | +| Variable | Variable | Plural: "Variablen" | +| Configuration | Konfiguration | | +| Audit Log | Prüf-Log | | +| State | Status | | +| Queue (noun) | Warteschlange | "Wartend" for "queued" | +| Duration | Laufzeit | | +| Owner | Eigentümer | | +| Tags | Markierungen | | +| Description | Beschreibung | | +| Documentation | Dokumentation | Short form in nav: "Doku" | +| Timezone | Zeitzone | | +| Dark Mode | Dunkelmodus | | +| Light Mode | Hellmodus | | +| Asset Event | Ereignis zu Datenset (Asset) | Plural: "Ereignisse zu Datensets (Asset)" | +| Dag Processor | Dag Prozessor | | +| Heartbeat | Lebenszeichen | e.g., "Letztes Lebenszeichen" | +| Upstream / Downstream | Vorgelagert / Nachgelagert | | + +## 3. Task/Run States + +| English State | German Translation | +| ------------------- | ----------------------------- | +| running | Laufend | +| failed | Fehlgeschlagen | +| success | Erfolgreich | +| queued | Wartend | +| scheduled | Geplant | +| skipped | Übersprungen | +| deferred | Delegiert | +| removed | Entfernt | +| restarting | Im Neustart | +| up_for_retry | Wartet auf neuen Versuch | +| up_for_reschedule | Wartet auf Neuplanung | +| upstream_failed | Vorgelagerte fehlgeschlagen | +| no_status / none | Kein Status | +| planned | Geplant | + +## 4. German-Specific Guidelines + +### Tone and Register + +- Use **formal German** ("Sie" form). Do not use "du". +- Use a professional, precise tone suitable for technical software UIs. +- Keep UI strings concise — they appear in buttons, labels, and tooltips. + +### Gender and Articles + +- German nouns have grammatical gender; match articles and adjectives accordingly: + - "Dag" is treated as **masculine**: "der Dag", "ein Dag" + - "Task" is treated as **masculine**: "der Task" + - "Lauf" (Run) is **masculine**: "der Lauf", plural: "die Läufe" + - "Verbindung" is **feminine**: "die Verbindung" + - "Variable" is **feminine**: "die Variable" + - "Datenset" is **neuter**: "das Datenset" + +### Compound Nouns + +- German forms compound nouns. The existing translations use spaces between Airflow terms + for readability: "Dag Lauf" (not "Daglauf"), "Task Instanz" (not "Taskinstanz"). +- Follow this established pattern for consistency. + +### Plural Forms + +- German uses i18next plural suffixes `_one` and `_other` only: + + ```json + "task_one": "Task", + "task_other": "Tasks" + ``` + + ```json + "dagRun_one": "Dag Lauf", + "dagRun_other": "Dag Läufe" + ``` + +### Capitalization + +- All German **nouns** are capitalized (standard German orthography). +- Use **title case** for UI headers and navigation items. +- Use **sentence case** for descriptions and longer messages. + +### Parenthetical English Terms + +- The German locale uses a unique pattern of including the English term in parentheses + after the German translation for clarity: + - "Datenset (Asset)" — helps users recognize the Airflow concept + - "Task Kommunikation (XComs)" + - "Durch Datenset (Asset) ausgelöst" for "Asset triggered" +- Follow this pattern for any new terms that have well-known English equivalents in Airflow. + +## 5. Examples from Existing Translations + +**Terms with parenthetical English:** + +``` +Asset → "Datenset (Asset)" +Assets → "Datensets (Assets)" +XCom → "Task Kommunikation (XComs)" +Asset Event → "Ereignis zu Datenset (Asset)" +``` + +**Common translation patterns:** + +``` +task_one → "Task" +task_other → "Tasks" +dagRun_one → "Dag Lauf" +dagRun_other → "Dag Läufe" +backfill_one → "Auffüllung" +backfill_other → "Auffüllungen" +taskInstance_one → "Task Instanz" +taskInstance_other → "Task Instanzen" +allRuns → "Alle Läufe" +running → "Laufend" +failed → "Fehlgeschlagen" +success → "Erfolgreich" +queued → "Wartend" +scheduled → "Geplant" +``` + +**Triggerer compound nouns — translated to German:** + +``` +triggerer.class → "Abruf-Klasse" +triggerer.id → "Abrufungs ID" +triggerer.createdAt → "Zeitpunkt der Erstellung" +triggerer.assigned → "Zugewiesene Abrufumgebung" +triggerer.latestHeartbeat → "Letztes Lebenszeichen" +triggerer.title → "Abrufumgebungs-Information" +``` + +**Action verbs (buttons):** + +``` +Add → "Hinzufügen" +Delete → "Löschen" +Edit → "Bearbeiten" +Save → "Speichern" +Reset → "Zurücksetzen" +Cancel → "Abbrechen" +Confirm → "Bestätigen" +Import → "Importieren" +Search → "Suche" +Filter → "Filter" +Download → "Herunterladen" +Expand → "Ausblenden" +Collapse → "Einblenden" +``` + +**Health/status labels:** + +``` +Healthy → "Gesund" +Unhealthy → "Fehlerhaft" +``` + +## 6. Agent Instructions (DO / DON'T) + +**DO:** + +- Match tone, style, gender agreement, and casing from existing `de/*.json` files +- Use formal German ("Sie" form) throughout +- Preserve all i18next placeholders: `{{count}}`, `{{dagName}}`, `{{hotkey}}`, etc. +- Capitalize all nouns (standard German orthography) +- Include English terms in parentheses for Airflow-specific concepts where the existing translations do so +- Provide all needed plural suffixes (`_one`, `_other`) for each plural key +- Check existing translations before adding new ones to maintain consistency + +**DON'T:** + +- Write "DAG" — always write "Dag" +- Use informal "du" — always use "Sie" register +- Use colloquial or regional German expressions +- Invent new vocabulary when an equivalent already exists in the current translations +- Change hotkey values (e.g., `"hotkey": "e"` must stay `"e"`) +- Translate variable names or placeholders inside `{{...}}` +- Omit parenthetical English terms where the pattern has been established + +## 7. Rationale for Translation Choices + +This section documents *why* each translation decision was made. It is derived +from `airflow-core/src/airflow/ui/public/i18n/locales/de/README.md`, which is +now superseded by this skill file as the single source of truth. + Review Comment: With this PR the other document goes away, so this can be removed. ```suggestion ``` ########## .github/skills/airflow-translations/locales/de.md: ########## @@ -0,0 +1,307 @@ +<!-- SPDX-License-Identifier: Apache-2.0 + https://www.apache.org/licenses/LICENSE-2.0 --> + +# German (de) Translation Agent Skill + +**Locale code:** `de` +**Preferred variant:** Standard German (de), using formal "Sie" register, consistent with existing translations in `airflow-core/src/airflow/ui/public/i18n/locales/de/` + +This file contains locale-specific guidelines so AI translation agents produce +new German strings that stay 100% consistent with the existing translations. + +## 1. Core Airflow Terminology + +### Global Airflow terms (never translate) + +These terms are defined as untranslatable across **all** Airflow locales. +Do not translate them regardless of language: + +- `Airflow` — Product name +- `Dag` / `Dags` — Airflow concept; never write "DAG" +- `PID` — Unix process identifier +- `ID` — Universal abbreviation +- `UTC` — Time standard +- `JSON` — Standard technical format name +- `REST API` — Standard technical term +- Log levels: `CRITICAL`, `ERROR`, `WARNING`, `INFO`, `DEBUG` + +### Translated by convention (German-specific) + +The existing German translations translate many Airflow terms into native German. +These established translations **must be used consistently**: + +- `Asset` / `Assets` → `Datenset (Asset)` / `Datensets (Assets)` — includes English term in parentheses +- `XCom` / `XComs` → `Task Kommunikation (XComs)` — descriptive with English in parentheses +- `Backfill` → `Auffüllung` / `Auffüllungen` +- `Catchup` → `Nachgeholt` +- `Plugin` / `Plugins` → `Plug-in` / `Plug-ins` — hyphenated German spelling +- `Pool` / `Pools` → `Pool` / `Pools` — kept in English +- `Provider` / `Providers` → `Provider` / `Providers` — kept in English +- `Executor` → `Ausführungsumgebung` +- `Trigger` / `Triggerer` → `Abrufumgebung` / `Abrufumgebungs-Information` (component); translated in context + +## 2. Standard Translations + +The following Airflow-specific terms have established German translations +that **must be used consistently**: + +| English Term | German Translation | Notes | +| --------------------- | ------------------------------------- | ---------------------------------------------- | +| Task | Task | Kept in English; plural: "Tasks" | +| Task Instance | Task Instanz | Plural: "Task Instanzen" | +| Task Group | Task Gruppe | | +| Dag Run | Dag Lauf | Plural: "Dag Läufe" | +| Trigger (verb) | Auslösen | "Ausgelöst durch" for "Triggered by" | +| Trigger Rule | Auslöse-Regel | | +| Scheduler | Zeitplaner | | +| Schedule (noun) | Zeitplan | | +| Operator | Operator | Plural: "Operatoren" | +| Connection | Verbindung | Plural: "Verbindungen" | +| Variable | Variable | Plural: "Variablen" | +| Configuration | Konfiguration | | +| Audit Log | Prüf-Log | | +| State | Status | | +| Queue (noun) | Warteschlange | "Wartend" for "queued" | +| Duration | Laufzeit | | +| Owner | Eigentümer | | +| Tags | Markierungen | | +| Description | Beschreibung | | +| Documentation | Dokumentation | Short form in nav: "Doku" | +| Timezone | Zeitzone | | +| Dark Mode | Dunkelmodus | | +| Light Mode | Hellmodus | | +| Asset Event | Ereignis zu Datenset (Asset) | Plural: "Ereignisse zu Datensets (Asset)" | +| Dag Processor | Dag Prozessor | | +| Heartbeat | Lebenszeichen | e.g., "Letztes Lebenszeichen" | +| Upstream / Downstream | Vorgelagert / Nachgelagert | | + +## 3. Task/Run States + +| English State | German Translation | +| ------------------- | ----------------------------- | +| running | Laufend | +| failed | Fehlgeschlagen | +| success | Erfolgreich | +| queued | Wartend | +| scheduled | Geplant | +| skipped | Übersprungen | +| deferred | Delegiert | +| removed | Entfernt | +| restarting | Im Neustart | +| up_for_retry | Wartet auf neuen Versuch | +| up_for_reschedule | Wartet auf Neuplanung | +| upstream_failed | Vorgelagerte fehlgeschlagen | +| no_status / none | Kein Status | +| planned | Geplant | + +## 4. German-Specific Guidelines + +### Tone and Register + +- Use **formal German** ("Sie" form). Do not use "du". +- Use a professional, precise tone suitable for technical software UIs. +- Keep UI strings concise — they appear in buttons, labels, and tooltips. + +### Gender and Articles + +- German nouns have grammatical gender; match articles and adjectives accordingly: + - "Dag" is treated as **masculine**: "der Dag", "ein Dag" + - "Task" is treated as **masculine**: "der Task" + - "Lauf" (Run) is **masculine**: "der Lauf", plural: "die Läufe" + - "Verbindung" is **feminine**: "die Verbindung" + - "Variable" is **feminine**: "die Variable" + - "Datenset" is **neuter**: "das Datenset" + +### Compound Nouns + +- German forms compound nouns. The existing translations use spaces between Airflow terms + for readability: "Dag Lauf" (not "Daglauf"), "Task Instanz" (not "Taskinstanz"). +- Follow this established pattern for consistency. + +### Plural Forms + +- German uses i18next plural suffixes `_one` and `_other` only: + + ```json + "task_one": "Task", + "task_other": "Tasks" + ``` + + ```json + "dagRun_one": "Dag Lauf", + "dagRun_other": "Dag Läufe" + ``` + +### Capitalization + +- All German **nouns** are capitalized (standard German orthography). +- Use **title case** for UI headers and navigation items. +- Use **sentence case** for descriptions and longer messages. + +### Parenthetical English Terms + +- The German locale uses a unique pattern of including the English term in parentheses + after the German translation for clarity: + - "Datenset (Asset)" — helps users recognize the Airflow concept + - "Task Kommunikation (XComs)" + - "Durch Datenset (Asset) ausgelöst" for "Asset triggered" +- Follow this pattern for any new terms that have well-known English equivalents in Airflow. + +## 5. Examples from Existing Translations + +**Terms with parenthetical English:** + +``` +Asset → "Datenset (Asset)" +Assets → "Datensets (Assets)" +XCom → "Task Kommunikation (XComs)" +Asset Event → "Ereignis zu Datenset (Asset)" +``` + +**Common translation patterns:** + +``` +task_one → "Task" +task_other → "Tasks" +dagRun_one → "Dag Lauf" +dagRun_other → "Dag Läufe" +backfill_one → "Auffüllung" +backfill_other → "Auffüllungen" +taskInstance_one → "Task Instanz" +taskInstance_other → "Task Instanzen" +allRuns → "Alle Läufe" +running → "Laufend" +failed → "Fehlgeschlagen" +success → "Erfolgreich" +queued → "Wartend" +scheduled → "Geplant" +``` + +**Triggerer compound nouns — translated to German:** + +``` +triggerer.class → "Abruf-Klasse" +triggerer.id → "Abrufungs ID" +triggerer.createdAt → "Zeitpunkt der Erstellung" +triggerer.assigned → "Zugewiesene Abrufumgebung" +triggerer.latestHeartbeat → "Letztes Lebenszeichen" +triggerer.title → "Abrufumgebungs-Information" +``` + +**Action verbs (buttons):** + +``` +Add → "Hinzufügen" +Delete → "Löschen" +Edit → "Bearbeiten" +Save → "Speichern" +Reset → "Zurücksetzen" +Cancel → "Abbrechen" +Confirm → "Bestätigen" +Import → "Importieren" +Search → "Suche" +Filter → "Filter" +Download → "Herunterladen" +Expand → "Ausblenden" +Collapse → "Einblenden" +``` + +**Health/status labels:** + +``` +Healthy → "Gesund" +Unhealthy → "Fehlerhaft" +``` + +## 6. Agent Instructions (DO / DON'T) + +**DO:** + +- Match tone, style, gender agreement, and casing from existing `de/*.json` files +- Use formal German ("Sie" form) throughout +- Preserve all i18next placeholders: `{{count}}`, `{{dagName}}`, `{{hotkey}}`, etc. +- Capitalize all nouns (standard German orthography) +- Include English terms in parentheses for Airflow-specific concepts where the existing translations do so +- Provide all needed plural suffixes (`_one`, `_other`) for each plural key +- Check existing translations before adding new ones to maintain consistency + +**DON'T:** + +- Write "DAG" — always write "Dag" +- Use informal "du" — always use "Sie" register +- Use colloquial or regional German expressions +- Invent new vocabulary when an equivalent already exists in the current translations +- Change hotkey values (e.g., `"hotkey": "e"` must stay `"e"`) +- Translate variable names or placeholders inside `{{...}}` +- Omit parenthetical English terms where the pattern has been established + +## 7. Rationale for Translation Choices + +This section documents *why* each translation decision was made. It is derived +from `airflow-core/src/airflow/ui/public/i18n/locales/de/README.md`, which is +now superseded by this skill file as the single source of truth. + +### Formal register ("Sie") + +German distinguishes formal from informal address. Because the user group is +unknown, the formal "Sie" register was chosen throughout. + +### Why certain terms are not translated + +- **Dag / Dags** — Following the devlist discussion + ["Airflow should deprecate the term 'DAG' for end users"](https://lists.apache.org/thread/lktrzqkzrpvc1cyctxz7zxfmc0fwtq2j) + and the global rename to `Dag`, this brand-like term is retained. Translating + it as "Workflow" would be misleading for experienced Airflow users. `Dag` is + treated as neuter in German ("der Dag"). +- **Log levels (CRITICAL, ERROR, WARNING, INFO, DEBUG)** — These strings also + appear verbatim in log output, so they must not be translated. +- **Pool / Pools** — Directly understood in German; "Schwimmbad" would be + absurd, and "Ressourcen-Pool" is too verbose. +- **Provider / Providers** — Translating this does not improve comprehension; + the English term is well understood in German. +- **Operator / Operatoren** — Mathematical/technical term that also appears in + code; alternatives like "Betreiber-Implementierung" are too cumbersome. + +### Why specific translations were chosen + +- **`Asset` → `Datenset (Asset)`** — New term in Airflow 3, so a meaningful + German translation is appropriate. The English original is kept in + parentheses so new users can recognise the Airflow concept. Exception: in + the navigation bar the shorter form "Datensets" is used without the + parenthetical to save space. +- **`Asset Event` → `Ereignis zu Datenset (Asset)`** — Logical consequence of + the Asset translation; avoids the clumsy "Datensatz-Ereignis". +- **`Backfill` → `Auffüllen` / `Auffüllung`** — The technical meaning (filling + gaps in historical runs) maps well to the German concept of "auffüllen". +- **`Bundle` → `Bündel`** — Direct translation that matches the intended meaning. +- **`Catchup` → `Nachholen`** — Direct translation. +- **`Connection` → `Verbindung`** — Although a technical Airflow construct, the + direct translation is immediately accessible to new users. Review Comment: Can also be added to chapter above ########## .github/skills/airflow-translations/locales/de.md: ########## @@ -0,0 +1,307 @@ +<!-- SPDX-License-Identifier: Apache-2.0 + https://www.apache.org/licenses/LICENSE-2.0 --> + +# German (de) Translation Agent Skill + +**Locale code:** `de` +**Preferred variant:** Standard German (de), using formal "Sie" register, consistent with existing translations in `airflow-core/src/airflow/ui/public/i18n/locales/de/` + +This file contains locale-specific guidelines so AI translation agents produce +new German strings that stay 100% consistent with the existing translations. + +## 1. Core Airflow Terminology + +### Global Airflow terms (never translate) + +These terms are defined as untranslatable across **all** Airflow locales. +Do not translate them regardless of language: + +- `Airflow` — Product name +- `Dag` / `Dags` — Airflow concept; never write "DAG" +- `PID` — Unix process identifier +- `ID` — Universal abbreviation +- `UTC` — Time standard +- `JSON` — Standard technical format name +- `REST API` — Standard technical term +- Log levels: `CRITICAL`, `ERROR`, `WARNING`, `INFO`, `DEBUG` + +### Translated by convention (German-specific) + +The existing German translations translate many Airflow terms into native German. +These established translations **must be used consistently**: + +- `Asset` / `Assets` → `Datenset (Asset)` / `Datensets (Assets)` — includes English term in parentheses +- `XCom` / `XComs` → `Task Kommunikation (XComs)` — descriptive with English in parentheses +- `Backfill` → `Auffüllung` / `Auffüllungen` +- `Catchup` → `Nachgeholt` +- `Plugin` / `Plugins` → `Plug-in` / `Plug-ins` — hyphenated German spelling +- `Pool` / `Pools` → `Pool` / `Pools` — kept in English +- `Provider` / `Providers` → `Provider` / `Providers` — kept in English +- `Executor` → `Ausführungsumgebung` +- `Trigger` / `Triggerer` → `Abrufumgebung` / `Abrufumgebungs-Information` (component); translated in context + +## 2. Standard Translations + +The following Airflow-specific terms have established German translations +that **must be used consistently**: + +| English Term | German Translation | Notes | +| --------------------- | ------------------------------------- | ---------------------------------------------- | +| Task | Task | Kept in English; plural: "Tasks" | +| Task Instance | Task Instanz | Plural: "Task Instanzen" | +| Task Group | Task Gruppe | | +| Dag Run | Dag Lauf | Plural: "Dag Läufe" | +| Trigger (verb) | Auslösen | "Ausgelöst durch" for "Triggered by" | +| Trigger Rule | Auslöse-Regel | | +| Scheduler | Zeitplaner | | +| Schedule (noun) | Zeitplan | | +| Operator | Operator | Plural: "Operatoren" | +| Connection | Verbindung | Plural: "Verbindungen" | +| Variable | Variable | Plural: "Variablen" | +| Configuration | Konfiguration | | +| Audit Log | Prüf-Log | | +| State | Status | | +| Queue (noun) | Warteschlange | "Wartend" for "queued" | +| Duration | Laufzeit | | +| Owner | Eigentümer | | +| Tags | Markierungen | | +| Description | Beschreibung | | +| Documentation | Dokumentation | Short form in nav: "Doku" | +| Timezone | Zeitzone | | +| Dark Mode | Dunkelmodus | | +| Light Mode | Hellmodus | | +| Asset Event | Ereignis zu Datenset (Asset) | Plural: "Ereignisse zu Datensets (Asset)" | +| Dag Processor | Dag Prozessor | | +| Heartbeat | Lebenszeichen | e.g., "Letztes Lebenszeichen" | +| Upstream / Downstream | Vorgelagert / Nachgelagert | | + +## 3. Task/Run States + +| English State | German Translation | +| ------------------- | ----------------------------- | +| running | Laufend | +| failed | Fehlgeschlagen | +| success | Erfolgreich | +| queued | Wartend | +| scheduled | Geplant | +| skipped | Übersprungen | +| deferred | Delegiert | +| removed | Entfernt | +| restarting | Im Neustart | +| up_for_retry | Wartet auf neuen Versuch | +| up_for_reschedule | Wartet auf Neuplanung | +| upstream_failed | Vorgelagerte fehlgeschlagen | +| no_status / none | Kein Status | +| planned | Geplant | + +## 4. German-Specific Guidelines + +### Tone and Register + +- Use **formal German** ("Sie" form). Do not use "du". +- Use a professional, precise tone suitable for technical software UIs. +- Keep UI strings concise — they appear in buttons, labels, and tooltips. + +### Gender and Articles + +- German nouns have grammatical gender; match articles and adjectives accordingly: + - "Dag" is treated as **masculine**: "der Dag", "ein Dag" + - "Task" is treated as **masculine**: "der Task" + - "Lauf" (Run) is **masculine**: "der Lauf", plural: "die Läufe" + - "Verbindung" is **feminine**: "die Verbindung" + - "Variable" is **feminine**: "die Variable" + - "Datenset" is **neuter**: "das Datenset" + +### Compound Nouns + +- German forms compound nouns. The existing translations use spaces between Airflow terms + for readability: "Dag Lauf" (not "Daglauf"), "Task Instanz" (not "Taskinstanz"). +- Follow this established pattern for consistency. + +### Plural Forms + +- German uses i18next plural suffixes `_one` and `_other` only: + + ```json + "task_one": "Task", + "task_other": "Tasks" + ``` + + ```json + "dagRun_one": "Dag Lauf", + "dagRun_other": "Dag Läufe" + ``` + +### Capitalization + +- All German **nouns** are capitalized (standard German orthography). +- Use **title case** for UI headers and navigation items. +- Use **sentence case** for descriptions and longer messages. + +### Parenthetical English Terms + +- The German locale uses a unique pattern of including the English term in parentheses + after the German translation for clarity: + - "Datenset (Asset)" — helps users recognize the Airflow concept + - "Task Kommunikation (XComs)" + - "Durch Datenset (Asset) ausgelöst" for "Asset triggered" +- Follow this pattern for any new terms that have well-known English equivalents in Airflow. + +## 5. Examples from Existing Translations + +**Terms with parenthetical English:** + +``` +Asset → "Datenset (Asset)" +Assets → "Datensets (Assets)" +XCom → "Task Kommunikation (XComs)" +Asset Event → "Ereignis zu Datenset (Asset)" +``` + +**Common translation patterns:** + +``` +task_one → "Task" +task_other → "Tasks" +dagRun_one → "Dag Lauf" +dagRun_other → "Dag Läufe" +backfill_one → "Auffüllung" +backfill_other → "Auffüllungen" +taskInstance_one → "Task Instanz" +taskInstance_other → "Task Instanzen" +allRuns → "Alle Läufe" +running → "Laufend" +failed → "Fehlgeschlagen" +success → "Erfolgreich" +queued → "Wartend" +scheduled → "Geplant" +``` + +**Triggerer compound nouns — translated to German:** + +``` +triggerer.class → "Abruf-Klasse" +triggerer.id → "Abrufungs ID" +triggerer.createdAt → "Zeitpunkt der Erstellung" +triggerer.assigned → "Zugewiesene Abrufumgebung" +triggerer.latestHeartbeat → "Letztes Lebenszeichen" +triggerer.title → "Abrufumgebungs-Information" +``` + +**Action verbs (buttons):** + +``` +Add → "Hinzufügen" +Delete → "Löschen" +Edit → "Bearbeiten" +Save → "Speichern" +Reset → "Zurücksetzen" +Cancel → "Abbrechen" +Confirm → "Bestätigen" +Import → "Importieren" +Search → "Suche" +Filter → "Filter" +Download → "Herunterladen" +Expand → "Ausblenden" +Collapse → "Einblenden" +``` + +**Health/status labels:** + +``` +Healthy → "Gesund" +Unhealthy → "Fehlerhaft" +``` + +## 6. Agent Instructions (DO / DON'T) + +**DO:** + +- Match tone, style, gender agreement, and casing from existing `de/*.json` files +- Use formal German ("Sie" form) throughout +- Preserve all i18next placeholders: `{{count}}`, `{{dagName}}`, `{{hotkey}}`, etc. +- Capitalize all nouns (standard German orthography) +- Include English terms in parentheses for Airflow-specific concepts where the existing translations do so +- Provide all needed plural suffixes (`_one`, `_other`) for each plural key +- Check existing translations before adding new ones to maintain consistency + +**DON'T:** + +- Write "DAG" — always write "Dag" +- Use informal "du" — always use "Sie" register +- Use colloquial or regional German expressions +- Invent new vocabulary when an equivalent already exists in the current translations +- Change hotkey values (e.g., `"hotkey": "e"` must stay `"e"`) +- Translate variable names or placeholders inside `{{...}}` +- Omit parenthetical English terms where the pattern has been established + +## 7. Rationale for Translation Choices + +This section documents *why* each translation decision was made. It is derived +from `airflow-core/src/airflow/ui/public/i18n/locales/de/README.md`, which is +now superseded by this skill file as the single source of truth. + +### Formal register ("Sie") + +German distinguishes formal from informal address. Because the user group is +unknown, the formal "Sie" register was chosen throughout. + +### Why certain terms are not translated + +- **Dag / Dags** — Following the devlist discussion + ["Airflow should deprecate the term 'DAG' for end users"](https://lists.apache.org/thread/lktrzqkzrpvc1cyctxz7zxfmc0fwtq2j) + and the global rename to `Dag`, this brand-like term is retained. Translating + it as "Workflow" would be misleading for experienced Airflow users. `Dag` is + treated as neuter in German ("der Dag"). +- **Log levels (CRITICAL, ERROR, WARNING, INFO, DEBUG)** — These strings also + appear verbatim in log output, so they must not be translated. +- **Pool / Pools** — Directly understood in German; "Schwimmbad" would be + absurd, and "Ressourcen-Pool" is too verbose. +- **Provider / Providers** — Translating this does not improve comprehension; + the English term is well understood in German. +- **Operator / Operatoren** — Mathematical/technical term that also appears in + code; alternatives like "Betreiber-Implementierung" are too cumbersome. + +### Why specific translations were chosen + +- **`Asset` → `Datenset (Asset)`** — New term in Airflow 3, so a meaningful + German translation is appropriate. The English original is kept in + parentheses so new users can recognise the Airflow concept. Exception: in + the navigation bar the shorter form "Datensets" is used without the + parenthetical to save space. +- **`Asset Event` → `Ereignis zu Datenset (Asset)`** — Logical consequence of + the Asset translation; avoids the clumsy "Datensatz-Ereignis". +- **`Backfill` → `Auffüllen` / `Auffüllung`** — The technical meaning (filling + gaps in historical runs) maps well to the German concept of "auffüllen". +- **`Bundle` → `Bündel`** — Direct translation that matches the intended meaning. +- **`Catchup` → `Nachholen`** — Direct translation. +- **`Connection` → `Verbindung`** — Although a technical Airflow construct, the + direct translation is immediately accessible to new users. +- **`Dag Run` → `Dag Lauf`** — While "Run" appears in code and logs, a German + equivalent improves the overall UI experience. "Dag" is kept untranslated. +- **`Deferred` → `Delegiert`** — The closest German equivalent: a task is + handed off ("delegiert") to the Triggerer component. +- **`Docs` → `Doku`** — "Dokumentation" is correct but too wide for the + navigation bar without a line break; "Doku" is a common German abbreviation. +- **`Map Index` → `Planungs-Index`** — No direct equivalent exists; referring + to the planning/scheduling aspect is the most accurate option. +- **`Plugins` → `Plug-ins`** — Hyphenated form recommended by Duden. +- **`Scheduled` → `Geplant`** — Used for cyclically scheduled Dag runs. +- **`Tag` → `Markierung`** — Describes the purpose (marking/tagging Dags for + organisation) without the English loanword. +- **`Task Instance` → `Task Instanz`** — "Task" is kept because it appears in + code and logs; "Aufgabe" would be the purist choice but less recognisable in + context. +- **`Trigger` (verb) → `Auslösen`** — Most natural German equivalent. "Triggern" + exists colloquially but "Auslösen" is more formal and consistent with + "Auslöse-Regel" (Trigger Rule). +- **`Trigger Rule` → `Auslöse-Regel`** — Consistent with the verb choice above; + describes the condition that starts a task within a Dag Run. Review Comment: Try number is missing. ```suggestion describes the condition that starts a task within a Dag Run. - **`Try Number` --> `Versuch Nummer`**: direct translation is matching. ``` ########## .github/skills/airflow-translations/locales/de.md: ########## @@ -0,0 +1,307 @@ +<!-- SPDX-License-Identifier: Apache-2.0 + https://www.apache.org/licenses/LICENSE-2.0 --> + +# German (de) Translation Agent Skill + +**Locale code:** `de` +**Preferred variant:** Standard German (de), using formal "Sie" register, consistent with existing translations in `airflow-core/src/airflow/ui/public/i18n/locales/de/` + +This file contains locale-specific guidelines so AI translation agents produce +new German strings that stay 100% consistent with the existing translations. + +## 1. Core Airflow Terminology + +### Global Airflow terms (never translate) + +These terms are defined as untranslatable across **all** Airflow locales. +Do not translate them regardless of language: + +- `Airflow` — Product name +- `Dag` / `Dags` — Airflow concept; never write "DAG" +- `PID` — Unix process identifier +- `ID` — Universal abbreviation +- `UTC` — Time standard +- `JSON` — Standard technical format name +- `REST API` — Standard technical term +- Log levels: `CRITICAL`, `ERROR`, `WARNING`, `INFO`, `DEBUG` + +### Translated by convention (German-specific) + +The existing German translations translate many Airflow terms into native German. +These established translations **must be used consistently**: + +- `Asset` / `Assets` → `Datenset (Asset)` / `Datensets (Assets)` — includes English term in parentheses +- `XCom` / `XComs` → `Task Kommunikation (XComs)` — descriptive with English in parentheses +- `Backfill` → `Auffüllung` / `Auffüllungen` +- `Catchup` → `Nachgeholt` +- `Plugin` / `Plugins` → `Plug-in` / `Plug-ins` — hyphenated German spelling +- `Pool` / `Pools` → `Pool` / `Pools` — kept in English +- `Provider` / `Providers` → `Provider` / `Providers` — kept in English +- `Executor` → `Ausführungsumgebung` +- `Trigger` / `Triggerer` → `Abrufumgebung` / `Abrufumgebungs-Information` (component); translated in context + +## 2. Standard Translations + +The following Airflow-specific terms have established German translations +that **must be used consistently**: + +| English Term | German Translation | Notes | +| --------------------- | ------------------------------------- | ---------------------------------------------- | +| Task | Task | Kept in English; plural: "Tasks" | +| Task Instance | Task Instanz | Plural: "Task Instanzen" | +| Task Group | Task Gruppe | | +| Dag Run | Dag Lauf | Plural: "Dag Läufe" | +| Trigger (verb) | Auslösen | "Ausgelöst durch" for "Triggered by" | +| Trigger Rule | Auslöse-Regel | | +| Scheduler | Zeitplaner | | +| Schedule (noun) | Zeitplan | | +| Operator | Operator | Plural: "Operatoren" | +| Connection | Verbindung | Plural: "Verbindungen" | +| Variable | Variable | Plural: "Variablen" | +| Configuration | Konfiguration | | +| Audit Log | Prüf-Log | | +| State | Status | | +| Queue (noun) | Warteschlange | "Wartend" for "queued" | +| Duration | Laufzeit | | +| Owner | Eigentümer | | +| Tags | Markierungen | | +| Description | Beschreibung | | +| Documentation | Dokumentation | Short form in nav: "Doku" | +| Timezone | Zeitzone | | +| Dark Mode | Dunkelmodus | | +| Light Mode | Hellmodus | | +| Asset Event | Ereignis zu Datenset (Asset) | Plural: "Ereignisse zu Datensets (Asset)" | +| Dag Processor | Dag Prozessor | | +| Heartbeat | Lebenszeichen | e.g., "Letztes Lebenszeichen" | +| Upstream / Downstream | Vorgelagert / Nachgelagert | | + +## 3. Task/Run States + +| English State | German Translation | +| ------------------- | ----------------------------- | +| running | Laufend | +| failed | Fehlgeschlagen | +| success | Erfolgreich | +| queued | Wartend | +| scheduled | Geplant | +| skipped | Übersprungen | +| deferred | Delegiert | +| removed | Entfernt | +| restarting | Im Neustart | +| up_for_retry | Wartet auf neuen Versuch | +| up_for_reschedule | Wartet auf Neuplanung | +| upstream_failed | Vorgelagerte fehlgeschlagen | +| no_status / none | Kein Status | +| planned | Geplant | + +## 4. German-Specific Guidelines + +### Tone and Register + +- Use **formal German** ("Sie" form). Do not use "du". +- Use a professional, precise tone suitable for technical software UIs. +- Keep UI strings concise — they appear in buttons, labels, and tooltips. + +### Gender and Articles + +- German nouns have grammatical gender; match articles and adjectives accordingly: + - "Dag" is treated as **masculine**: "der Dag", "ein Dag" + - "Task" is treated as **masculine**: "der Task" + - "Lauf" (Run) is **masculine**: "der Lauf", plural: "die Läufe" + - "Verbindung" is **feminine**: "die Verbindung" + - "Variable" is **feminine**: "die Variable" + - "Datenset" is **neuter**: "das Datenset" + +### Compound Nouns + +- German forms compound nouns. The existing translations use spaces between Airflow terms + for readability: "Dag Lauf" (not "Daglauf"), "Task Instanz" (not "Taskinstanz"). +- Follow this established pattern for consistency. + +### Plural Forms + +- German uses i18next plural suffixes `_one` and `_other` only: + + ```json + "task_one": "Task", + "task_other": "Tasks" + ``` + + ```json + "dagRun_one": "Dag Lauf", + "dagRun_other": "Dag Läufe" + ``` + +### Capitalization + +- All German **nouns** are capitalized (standard German orthography). +- Use **title case** for UI headers and navigation items. +- Use **sentence case** for descriptions and longer messages. + +### Parenthetical English Terms + +- The German locale uses a unique pattern of including the English term in parentheses + after the German translation for clarity: + - "Datenset (Asset)" — helps users recognize the Airflow concept + - "Task Kommunikation (XComs)" + - "Durch Datenset (Asset) ausgelöst" for "Asset triggered" +- Follow this pattern for any new terms that have well-known English equivalents in Airflow. + +## 5. Examples from Existing Translations + +**Terms with parenthetical English:** + +``` +Asset → "Datenset (Asset)" +Assets → "Datensets (Assets)" +XCom → "Task Kommunikation (XComs)" +Asset Event → "Ereignis zu Datenset (Asset)" +``` + +**Common translation patterns:** + +``` +task_one → "Task" +task_other → "Tasks" +dagRun_one → "Dag Lauf" +dagRun_other → "Dag Läufe" +backfill_one → "Auffüllung" +backfill_other → "Auffüllungen" +taskInstance_one → "Task Instanz" +taskInstance_other → "Task Instanzen" +allRuns → "Alle Läufe" +running → "Laufend" +failed → "Fehlgeschlagen" +success → "Erfolgreich" +queued → "Wartend" +scheduled → "Geplant" +``` + +**Triggerer compound nouns — translated to German:** + +``` +triggerer.class → "Abruf-Klasse" +triggerer.id → "Abrufungs ID" +triggerer.createdAt → "Zeitpunkt der Erstellung" +triggerer.assigned → "Zugewiesene Abrufumgebung" +triggerer.latestHeartbeat → "Letztes Lebenszeichen" +triggerer.title → "Abrufumgebungs-Information" +``` + +**Action verbs (buttons):** + +``` +Add → "Hinzufügen" +Delete → "Löschen" +Edit → "Bearbeiten" +Save → "Speichern" +Reset → "Zurücksetzen" +Cancel → "Abbrechen" +Confirm → "Bestätigen" +Import → "Importieren" +Search → "Suche" +Filter → "Filter" +Download → "Herunterladen" +Expand → "Ausblenden" +Collapse → "Einblenden" +``` + +**Health/status labels:** + +``` +Healthy → "Gesund" +Unhealthy → "Fehlerhaft" +``` + +## 6. Agent Instructions (DO / DON'T) + +**DO:** + +- Match tone, style, gender agreement, and casing from existing `de/*.json` files +- Use formal German ("Sie" form) throughout +- Preserve all i18next placeholders: `{{count}}`, `{{dagName}}`, `{{hotkey}}`, etc. +- Capitalize all nouns (standard German orthography) +- Include English terms in parentheses for Airflow-specific concepts where the existing translations do so +- Provide all needed plural suffixes (`_one`, `_other`) for each plural key +- Check existing translations before adding new ones to maintain consistency + +**DON'T:** + +- Write "DAG" — always write "Dag" +- Use informal "du" — always use "Sie" register +- Use colloquial or regional German expressions +- Invent new vocabulary when an equivalent already exists in the current translations +- Change hotkey values (e.g., `"hotkey": "e"` must stay `"e"`) +- Translate variable names or placeholders inside `{{...}}` +- Omit parenthetical English terms where the pattern has been established + +## 7. Rationale for Translation Choices + +This section documents *why* each translation decision was made. It is derived +from `airflow-core/src/airflow/ui/public/i18n/locales/de/README.md`, which is +now superseded by this skill file as the single source of truth. + +### Formal register ("Sie") + +German distinguishes formal from informal address. Because the user group is +unknown, the formal "Sie" register was chosen throughout. + +### Why certain terms are not translated + +- **Dag / Dags** — Following the devlist discussion + ["Airflow should deprecate the term 'DAG' for end users"](https://lists.apache.org/thread/lktrzqkzrpvc1cyctxz7zxfmc0fwtq2j) + and the global rename to `Dag`, this brand-like term is retained. Translating + it as "Workflow" would be misleading for experienced Airflow users. `Dag` is + treated as neuter in German ("der Dag"). +- **Log levels (CRITICAL, ERROR, WARNING, INFO, DEBUG)** — These strings also + appear verbatim in log output, so they must not be translated. +- **Pool / Pools** — Directly understood in German; "Schwimmbad" would be + absurd, and "Ressourcen-Pool" is too verbose. +- **Provider / Providers** — Translating this does not improve comprehension; + the English term is well understood in German. +- **Operator / Operatoren** — Mathematical/technical term that also appears in + code; alternatives like "Betreiber-Implementierung" are too cumbersome. + +### Why specific translations were chosen + +- **`Asset` → `Datenset (Asset)`** — New term in Airflow 3, so a meaningful + German translation is appropriate. The English original is kept in + parentheses so new users can recognise the Airflow concept. Exception: in + the navigation bar the shorter form "Datensets" is used without the + parenthetical to save space. +- **`Asset Event` → `Ereignis zu Datenset (Asset)`** — Logical consequence of + the Asset translation; avoids the clumsy "Datensatz-Ereignis". +- **`Backfill` → `Auffüllen` / `Auffüllung`** — The technical meaning (filling + gaps in historical runs) maps well to the German concept of "auffüllen". +- **`Bundle` → `Bündel`** — Direct translation that matches the intended meaning. +- **`Catchup` → `Nachholen`** — Direct translation. +- **`Connection` → `Verbindung`** — Although a technical Airflow construct, the + direct translation is immediately accessible to new users. Review Comment: Same with `Task ID` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
