This is an automated email from the ASF dual-hosted git repository.
rahulvats 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 576ba719866 feat(i18n)(hi): Add Hindi Translations + adding codeowner
(#54788)
576ba719866 is described below
commit 576ba7198660837a5766f6c36d8117bad806800b
Author: Rahul Vats <[email protected]>
AuthorDate: Mon Aug 25 11:54:14 2025 +0530
feat(i18n)(hi): Add Hindi Translations + adding codeowner (#54788)
feat(i18n)(hi): Add Hindi Translations + adding codeowne
---
.github/CODEOWNERS | 1 +
.github/boring-cyborg.yml | 3 +
.../airflow/ui/public/i18n/locales/hi/README.md | 85 ++++++
.../airflow/ui/public/i18n/locales/hi/admin.json | 167 +++++++++++
.../airflow/ui/public/i18n/locales/hi/assets.json | 30 ++
.../airflow/ui/public/i18n/locales/hi/browse.json | 26 ++
.../airflow/ui/public/i18n/locales/hi/common.json | 314 +++++++++++++++++++++
.../ui/public/i18n/locales/hi/components.json | 136 +++++++++
.../src/airflow/ui/public/i18n/locales/hi/dag.json | 121 ++++++++
.../airflow/ui/public/i18n/locales/hi/dags.json | 97 +++++++
.../ui/public/i18n/locales/hi/dashboard.json | 45 +++
.../airflow/ui/public/i18n/locales/hi/hitl.json | 24 ++
airflow-core/src/airflow/ui/src/i18n/config.ts | 1 +
13 files changed, 1050 insertions(+)
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index a45d79e07b8..86b470b0623 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -48,6 +48,7 @@ airflow-core/src/airflow/ui/public/i18n/locales/pl/ @potiuk
@mobuchowski # + @ka
airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/ @Lee-W @jason810496 # +
@RoyLee1224 @guan404ming
airflow-core/src/airflow/ui/public/i18n/locales/fr/ @pierrejeambrun @vincbeck
airflow-core/src/airflow/ui/public/i18n/locales/tr/ @bugraoz93 #
+@hasancatalgol
+airflow-core/src/airflow/ui/public/i18n/locales/hi/ @vatsrahul1001
# Security/Permissions
/airflow-core/src/airflow/security/permissions.py @vincbeck
diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml
index d90acc9a54d..fe271ce9408 100644
--- a/.github/boring-cyborg.yml
+++ b/.github/boring-cyborg.yml
@@ -387,6 +387,9 @@ labelPRBasedOnFilePath:
translation:he:
- airflow-core/src/airflow/ui/public/i18n/locales/he/*
+ translation:hi:
+ - airflow-core/src/airflow/ui/public/i18n/locales/hi/*
+
translation:ko:
- airflow-core/src/airflow/ui/public/i18n/locales/ko/*
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/hi/README.md
b/airflow-core/src/airflow/ui/public/i18n/locales/hi/README.md
new file mode 100644
index 00000000000..4483219ee08
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/hi/README.md
@@ -0,0 +1,85 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ -->
+
+# Apache Airflow के लिए हिन्दी UI अनुवाद
+
+यह दस्तावेज हिन्दी भाषा के लिए चुने गए अनुवाद सिद्धांतों को बताता है। यह
दस्तावेज करने के लिए है कि अनुवाद क्यों इस तरह चुने गए और भविष्य के अनुवाद
पुनरावृत्तियों में संगतता सुनिश्चित करने के लिए।
+
+## औपचारिक और सम्मानजनक संबोधन
+
+हिन्दी अनुवाद में औपचारिक और सम्मानजनक संबोधन का प्रयोग किया गया है।
उपयोगकर्ता को "आप" कहकर संबोधित किया गया है और विनम्र भाषा का प्रयोग किया गया
है।
+
+## अपरिवर्तित शब्द
+
+निम्नलिखित शब्दों को जानबूझकर अंग्रेजी से अनुवादित नहीं किया गया है:
+
+- `XCom`: Cross-communication के लिए Airflow का विशिष्ट तकनीकी शब्द है।
+- `ID`: Technical identifier के रूप में सभी जगह प्रयोग होता है।
+- `Log Levels` (CRITICAL, ERROR, WARNING, INFO, DEBUG): ये तकनीकी स्तर लॉग
आउटपुट में भी दिखाई देते हैं, इसलिए इन्हें हिन्दी में अनुवादित नहीं किया गया।
+
+## Airflow-विशिष्ट शब्दों के अनुवाद
+
+हिन्दी अनुवाद के लिए निम्नलिखित शब्दों का इस तरह अनुवाद किया गया है:
+
+- `Asset` → `एसेट`: Airflow 3 में नई तकनीकी अवधारणा होने के कारण और डेटा
संपत्ति के साथ भ्रम से बचने के लिए transliteration का प्रयोग किया गया।
+- `Asset Event` → `एसेट इवेंट`: तकनीकी संदर्भ में "घटना" के बजाय "इवेंट" अधिक
उपयुक्त है।
+- `Backfill` → `बैकफ़िल`: तकनीकी शब्द के रूप में रखा गया क्योंकि यह Airflow
में विशिष्ट अवधारणा है।
+- `Bundle` → `बंडल`: प्रत्यक्ष अनुवाद उपयुक्त है।
+- `Catchup` → `पकड़ना`: प्रत्यक्ष अनुवाद।
+- `Config`/`Configuration` → `विन्यास`: अंग्रेजी transliteration
"कॉन्फ़िगरेशन" के बजाय शुद्ध हिन्दी शब्द का प्रयोग।
+- `Connections` → `कनेक्शन`: तकनीकी शब्द के रूप में व्यापक रूप से समझा जाता है।
+- `Dag`/`Dags` → `डैग`/`डैग्स`: Airflow का मुख्य concept, transliteration से
Hindi speakers के लिए पढ़ना आसान।
+- `Dag Run` → `डैग रन`: डैग के execution instance के लिए।
+- `Deferred` → `स्थगित`: सबसे उपयुक्त हिन्दी शब्द।
+- `Map Index` → `मैप इंडेक्स`: तकनीकी शब्द के रूप में रखा गया।
+- `Operator` → `ऑपरेटर`: तकनीकी संदर्भ में व्यापक रूप से समझा जाता है।
+- `Plugins` → `प्लगइन`: तकनीकी शब्द।
+- `Pools` → `पूल`: संसाधन पूल के संदर्भ में समझा जाता है।
+- `Provider` → `प्रोवाइडर`: तकनीकी संदर्भ में transliteration अधिक स्पष्ट है।
+- `Scheduled` → `निर्धारित`: नियमित रूप से चलने वाले डैग्स के लिए।
+- `Task` → `टास्क`: तकनीकी संदर्भ में व्यापक रूप से समझा जाता है।
+- `Task Instance` → `टास्क इंस्टेंस`: तकनीकी शब्द।
+- `Trigger` → `ट्रिगर`: तकनीकी संदर्भ में व्यापक रूप से प्रयोग होता है।
+- `Try Number` → `प्रयास संख्या`: प्रत्यक्ष अनुवाद।
+- `Variable` → `वेरिएबल`: तकनीकी संदर्भ में industry standard transliteration
का प्रयोग।
+- `Key` → `कुंजी`: डेटाबेस key/identifier के लिए "कुंजी" का प्रयोग, possessive
"की" के बजाय।
+- `Home` → `मुख्य पृष्ठ`: UI का मुख्य पृष्ठ या डैशबोर्ड के लिए उपयुक्त हिन्दी
शब्द, transliteration "होम" के बजाय।
+
+## अनुवाद सिद्धांत
+
+### शुद्ध हिन्दी vs Transliteration
+
+इस अनुवाद में निम्नलिखित सिद्धांत अपनाए गए हैं:
+
+1. **तकनीकी शब्द**: कुछ Airflow-विशिष्ट तकनीकी शब्द (जैसे XCom, ID) अपरिवर्तित
रखे गए हैं, जबकि मुख्य concepts (डैग, वेरिएबल) को transliterate किया गया है।
+2. **सामान्य UI शब्द**: सामान्य interface शब्दों के लिए शुद्ध हिन्दी शब्द
प्राथमिकता (जैसे "विन्यास" बजाय "कॉन्फ़िगरेशन")।
+3. **संदर्भ स्पष्टता**: जहां शुद्ध हिन्दी शब्द भ्रम पैदा कर सकते हैं, वहां
transliteration का प्रयोग (जैसे "एसेट" बजाय "संपत्ति")।
+
+
+## विशेष नोट
+
+`states.none` के लिए "कुछ नहीं" का प्रयोग किया गया है, जबकि `states.no_status`
के लिए "कोई स्थिति नहीं" का प्रयोग किया गया है, जैसा कि मूल PR में चर्चा हुई थी।
+
+## अनुवाद स्थिति
+
+- **पूर्णता**: 100% (638/638 अनुवाद)
+- **फ़ाइलें**: 9 JSON फ़ाइलें (common, admin, browse, assets, components, dag,
dags, dashboard, hitl)
+- **गुणवत्ता**: सभी linter जांच पास, कोई missing keys नहीं
+
+यह अनुवाद Apache Airflow समुदाय के योगदान से तैयार किया गया है और इसका
उद्देश्य हिन्दी भाषी उपयोगकर्ताओं के लिए Airflow को अधिक सुलभ बनाना है।
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/hi/admin.json
b/airflow-core/src/airflow/ui/public/i18n/locales/hi/admin.json
new file mode 100644
index 00000000000..8a12c76d4d2
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/hi/admin.json
@@ -0,0 +1,167 @@
+{
+ "columns": {
+ "description": "विवरण",
+ "key": "कुंजी",
+ "name": "नाम",
+ "value": "मान"
+ },
+ "config": {
+ "columns": {
+ "section": "सेक्शन"
+ },
+ "title": "Airflow विन्यास"
+ },
+ "connections": {
+ "add": "कनेक्शन जोड़ें",
+ "columns": {
+ "connectionId": "कनेक्शन ID",
+ "connectionType": "कनेक्शन प्रकार",
+ "host": "होस्ट",
+ "port": "पोर्ट"
+ },
+ "connection_one": "कनेक्शन",
+ "connection_other": "कनेक्शन्स",
+ "delete": {
+ "deleteConnection_one": "1 कनेक्शन हटाएं",
+ "deleteConnection_other": "{{count}} कनेक्शन्स हटाएं",
+ "firstConfirmMessage_one": "आप निम्नलिखित कनेक्शन को हटाने वाले हैं:",
+ "firstConfirmMessage_other": "आप निम्नलिखित कनेक्शन्स को हटाने वाले
हैं:",
+ "title": "कनेक्शन हटाएं"
+ },
+ "edit": "कनेक्शन संपादित करें",
+ "form": {
+ "connectionIdRequired": "कनेक्शन ID आवश्यक है",
+ "connectionIdRequirement": "कनेक्शन ID में केवल अंतरिक्ष कुंजियाँ नहीं
हो सकते",
+ "connectionTypeRequired": "कनेक्शन प्रकार आवश्यक है",
+ "extraFields": "अतिरिक्त फ़ील्ड",
+ "extraFieldsJson": "अतिरिक्त फ़ील्ड JSON",
+ "helperText": "कनेक्शन प्रकार गायब है? सुनिश्चित करें कि आपने संबंधित
Airflow Providers Package इंस्टॉल किया है।",
+ "helperTextForRedactedFields": "संपादित फ़ील्ड ('***') अपरिवर्तित रहेंगे
यदि संशोधित नहीं किए गए।",
+ "selectConnectionType": "कनेक्शन प्रकार चुनें",
+ "standardFields": "मानक फ़ील्ड"
+ },
+ "nothingFound": {
+ "description": "एनवायरनमेंट वेरिएबल या सीक्रेट मैनेजर के माध्यम से
परिभाषित कनेक्शन यहां सूचीबद्ध नहीं हैं।",
+ "documentationLink": "Airflow प्रलेखन में और जानें।",
+ "learnMore": "ये तभी लोड किए जाते हैं जब कोई टास्क्स, जो इन्हें उपयोग
करता है, चलाया जाता है और इसलिए ये इस दृश्य में दिखाई नहीं देते।",
+ "title": "कोई कनेक्शन नहीं मिला!"
+ },
+ "searchPlaceholder": "कनेक्शन खोजें",
+ "test": "कनेक्शन टेस्ट करें",
+ "testDisabled": "टेस्ट कनेक्शन सुविधा अक्षम है। कृपया इसे सक्षम करने के
लिए एडमिनिस्ट्रेटर से संपर्क करें।",
+ "typeMeta": {
+ "error": "कनेक्शन प्रकार मेटा प्राप्त करने में विफल",
+ "standardFields": {
+ "description": "विवरण",
+ "host": "होस्ट",
+ "login": "लॉगिन",
+ "password": "पासवर्ड",
+ "port": "पोर्ट",
+ "url_schema": "स्कीमा"
+ }
+ }
+ },
+ "deleteActions": {
+ "button": "हटाएं",
+ "modal": {
+ "confirmButton": "हां, हटाएं",
+ "secondConfirmMessage": "यह क्रिया स्थायी है और इसे पूर्ववत नहीं किया जा
सकता।",
+ "thirdConfirmMessage": " क्या आप वास्तव में आगे बढ़ना चाहते हैं?"
+ },
+ "selected": "चयनित",
+ "tooltip": "चयनित कनेक्शन्स हटाएं"
+ },
+ "formActions": {
+ "reset": "रीसेट करें",
+ "save": "सेव करें"
+ },
+ "plugins": {
+ "columns": {
+ "source": "स्रोत"
+ },
+ "importError_one": "प्लगइन आयात त्रुटि",
+ "importError_other": "प्लगइन आयात त्रुटियां",
+ "searchPlaceholder": "फ़ाइल द्वारा खोजें"
+ },
+ "pools": {
+ "add": "पूल जोड़ें",
+ "deferredSlotsIncluded": "स्थगित स्लॉट्स शामिल",
+ "delete": {
+ "title": "पूल हटाएं",
+ "warning": "यह पूल से संबंधित सभी मेटाडेटा को हटा देगा और इस पूल का
उपयोग करने वाले टास्क्स को प्रभावित कर सकता है।"
+ },
+ "edit": "पूल संपादित करें",
+ "form": {
+ "checkbox": "खुले पूल स्लॉट्स की गणना करते समय स्थगित टास्क्स को शामिल
करने के लिए चेक करें",
+ "description": "विवरण",
+ "includeDeferred": "स्थगित शामिल करें",
+ "nameMaxLength": "नाम में अधिकतम 256 वर्ण हो सकते हैं",
+ "nameRequired": "नाम आवश्यक है",
+ "slots": "स्लॉट्स"
+ },
+ "noPoolsFound": "कोई पूल नहीं मिले",
+ "pool_one": "पूल",
+ "pool_other": "पूल्स",
+ "searchPlaceholder": "पूल्स खोजें",
+ "sort": {
+ "asc": "नाम (A-Z)",
+ "desc": "नाम (Z-A)",
+ "placeholder": "सॉर्ट करें"
+ }
+ },
+ "providers": {
+ "columns": {
+ "packageName": "पैकेज नाम",
+ "version": "संस्करण"
+ }
+ },
+ "variables": {
+ "add": "वेरिएबल जोड़ें",
+ "columns": {
+ "isEncrypted": "एन्क्रिप्टेड है"
+ },
+ "delete": {
+ "deleteVariable_one": "1 वेरिएबल हटाएं",
+ "deleteVariable_other": "{{count}} वेरिएबल्स हटाएं",
+ "firstConfirmMessage_one": "आप निम्नलिखित वेरिएबल को हटाने वाले हैं:",
+ "firstConfirmMessage_other": "आप निम्नलिखित वेरिएबल्स को हटाने वाले
हैं:",
+ "title": "वेरिएबल हटाएं",
+ "tooltip": "चयनित वेरिएबल हटाएं"
+ },
+ "edit": "वेरिएबल संपादित करें",
+ "export": "निर्यात",
+ "exportTooltip": "चयनित वेरिएबल निर्यात करें",
+ "form": {
+ "invalidJson": "अमान्य JSON",
+ "keyMaxLength": "कुंजी में अधिकतम 250 वर्ण हो सकते हैं",
+ "keyRequired": "कुंजी आवश्यक है",
+ "valueRequired": "मान आवश्यक है"
+ },
+ "import": {
+ "button": "आयात करें",
+ "conflictResolution": "वेरिएबल कॉन्फ़्लिक्ट रिज़ॉल्यूशन चुनें",
+ "errorParsingJsonFile": "JSON फ़ाइल पार्स करने में त्रुटि: वेरिएबल वाली
JSON फ़ाइल अपलोड करें (जैसे, {\"key\": \"value\", ...})।",
+ "options": {
+ "fail": {
+ "description": "यदि कोई मौजूदा वेरिएबल पाया जाता है तो आयात विफल हो
जाता है।",
+ "title": "विफल"
+ },
+ "overwrite": {
+ "description": "कॉन्फ़्लिक्ट की स्थिति में वेरिएबल को अधिलेखित करता
है।",
+ "title": "अधिलेखित"
+ },
+ "skip": {
+ "description": "पहले से मौजूद वेरिएबल का आयात छोड़ देता है।",
+ "title": "छोड़ें"
+ }
+ },
+ "title": "वेरिएबल आयात करें",
+ "upload": "JSON फ़ाइल अपलोड करें",
+ "uploadPlaceholder": "वेरिएबल वाली JSON फ़ाइल अपलोड करें (जैसे,
{\"key\": \"value\", ...})"
+ },
+ "noRowsMessage": "कोई वेरिएबल नहीं मिले",
+ "searchPlaceholder": "कुंजियां खोजें",
+ "variable_one": "वेरिएबल",
+ "variable_other": "वेरिएबल्स"
+ }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/hi/assets.json
b/airflow-core/src/airflow/ui/public/i18n/locales/hi/assets.json
new file mode 100644
index 00000000000..5547af574e8
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/hi/assets.json
@@ -0,0 +1,30 @@
+{
+ "consumingDags": "उपभोग करने वाले डैग्स",
+ "createEvent": {
+ "button": "इवेंट बनाएं",
+ "manual": {
+ "description": "मैन्युअल रूप से एसेट इवेंट बनाएं",
+ "extra": "एसेट इवेंट अतिरिक्त",
+ "label": "मैन्युअल"
+ },
+ "materialize": {
+ "description": "इस एसेट के अपस्ट्रीम डैग को ट्रिगर करें",
+ "descriptionWithDag": "इस एसेट के अपस्ट्रीम डैग को ट्रिगर करें:
{{dagName}}",
+ "label": "भौतिक बनाएं",
+ "unpauseDag": "ट्रिगर पर {{dagName}} को अनपॉज़ करें"
+ },
+ "success": {
+ "manualDescription": "मैन्युअल एसेट इवेंट निर्माण सफल रहा।",
+ "manualTitle": "एसेट इवेंट बनाया गया",
+ "materializeDescription": "अपस्ट्रीम डैग {{dagId}} सफलतापूर्वक ट्रिगर
किया गया।",
+ "materializeTitle": "एसेट का भौतिकीकरण"
+ },
+ "title": "{{name}} के लिए एसेट इवेंट बनाएं"
+ },
+ "group": "ग्रुप",
+ "lastAssetEvent": "अंतिम एसेट इवेंट",
+ "name": "नाम",
+ "producingTasks": "उत्पादन करने वाले टास्क्स",
+ "scheduledDags": "निर्धारित डैग्स",
+ "searchPlaceholder": "एसेट्स खोजें"
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/hi/browse.json
b/airflow-core/src/airflow/ui/public/i18n/locales/hi/browse.json
new file mode 100644
index 00000000000..4ee78a7e0ae
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/hi/browse.json
@@ -0,0 +1,26 @@
+{
+ "auditLog": {
+ "actions": {
+ "collapseAllExtra": "सभी अतिरिक्त JSON को संकुचित करें",
+ "expandAllExtra": "सभी अतिरिक्त JSON को विस्तृत करें"
+ },
+ "columns": {
+ "event": "इवेंट",
+ "extra": "अतिरिक्त",
+ "user": "उपयोगकर्ता",
+ "when": "कब"
+ },
+ "filters": {
+ "eventType": "इवेंट प्रकार"
+ },
+ "title": "ऑडिट लॉग"
+ },
+ "xcom": {
+ "columns": {
+ "dag": "डैग",
+ "key": "कुंजी",
+ "value": "मान"
+ },
+ "title": "XCom"
+ }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/hi/common.json
b/airflow-core/src/airflow/ui/public/i18n/locales/hi/common.json
new file mode 100644
index 00000000000..53cc2469791
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/hi/common.json
@@ -0,0 +1,314 @@
+{
+ "admin": {
+ "Config": "विन्यास",
+ "Connections": "कनेक्शन",
+ "Plugins": "प्लगइन",
+ "Pools": "पूल",
+ "Providers": "प्रोवाइडर",
+ "Variables": "वेरिएबल्स"
+ },
+ "asset_one": "एसेट",
+ "asset_other": "एसेट्स",
+ "assetEvent_one": "एसेट इवेंट",
+ "assetEvent_other": "एसेट इवेंट्स",
+ "backfill_one": "बैकफ़िल",
+ "backfill_other": "बैकफ़िल्स",
+ "browse": {
+ "auditLog": "ऑडिट लॉग",
+ "requiredActions": "आवश्यक क्रियाएं",
+ "xcoms": "XComs"
+ },
+ "collapseDetailsPanel": "विवरण पैनल को छुपाएं",
+ "createdAssetEvent_one": "बनाया गया एसेट इवेंट",
+ "createdAssetEvent_other": "बनाए गए एसेट इवेंट्स",
+ "dag_one": "डैग",
+ "dag_other": "डैग्स",
+ "dagDetails": {
+ "catchup": "पकड़ना",
+ "concurrency": "समानांतरता",
+ "dagRunTimeout": "डैग रन टाइमआउट",
+ "defaultArgs": "डिफ़ॉल्ट तर्क",
+ "description": "विवरण",
+ "documentation": "डैग प्रलेखन",
+ "fileLocation": "फ़ाइल स्थान",
+ "hasTaskConcurrencyLimits": "टास्क समानांतरता सीमा है",
+ "lastExpired": "अंतिम समाप्त",
+ "lastParsed": "अंतिम पार्स",
+ "latestDagVersion": "नवीनतम डैग संस्करण",
+ "latestRun": "नवीनतम रन",
+ "maxActiveRuns": "अधिकतम सक्रिय रन्स",
+ "maxActiveTasks": "अधिकतम सक्रिय टास्क्स",
+ "maxConsecutiveFailedDagRuns": "अधिकतम लगातार विफल डैग रन्स",
+ "nextRun": "अगला रन",
+ "owner": "स्वामी",
+ "params": "पैरामीटर",
+ "schedule": "अनुसूची",
+ "tags": "टैग्स"
+ },
+ "dagId": "डैग ID",
+ "dagRun": {
+ "conf": "विन्यास",
+ "dagVersions": "डैग संस्करण",
+ "dataIntervalEnd": "डेटा अंतराल अंत",
+ "dataIntervalStart": "डेटा अंतराल प्रारंभ",
+ "lastSchedulingDecision": "अंतिम शेड्यूलिंग निर्णय",
+ "queuedAt": "कतार में",
+ "runAfter": "के बाद चलाएं",
+ "runType": "रन प्रकार",
+ "sourceAssetEvent": "स्रोत एसेट इवेंट",
+ "triggeredBy": "द्वारा ट्रिगर",
+ "triggeringUser": "ट्रिगर करने वाला उपयोगकर्ता"
+ },
+ "dagRun_one": "डैग रन",
+ "dagRun_other": "डैग रन्स",
+ "dagRunId": "डैग रन ID",
+ "dagWarnings": "डैग चेतावनियां/त्रुटियां",
+ "defaultToGraphView": "ग्राफ़ व्यू को डिफ़ॉल्ट करें",
+ "defaultToGridView": "ग्रिड व्यू को डिफ़ॉल्ट करें",
+ "direction": "दिशा",
+ "docs": {
+ "documentation": "प्रलेखन",
+ "githubRepo": "GitHub रेपो",
+ "restApiReference": "REST API संदर्भ"
+ },
+ "duration": "अवधि",
+ "endDate": "समाप्ति तिथि",
+ "error": {
+ "back": "वापस",
+ "defaultMessage": "एक अप्रत्याशित त्रुटि हुई",
+ "home": "मुख्य पृष्ठ",
+ "notFound": "पेज नहीं मिला",
+ "title": "त्रुटि"
+ },
+ "expand": {
+ "collapse": "संकुचित करें",
+ "expand": "विस्तृत करें",
+ "hotkey": "e",
+ "tooltip": "विस्तार को टॉगल करने के लिए {{hotkey}} दबाएं"
+ },
+ "expression": {
+ "all": "सभी",
+ "and": "और",
+ "any": "कोई भी",
+ "or": "या"
+ },
+ "filters": {
+ "dagDisplayNamePlaceholder": "डैग द्वारा फ़िल्टर करें",
+ "keyPlaceholder": "XCom कुंजी द्वारा फ़िल्टर करें",
+ "logicalDateFromPlaceholder": "तार्किक तिथि से",
+ "logicalDateToPlaceholder": "तार्किक तिथि तक",
+ "mapIndexPlaceholder": "मैप इंडेक्स द्वारा फ़िल्टर करें",
+ "runAfterFromPlaceholder": "रन आफ़्टर से",
+ "runAfterToPlaceholder": "रन आफ़्टर तक",
+ "runIdPlaceholder": "रन ID द्वारा फ़िल्टर करें",
+ "taskIdPlaceholder": "टास्क ID द्वारा फ़िल्टर करें"
+ },
+ "logicalDate": "तार्किक तिथि",
+ "logout": "लॉग आउट",
+ "logoutConfirmation": "आप एप्लिकेशन से लॉग आउट करने वाले हैं।",
+ "mapIndex": "मैप इंडेक्स",
+ "modal": {
+ "cancel": "रद्द करें",
+ "confirm": "पुष्टि करें",
+ "delete": {
+ "button": "हटाएं",
+ "confirmation": "क्या आप वास्तव में {{resourceName}} को हटाना चाहते हैं?
यह क्रिया को पूर्ववत नहीं किया जा सकता।"
+ }
+ },
+ "nav": {
+ "admin": "व्यवस्थापक",
+ "assets": "एसेट्स",
+ "browse": "ब्राउज़ करें",
+ "dags": "डैग्स",
+ "docs": "प्रलेखन",
+ "home": "मुख्य पृष्ठ",
+ "legacyFabViews": "पुराने व्यू",
+ "plugins": "प्लगइन",
+ "security": "सुरक्षा"
+ },
+ "noItemsFound": "कोई {{modelName}} नहीं मिला",
+ "note": {
+ "add": "नोट जोड़ें",
+ "dagRun": "डैग रन नोट",
+ "label": "नोट",
+ "placeholder": "नोट जोड़ें...",
+ "taskInstance": "टास्क इंस्टेंस नोट"
+ },
+ "pools": {
+ "deferred": "स्थगित",
+ "open": "खुला",
+ "pools_one": "पूल",
+ "pools_other": "पूल्स",
+ "queued": "कतार में",
+ "running": "चल रहा",
+ "scheduled": "निर्धारित"
+ },
+ "runId": "रन ID",
+ "runTypes": {
+ "asset_triggered": "एसेट द्वारा ट्रिगर",
+ "backfill": "बैकफ़िल",
+ "manual": "मैन्युअल",
+ "scheduled": "निर्धारित"
+ },
+ "scroll": {
+ "direction": {
+ "bottom": "नीचे",
+ "top": "ऊपर"
+ },
+ "tooltip": "{{direction}} तक स्क्रॉल करने के लिए {{hotkey}} दबाएं"
+ },
+ "seconds": "{{count}}सेकंड",
+ "security": {
+ "actions": "क्रियाएं",
+ "permissions": "अनुमतियां",
+ "resources": "संसाधन",
+ "roles": "भूमिकाएं",
+ "users": "उपयोगकर्ता"
+ },
+ "selectLanguage": "भाषा चुनें",
+ "showDetailsPanel": "विवरण पैनल दिखाएं",
+ "source": {
+ "hide": "स्रोत छुपाएं",
+ "hotkey": "s",
+ "show": "स्रोत दिखाएं"
+ },
+ "sourceAssetEvent_one": "स्रोत एसेट इवेंट",
+ "sourceAssetEvent_other": "स्रोत एसेट इवेंट्स",
+ "startDate": "प्रारंभ तिथि",
+ "state": "स्थिति",
+ "states": {
+ "deferred": "स्थगित",
+ "failed": "विफल",
+ "no_status": "कोई स्थिति नहीं",
+ "none": "कुछ नहीं",
+ "queued": "कतार में",
+ "removed": "हटाया गया",
+ "restarting": "पुनः आरंभ",
+ "running": "चल रहा",
+ "scheduled": "निर्धारित",
+ "skipped": "छोड़ा गया",
+ "success": "सफल",
+ "up_for_reschedule": "पुनर्निर्धारण के लिए",
+ "up_for_retry": "पुनः प्रयास के लिए",
+ "upstream_failed": "अपस्ट्रीम विफल"
+ },
+ "switchToDarkMode": "डार्क मोड में स्विच करें",
+ "switchToLightMode": "लाइट मोड में स्विच करें",
+ "table": {
+ "completedAt": "पर पूर्ण",
+ "createdAt": "पर बनाया",
+ "filterByTag": "टैग द्वारा डैग्स फ़िल्टर करें",
+ "filterColumns": "टेबल कॉलम फ़िल्टर करें",
+ "filterReset_one": "फ़िल्टर रीसेट करें",
+ "filterReset_other": "फ़िल्टर रीसेट करें",
+ "from": "से",
+ "maxActiveRuns": "अधिकतम सक्रिय रन्स",
+ "noTagsFound": "कोई टैग नहीं मिले",
+ "tagMode": {
+ "all": "सभी",
+ "any": "कोई भी"
+ },
+ "tagPlaceholder": "टैग द्वारा फ़िल्टर करें",
+ "to": "तक"
+ },
+ "task": {
+ "documentation": "टास्क प्रलेखन",
+ "lastInstance": "अंतिम इंस्टेंस",
+ "operator": "ऑपरेटर",
+ "triggerRule": "ट्रिगर नियम"
+ },
+ "task_one": "टास्क",
+ "task_other": "टास्क्स",
+ "taskGroup": "टास्क ग्रुप",
+ "taskId": "टास्क ID",
+ "taskInstance": {
+ "dagVersion": "डैग संस्करण",
+ "executor": "एक्जीक्यूटर",
+ "executorConfig": "एक्जीक्यूटर कॉन्फ़िग",
+ "hostname": "होस्टनेम",
+ "maxTries": "अधिकतम प्रयास",
+ "pid": "PID",
+ "pool": "पूल",
+ "poolSlots": "पूल स्लॉट्स",
+ "priorityWeight": "प्राथमिकता भार",
+ "queue": "कतार",
+ "queuedWhen": "कब कतार में",
+ "scheduledWhen": "कब निर्धारित",
+ "triggerer": {
+ "assigned": "निर्धारित ट्रिगरर",
+ "class": "ट्रिगर क्लास",
+ "createdAt": "ट्रिगर निर्माण समय",
+ "id": "ट्रिगर ID",
+ "latestHeartbeat": "नवीनतम हार्टबीट",
+ "title": "ट्रिगरर जानकारी"
+ },
+ "unixname": "यूनिक्स नाम"
+ },
+ "taskInstance_one": "टास्क इंस्टेंस",
+ "taskInstance_other": "टास्क इंस्टेंसेज",
+ "timeRange": {
+ "last12Hours": "पिछले 12 घंटे",
+ "last24Hours": "पिछले 24 घंटे",
+ "lastHour": "पिछला घंटा",
+ "pastWeek": "पिछला सप्ताह"
+ },
+ "timestamp": {
+ "hide": "टाइमस्टैम्प छुपाएं",
+ "hotkey": "t",
+ "show": "टाइमस्टैम्प दिखाएं"
+ },
+ "timezone": "समयक्षेत्र",
+ "timezoneModal": {
+ "current-timezone": "वर्तमान समय में",
+ "placeholder": "समयक्षेत्र चुनें",
+ "title": "समयक्षेत्र चुनें",
+ "utc": "UTC (समन्वयित सार्वभौमिक समय)"
+ },
+ "toaster": {
+ "bulkDelete": {
+ "error": "बल्क डिलीट {{resourceName}} अनुरोध विफल",
+ "success": {
+ "description": "{{count}} {{resourceName}} सफलतापूर्वक हटा दिए गए हैं।
keys: {{keys}}",
+ "title": "बल्क डिलीट {{resourceName}} अनुरोध सबमिट किया गया"
+ }
+ },
+ "create": {
+ "error": "{{resourceName}} बनाने का अनुरोध विफल",
+ "success": {
+ "description": "{{resourceName}} सफलतापूर्वक बनाया गया है।",
+ "title": "{{resourceName}} बनाने का अनुरोध सबमिट किया गया"
+ }
+ },
+ "delete": {
+ "error": "{{resourceName}} हटाने का अनुरोध विफल",
+ "success": {
+ "description": "{{resourceName}} सफलतापूर्वक हटा दिया गया है।",
+ "title": "{{resourceName}} हटाने का अनुरोध सबमिट किया गया"
+ }
+ },
+ "import": {
+ "error": "{{resourceName}} आयात अनुरोध विफल",
+ "success": {
+ "description": "{{count}} {{resourceName}} सफलतापूर्वक आयात किए गए
हैं।",
+ "title": "{{resourceName}} आयात अनुरोध सबमिट किया गया"
+ }
+ },
+ "update": {
+ "error": "{{resourceName}} अपडेट अनुरोध विफल",
+ "success": {
+ "description": "{{resourceName}} सफलतापूर्वक अपडेट किया गया है।",
+ "title": "{{resourceName}} अपडेट अनुरोध सबमिट किया गया"
+ }
+ }
+ },
+ "total": "कुल {{state}}",
+ "triggered": "ट्रिगर किया गया",
+ "tryNumber": "प्रयास संख्या",
+ "user": "उपयोगकर्ता",
+ "wrap": {
+ "hotkey": "w",
+ "tooltip": "रैप को टॉगल करने के लिए {{hotkey}} दबाएं",
+ "unwrap": "अनरैप",
+ "wrap": "रैप"
+ }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/hi/components.json
b/airflow-core/src/airflow/ui/public/i18n/locales/hi/components.json
new file mode 100644
index 00000000000..e84d1da7745
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/hi/components.json
@@ -0,0 +1,136 @@
+{
+ "backfill": {
+ "affected_one": "1 रन ट्रिगर किया जाएगा।",
+ "affected_other": "{{count}} रन्स ट्रिगर किए जाएंगे।",
+ "affectedNone": "चयनित मापदंड से मेल खाने वाले कोई रन्स नहीं।",
+ "allRuns": "सभी रन्स",
+ "backwards": "पीछे की ओर चलाएं",
+ "dateRange": "तिथि रेंज",
+ "dateRangeFrom": "से",
+ "dateRangeTo": "तक",
+ "errorStartDateBeforeEndDate": "प्रारंभ तिथि समाप्ति तिथि से पहले होनी
चाहिए",
+ "maxRuns": "अधिकतम सक्रिय रन्स",
+ "missingAndErroredRuns": "गुम और त्रुटि वाले रन्स",
+ "missingRuns": "गुम रन्स",
+ "reprocessBehavior": "पुनः प्रक्रिया व्यवहार",
+ "run": "बैकफ़िल चलाएं",
+ "selectDescription": "तिथियों की रेंज के लिए इस डैग को चलाएं",
+ "selectLabel": "बैकफ़िल",
+ "title": "बैकफ़िल चलाएं",
+ "toaster": {
+ "success": {
+ "description": "बैकफ़िल जॉब्स सफलतापूर्वक ट्रिगर किए गए।",
+ "title": "बैकफ़िल जेनरेट किया गया"
+ }
+ },
+ "tooltip": "बैकफ़िल के लिए एक शेड्यूल आवश्यक है",
+ "unpause": "ट्रिगर पर {{dag_display_name}} को अनपॉज़ करें",
+ "validation": {
+ "datesRequired": "डेटा अंतराल प्रारंभ तिथि और समाप्ति तिथि दोनों प्रदान
की जानी चाहिए।",
+ "startBeforeEnd": "डेटा अंतराल प्रारंभ तिथि समाप्ति तिथि से कम या उसके
बराबर होनी चाहिए।"
+ }
+ },
+ "banner": {
+ "backfillInProgress": "बैकफ़िल प्रगति में है",
+ "cancel": "बैकफ़िल रद्द करें",
+ "pause": "बैकफ़िल को रोकें",
+ "unpause": "बैकफ़िल को अनपॉज़ करें"
+ },
+ "clipboard": {
+ "copy": "कॉपी करें"
+ },
+ "close": "बंद करें",
+ "configForm": {
+ "advancedOptions": "उन्नत विकल्प",
+ "configJson": "विन्यास JSON",
+ "invalidJson": "अमान्य JSON प्रारूप: {{errorMessage}}"
+ },
+ "dagWarnings": {
+ "error_one": "1 त्रुटि",
+ "error_other": "{{count}} त्रुटियां",
+ "errorAndWarning": "1 त्रुटि और {{warningText}}",
+ "warning_one": "1 चेतावनी",
+ "warning_other": "{{count}} चेतावनियां"
+ },
+ "durationChart": {
+ "duration": "अवधि (सेकंड)",
+ "lastDagRun_one": "अंतिम डैग रन",
+ "lastDagRun_other": "अंतिम {{count}} डैग रन्स",
+ "lastTaskInstance_one": "अंतिम टास्क इंस्टेंस",
+ "lastTaskInstance_other": "अंतिम {{count}} टास्क इंस्टेंसेज",
+ "queuedDuration": "कतार अवधि",
+ "runAfter": "के बाद चलाएं",
+ "runDuration": "रन अवधि"
+ },
+ "fileUpload": {
+ "files_one": "{{count}} फ़ाइल",
+ "files_other": "{{count}} फ़ाइलें"
+ },
+ "flexibleForm": {
+ "placeholder": "मान चुनें",
+ "placeholderArray": "प्रत्येक स्ट्रिंग को नई लाइन में दर्ज करें",
+ "placeholderExamples": "विकल्प देखने के लिए टाइप करना शुरू करें",
+ "placeholderMulti": "एक या एकाधिक मान चुनें",
+ "validationErrorArrayNotArray": "मान एक array होना चाहिए।",
+ "validationErrorArrayNotNumbers": "Array के सभी तत्व संख्या होने चाहिए।",
+ "validationErrorArrayNotObject": "Array के सभी तत्व ऑब्जेक्ट होने चाहिए।",
+ "validationErrorRequired": "यह फ़ील्ड आवश्यक है"
+ },
+ "graph": {
+ "directionDown": "ऊपर से नीचे",
+ "directionLeft": "दाएं से बाएं",
+ "directionRight": "बाएं से दाएं",
+ "directionUp": "नीचे से ऊपर",
+ "downloadImage": "ग्राफ़ इमेज डाउनलोड करें",
+ "downloadImageError": "ग्राफ़ इमेज डाउनलोड करने में विफल।",
+ "downloadImageErrorTitle": "डाउनलोड विफल",
+ "otherDagRuns": "+अन्य डैग रन्स",
+ "taskCount_one": "{{count}} टास्क",
+ "taskCount_other": "{{count}} टास्क्स",
+ "taskGroup": "टास्क ग्रुप"
+ },
+ "limitedList": "+{{count}} और",
+ "logs": {
+ "file": "फ़ाइल",
+ "location": "{{name}} में लाइन {{line}}"
+ },
+ "reparseDag": "डैग को दोबारा पार्स करें",
+ "sortedAscending": "आरोही क्रम में सॉर्ट किया गया",
+ "sortedDescending": "अवरोही क्रम में सॉर्ट किया गया",
+ "sortedUnsorted": "अनसॉर्टेड",
+ "taskTries": "टास्क प्रयास",
+ "toggleCardView": "कार्ड व्यू दिखाएं",
+ "toggleTableView": "टेबल व्यू दिखाएं",
+ "triggerDag": {
+ "button": "ट्रिगर करें",
+ "loading": "डैग जानकारी लोड हो रही है...",
+ "loadingFailed": "डैग जानकारी लोड करने में विफल। कृपया पुनः प्रयास करें।",
+ "runIdHelp": "वैकल्पिक - प्रदान न किए जाने पर जेनरेट किया जाएगा",
+ "selectDescription": "इस डैग का एक रन ट्रिगर करें",
+ "selectLabel": "सिंगल रन",
+ "title": "डैग ट्रिगर करें",
+ "toaster": {
+ "success": {
+ "description": "डैग रन सफलतापूर्वक ट्रिगर किया गया।",
+ "title": "डैग रन ट्रिगर किया गया"
+ }
+ },
+ "unpause": "ट्रिगर पर {{dagDisplayName}} को अनपॉज़ करें"
+ },
+ "trimText": {
+ "details": "विवरण",
+ "empty": "खाली",
+ "noContent": "कोई सामग्री उपलब्ध नहीं।"
+ },
+ "versionDetails": {
+ "bundleLink": "बंडल लिंक",
+ "bundleName": "बंडल नाम",
+ "bundleVersion": "बंडल संस्करण",
+ "createdAt": "बनाया गया",
+ "versionId": "संस्करण ID"
+ },
+ "versionSelect": {
+ "dagVersion": "डैग संस्करण",
+ "versionCode": "v{{versionCode}}"
+ }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/hi/dag.json
b/airflow-core/src/airflow/ui/public/i18n/locales/hi/dag.json
new file mode 100644
index 00000000000..253ed958540
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/hi/dag.json
@@ -0,0 +1,121 @@
+{
+ "allRuns": "सभी रन्स",
+ "blockingDeps": {
+ "dependency": "निर्भरता",
+ "reason": "कारण",
+ "title": "टास्क को शेड्यूल होने से रोकने वाली निर्भरताएं"
+ },
+ "code": {
+ "bundleUrl": "बंडल URL",
+ "noCode": "कोई कोड नहीं मिला",
+ "parsedAt": "पार्स किया गया:"
+ },
+ "extraLinks": "अतिरिक्त लिंक्स",
+ "grid": {
+ "buttons": {
+ "resetToLatest": "नवीनतम पर रीसेट करें",
+ "toggleGroup": "ग्रुप टॉगल करें"
+ }
+ },
+ "header": {
+ "buttons": {
+ "advanced": "उन्नत",
+ "dagDocs": "डैग प्रलेखन"
+ }
+ },
+ "logs": {
+ "allLevels": "सभी लॉग स्तर",
+ "allSources": "सभी स्रोत",
+ "critical": "CRITICAL",
+ "debug": "DEBUG",
+ "error": "ERROR",
+ "fullscreen": {
+ "button": "पूर्ण स्क्रीन",
+ "tooltip": "पूर्ण स्क्रीन के लिए {{hotkey}} दबाएं"
+ },
+ "info": "INFO",
+ "noTryNumber": "कोई प्रयास संख्या नहीं",
+ "settings": "लॉग सेटिंग्स",
+ "viewInExternal": "{{name}} में लॉग्स देखें (प्रयास {{attempt}})",
+ "warning": "WARNING"
+ },
+ "navigation": {
+ "jump": "जंप: Shift+{{arrow}}",
+ "navigation": "नेवीगेशन: {{arrow}}",
+ "toggleGroup": "ग्रुप टॉगल करें: Space"
+ },
+ "overview": {
+ "buttons": {
+ "failedRun_one": "विफल रन",
+ "failedRun_other": "विफल रन्स",
+ "failedTask_one": "विफल टास्क",
+ "failedTask_other": "विफल टास्क्स",
+ "failedTaskInstance_one": "विफल टास्क इंस्टेंस",
+ "failedTaskInstance_other": "विफल टास्क इंस्टेंसेज"
+ },
+ "charts": {
+ "assetEvent_one": "बनाया गया एसेट इवेंट",
+ "assetEvent_other": "बनाए गए एसेट इवेंट्स"
+ },
+ "failedLogs": {
+ "title": "हाल ही की विफल टास्क लॉग्स",
+ "viewFullLogs": "पूर्ण लॉग्स देखें"
+ }
+ },
+ "panel": {
+ "buttons": {
+ "options": "विकल्प",
+ "showGraph": "ग्राफ़ दिखाएं",
+ "showGrid": "ग्रिड दिखाएं"
+ },
+ "dagRuns": {
+ "label": "डैग रन्स की संख्या"
+ },
+ "dependencies": {
+ "label": "निर्भरताएं",
+ "options": {
+ "allDagDependencies": "सभी डैग निर्भरताएं",
+ "externalConditions": "बाहरी स्थितियां",
+ "onlyTasks": "केवल टास्क्स"
+ },
+ "placeholder": "निर्भरताएं"
+ },
+ "graphDirection": {
+ "label": "ग्राफ़ दिशा"
+ }
+ },
+ "paramsFailed": "पैरामीटर लोड करने में विफल",
+ "parse": {
+ "toaster": {
+ "error": {
+ "description": "डैग पार्सिंग अनुरोध विफल। अभी भी प्रक्रिया होने वाले
पार्सिंग अनुरोध हो सकते हैं।",
+ "title": "डैग दोबारा पार्स करने में विफल"
+ },
+ "success": {
+ "description": "डैग जल्द ही दोबारा पार्स हो जाना चाहिए।",
+ "title": "पुनः पार्सिंग अनुरोध सफलतापूर्वक सबमिट किया गया"
+ }
+ }
+ },
+ "tabs": {
+ "assetEvents": "एसेट इवेंट्स",
+ "auditLog": "ऑडिट लॉग",
+ "backfills": "बैकफ़िल्स",
+ "code": "कोड",
+ "details": "विवरण",
+ "logs": "लॉग्स",
+ "mappedTaskInstances_one": "टास्क इंस्टेंस [{{count}}]",
+ "mappedTaskInstances_other": "टास्क इंस्टेंसेज [{{count}}]",
+ "overview": "ओवरव्यू",
+ "renderedTemplates": "रेंडर किए गए टेम्प्लेट्स",
+ "requiredActions": "आवश्यक क्रियाएं",
+ "runs": "रन्स",
+ "taskInstances": "टास्क इंस्टेंसेज",
+ "tasks": "टास्क्स",
+ "xcom": "XCom"
+ },
+ "taskGroups": {
+ "collapseAll": "सभी टास्क ग्रुप्स को संकुचित करें",
+ "expandAll": "सभी टास्क ग्रुप्स को विस्तृत करें"
+ }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/hi/dags.json
b/airflow-core/src/airflow/ui/public/i18n/locales/hi/dags.json
new file mode 100644
index 00000000000..54cac115336
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/hi/dags.json
@@ -0,0 +1,97 @@
+{
+ "assetSchedule": "{{total}} में से {{count}} एसेट्स अपडेट किए गए",
+ "dagActions": {
+ "delete": {
+ "button": "डैग हटाएं",
+ "warning": "यह रन्स और टास्क्स सहित डैग से संबंधित सभी मेटाडेटा को हटा
देगा।"
+ }
+ },
+ "favoriteDag": "पसंदीदा डैग",
+ "filters": {
+ "allRunTypes": "सभी रन प्रकार",
+ "allStates": "सभी स्थितियां",
+ "favorite": {
+ "all": "सभी",
+ "favorite": "पसंदीदा",
+ "unfavorite": "गैर-पसंदीदा"
+ },
+ "paused": {
+ "active": "सक्रिय",
+ "all": "सभी",
+ "paused": "रोका गया"
+ },
+ "runIdPatternFilter": "डैग रन्स खोजें",
+ "triggeringUserNameFilter": "ट्रिगर करने वाले उपयोगकर्ता द्वारा खोजें"
+ },
+ "ownerLink": "{{owner}} के लिए स्वामी लिंक",
+ "runAndTaskActions": {
+ "affectedTasks": {
+ "noItemsFound": "कोई टास्क्स नहीं मिले।",
+ "title": "प्रभावित टास्क्स: {{count}}"
+ },
+ "clear": {
+ "button": "{{type}} साफ करें",
+ "buttonTooltip": "साफ करने के लिए shift+c दबाएं",
+ "error": "{{type}} साफ करने में विफल",
+ "title": "{{type}} साफ करें"
+ },
+ "delete": {
+ "button": "{{type}} हटाएं",
+ "dialog": {
+ "resourceName": "{{type}} {{id}}",
+ "title": "{{type}} हटाएं",
+ "warning": "यह {{type}} से संबंधित सभी मेटाडेटा को हटा देगा।"
+ },
+ "error": "{{type}} हटाने में त्रुटि",
+ "success": {
+ "description": "{{type}} हटाने का अनुरोध सफल रहा।",
+ "title": "{{type}} सफलतापूर्वक हटा दिया गया"
+ }
+ },
+ "markAs": {
+ "button": "{{type}} को... के रूप में चिह्नित करें",
+ "buttonTooltip": {
+ "failed": "विफल के रूप में चिह्नित करने के लिए shift+f दबाएं",
+ "success": "सफल के रूप में चिह्नित करने के लिए shift+s दबाएं"
+ },
+ "title": "{{type}} को {{state}} के रूप में चिह्नित करें"
+ },
+ "options": {
+ "downstream": "डाउनस्ट्रीम",
+ "existingTasks": "मौजूदा टास्क्स साफ करें",
+ "future": "भविष्य",
+ "onlyFailed": "केवल विफल टास्क्स साफ करें",
+ "past": "अतीत",
+ "queueNew": "नए टास्क्स को कतार में डालें",
+ "runOnLatestVersion": "नवीनतम बंडल संस्करण के साथ चलाएं",
+ "upstream": "अपस्ट्रीम"
+ }
+ },
+ "search": {
+ "advanced": "उन्नत खोज",
+ "clear": "खोज साफ करें",
+ "dags": "डैग्स खोजें",
+ "hotkey": "+K",
+ "tasks": "टास्क्स खोजें"
+ },
+ "sort": {
+ "displayName": {
+ "asc": "डिस्प्ले नाम से सॉर्ट करें (A-Z)",
+ "desc": "डिस्प्ले नाम से सॉर्ट करें (Z-A)"
+ },
+ "lastRunStartDate": {
+ "asc": "नवीनतम रन प्रारंभ तिथि से सॉर्ट करें (पहले-बाद में)",
+ "desc": "नवीनतम रन प्रारंभ तिथि से सॉर्ट करें (बाद में-पहले)"
+ },
+ "lastRunState": {
+ "asc": "नवीनतम रन स्थिति से सॉर्ट करें (A-Z)",
+ "desc": "नवीनतम रन स्थिति से सॉर्ट करें (Z-A)"
+ },
+ "nextDagRun": {
+ "asc": "अगले डैग रन से सॉर्ट करें (पहले-बाद में)",
+ "desc": "अगले डैग रन से सॉर्ट करें (बाद में-पहले)"
+ },
+ "placeholder": "सॉर्ट करें"
+ },
+ "unfavoriteDag": "पसंदीदा से हटाएं"
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/hi/dashboard.json
b/airflow-core/src/airflow/ui/public/i18n/locales/hi/dashboard.json
new file mode 100644
index 00000000000..c4050646318
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/hi/dashboard.json
@@ -0,0 +1,45 @@
+{
+ "favorite": {
+ "favoriteDags_one": "पहला {{count}} पसंदीदा डैग",
+ "favoriteDags_other": "पहले {{count}} पसंदीदा डैग्स",
+ "noDagRuns": "इस डैग के लिए अभी तक कोई डैगरन नहीं है।",
+ "noFavoriteDags": "अभी तक कोई पसंदीदा नहीं। अपने पसंदीदा में जोड़ने के लिए
सूची में किसी डैग के बगल में स्टार आइकन पर क्लिक करें।"
+ },
+ "group": "ग्रुप",
+ "health": {
+ "dagProcessor": "डैग प्रोसेसर",
+ "health": "स्वास्थ्य",
+ "healthy": "स्वस्थ",
+ "lastHeartbeat": "अंतिम हार्टबीट",
+ "metaDatabase": "मेटा डेटाबेस",
+ "scheduler": "शेड्यूलर",
+ "status": "स्थिति",
+ "triggerer": "ट्रिगरर",
+ "unhealthy": "अस्वस्थ"
+ },
+ "history": "इतिहास",
+ "importErrors": {
+ "dagImportError_one": "डैग आयात त्रुटि",
+ "dagImportError_other": "डैग आयात त्रुटियां",
+ "searchByFile": "फ़ाइल द्वारा खोजें",
+ "timestamp": "टाइमस्टैम्प"
+ },
+ "managePools": "पूल्स प्रबंधित करें",
+ "noAssetEvents": "कोई एसेट इवेंट्स नहीं मिले।",
+ "poolSlots": "पूल स्लॉट्स",
+ "sortBy": {
+ "newestFirst": "नवीनतम पहले",
+ "oldestFirst": "पुराने पहले"
+ },
+ "source": "स्रोत",
+ "stats": {
+ "activeDags": "सक्रिय डैग्स",
+ "failedDags": "विफल डैग्स",
+ "queuedDags": "कतार में डैग्स",
+ "requiredActions": "आवश्यक क्रियाएं",
+ "runningDags": "चल रहे डैग्स",
+ "stats": "आंकड़े"
+ },
+ "uri": "URI",
+ "welcome": "स्वागत है"
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/hi/hitl.json
b/airflow-core/src/airflow/ui/public/i18n/locales/hi/hitl.json
new file mode 100644
index 00000000000..75a40df5604
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/hi/hitl.json
@@ -0,0 +1,24 @@
+{
+ "requiredAction_one": "आवश्यक क्रिया",
+ "requiredAction_other": "आवश्यक क्रियाएं",
+ "requiredActionState": "आवश्यक क्रिया स्थिति",
+ "response": {
+ "error": "प्रतिक्रिया विफल",
+ "optionsDescription": "इस टास्क इंस्टेंस के लिए अपने विकल्प चुनें",
+ "optionsLabel": "विकल्प",
+ "received": "प्रतिक्रिया प्राप्त हुई ",
+ "respond": "प्रतिक्रिया दें",
+ "success": "{{taskId}} प्रतिक्रिया सफल",
+ "title": "मानव टास्क इंस्टेंस - {{taskId}}"
+ },
+ "state": {
+ "approvalReceived": "स्वीकृति प्राप्त",
+ "approvalRequired": "स्वीकृति आवश्यक",
+ "choiceReceived": "विकल्प प्राप्त",
+ "choiceRequired": "विकल्प आवश्यक",
+ "rejectionReceived": "अस्वीकृति प्राप्त",
+ "responseReceived": "प्रतिक्रिया प्राप्त",
+ "responseRequired": "प्रतिक्रिया आवश्यक"
+ },
+ "subject": "विषय"
+}
diff --git a/airflow-core/src/airflow/ui/src/i18n/config.ts
b/airflow-core/src/airflow/ui/src/i18n/config.ts
index 36d01005a47..afab36def9f 100644
--- a/airflow-core/src/airflow/ui/src/i18n/config.ts
+++ b/airflow-core/src/airflow/ui/src/i18n/config.ts
@@ -28,6 +28,7 @@ export const supportedLanguages = [
{ code: "es", name: "Español" },
{ code: "fr", name: "Français" },
{ code: "he", name: "עברית" },
+ { code: "hi", name: "हिन्दी" },
{ code: "ko", name: "한국어" },
{ code: "nl", name: "Nederlands" },
{ code: "pl", name: "Polski" },