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

potiuk pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/v3-1-test by this push:
     new d52791c8574 [v3-1-test] Add Thai UI translation (#56353) (#56946)
d52791c8574 is described below

commit d52791c857404cc0327ae08f196edc859de7ca5b
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Oct 21 13:30:44 2025 +0200

    [v3-1-test] Add Thai UI translation (#56353) (#56946)
    
    * Add Thai UI translation
    
    * Update code owners
    
    * Add another translator
    
    * Revise text to sound more polite
    
    * Add missing keys and remove some
    
    * Improve Thai translations for better clarity and understanding
    
    * Add @potiuk as sponsor and @Srabasti to the comment
    
    ---------
    (cherry picked from commit a244a0166a1337914f60b7eb8fb39b332dfd9bcb)
    
    Co-authored-by: Kan Ouivirach <[email protected]>
    Co-authored-by: blackbass64 <[email protected]>
---
 .github/CODEOWNERS                                 |   1 +
 .github/boring-cyborg.yml                          |   3 +
 .../airflow/ui/public/i18n/locales/th/admin.json   | 166 +++++++++++
 .../airflow/ui/public/i18n/locales/th/assets.json  |  30 ++
 .../airflow/ui/public/i18n/locales/th/browse.json  |  26 ++
 .../airflow/ui/public/i18n/locales/th/common.json  | 318 +++++++++++++++++++++
 .../ui/public/i18n/locales/th/components.json      | 132 +++++++++
 .../src/airflow/ui/public/i18n/locales/th/dag.json | 154 ++++++++++
 .../airflow/ui/public/i18n/locales/th/dags.json    |  96 +++++++
 .../ui/public/i18n/locales/th/dashboard.json       |  45 +++
 .../airflow/ui/public/i18n/locales/th/hitl.json    |  34 +++
 .../airflow/ui/public/i18n/locales/th/tasks.json   |  10 +
 airflow-core/src/airflow/ui/src/i18n/config.ts     |   1 +
 dev/i18n/check_translations_completeness.py        |   1 +
 14 files changed, 1017 insertions(+)

diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 6dfdea0a91c..8811470d4fc 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -49,6 +49,7 @@ airflow-core/src/airflow/ui/public/i18n/locales/ko/ @jscheffl 
@potiuk # + @choo1
 airflow-core/src/airflow/ui/public/i18n/locales/nl/ @BasPH # + @DjVinnii
 airflow-core/src/airflow/ui/public/i18n/locales/pl/ @potiuk @mobuchowski # + 
@kacpermuda
 airflow-core/src/airflow/ui/public/i18n/locales/pt/ @potiuk  # + @aoelvp94 
@victoru2
+airflow-core/src/airflow/ui/public/i18n/locales/th/ @potiuk # + @zkan 
@blackbass64 @lifnaja @Aphinan-Th @chonla @Srabasti
 airflow-core/src/airflow/ui/public/i18n/locales/tr/ @bugraoz93 # 
+@hasancatalgol
 airflow-core/src/airflow/ui/public/i18n/locales/zh-CN/ @potiuk # + @Fortytwoo 
@gyli
 airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/ @Lee-W @jason810496 # + 
@RoyLee1224 @guan404ming
diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml
index 928a9c6d0b2..d21efe82960 100644
--- a/.github/boring-cyborg.yml
+++ b/.github/boring-cyborg.yml
@@ -414,6 +414,9 @@ labelPRBasedOnFilePath:
   translation:pt:
     - airflow-core/src/airflow/ui/public/i18n/locales/pt/*
 
+  translation:th:
+    - airflow-core/src/airflow/ui/public/i18n/locales/th/*
+
   translation:tr:
     - airflow-core/src/airflow/ui/public/i18n/locales/tr/*
 
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/th/admin.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/th/admin.json
new file mode 100644
index 00000000000..cbfa9705aba
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/th/admin.json
@@ -0,0 +1,166 @@
+{
+  "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": "การเชื่อมต่อที่ตั้งค่าผ่าน environment variables หรือ 
secrets managers จะไม่ปรากฏที่นี่",
+      "documentationLink": "ดูรายละเอียดเพิ่มเติมได้ในเอกสารของ Airflow",
+      "learnMore": "ค่าการเชื่อมต่อเหล่านี้จะถูกประมวลผลตอน runtime 
และจะไม่แสดงในหน้า UI",
+      "title": "ไม่พบการเชื่อมต่อ!"
+    },
+    "searchPlaceholder": "ค้นหาการเชื่อมต่อ",
+    "test": "ทดสอบการเชื่อมต่อ",
+    "testDisabled": "ฟีเจอร์ทดสอบการเชื่อมต่อถูกปิดใช้งาน 
โปรดติดต่อผู้ดูแลระบบเพื่อเปิดใช้งาน",
+    "typeMeta": {
+      "error": "ไม่สามารถดึงข้อมูล Connection Type Meta ได้",
+      "standardFields": {
+        "description": "คำอธิบาย",
+        "host": "โฮสต์",
+        "login": "เข้าสู่ระบบ",
+        "password": "รหัสผ่าน",
+        "port": "พอร์ต",
+        "url_schema": "สคีมา"
+      }
+    }
+  },
+  "deleteActions": {
+    "button": "ลบ",
+    "modal": {
+      "confirmButton": "ใช่, ลบ",
+      "secondConfirmMessage": "การกระทำนี้เป็นการถาวรและไม่สามารถย้อนกลับได้",
+      "thirdConfirmMessage": "คุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?"
+    },
+    "selected": "ที่เลือกไว้",
+    "tooltip": "ลบการเชื่อมต่อที่เลือก"
+  },
+  "formActions": {
+    "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/th/assets.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/th/assets.json
new file mode 100644
index 00000000000..7991401f303
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/th/assets.json
@@ -0,0 +1,30 @@
+{
+  "consumingDags": "Dags ที่ใช้",
+  "createEvent": {
+    "button": "สร้างอีเวนต์",
+    "manual": {
+      "description": "สร้างอีเวนต์ให้กับ Asset ด้วยตนเอง",
+      "extra": "ข้อมูลเพิ่มเติมของอีเวนต์ Asset",
+      "label": "สร้างด้วยตนเอง"
+    },
+    "materialize": {
+      "description": "ทริกเกอร์ Dag ต้นทางของ Asset นี้",
+      "descriptionWithDag": "ทริกเกอร์ Dag ต้นทางของ Asset นี้: {{dagName}}",
+      "label": "สร้างจากต้นทาง (Materialize)",
+      "unpauseDag": "ยกเลิกการหยุดพัก {{dagName}} เมื่อทริกเกอร์"
+    },
+    "success": {
+      "manualDescription": "สร้างอีเวนต์ให้กับ Asset ด้วยตนเองสำเร็จแล้ว",
+      "manualTitle": "สร้างอีเวนต์ให้กับ Asset แล้ว",
+      "materializeDescription": "Dag ต้นทาง {{dagId}} ถูกทริกเกอร์สำเร็จแล้ว",
+      "materializeTitle": "กำลังสร้าง Asset"
+    },
+    "title": "สร้างอีเวนต์ให้กับ Asset สำหรับ {{name}}"
+  },
+  "group": "กลุ่ม",
+  "lastAssetEvent": "อีเวนต์ของ Asset ล่าสุด",
+  "name": "ชื่อ",
+  "producingTasks": "งานที่ถูกสร้าง",
+  "scheduledDags": "Dags ที่ถูกตั้งเวลา",
+  "searchPlaceholder": "ค้นหา Assets"
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/th/browse.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/th/browse.json
new file mode 100644
index 00000000000..cd391bfaaea
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/th/browse.json
@@ -0,0 +1,26 @@
+{
+  "auditLog": {
+    "actions": {
+      "collapseAllExtra": "ย่อข้อมูล JSON เพิ่มเติมทั้งหมด",
+      "expandAllExtra": "ขยายข้อมูล JSON เพิ่มเติมทั้งหมด"
+    },
+    "columns": {
+      "event": "อีเวนต์",
+      "extra": "เพิ่มเติม",
+      "user": "ผู้ใช้",
+      "when": "เมื่อไหร่"
+    },
+    "filters": {
+      "eventType": "ประเภทของอีเวนต์"
+    },
+    "title": "บันทึกการตรวจสอบ (Audit Log)"
+  },
+  "xcom": {
+    "columns": {
+      "dag": "Dag",
+      "key": "คีย์",
+      "value": "ค่า"
+    },
+    "title": "XCom"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/th/common.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/th/common.json
new file mode 100644
index 00000000000..543603805bd
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/th/common.json
@@ -0,0 +1,318 @@
+{
+  "admin": {
+    "Config": "การตั้งค่า",
+    "Connections": "การเชื่อมต่อ",
+    "Plugins": "ปลั๊กอิน",
+    "Pools": "พูล",
+    "Providers": "ผู้ให้บริการ",
+    "Variables": "ตัวแปร"
+  },
+  "allOperators": "ตัวดำเนินการทั้งหมด",
+  "appearance": {
+    "appearance": "การแสดงผล",
+    "darkMode": "โหมดมืด",
+    "lightMode": "โหมดสว่าง",
+    "systemMode": "ตามการตั้งค่าของระบบ"
+  },
+  "asset_one": "Asset",
+  "asset_other": "Assets",
+  "assetEvent_one": "อีเวนต์ของ Asset",
+  "assetEvent_other": "อีเวนต์ของ Assets",
+  "backfill_one": "Backfill",
+  "backfill_other": "Backfills",
+  "browse": {
+    "auditLog": "บันทึกการตรวจสอบ (Audit Log)",
+    "requiredActions": "การดำเนินการที่จำเป็น",
+    "xcoms": "XComs"
+  },
+  "collapseDetailsPanel": "ย่อแผงรายละเอียด",
+  "createdAssetEvent_one": "อีเวนต์ของ Asset ที่สร้างแล้ว",
+  "createdAssetEvent_other": "อีเวนต์ของ Assets ที่สร้างแล้ว",
+  "dag_one": "Dag",
+  "dag_other": "Dags",
+  "dagDetails": {
+    "catchup": "Catchup",
+    "dagRunTimeout": "ระยะหมดเวลาของ DAG Run",
+    "defaultArgs": "ค่า Arguments เริ่มต้น",
+    "description": "คำอธิบาย",
+    "documentation": "เอกสารประกอบ Dag",
+    "fileLocation": "ตำแหน่งไฟล์",
+    "hasTaskConcurrencyLimits": "มีการจำกัดจำนวนงานที่ทำพร้อมกัน",
+    "lastExpired": "หมดอายุครั้งล่าสุด",
+    "lastParseDuration": "ระยะเวลาการประมวลผลล่าสุด",
+    "lastParsed": "การประมวลผลครั้งล่าสุด",
+    "latestDagVersion": "เวอร์ชัน Dag ล่าสุด",
+    "latestRun": "การทำงานครั้งล่าสุด",
+    "maxActiveRuns": "จำนวน Dag Run ที่ทำงานพร้อมกันสูงสุด",
+    "maxActiveTasks": "จำนวนงานที่ทำงานพร้อมกันสูงสุด",
+    "maxConsecutiveFailedDagRuns": "จำนวน Dag Run ที่ล้มเหลวต่อเนื่องสูงสุด",
+    "nextRun": "การทำงานครั้งถัดไป",
+    "owner": "เจ้าของ",
+    "params": "พารามิเตอร์",
+    "schedule": "เวลาทำงาน",
+    "tags": "แท็ก"
+  },
+  "dagId": "Dag ID",
+  "dagRun": {
+    "conf": "การตั้งค่า (Conf)",
+    "dagVersions": "เวอร์ชันของ Dag",
+    "dataIntervalEnd": "สิ้นสุดช่วงข้อมูล",
+    "dataIntervalStart": "เริ่มต้นช่วงข้อมูล",
+    "lastSchedulingDecision": "การตัดสินใจกำหนดเวลาล่าสุด",
+    "queuedAt": "เข้าคิวเมื่อ",
+    "runAfter": "ทำงานหลังจาก",
+    "runType": "ประเภทการทำงาน",
+    "sourceAssetEvent": "อีเวนต์ของ Asset ต้นทาง",
+    "triggeredBy": "ทริกเกอร์โดย",
+    "triggeringUser": "ชื่อผู้ใช้ที่ทริกเกอร์"
+  },
+  "dagRun_one": "Dag Run",
+  "dagRun_other": "Dag Runs",
+  "dagRunId": "Dag Run ID",
+  "dagWarnings": "คำเตือน/ข้อผิดพลาดของ Dag",
+  "defaultToGraphView": "ค่าเริ่มต้นเป็นมุมมองกราฟ",
+  "defaultToGridView": "ค่าเริ่มต้นเป็นมุมมองกริด",
+  "direction": "ทิศทาง",
+  "docs": {
+    "documentation": "เอกสารประกอบ",
+    "githubRepo": "GitHub Repo",
+    "restApiReference": "เอกสารอ้างอิง REST API"
+  },
+  "duration": "ระยะเวลา",
+  "endDate": "วันที่สิ้นสุด",
+  "error": {
+    "back": "ย้อนกลับ",
+    "defaultMessage": "เกิดข้อผิดพลาดที่ไม่คาดคิดขึ้น",
+    "home": "หน้าแรก",
+    "notFound": "ไม่พบหน้านี้",
+    "title": "เกิดข้อผิดพลาด"
+  },
+  "expand": {
+    "collapse": "ย่อ",
+    "expand": "ขยาย",
+    "hotkey": "e",
+    "tooltip": "กด {{hotkey}} เพื่อสลับการขยาย"
+  },
+  "expression": {
+    "all": "ทั้งหมด",
+    "and": "และ",
+    "any": "อย่างใดอย่างหนึ่ง",
+    "or": "หรือ"
+  },
+  "filter": "ตัวกรอง",
+  "filters": {
+    "durationFrom": "ระยะเวลาตั้งแต่",
+    "durationTo": "ระยะเวลาถึง",
+    "logicalDateFrom": "วันที่ตามกำหนดทำงานตั้งแต่",
+    "logicalDateTo": "วันที่ตามกำหนดทำงานถึง",
+    "runAfterFrom": "ทำงานตั้งแต่",
+    "runAfterTo": "ทำงานถึง"
+  },
+  "logicalDate": "วันที่ตามกำหนดทำงาน",
+  "logout": "ออกจากระบบ",
+  "logoutConfirmation": "คุณกำลังจะออกจากระบบแอปพลิเคชัน",
+  "mapIndex": "ดัชนีแผนที่",
+  "modal": {
+    "cancel": "ยกเลิก",
+    "confirm": "ยืนยัน",
+    "delete": {
+      "button": "ลบ",
+      "confirmation": "คุณแน่ใจหรือไม่ว่าต้องการลบ {{resourceName}}? 
การดำเนินการนี้ไม่สามารถย้อนกลับได้"
+    }
+  },
+  "nav": {
+    "admin": "ผู้ดูแลระบบ",
+    "assets": "Assets",
+    "browse": "เรียกดู",
+    "dags": "Dags",
+    "docs": "เอกสาร",
+    "home": "หน้าแรก",
+    "legacyFabViews": "มุมมองแบบเก่า",
+    "plugins": "ปลั๊กอิน",
+    "security": "ความปลอดภัย"
+  },
+  "noItemsFound": "ไม่พบ {{modelName}}",
+  "note": {
+    "add": "เพิ่มโน้ต",
+    "dagRun": "โน้ตของ Dag Run",
+    "label": "โน้ต",
+    "placeholder": "เพิ่มโน้ต...",
+    "taskInstance": "โน้ตของ Task Instance"
+  },
+  "pools": {
+    "deferred": "เลื่อนออกไป",
+    "open": "เปิด",
+    "pools_one": "พูล",
+    "pools_other": "พูล",
+    "queued": "เข้าคิวแล้ว",
+    "running": "กำลังทำงาน",
+    "scheduled": "กำหนดเวลาทำงานแล้ว"
+  },
+  "reset": "รีเซ็ต",
+  "runId": "Run ID",
+  "runTypes": {
+    "asset_triggered": "ทริกเกอร์โดย Asset",
+    "backfill": "Backfill",
+    "manual": "ทำด้วยตนเอง",
+    "scheduled": "กำหนดเวลาทำงานแล้ว"
+  },
+  "scroll": {
+    "direction": {
+      "bottom": "ล่างสุด",
+      "top": "บนสุด"
+    },
+    "tooltip": "กด {{hotkey}} เพื่อเลื่อนไปที่ {{direction}}"
+  },
+  "security": {
+    "actions": "การดำเนินการ",
+    "permissions": "สิทธิ์",
+    "resources": "ทรัพยากร",
+    "roles": "บทบาท",
+    "users": "ผู้ใช้"
+  },
+  "selectLanguage": "เลือกภาษา",
+  "showDetailsPanel": "แสดงแผงรายละเอียด",
+  "source": {
+    "hide": "ซ่อนแหล่งที่มา",
+    "hotkey": "s",
+    "show": "แสดงแหล่งที่มา"
+  },
+  "sourceAssetEvent_one": "อีเวนต์ของ Asset ต้นทาง",
+  "sourceAssetEvent_other": "อีเวนต์ของ Asset ต้นทาง",
+  "startDate": "วันที่เริ่มต้น",
+  "state": "สถานะ",
+  "states": {
+    "deferred": "เลื่อนออกไป",
+    "failed": "ล้มเหลว",
+    "no_status": "ไม่มีสถานะ",
+    "none": "ยังไม่กำหนดสถานะ",
+    "planned": "วางแผนแล้ว",
+    "queued": "เข้าคิวแล้ว",
+    "removed": "ถูกลบแล้ว",
+    "restarting": "กำลังเริ่มใหม่",
+    "running": "กำลังทำงาน",
+    "scheduled": "กำหนดเวลาทำงานแล้ว",
+    "skipped": "ข้าม",
+    "success": "สำเร็จ",
+    "up_for_reschedule": "รอการกำหนดเวลาทำงานใหม่",
+    "up_for_retry": "รอการลองใหม่",
+    "upstream_failed": "ต้นทางล้มเหลว"
+  },
+  "table": {
+    "completedAt": "เสร็จสิ้นเมื่อ",
+    "createdAt": "สร้างเมื่อ",
+    "filterByTag": "กรอง Dags ตามแท็ก",
+    "filterColumns": "กรองคอลัมน์ตาราง",
+    "filterReset_one": "รีเซ็ตตัวกรอง",
+    "filterReset_other": "รีเซ็ตตัวกรอง",
+    "from": "จาก",
+    "maxActiveRuns": "จำนวน Dag Run ที่ทำงานพร้อมกันสูงสุด",
+    "noTagsFound": "ไม่พบแท็ก",
+    "tagMode": {
+      "all": "ทั้งหมด",
+      "any": "อย่างใดอย่างหนึ่ง"
+    },
+    "tagPlaceholder": "กรองตามแท็ก",
+    "to": "ถึง"
+  },
+  "task": {
+    "documentation": "เอกสารประกอบงาน",
+    "lastInstance": "อินสแตนซ์ล่าสุด",
+    "operator": "ตัวดำเนินการ",
+    "triggerRule": "กฎการทริกเกอร์"
+  },
+  "task_one": "งาน",
+  "task_other": "งาน",
+  "taskGroup": "กลุ่มงาน",
+  "taskId": "Task ID",
+  "taskInstance": {
+    "dagVersion": "เวอร์ชัน Dag",
+    "executor": "Executor",
+    "executorConfig": "การตั้งค่า Executor",
+    "hostname": "ชื่อโฮสต์",
+    "maxTries": "จำนวนครั้งสูงสุด",
+    "pid": "PID",
+    "pool": "พูล",
+    "poolSlots": "ช่องในพูล",
+    "priorityWeight": "น้ำหนักความสำคัญ",
+    "queue": "คิว",
+    "queuedWhen": "เข้าคิวเมื่อ",
+    "scheduledWhen": "กำหนดเวลาทำงานเมื่อ",
+    "triggerer": {
+      "assigned": "Triggerer ที่ถูกกำหนด",
+      "class": "คลาส Trigger",
+      "createdAt": "เวลาสร้าง Trigger",
+      "id": "Trigger ID",
+      "latestHeartbeat": "Heartbeat ล่าสุดของ Triggerer",
+      "title": "ข้อมูล Triggerer"
+    },
+    "unixname": "ชื่อ Unix"
+  },
+  "taskInstance_one": "Task Instance",
+  "taskInstance_other": "Task Instances",
+  "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}}",
+        "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/th/components.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/th/components.json
new file mode 100644
index 00000000000..e696d624939
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/th/components.json
@@ -0,0 +1,132 @@
+{
+  "backfill": {
+    "affected_one": "จะมีการทริกเกอร์ให้ทำงาน 1 ครั้ง",
+    "affected_other": "จะมีการทริกเกอร์ให้ทำงาน {{count}} ครั้ง",
+    "affectedNone": "ไม่มีการทำงานที่ตรงกับเงื่อนไขที่เลือก",
+    "allRuns": "ทุกการทำงาน",
+    "backwards": "ทำงานแบบย้อนกลับ",
+    "dateRange": "ช่วงวันที่",
+    "errorStartDateBeforeEndDate": "วันที่เริ่มต้นต้องมาก่อนวันที่สิ้นสุด",
+    "maxRuns": "จำนวนการทำงานที่ทำพร้อมกันสูงสุด",
+    "missingAndErroredRuns": "การทำงานที่หายไปและเกิดข้อผิดพลาด",
+    "missingRuns": "การทำงานที่หายไป",
+    "reprocessBehavior": "พฤติกรรมการประมวลผลซ้ำ",
+    "run": "สั่ง Backfill",
+    "selectDescription": "สั่งให้ Dag นี้ทำงานตามช่วงเวลาที่กำหนด",
+    "selectLabel": "Backfill",
+    "title": "สั่ง Backfill",
+    "toaster": {
+      "success": {
+        "description": "งาน Backfill ถูกทริกเกอร์สำเร็จแล้ว",
+        "title": "สร้าง Backfill แล้ว"
+      }
+    },
+    "tooltip": "Backfill ต้องการการกำหนดเวลาทำงาน (schedule)",
+    "unpause": "ยกเลิกการหยุดพัก {{dag_display_name}} เมื่อทริกเกอร์",
+    "validation": {
+      "datesRequired": "จำเป็นต้องระบุวันเริ่มต้นและวันสิ้นสุดทั้งสองวัน",
+      "startBeforeEnd": "วันเริ่มต้นต้องน้อยกว่าหรือเท่ากับวันสิ้นสุด"
+    }
+  },
+  "banner": {
+    "backfillInProgress": "Backfill กำลังทำงานอยู่",
+    "cancel": "ยกเลิก Backfill",
+    "pause": "หยุดพัก Backfill",
+    "unpause": "ยกเลิกการหยุดพัก Backfill"
+  },
+  "clipboard": {
+    "copy": "คัดลอก"
+  },
+  "close": "ปิด",
+  "configForm": {
+    "advancedOptions": "ตัวเลือกขั้นสูง",
+    "configJson": "การตั้งค่า JSON",
+    "invalidJson": "รูปแบบ JSON ไม่ถูกต้อง: {{errorMessage}}"
+  },
+  "dagWarnings": {
+    "error_one": "1 ข้อผิดพลาด",
+    "errorAndWarning": "1 ข้อผิดพลาดและ {{warningText}}",
+    "warning_one": "1 คำเตือน",
+    "warning_other": "{{count}} คำเตือน"
+  },
+  "durationChart": {
+    "duration": "ระยะเวลา (วินาที)",
+    "lastDagRun_one": "Dag Run ล่าสุด",
+    "lastDagRun_other": "Dag Runs {{count}} ครั้งล่าสุด",
+    "lastTaskInstance_one": "Task Instance ล่าสุด",
+    "lastTaskInstance_other": "Task Instances {{count}} ครั้งล่าสุด",
+    "queuedDuration": "ระยะเวลาที่รอคิว",
+    "runAfter": "ทำงานหลังจาก",
+    "runDuration": "ระยะเวลาการทำงาน"
+  },
+  "fileUpload": {
+    "files_other": "{{count}} ไฟล์"
+  },
+  "flexibleForm": {
+    "placeholder": "เลือกค่า",
+    "placeholderArray": "กรอกค่าแยกกันในบรรทัดใหม่",
+    "placeholderExamples": "เริ่มพิมพ์เพื่อดูตัวเลือก",
+    "placeholderMulti": "เลือกค่าเดียวหรือหลายค่า",
+    "validationErrorArrayNotArray": "ค่าต้องเป็น Array",
+    "validationErrorArrayNotNumbers": "สมาชิกทั้งหมดใน Array ต้องเป็นตัวเลข",
+    "validationErrorArrayNotObject": "สมาชิกทั้งหมดใน Array ต้องเป็น Object",
+    "validationErrorRequired": "จำเป็นต้องกรอกช่องนี้"
+  },
+  "graph": {
+    "directionDown": "จากบนลงล่าง",
+    "directionLeft": "จากขวาไปซ้าย",
+    "directionRight": "จากซ้ายไปขวา",
+    "directionUp": "จากล่างขึ้นบน",
+    "downloadImage": "ดาวน์โหลดรูปภาพกราฟ",
+    "downloadImageError": "ไม่สามารถดาวน์โหลดรูปภาพกราฟได้",
+    "downloadImageErrorTitle": "ดาวน์โหลดล้มเหลว",
+    "otherDagRuns": "+Dag Runs อื่น ๆ",
+    "taskCount_one": "{{count}} งาน",
+    "taskCount_other": "{{count}} งาน",
+    "taskGroup": "กลุ่มงาน"
+  },
+  "limitedList": "+{{count}} เพิ่มเติม",
+  "logs": {
+    "file": "ไฟล์",
+    "location": "บรรทัด {{line}} ใน {{name}}"
+  },
+  "reparseDag": "ประมวลผล Dag ใหม่",
+  "sortedAscending": "เรียงจากน้อยไปมาก",
+  "sortedDescending": "เรียงจากมากไปน้อย",
+  "sortedUnsorted": "ไม่เรียงลำดับ",
+  "taskTries": "จำนวนครั้งที่ทำงาน",
+  "toggleCardView": "แสดงมุมมองแบบการ์ด",
+  "toggleTableView": "แสดงมุมมองแบบตาราง",
+  "triggerDag": {
+    "button": "ทริกเกอร์",
+    "loading": "กำลังโหลดข้อมูล Dag...",
+    "loadingFailed": "โหลดข้อมูล Dag ไม่สำเร็จ กรุณาลองใหม่",
+    "runIdHelp": "ไม่บังคับ - จะถูกสร้างอัตโนมัติหากไม่ระบุ",
+    "selectDescription": "ทริกเกอร์ Dag นี้สำหรับการทำงานครั้งเดียว",
+    "selectLabel": "ทำงานครั้งเดียว",
+    "title": "ทริกเกอร์ Dag",
+    "toaster": {
+      "success": {
+        "description": "Dag Run ถูกทริกเกอร์สำเร็จแล้ว",
+        "title": "ทริกเกอร์ Dag Run แล้ว"
+      }
+    },
+    "unpause": "ยกเลิกการหยุดพัก {{dagDisplayName}} เมื่อทริกเกอร์"
+  },
+  "trimText": {
+    "details": "รายละเอียด",
+    "empty": "ว่างเปล่า",
+    "noContent": "ไม่มีเนื้อหา"
+  },
+  "versionDetails": {
+    "bundleLink": "ลิงก์ Bundle",
+    "bundleName": "ชื่อ Bundle",
+    "bundleVersion": "เวอร์ชัน Bundle",
+    "createdAt": "สร้างเมื่อ",
+    "versionId": "ID เวอร์ชัน"
+  },
+  "versionSelect": {
+    "dagVersion": "เวอร์ชัน Dag",
+    "versionCode": "v{{versionCode}}"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/th/dag.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/th/dag.json
new file mode 100644
index 00000000000..5c59ecd6908
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/th/dag.json
@@ -0,0 +1,154 @@
+{
+  "allRuns": "การทำงานทั้งหมด",
+  "blockingDeps": {
+    "dependency": "การพึ่งพา",
+    "reason": "เหตุผล",
+    "title": "การพึ่งพาที่บล็อกงานไม่ให้ถูกกำหนดเวลาทำงาน"
+  },
+  "calendar": {
+    "daily": "รายวัน",
+    "hourly": "รายชั่วโมง",
+    "legend": {
+      "less": "น้อย",
+      "mixed": "ผสม",
+      "more": "มาก"
+    },
+    "navigation": {
+      "nextMonth": "เดือนถัดไป",
+      "nextYear": "ปีถัดไป",
+      "previousMonth": "เดือนก่อนหน้า",
+      "previousYear": "ปีก่อนหน้า"
+    },
+    "noData": "ไม่มีข้อมูล",
+    "noFailedRuns": "ไม่มีการทำงานที่ล้มเหลว",
+    "noRuns": "ไม่มีการทำงาน",
+    "totalRuns": "การทำงานทั้งหมด",
+    "week": "สัปดาห์ที่ {{weekNumber}}",
+    "weekdays": {
+      "friday": "ศ.",
+      "monday": "จ.",
+      "saturday": "ส.",
+      "sunday": "อา.",
+      "thursday": "พฤ.",
+      "tuesday": "อ.",
+      "wednesday": "พ."
+    }
+  },
+  "code": {
+    "bundleUrl": "URL ของ Bundle",
+    "noCode": "ไม่พบโค้ด",
+    "parseDuration": "ระยะเวลาการประมวลผล:",
+    "parsedAt": "ประมวลผลเมื่อ:"
+  },
+  "extraLinks": "ลิงก์เพิ่มเติม",
+  "grid": {
+    "buttons": {
+      "resetToLatest": "รีเซ็ตเป็นล่าสุด",
+      "toggleGroup": "สลับกลุ่ม"
+    }
+  },
+  "header": {
+    "buttons": {
+      "advanced": "ขั้นสูง",
+      "dagDocs": "เอกสาร Dag"
+    }
+  },
+  "logs": {
+    "allLevels": "ทุกระดับ Log",
+    "allSources": "ทุกแหล่งที่มา",
+    "critical": "ร้ายแรง (CRITICAL)",
+    "debug": "ดีบัก (DEBUG)",
+    "error": "ข้อผิดพลาด (ERROR)",
+    "fullscreen": {
+      "button": "เต็มจอ",
+      "tooltip": "กด {{hotkey}} เพื่อเข้าสู่โหมดเต็มจอ"
+    },
+    "info": "ข้อมูล (INFO)",
+    "noTryNumber": "ไม่มีหมายเลขการลอง",
+    "settings": "การตั้งค่า Log",
+    "viewInExternal": "ดู log ใน {{name}} (ความพยายามครั้งที่ {{attempt}})",
+    "warning": "คำเตือน (WARNING)"
+  },
+  "navigation": {
+    "navigation": "การนำทาง: Shift+{{arrow}}",
+    "toggleGroup": "สลับกลุ่ม: Space"
+  },
+  "overview": {
+    "buttons": {
+      "failedRun_one": "การทำงานที่ล้มเหลว",
+      "failedRun_other": "การทำงานที่ล้มเหลว",
+      "failedTask_one": "งานที่ล้มเหลว",
+      "failedTask_other": "งานที่ล้มเหลว",
+      "failedTaskInstance_one": "Task Instance ที่ล้มเหลว",
+      "failedTaskInstance_other": "Task Instances ที่ล้มเหลว"
+    },
+    "charts": {
+      "assetEvent_one": "การสร้างอีเวนต์ให้กับ Asset",
+      "assetEvent_other": "การสร้างอีเวนต์ให้กับ Asset"
+    },
+    "failedLogs": {
+      "hideLogs": "ซ่อน Logs",
+      "showLogs": "แสดง Logs",
+      "title": "Logs ของงานที่ล้มเหลวล่าสุด",
+      "viewFullLogs": "ดู Logs แบบเต็ม"
+    }
+  },
+  "panel": {
+    "buttons": {
+      "options": "ตัวเลือก",
+      "showGantt": "แสดง Gantt",
+      "showGraphShortcut": "แสดงกราฟ (กด g)",
+      "showGridShortcut": "แสดงกริด (กด g)"
+    },
+    "dagRuns": {
+      "label": "จำนวน Dag Runs"
+    },
+    "dependencies": {
+      "label": "การพึ่งพา",
+      "options": {
+        "allDagDependencies": "การพึ่งพาของ Dag ทั้งหมด",
+        "externalConditions": "เงื่อนไขภายนอก",
+        "onlyTasks": "เฉพาะงาน"
+      },
+      "placeholder": "การพึ่งพา"
+    },
+    "graphDirection": {
+      "label": "ทิศทางของกราฟ"
+    }
+  },
+  "paramsFailed": "โหลดพารามิเตอร์ไม่สำเร็จ",
+  "parse": {
+    "toaster": {
+      "error": {
+        "description": "การร้องขอประมวลผล Dag ล้มเหลว 
อาจมีคำขอการประมวลผลที่รอดำเนินการอยู่",
+        "title": "การประมวลผล DAG ล้มเหลว"
+      },
+      "success": {
+        "description": "DAG จะถูกประมวลผลใหม่ในเร็ว ๆ นี้",
+        "title": "ส่งคำขอประมวลผลใหม่สำเร็จแล้ว"
+      }
+    }
+  },
+  "tabs": {
+    "assetEvents": "อีเวนต์ของ Asset",
+    "auditLog": "บันทึกการตรวจสอบ",
+    "backfills": "Backfills",
+    "calendar": "ปฏิทิน",
+    "code": "โค้ด",
+    "details": "รายละเอียด",
+    "logs": "Logs",
+    "mappedTaskInstances_one": "Task Instance [{{count}}]",
+    "mappedTaskInstances_other": "Task Instances [{{count}}]",
+    "overview": "ภาพรวม",
+    "renderedTemplates": "เทมเพลตที่เรนเดอร์แล้ว",
+    "requiredActions": "การดำเนินการที่จำเป็น",
+    "runs": "การทำงาน",
+    "taskInstances": "Task Instances",
+    "tasks": "งาน",
+    "xcom": "XCom"
+  },
+  "taskGroups": {
+    "collapseAll": "ย่อกลุ่มงานทั้งหมด",
+    "expandAll": "ขยายกลุ่มงานทั้งหมด"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/th/dags.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/th/dags.json
new file mode 100644
index 00000000000..9b1ce043e8f
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/th/dags.json
@@ -0,0 +1,96 @@
+{
+  "assetSchedule": "{{count}} จาก {{total}} รายการ Assets อัปเดตแล้ว",
+  "dagActions": {
+    "delete": {
+      "button": "ลบ Dag",
+      "warning": "การดำเนินการนี้จะลบเมทาดาต้าทั้งหมดที่เกี่ยวข้องกับ Dag 
รวมถึงการทำงานและรายละเอียดงานด้วย"
+    }
+  },
+  "favoriteDag": "ชื่นชอบ Dag",
+  "filters": {
+    "allRunTypes": "ประเภทการทำงานทั้งหมด",
+    "allStates": "สถานะทั้งหมด",
+    "favorite": {
+      "all": "ทั้งหมด",
+      "favorite": "รายการโปรด",
+      "unfavorite": "ไม่ใช่รายการโปรด"
+    },
+    "paused": {
+      "active": "ใช้งาน",
+      "all": "ทั้งหมด",
+      "paused": "หยุดชั่วคราว"
+    },
+    "runIdPatternFilter": "ค้นหา Dag Runs"
+  },
+  "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": "ทำงานด้วยเวอร์ชันล่าสุดของชุดรวม (Bundle)",
+      "upstream": "งานก่อนหน้า"
+    }
+  },
+  "search": {
+    "advanced": "การค้นหาขั้นสูง",
+    "clear": "ล้างการค้นหา",
+    "dags": "ค้นหา Dags",
+    "hotkey": "+K",
+    "tasks": "ค้นหางาน (Tasks)"
+  },
+  "sort": {
+    "displayName": {
+      "asc": "จัดเรียงตามชื่อที่แสดง (A-Z)",
+      "desc": "จัดเรียงตามชื่อที่แสดง (Z-A)"
+    },
+    "lastRunStartDate": {
+      "asc": "จัดเรียงตามวันที่เริ่มทำงานครั้งล่าสุด (เก่าสุด-ใหม่สุด)",
+      "desc": "จัดเรียงตามวันที่เริ่มทำงานครั้งล่าสุด (ใหม่สุด-เก่าสุด)"
+    },
+    "lastRunState": {
+      "asc": "จัดเรียงตามสถานะการทำงานครั้งล่าสุด (A-Z)",
+      "desc": "จัดเรียงตามสถานะการทำงานครั้งล่าสุด (Z-A)"
+    },
+    "nextDagRun": {
+      "asc": "จัดเรียงตาม Dag Run ถัดไป (เก่าสุด-ใหม่สุด)",
+      "desc": "จัดเรียงตาม Dag Run ถัดไป (ใหม่สุด-เก่าสุด)"
+    },
+    "placeholder": "จัดเรียงตาม"
+  },
+  "unfavoriteDag": "เลิกชื่นชอบ Dag"
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/th/dashboard.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/th/dashboard.json
new file mode 100644
index 00000000000..b06545e12c3
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/th/dashboard.json
@@ -0,0 +1,45 @@
+{
+  "favorite": {
+    "favoriteDags_one": "Dag รายการโปรด {{count}} รายการแรก",
+    "favoriteDags_other": "Dags รายการโปรด {{count}} รายการแรก",
+    "noDagRuns": "ยังไม่มี DagRun สำหรับ Dag นี้",
+    "noFavoriteDags": "ยังไม่มีรายการโปรด คลิกไอคอนรูปดาวด้านข้าง Dag 
ในรายการเพื่อเพิ่มเป็นรายการโปรดของคุณ"
+  },
+  "group": "กลุ่ม",
+  "health": {
+    "dagProcessor": "Dag Processor",
+    "health": "สถานะสุขภาพ",
+    "healthy": "ปกติ",
+    "lastHeartbeat": "สัญญาณล่าสุด",
+    "metaDatabase": "MetaDatabase",
+    "scheduler": "Scheduler",
+    "status": "สถานะ",
+    "triggerer": "Triggerer",
+    "unhealthy": "ไม่ปกติ"
+  },
+  "history": "ประวัติ",
+  "importErrors": {
+    "dagImportError_one": "เกิดข้อผิดพลาดในการนำเข้า Dag",
+    "dagImportError_other": "เกิดข้อผิดพลาดในการนำเข้า Dags",
+    "searchByFile": "ค้นหาตามไฟล์",
+    "timestamp": "เวลา"
+  },
+  "managePools": "จัดการพูล",
+  "noAssetEvents": "ไม่พบอีเวนต์ของ Asset",
+  "poolSlots": "จำนวนช่องในพูล",
+  "sortBy": {
+    "newestFirst": "ใหม่สุดก่อน",
+    "oldestFirst": "เก่าสุดก่อน"
+  },
+  "source": "แหล่งที่มา",
+  "stats": {
+    "activeDags": "Dags ที่ทำงานอยู่",
+    "failedDags": "Dags ที่ล้มเหลว",
+    "queuedDags": "Dags ที่ถูกจัดคิว",
+    "requiredActions": "การดำเนินการที่จำเป็น",
+    "runningDags": "Dags ที่กำลังทำงาน",
+    "stats": "สถิติ"
+  },
+  "uri": "Uri",
+  "welcome": "ยินดีต้อนรับ"
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/th/hitl.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/th/hitl.json
new file mode 100644
index 00000000000..3d8fb5a847e
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/th/hitl.json
@@ -0,0 +1,34 @@
+{
+  "filters": {
+    "response": {
+      "all": "ทั้งหมด",
+      "pending": "รอดำเนินการ",
+      "received": "ตรวจสอบแล้ว"
+    }
+  },
+  "requiredAction_one": "การดำเนินการที่จำเป็น",
+  "requiredAction_other": "การดำเนินการที่จำเป็น",
+  "requiredActionCount_one": "การดำเนินการที่จำเป็น ({{count}})",
+  "requiredActionCount_other": "การดำเนินการที่จำเป็น ({{count}})",
+  "requiredActionState": "สถานะการดำเนินการที่จำเป็น",
+  "response": {
+    "error": "การตอบสนองล้มเหลว",
+    "optionsDescription": "เลือกตัวเลือกของคุณสำหรับ Task Instance นี้",
+    "optionsLabel": "ตัวเลือก",
+    "received": "ได้รับการตอบสนองเมื่อ ",
+    "respond": "ตอบสนอง",
+    "success": "การตอบสนองของ {{taskId}} สำเร็จ",
+    "title": "Human Task Instance - {{taskId}}"
+  },
+  "state": {
+    "approvalReceived": "ได้รับการอนุมัติแล้ว",
+    "approvalRequired": "ต้องการการอนุมัติ",
+    "choiceReceived": "ได้รับตัวเลือกแล้ว",
+    "choiceRequired": "ต้องการตัวเลือก",
+    "noResponseReceived": "ไม่ได้รับการตอบสนอง",
+    "rejectionReceived": "ได้รับการปฏิเสธแล้ว",
+    "responseReceived": "ได้รับการตอบสนองแล้ว",
+    "responseRequired": "ต้องการการตอบสนอง"
+  },
+  "subject": "หัวเรื่อง"
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/th/tasks.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/th/tasks.json
new file mode 100644
index 00000000000..ca5cf8f716b
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/th/tasks.json
@@ -0,0 +1,10 @@
+{
+  "mapped": "ถูกแม็ปแล้ว",
+  "notMapped": "ยังไม่ได้แม็ป",
+  "retries": "การลองใหม่",
+  "searchTasks": "ค้นหางาน",
+  "selectMapped": "เลือกการแม็ป",
+  "selectOperator": "เลือกตัวดำเนินการ",
+  "selectRetryValues": "เลือกค่าการลองใหม่",
+  "selectTriggerRules": "เลือกกฎการทริกเกอร์"
+}
diff --git a/airflow-core/src/airflow/ui/src/i18n/config.ts 
b/airflow-core/src/airflow/ui/src/i18n/config.ts
index 71160d7d003..96dc38413fd 100644
--- a/airflow-core/src/airflow/ui/src/i18n/config.ts
+++ b/airflow-core/src/airflow/ui/src/i18n/config.ts
@@ -37,6 +37,7 @@ export const supportedLanguages = [
   { code: "nl", name: "Nederlands" },
   { code: "pl", name: "Polski" },
   { code: "pt", name: "Português" },
+  { code: "th", name: "ไทย" },
   { code: "tr", name: "Türkçe" },
   { code: "zh-CN", name: "简体中文" },
   { code: "zh-TW", name: "繁體中文" },
diff --git a/dev/i18n/check_translations_completeness.py 
b/dev/i18n/check_translations_completeness.py
index 3498eb4851c..a9d56ef17ca 100755
--- a/dev/i18n/check_translations_completeness.py
+++ b/dev/i18n/check_translations_completeness.py
@@ -65,6 +65,7 @@ PLURAL_SUFFIXES = {
     "nl": MOST_COMMON_PLURAL_SUFFIXES,
     "pl": ["_one", "_few", "_many", "_other"],
     "pt": ["_zero", "_one", "_many", "_other"],
+    "th": ["_other"],
     "tr": MOST_COMMON_PLURAL_SUFFIXES,
     "zh-CN": ["_other"],
     "zh-TW": ["_other"],

Reply via email to