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"],