This is an automated email from the ASF dual-hosted git repository.

pierrejeambrun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 1f764a2e118 Add Russian (ru) translation agent skill guideline (#76579)
1f764a2e118 is described below

commit 1f764a2e11871b8ed1c22366308593932082dad1
Author: Alisher Muhammadaliyev <[email protected]>
AuthorDate: Fri Nov 6 17:11:51 2026 +0500

    Add Russian (ru) translation agent skill guideline (#76579)
    
    * Add Russian (ru) translation agent skill guideline
    
    Every supported locale except Russian has a guideline file under
    .agents/skills/airflow-translations/locales/. This adds ru.md and
    registers it in the guideline tables in SKILL.md and in the i18n README.
    
    The glossary, register and plural rules are derived from the existing
    ru locale files rather than chosen fresh, so the guidance matches the
    translations already in the repository.
    
    related: #61984
    
    Co-Authored-By: Claude Opus 5 <[email protected]>
    
    * Correct the plural guidance on identical _few and _many
    
    The file claimed that _few identical to _many is almost always a mistake.
    Reviewing the locale shows the opposite for strings that render no numeral:
    of the five sets where the two coincide, four are phrases such as
    "Вы собираетесь удалить следующие соединения:", where a single plural form
    is correct.
    
    The rule now turns on whether a number appears next to the noun.
    
    Co-Authored-By: Claude Opus 5 <[email protected]>
    
    * Use the nominative plural for _other in the Russian guideline
    
    The UI renders _other keys without a count as tab names, titles and table 
headers, and i18next never selects _other for whole-number counts in Russian, 
so those labels need the nominative plural rather than the _many form.
    
    ---------
    
    Co-authored-by: Claude Opus 5 <[email protected]>
    Co-authored-by: pierrejeambrun <[email protected]>
---
 .agents/skills/airflow-translations/SKILL.md      |   1 +
 .agents/skills/airflow-translations/locales/ru.md | 242 ++++++++++++++++++++++
 airflow-core/src/airflow/ui/public/i18n/README.md |   1 +
 3 files changed, 244 insertions(+)

diff --git a/.agents/skills/airflow-translations/SKILL.md 
b/.agents/skills/airflow-translations/SKILL.md
index deea3f0a2ff..c2e0f815083 100644
--- a/.agents/skills/airflow-translations/SKILL.md
+++ b/.agents/skills/airflow-translations/SKILL.md
@@ -252,6 +252,7 @@ from a global rule in this document, follow the 
locale-specific guideline.
 | `nl`        | Dutch                   | [locales/nl.md](locales/nl.md)  |
 | `pl`        | Polish                  | [locales/pl.md](locales/pl.md)  |
 | `pt`        | Portuguese              | [locales/pt.md](locales/pt.md)  |
+| `ru`        | Russian                 | [locales/ru.md](locales/ru.md)  |
 | `th`        | Thai                    | [locales/th.md](locales/th.md)  |
 | `tr`        | Turkish                 | [locales/tr.md](locales/tr.md)  |
 | `zh-CN`     | Simplified Chinese      | [locales/zh-CN.md](locales/zh-CN.md) 
|
diff --git a/.agents/skills/airflow-translations/locales/ru.md 
b/.agents/skills/airflow-translations/locales/ru.md
new file mode 100644
index 00000000000..28837cb27e6
--- /dev/null
+++ b/.agents/skills/airflow-translations/locales/ru.md
@@ -0,0 +1,242 @@
+<!-- SPDX-License-Identifier: Apache-2.0
+     https://www.apache.org/licenses/LICENSE-2.0 -->
+
+# Russian (ru)
+
+This document provides locale-specific instructions for translating English
+Airflow UI strings into Russian. It inherits all global rules from
+the parent [SKILL.md](../SKILL.md).
+
+**Locale code:** `ru`
+**Register:** formal `Вы` (capitalised), consistent with the existing
+translations in `airflow-core/src/airflow/ui/public/i18n/locales/ru/`.
+
+## Plural Forms
+
+Russian has **four plural forms**. Use the correct form for each suffix:
+
+- `_one`: 1, 21, 31, … (nominative singular)
+- `_few`: 2-4, 22-24, … (genitive singular)
+- `_many`: 0, 5-20, 25-30, … (genitive plural)
+- `_other`: the plural label shown without a number (nominative plural, see
+  the note below)
+
+**English source:**
+
+```json
+"connection_one": "Connection",
+"connection_other": "Connections"
+```
+
+**Correct:**
+
+```json
+"connection_one": "Соединение",
+"connection_few": "Соединения",
+"connection_many": "Соединений",
+"connection_other": "Соединения"
+```
+
+**Incorrect:**
+
+```json
+"connection_few": "Соединений",   // genitive plural used for 2-4
+"connection_many": "Соединения"   // genitive singular used for 5+
+```
+
+Where a numeral governs the noun, `_few` and `_many` take different cases and
+must differ:
+
+```json
+"connection_few": "Соединения",    // 2-4
+"connection_many": "Соединений"    // 5 and up
+```
+
+Where the string carries no numeral, one plural form covers every count, and
+the suffixes may legitimately be identical:
+
+```json
+"firstConfirmMessage_few": "Вы собираетесь удалить следующие соединения:",
+"firstConfirmMessage_many": "Вы собираетесь удалить следующие соединения:"
+```
+
+So judge a set by whether a number is rendered next to the noun, not by
+whether the suffixes differ.
+
+**`_other` is the plural label shown without a number.** The UI renders keys
+such as `dagRun_other` or `dag_other` on their own (tab names, titles, table
+headers), while i18next never selects `_other` for whole-number counts in
+Russian. Use the nominative plural:
+
+```json
+"dagRun_other": "Запуски Dag-а",
+"requiredAction_other": "Необходимые действия"
+```
+
+Many existing entries still repeat the `_many` form (e.g. `dag_other: 
"Dag-ов"`);
+those are worth correcting in a separate change.
+
+## Case Declension
+
+Russian nouns change form by grammatical case. Use the case the context
+requires, not the nominative by default:
+
+**Nominative** (subject, standalone labels):
+
+```json
+"variable_one": "Переменная"
+```
+
+**Accusative** (direct object of a command):
+
+```json
+"deleteVariable_one": "Удалить 1 переменную"
+```
+
+**Genitive** (after numerals 5+, and for "of"):
+
+```json
+"deleteVariable_many": "Удалить {{count, number}} переменных"
+```
+
+## Gender Agreement
+
+Adjectives, participles and past-tense verbs must agree with the gender of the
+noun they describe:
+
+**Correct:**
+
+```json
+"firstConfirmMessage_one": "Вы собираетесь удалить следующее соединение:"
+"deleteVariable_one": "Удалить 1 переменную"
+```
+
+`соединение` is neuter → `следующее`; `переменная` is feminine → accusative
+`переменную`.
+
+**Incorrect:**
+
+```json
+"firstConfirmMessage_one": "Вы собираетесь удалить следующий соединение:"
+```
+
+## Unchanged Terms
+
+Keep these in English, as the existing locale does:
+
+- `Airflow` — product name
+- `Dag` / `Dags` — Airflow concept; never write `DAG`. Decline with a hyphen
+  where a case ending is needed: `Запуск Dag-а`
+- `XCom` — Airflow cross-communication term
+- `Backfill` — kept in English throughout the `ru` locale
+- `ID`, `JSON`, `API`, `SDK`, `Unix`, `UTC`, `PID` — technical abbreviations
+- Log levels: `CRITICAL`, `ERROR`, `WARNING`, `INFO`, `DEBUG`
+
+## Verb Forms and User Address
+
+- Use the **infinitive** for buttons and commands: `"Удалить соединение"`
+- Use the **formal, capitalised `Вы`** for questions and confirmations:
+  `"Вы уверены, что хотите продолжить?"`
+- Never use `ты`.
+
+**Correct:**
+
+```json
+"confirm": "Вы уверены, что хотите продолжить?",
+"deleteWarning": "Это действие нельзя отменить."
+```
+
+**Incorrect:**
+
+```json
+"confirm": "Ты уверен, что хочешь продолжить?"
+```
+
+## Letter ё
+
+The existing locale writes `ё` where standard orthography calls for it, for
+example `ещё`, `всё`, `звёздочка`. Keep it — do not substitute `е`.
+
+Take care with pairs that are different words rather than spelling variants:
+`все` ("all", plural) and `всё` ("everything") both occur in the locale and
+are each correct in their own context.
+
+## Variable and Placeholder Examples
+
+Preserve all `{{variable}}` placeholders and the `, number` formatter exactly.
+Word order may change to read naturally in Russian:
+
+**English source:**
+
+```json
+"unpauseOnTrigger": "Unpause {{dagName}} on trigger"
+```
+
+**Correct:**
+
+```json
+"unpauseOnTrigger": "Снять паузу с {{dagName}} при запуске"
+```
+
+**Incorrect:**
+
+```json
+"unpauseOnTrigger": "Снять паузу с {{имяDag}} при запуске"  // variable renamed
+```
+
+## Terminology Glossary
+
+These translations are established in the existing `ru` locale files and must
+be reused:
+
+| English | Russian |
+|---|---|
+| Task | Задача |
+| Task Instance | Экземпляр задачи |
+| Task Group | Группа задач |
+| Dag Run | Запуск Dag-а |
+| Connection | Соединение |
+| Variable | Переменная |
+| Pool | Пул |
+| Asset | Актив |
+| Trigger (noun) | Триггер |
+| Trigger (verb) | Запустить |
+| Scheduler | Планировщик |
+| Operator | Оператор |
+| Executor | Исполнитель |
+| Queue | Очередь |
+| Owner | Владелец |
+| Duration | Длительность |
+| Event | Событие |
+| Upstream | Вверх по потоку |
+| Downstream | Вниз по потоку |
+| Paused | Приостановленные |
+| Queued | В очереди |
+| Running | Выполняется |
+| Success | Успех |
+| Failed | Ошибка |
+| Skipped | Пропущен |
+| Deactivated | Деактивирован |
+
+Notes:
+
+- `Upstream` also appears contextually as `выше по цепочке` (e.g. "Запустить
+  Dag выше по цепочке этого актива"). Use `Вверх по потоку` for the standalone
+  direction label and `выше по цепочке` inside sentences.
+- State names such as `Приостановленные` are used as plural filter labels;
+  match the grammatical number of the surrounding UI element.
+
+## Terminology Reference
+
+The established Russian translations are defined in the existing locale files.
+Before translating, **read the existing ru JSON files** to learn the
+established terminology:
+
+```
+airflow-core/src/airflow/ui/public/i18n/locales/ru/
+```
+
+Use the translations found in these files as the authoritative glossary. When
+translating a term, check how it has been translated elsewhere in the locale
+to maintain consistency. If a term has not been translated yet, refer to the
+English source in `en/` and apply the rules in this document.
diff --git a/airflow-core/src/airflow/ui/public/i18n/README.md 
b/airflow-core/src/airflow/ui/public/i18n/README.md
index ddd520d8237..abd0dfe2774 100644
--- a/airflow-core/src/airflow/ui/public/i18n/README.md
+++ b/airflow-core/src/airflow/ui/public/i18n/README.md
@@ -231,6 +231,7 @@ primarily intended for LLM-assisted translation work, but 
can also be used by hu
 | `nl`        | Dutch                   | 
[.agents/skills/airflow-translations/locales/nl.md](../../../../../../.agents/skills/airflow-translations/locales/nl.md)
  |
 | `pl`        | Polish                  | 
[.agents/skills/airflow-translations/locales/pl.md](../../../../../../.agents/skills/airflow-translations/locales/pl.md)
  |
 | `pt`        | Portuguese              | 
[.agents/skills/airflow-translations/locales/pt.md](../../../../../../.agents/skills/airflow-translations/locales/pt.md)
  |
+| `ru`        | Russian                 | 
[.agents/skills/airflow-translations/locales/ru.md](../../../../../../.agents/skills/airflow-translations/locales/ru.md)
  |
 | `th`        | Thai                    | 
[.agents/skills/airflow-translations/locales/th.md](../../../../../../.agents/skills/airflow-translations/locales/th.md)
  |
 | `tr`        | Turkish                 | 
[.agents/skills/airflow-translations/locales/tr.md](../../../../../../.agents/skills/airflow-translations/locales/tr.md)
  |
 | `zh-CN`     | Simplified Chinese      | 
[.agents/skills/airflow-translations/locales/zh-CN.md](../../../../../../.agents/skills/airflow-translations/locales/zh-CN.md)
 |

Reply via email to