diff --git a/api/constants/languages.py b/api/constants/languages.py
index a6394da819..1157ec4307 100644
--- a/api/constants/languages.py
+++ b/api/constants/languages.py
@@ -18,6 +18,7 @@ language_timezone_mapping = {
"tr-TR": "Europe/Istanbul",
"fa-IR": "Asia/Tehran",
"sl-SI": "Europe/Ljubljana",
+ "th-TH": "Asia/Bangkok",
}
languages = list(language_timezone_mapping.keys())
diff --git a/web/i18n/language.ts b/web/i18n/language.ts
index e83088346c..cd770977bd 100644
--- a/web/i18n/language.ts
+++ b/web/i18n/language.ts
@@ -25,6 +25,7 @@ export type I18nText = {
'hi-IN': string
'fa-IR': string
'sl-SI': string
+ 'th-TH': string
}
export const languages = data.languages
@@ -55,6 +56,7 @@ export const NOTICE_I18N = {
it_IT: 'Avviso Importante',
fa_IR: 'هشدار مهم',
sl_SI: 'Pomembno obvestilo',
+ th_TH: 'ประกาศสำคัญ',
},
desc: {
en_US:
@@ -87,6 +89,8 @@ export const NOTICE_I18N = {
'سیستم ما از ساعت 19:00 تا 24:00 UTC در تاریخ 28 اوت برای ارتقاء در دسترس نخواهد بود. برای سؤالات، لطفاً با تیم پشتیبانی ما (support@dify.ai) تماس بگیرید. ما برای صبر شما ارزش قائلیم.',
sl_SI:
'Naš sistem ne bo na voljo od 19:00 do 24:00 UTC 28. avgusta zaradi nadgradnje. Za vprašanja se obrnite na našo skupino za podporo (support@dify.ai). Cenimo vašo potrpežljivost.',
+ th_TH:
+ 'ระบบของเราจะไม่สามารถใช้งานได้ตั้งแต่เวลา 19:00 ถึง 24:00 UTC ในวันที่ 28 สิงหาคม เพื่อทำการอัปเกรด หากมีคำถามใดๆ กรุณาติดต่อทีมสนับสนุนของเรา (support@dify.ai) เราขอขอบคุณในความอดทนของท่าน',
},
href: '#',
}
diff --git a/web/i18n/languages.json b/web/i18n/languages.json
index c29d0280a1..41554920c6 100644
--- a/web/i18n/languages.json
+++ b/web/i18n/languages.json
@@ -82,7 +82,7 @@
"name": "ไทย (ประเทศไทย)",
"prompt_name": "Thai",
"example": "สวัสดี Dify!",
- "supported": false
+ "supported": true
},
{
"value": "id-ID",
diff --git a/web/i18n/th-TH/app-annotation.ts b/web/i18n/th-TH/app-annotation.ts
new file mode 100644
index 0000000000..5fba357d04
--- /dev/null
+++ b/web/i18n/th-TH/app-annotation.ts
@@ -0,0 +1,87 @@
+const translation = {
+ title: 'คำ อธิบาย',
+ name: 'คําอธิบายประกอบ ตอบกลับ',
+ editBy: 'ตอบแก้ไขโดย {{author}}',
+ noData: {
+ title: 'ไม่มีคําอธิบายประกอบ',
+ description: 'คุณสามารถแก้ไขคําอธิบายประกอบระหว่างการดีบักแอปหรือนําเข้าคําอธิบายประกอบจํานวนมากได้ที่นี่เพื่อการตอบกลับคุณภาพสูง',
+ },
+ table: {
+ header: {
+ question: 'ปัญหา',
+ answer: 'ตอบ',
+ createdAt: 'สร้างเมื่อ',
+ hits: 'ฮิต',
+ actions: 'การกระทํา',
+ addAnnotation: 'เพิ่มคําอธิบายประกอบ',
+ bulkImport: 'นําเข้าจํานวนมาก',
+ bulkExport: 'ส่งออกจํานวนมาก',
+ clearAll: 'ล้างคําอธิบายประกอบทั้งหมด',
+ },
+ },
+ editModal: {
+ title: 'แก้ไขคําอธิบายประกอบ ตอบกลับ',
+ queryName: 'การสอบถามของผู้ใช้',
+ answerName: 'บอทนักเล่าเรื่อง',
+ yourAnswer: 'คําตอบของคุณ',
+ answerPlaceholder: 'พิมพ์คําตอบของคุณที่นี่',
+ yourQuery: 'คําถามของคุณ',
+ queryPlaceholder: 'พิมพ์แบบสอบถามของคุณที่นี่',
+ removeThisCache: 'ลบคําอธิบายประกอบนี้',
+ createdAt: 'สร้างที่',
+ },
+ addModal: {
+ title: 'เพิ่มคําอธิบายประกอบตอบกลับ',
+ queryName: 'ปัญหา',
+ answerName: 'ตอบ',
+ answerPlaceholder: 'พิมพ์คําตอบที่นี่',
+ queryPlaceholder: 'พิมพ์ query ที่นี่',
+ createNext: 'เพิ่มการตอบกลับที่มีคําอธิบายประกอบอื่น',
+ },
+ batchModal: {
+ title: 'นําเข้าจํานวนมาก',
+ csvUploadTitle: 'ลากและวางไฟล์ CSV ของคุณที่นี่ หรือ',
+ browse: 'เล็ม',
+ tip: 'ไฟล์ CSV ต้องสอดคล้องกับโครงสร้างต่อไปนี้:',
+ question: 'ปัญหา',
+ answer: 'ตอบ',
+ contentTitle: 'เนื้อหาก้อน',
+ content: 'เนื้อหา',
+ template: 'ดาวน์โหลดเทมเพลตที่นี่',
+ cancel: 'ยกเลิก',
+ run: 'เรียกใช้แบทช์',
+ runError: 'เรียกใช้ชุดงานล้มเหลว',
+ processing: 'ในการประมวลผลแบบแบทช์',
+ completed: 'นําเข้าเสร็จสมบูรณ์',
+ error: 'ข้อผิดพลาดในการนําเข้า',
+ ok: 'ตกลง, ได้',
+ },
+ errorMessage: {
+ answerRequired: 'ต้องตอบ',
+ queryRequired: 'จําเป็นต้องมีคําถาม',
+ },
+ viewModal: {
+ annotatedResponse: 'คําอธิบายประกอบ ตอบกลับ',
+ hitHistory: 'ประวัติการตี',
+ hit: 'ตี',
+ hits: 'ฮิต',
+ noHitHistory: 'ไม่มีประวัติการตี',
+ },
+ hitHistoryTable: {
+ query: 'สอบถาม',
+ match: 'ไม้ขีดไฟ',
+ response: 'การตอบสนอง',
+ source: 'ที่มา',
+ score: 'คะแนน',
+ time: 'เวลา',
+ },
+ initSetup: {
+ title: 'คําอธิบายประกอบตอบกลับการตั้งค่าเริ่มต้น',
+ configTitle: 'การตั้งค่าการตอบกลับคําอธิบายประกอบ',
+ confirmBtn: 'บันทึกและเปิดใช้งาน',
+ configConfirmBtn: 'ประหยัด',
+ },
+ embeddingModelSwitchTip: 'โมเดลเวกเตอร์ข้อความคําอธิบายประกอบ โมเดลการสลับจะถูกฝังใหม่ส่งผลให้มีค่าใช้จ่ายเพิ่มเติม',
+}
+
+export default translation
diff --git a/web/i18n/th-TH/app-api.ts b/web/i18n/th-TH/app-api.ts
new file mode 100644
index 0000000000..e8372508df
--- /dev/null
+++ b/web/i18n/th-TH/app-api.ts
@@ -0,0 +1,85 @@
+const translation = {
+ apiServer: 'เซิร์ฟเวอร์ API',
+ apiKey: 'คีย์ API',
+ status: 'สถานะ',
+ disabled: 'พิการ',
+ ok: 'ให้บริการ',
+ copy: 'ลอก',
+ copied: 'คัด ลอก',
+ regenerate: 'สร้างใหม่',
+ play: 'เล่น',
+ pause: 'หยุด',
+ playing: 'เล่น',
+ loading: 'การโหลด',
+ merMaid: {
+ rerender: 'ทําซ้ํา Rerender',
+ },
+ never: 'ไม่เคย',
+ apiKeyModal: {
+ apiSecretKey: 'คีย์ลับ API',
+ apiSecretKeyTips: 'เพื่อป้องกันการละเมิด API ให้ปกป้องคีย์ API ของคุณ หลีกเลี่ยงการใช้เป็นข้อความธรรมดาในโค้ดส่วนหน้า :)',
+ createNewSecretKey: 'สร้างคีย์ลับใหม่',
+ secretKey: 'กุญแจลับ',
+ created: 'สร้าง',
+ lastUsed: 'ใช้ล่าสุด',
+ generateTips: 'เก็บกุญแจนี้ไว้ในที่ปลอดภัยและเข้าถึงได้',
+ },
+ actionMsg: {
+ deleteConfirmTitle: 'ลบคีย์ลับนี้?',
+ deleteConfirmTips: 'การดําเนินการนี้ไม่สามารถยกเลิกได้',
+ ok: 'ตกลง, ได้',
+ },
+ completionMode: {
+ title: 'API แอปที่สมบูรณ์',
+ info: 'สําหรับการสร้างข้อความคุณภาพสูง เช่น บทความ บทสรุป และการแปล ให้ใช้ API ข้อความที่สมบูรณ์กับการป้อนข้อมูลของผู้ใช้ การสร้างข้อความอาศัยพารามิเตอร์โมเดลและเทมเพลตพร้อมท์ที่ตั้งค่าไว้ใน Dify Prompt Engineering',
+ createCompletionApi: 'สร้างข้อความเสร็จสมบูรณ์',
+ createCompletionApiTip: 'สร้างข้อความเสร็จสิ้นเพื่อรองรับโหมดคําถามและคําตอบ',
+ inputsTips: '(ไม่บังคับ) ระบุฟิลด์อินพุตของผู้ใช้เป็นคู่คีย์-ค่า ซึ่งสอดคล้องกับตัวแปรใน Prompt Eng คีย์คือชื่อตัวแปร ค่าคือค่าพารามิเตอร์ ถ้าชนิดฟิลด์เป็น เลือก ค่าที่ส่งจะต้องเป็นหนึ่งในตัวเลือกที่ตั้งไว้ล่วงหน้า',
+ queryTips: 'เนื้อหาข้อความที่ผู้ใช้ป้อน',
+ blocking: 'ประเภทการบล็อก รอให้การดําเนินการเสร็จสมบูรณ์และส่งคืนผลลัพธ์ (คําขออาจถูกขัดจังหวะหากกระบวนการใช้เวลานาน)',
+ streaming: 'การสตรีมกลับมา การใช้งานการส่งคืนการสตรีมตาม SSE (เหตุการณ์ที่ส่งโดยเซิร์ฟเวอร์)',
+ messageFeedbackApi: 'ข้อความแสดงความคิดเห็น (ชอบ)',
+ messageFeedbackApiTip: 'ให้คะแนนข้อความที่ได้รับในนามของผู้ใช้ปลายทางที่มีการชอบหรือไม่ชอบ ข้อมูลนี้สามารถมองเห็นได้ในหน้า Logs & Annotations และใช้สําหรับการปรับแต่งโมเดลในอนาคต',
+ messageIDTip: 'รหัสข้อความ',
+ ratingTip: 'ชอบหรือไม่ชอบ null คือเลิกทํา',
+ parametersApi: 'รับข้อมูลพารามิเตอร์แอปพลิเคชัน',
+ parametersApiTip: 'ดึงพารามิเตอร์อินพุตที่กําหนดค่าไว้ รวมถึงชื่อตัวแปร ชื่อฟิลด์ ชนิด และค่าเริ่มต้น โดยทั่วไปจะใช้สําหรับแสดงฟิลด์เหล่านี้ในฟอร์มหรือกรอกค่าเริ่มต้นหลังจากโหลดไคลเอ็นต์',
+ },
+ chatMode: {
+ title: 'API แอปแชท',
+ info: 'สําหรับแอปการสนทนาอเนกประสงค์ที่ใช้รูปแบบ Q&A ให้เรียก API ข้อความแชทเพื่อเริ่มการสนทนา รักษาการสนทนาอย่างต่อเนื่องโดยส่ง conversation_id ที่ส่งคืน พารามิเตอร์การตอบสนองและเทมเพลตขึ้นอยู่กับ Dify Prompt Eng การตั้งค่า',
+ createChatApi: 'สร้างข้อความแชท',
+ createChatApiTip: 'สร้างข้อความการสนทนาใหม่หรือดําเนินการต่อในการสนทนาที่มีอยู่',
+ inputsTips: '(ไม่บังคับ) ระบุฟิลด์อินพุตของผู้ใช้เป็นคู่คีย์-ค่า ซึ่งสอดคล้องกับตัวแปรใน Prompt Eng คีย์คือชื่อตัวแปร ค่าคือค่าพารามิเตอร์ ถ้าชนิดฟิลด์เป็น เลือก ค่าที่ส่งจะต้องเป็นหนึ่งในตัวเลือกที่ตั้งไว้ล่วงหน้า',
+ queryTips: 'เนื้อหาการป้อนข้อมูล/คําถามของผู้ใช้',
+ blocking: 'ประเภทการบล็อก รอให้การดําเนินการเสร็จสมบูรณ์และส่งคืนผลลัพธ์ (คําขออาจถูกขัดจังหวะหากกระบวนการใช้เวลานาน)',
+ streaming: 'การสตรีมกลับมา การใช้งานการส่งคืนการสตรีมตาม SSE (เหตุการณ์ที่ส่งโดยเซิร์ฟเวอร์)',
+ conversationIdTip: '(ไม่บังคับ) รหัสการสนทนา: เว้นว่างไว้สําหรับการสนทนาครั้งแรก ส่ง conversation_id จากบริบทเพื่อสนทนาต่อ',
+ messageFeedbackApi: 'ข้อความความคิดเห็นของผู้ใช้เทอร์มินัล เช่น',
+ messageFeedbackApiTip: 'ให้คะแนนข้อความที่ได้รับในนามของผู้ใช้ปลายทางที่มีการชอบหรือไม่ชอบ ข้อมูลนี้สามารถมองเห็นได้ในหน้า Logs & Annotations และใช้สําหรับการปรับแต่งโมเดลในอนาคต',
+ messageIDTip: 'รหัสข้อความ',
+ ratingTip: 'ชอบหรือไม่ชอบ null คือเลิกทํา',
+ chatMsgHistoryApi: 'รับข้อความประวัติการแชท',
+ chatMsgHistoryApiTip: 'หน้าแรกส่งคืนแถบ \'ขีดจํากัด\' ล่าสุด ซึ่งอยู่ในลําดับที่กลับกัน',
+ chatMsgHistoryConversationIdTip: 'รหัสการสนทนา',
+ chatMsgHistoryFirstId: 'ID ของเรกคอร์ดแชทแรกบนหน้าปัจจุบัน ค่าเริ่มต้นคือไม่มี',
+ chatMsgHistoryLimit: 'จํานวนแชทที่ส่งคืนในคําขอเดียว',
+ conversationsListApi: 'รับรายการการสนทนา',
+ conversationsListApiTip: 'รับรายการเซสชันของผู้ใช้ปัจจุบัน โดยค่าเริ่มต้น 20 เซสชันล่าสุดจะถูกส่งคืน',
+ conversationsListFirstIdTip: 'รหัสของเรกคอร์ดสุดท้ายบนหน้าปัจจุบัน ค่าเริ่มต้นไม่มี',
+ conversationsListLimitTip: 'จํานวนแชทที่ส่งคืนในคําขอเดียว',
+ conversationRenamingApi: 'การเปลี่ยนชื่อการสนทนา',
+ conversationRenamingApiTip: 'เปลี่ยนชื่อการสนทนา ชื่อจะแสดงในอินเทอร์เฟซไคลเอ็นต์แบบหลายเซสชัน',
+ conversationRenamingNameTip: 'ชื่อใหม่',
+ parametersApi: 'รับข้อมูลพารามิเตอร์แอปพลิเคชัน',
+ parametersApiTip: 'ดึงพารามิเตอร์อินพุตที่กําหนดค่าไว้ รวมถึงชื่อตัวแปร ชื่อฟิลด์ ชนิด และค่าเริ่มต้น โดยทั่วไปจะใช้สําหรับแสดงฟิลด์เหล่านี้ในฟอร์มหรือกรอกค่าเริ่มต้นหลังจากโหลดไคลเอ็นต์',
+ },
+ develop: {
+ requestBody: 'เนื้อหาคําขอ',
+ pathParams: 'พารามิเตอร์เส้นทาง',
+ query: 'สอบถาม',
+ toc: 'เนื้อหา',
+ },
+}
+
+export default translation
diff --git a/web/i18n/th-TH/app-debug.ts b/web/i18n/th-TH/app-debug.ts
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/web/i18n/th-TH/app-log.ts b/web/i18n/th-TH/app-log.ts
new file mode 100644
index 0000000000..fb7600f8bf
--- /dev/null
+++ b/web/i18n/th-TH/app-log.ts
@@ -0,0 +1,94 @@
+const translation = {
+ title: 'บันทึก',
+ description: 'บันทึกบันทึกสถานะการทํางานของแอปพลิเคชัน รวมถึงการป้อนข้อมูลของผู้ใช้และการตอบกลับ AI',
+ dateTimeFormat: 'MM/DD/YYYY hh:mm A',
+ table: {
+ header: {
+ updatedTime: 'อัพเดทเวลา',
+ time: 'เวลาที่สร้าง',
+ endUser: 'ผู้ใช้ปลายทางหรือบัญชี',
+ input: 'อินพุต',
+ output: 'ผลิตภัณฑ์',
+ summary: 'ชื่อเรื่อง',
+ messageCount: 'จํานวนข้อความ',
+ userRate: 'อัตราผู้ใช้',
+ adminRate: 'Op. อัตรา',
+ startTime: 'เวลาเริ่มต้น',
+ status: 'สถานะ',
+ runtime: 'เวลาทํางาน',
+ tokens: 'โท เค็น',
+ user: 'ผู้ใช้ปลายทางหรือบัญชี',
+ version: 'เวอร์ชัน',
+ },
+ pagination: {
+ previous: 'ก่อนหน้า',
+ next: 'ต่อไป',
+ },
+ empty: {
+ noChat: 'ยังไม่มีการสนทนา',
+ noOutput: 'ไม่มีเอาต์พุต',
+ element: {
+ title: 'มีใครอยู่ที่นั่นไหม?',
+ content: 'สังเกตและใส่คําอธิบายประกอบการโต้ตอบระหว่างผู้ใช้ปลายทางและแอปพลิเคชัน AI ที่นี่เพื่อปรับปรุงความแม่นยําของ AI อย่างต่อเนื่อง คุณสามารถลองแชร์หรือทดสอบเว็บแอปด้วยตัวคุณเอง แล้วกลับไปที่หน้านี้',
+ },
+ },
+ },
+ detail: {
+ time: 'เวลา',
+ conversationId: 'รหัสการสนทนา',
+ promptTemplate: 'เทมเพลตพร้อมท์',
+ promptTemplateBeforeChat: 'เทมเพลตพร้อมท์ก่อนแชท · เป็นข้อความของระบบ',
+ annotationTip: 'การปรับปรุงที่ทําเครื่องหมายโดย {{user}}',
+ second: 's',
+ tokenCost: 'โทเค็นที่ใช้ไป',
+ loading: 'การโหลด',
+ operation: {
+ like: 'ชอบ',
+ dislike: 'ไม่ชอบ',
+ addAnnotation: 'เพิ่มการปรับปรุง',
+ editAnnotation: 'แก้ไขการปรับปรุง',
+ annotationPlaceholder: 'ป้อนคําตอบที่คาดหวังที่คุณต้องการให้ AI ตอบกลับ ซึ่งสามารถใช้สําหรับการปรับแต่งโมเดลและการปรับปรุงคุณภาพการสร้างข้อความอย่างต่อเนื่องในอนาคต',
+ },
+ variables: 'ตัว แปร',
+ uploadImages: 'รูปภาพที่อัปโหลด',
+ },
+ filter: {
+ period: {
+ today: 'วันนี้',
+ last7days: '7 วันที่ผ่านมา',
+ last4weeks: '4 สัปดาห์ที่ผ่านมา',
+ last3months: '3 เดือนที่ผ่านมา',
+ last12months: '12 เดือนที่ผ่านมา',
+ monthToDate: 'เดือนจนถึงปัจจุบัน',
+ quarterToDate: 'ไตรมาสจนถึงปัจจุบัน',
+ yearToDate: 'ปีจนถึงปัจจุบัน',
+ allTime: 'ตลอดเวลา',
+ },
+ annotation: {
+ all: 'ทั้งหมด',
+ annotated: 'การปรับปรุงที่มีคําอธิบายประกอบ ({{count}} รายการ)',
+ not_annotated: 'ไม่มีคําอธิบายประกอบ',
+ },
+ sortBy: 'เมืองสีดํา:',
+ descending: 'จากมากไปหาน้อย',
+ ascending: 'จากน้อยไปมาก',
+ },
+ workflowTitle: 'บันทึกเวิร์กโฟลว์',
+ workflowSubtitle: 'บันทึกบันทึกการทํางานของ Automate',
+ runDetail: {
+ title: 'บันทึกการสนทนา',
+ workflowTitle: 'รายละเอียดบันทึก',
+ },
+ promptLog: 'บันทึกพร้อมท์',
+ agentLog: 'บันทึกตัวแทน',
+ viewLog: 'ดูบันทึก',
+ agentLogDetail: {
+ agentMode: 'โหมดตัวแทน',
+ toolUsed: 'เครื่องมือที่ใช้',
+ iterations: 'เกิด ซ้ำ',
+ iteration: 'เกิด ซ้ำ',
+ finalProcessing: 'การประมวลผลขั้นสุดท้าย',
+ },
+}
+
+export default translation
diff --git a/web/i18n/th-TH/app-overview.ts b/web/i18n/th-TH/app-overview.ts
new file mode 100644
index 0000000000..81f95e1f8e
--- /dev/null
+++ b/web/i18n/th-TH/app-overview.ts
@@ -0,0 +1,168 @@
+const translation = {
+ welcome: {
+ firstStepTip: 'ในการเริ่มต้น',
+ enterKeyTip: 'ป้อนคีย์ OpenAI API ของคุณด้านล่าง',
+ getKeyTip: 'รับคีย์ API ของคุณจากแดชบอร์ด OpenAI',
+ placeholder: 'คีย์ API OpenAI ของคุณ (เช่น sk-xxxx)',
+ },
+ apiKeyInfo: {
+ cloud: {
+ trial: {
+ title: 'คุณกําลังใช้โควต้าทดลองใช้ {{providerName}}',
+ description: 'โควต้าทดลองใช้มีไว้เพื่อวัตถุประสงค์ในการทดสอบของคุณ ก่อนที่โควต้าทดลองใช้จะหมด โปรดตั้งค่าผู้ให้บริการโมเดลของคุณเองหรือซื้อโควต้าเพิ่มเติม',
+ },
+ exhausted: {
+ title: 'โควต้าทดลองใช้ของคุณหมดแล้ว โปรดตั้งค่า APIKey ของคุณ',
+ description: 'คุณใช้โควต้าทดลองใช้หมดแล้ว โปรดตั้งค่าผู้ให้บริการโมเดลของคุณเองหรือซื้อโควต้าเพิ่มเติม',
+ },
+ },
+ selfHost: {
+ title: {
+ row1: 'ในการเริ่มต้น',
+ row2: 'ตั้งค่าผู้ให้บริการโมเดลของคุณก่อน',
+ },
+ },
+ callTimes: 'เวลาโทร',
+ usedToken: 'โทเค็นที่ใช้',
+ setAPIBtn: 'ไปที่ผู้ให้บริการโมเดลการตั้งค่า',
+ tryCloud: 'หรือลองใช้ Dify เวอร์ชันคลาวด์พร้อมใบเสนอราคาฟรี',
+ },
+ overview: {
+ title: 'ภาพรวม',
+ appInfo: {
+ explanation: 'AI WebApp พร้อมใช้งาน',
+ accessibleAddress: 'URL สาธารณะ',
+ preview: 'ดูตัวอย่าง',
+ regenerate: 'สร้างใหม่',
+ regenerateNotice: 'คุณต้องการสร้าง URL สาธารณะใหม่หรือไม่',
+ preUseReminder: 'โปรดเปิดใช้งาน WebApp ก่อนดําเนินการต่อ',
+ settings: {
+ entry: 'การตั้งค่า',
+ title: 'การตั้งค่าเว็บแอป',
+ webName: 'ชื่อเว็บแอป',
+ webDesc: 'คําอธิบาย WebApp',
+ webDescTip: 'ข้อความนี้จะแสดงที่ฝั่งไคลเอ็นต์ โดยให้คําแนะนําพื้นฐานเกี่ยวกับวิธีการใช้แอปพลิเคชัน',
+ webDescPlaceholder: 'ป้อนคําอธิบายของ WebApp',
+ language: 'ภาษา',
+ workflow: {
+ title: 'เวิร์กโฟลว์',
+ subTitle: 'รายละเอียดเวิร์กโฟลว์',
+ show: 'แสดง',
+ hide: 'ซ่อน',
+ showDesc: 'แสดงหรือซ่อนรายละเอียดเวิร์กโฟลว์ใน WebApp',
+ },
+ chatColorTheme: 'ธีมสีแชท',
+ chatColorThemeDesc: 'กําหนดธีมสีของแชทบอท',
+ chatColorThemeInverted: 'คว่ำ',
+ invalidHexMessage: 'ค่าฐานสิบหกไม่ถูกต้อง',
+ sso: {
+ label: 'การรับรองความถูกต้องของ SSO',
+ title: 'เว็บแอป SSO',
+ description: 'ผู้ใช้ทุกคนต้องเข้าสู่ระบบด้วย SSO ก่อนใช้ WebApp',
+ tooltip: 'ติดต่อผู้ดูแลระบบเพื่อเปิดใช้ WebApp SSO',
+ },
+ more: {
+ entry: 'แสดงการตั้งค่าเพิ่มเติม',
+ copyright: 'ลิขสิทธิ์',
+ copyRightPlaceholder: 'ป้อนชื่อผู้เขียนหรือองค์กร',
+ privacyPolicy: 'นโยบายความเป็นส่วนตัว',
+ privacyPolicyPlaceholder: 'ป้อนลิงก์นโยบายความเป็นส่วนตัว',
+ privacyPolicyTip: 'ช่วยให้ผู้เยี่ยมชมเข้าใจข้อมูลที่แอปพลิเคชันรวบรวม โปรดดูนโยบายความเป็นส่วนตัวของ Dify',
+ customDisclaimer: 'ข้อจํากัดความรับผิดชอบที่กําหนดเอง',
+ customDisclaimerPlaceholder: 'ป้อนข้อความข้อจํากัดความรับผิดชอบที่กําหนดเอง',
+ customDisclaimerTip: 'ข้อความปฏิเสธความรับผิดชอบที่กําหนดเองจะแสดงที่ฝั่งไคลเอ็นต์ โดยให้ข้อมูลเพิ่มเติมเกี่ยวกับแอปพลิเคชัน',
+ },
+ },
+ embedded: {
+ entry: 'ฝัง ตัว',
+ title: 'ฝังบนเว็บไซต์',
+ explanation: 'เลือกวิธีฝังแอปแชทลงในเว็บไซต์ของคุณ',
+ iframe: 'หากต้องการเพิ่มแอปแชทที่ใดก็ได้บนเว็บไซต์ของคุณ ให้เพิ่ม iframe นี้ลงในโค้ด html ของคุณ',
+ scripts: 'หากต้องการเพิ่มแอปแชทที่ด้านขวาล่างของเว็บไซต์ ให้เพิ่มโค้ดนี้ลงใน html ของคุณ',
+ chromePlugin: 'ติดตั้งส่วนขยาย Dify Chatbot Chrome',
+ copied: 'คัด ลอก',
+ copy: 'ลอก',
+ },
+ qrcode: {
+ title: 'เชื่อมโยงรหัส QR',
+ scan: 'สแกนเพื่อแบ่งปัน',
+ download: 'ดาวน์โหลด QR Code',
+ },
+ customize: {
+ way: 'วิธี',
+ entry: 'ปรับแต่ง',
+ title: 'ปรับแต่ง AI WebApp',
+ explanation: 'คุณสามารถปรับแต่งส่วนหน้าของ Web App ให้เหมาะกับสถานการณ์และความต้องการสไตล์ของคุณได้',
+ way1: {
+ name: 'แยกรหัสไคลเอ็นต์ แก้ไข และปรับใช้กับ Vercel (แนะนํา)',
+ step1: 'แยกรหัสไคลเอ็นต์และแก้ไข',
+ step1Tip: 'คลิกที่นี่เพื่อแยกซอร์สโค้ดลงในบัญชี GitHub ของคุณและแก้ไขโค้ด',
+ step1Operation: 'Dify-Web ไคลเอ็นต์',
+ step2: 'ปรับใช้กับ Vercel',
+ step2Tip: 'คลิกที่นี่เพื่อนําเข้าที่เก็บไปยัง Vercel และปรับใช้',
+ step2Operation: 'นําเข้าที่เก็บข้อมูล',
+ step3: 'กําหนดค่าตัวแปรสภาพแวดล้อม',
+ step3Tip: 'เพิ่มตัวแปรสภาพแวดล้อมต่อไปนี้ใน Vercel',
+ },
+ way2: {
+ name: 'เขียนโค้ดฝั่งไคลเอ็นต์เพื่อเรียกใช้ API และปรับใช้กับเซิร์ฟเวอร์',
+ operation: 'เอกสาร',
+ },
+ },
+ },
+ apiInfo: {
+ title: 'API บริการแบ็กเอนด์',
+ explanation: 'ผสานรวมเข้ากับแอปพลิเคชันของคุณได้อย่างง่ายดาย',
+ accessibleAddress: 'ปลายทาง API บริการ',
+ doc: 'การอ้างอิง API',
+ },
+ status: {
+ running: 'ให้บริการ',
+ disable: 'พิการ',
+ },
+ },
+ analysis: {
+ title: 'การวิเคราะห์',
+ ms: 'นางสาว',
+ tokenPS: 'โทเค็น/วินาที',
+ totalMessages: {
+ title: 'ข้อความทั้งหมด',
+ explanation: 'การโต้ตอบ AI รายวันนับ',
+ },
+ totalConversations: {
+ title: 'การสนทนาทั้งหมด',
+ explanation: 'การสนทนา AI รายวันนับ ไม่รวมวิศวกรรม/ดีบักพร้อมท์',
+ },
+ activeUsers: {
+ title: 'ผู้ใช้ที่ใช้งานอยู่',
+ explanation: 'ผู้ใช้ที่ไม่ซ้ํากันมีส่วนร่วมในการถามตอบกับ AI ไม่รวมวิศวกรรม/ดีบักพร้อมท์',
+ },
+ tokenUsage: {
+ title: 'การใช้โทเค็น',
+ explanation: 'สะท้อนถึงการใช้โทเค็นรายวันของโมเดลภาษาสําหรับแอปพลิเคชัน ซึ่งมีประโยชน์สําหรับวัตถุประสงค์ในการควบคุมต้นทุน',
+ consumed: 'ใช้',
+ },
+ avgSessionInteractions: {
+ title: 'การโต้ตอบเซสชันโดยเฉลี่ย',
+ explanation: 'จํานวนการสื่อสารระหว่างผู้ใช้และ AI อย่างต่อเนื่อง สําหรับแอปที่ใช้การสนทนา',
+ },
+ avgUserInteractions: {
+ title: 'การโต้ตอบของผู้ใช้โดยเฉลี่ย',
+ explanation: 'สะท้อนถึงความถี่ในการใช้งานรายวันของผู้ใช้ เมตริกนี้สะท้อนถึงความเหนียวแน่นของผู้ใช้',
+ },
+ userSatisfactionRate: {
+ title: 'อัตราความพึงพอใจของผู้ใช้',
+ explanation: 'จํานวนไลค์ต่อ 1,000 ข้อความ สิ่งนี้บ่งชี้ถึงสัดส่วนของคําตอบที่ผู้ใช้พึงพอใจอย่างมาก',
+ },
+ avgResponseTime: {
+ title: 'เวลาตอบสนองเฉลี่ย',
+ explanation: 'เวลา (มิลลิวินาที) สําหรับ AI ในการประมวลผล/ตอบสนอง สําหรับแอปที่ใช้ข้อความ',
+ },
+ tps: {
+ title: 'ความเร็วในการส่งออกโทเค็น',
+ explanation: 'วัดประสิทธิภาพของ LLM นับความเร็วในการส่งออกโทเค็นของ LLM ตั้งแต่เริ่มต้นคําขอจนถึงเสร็จสิ้นเอาต์พุต',
+ },
+ },
+}
+
+export default translation
diff --git a/web/i18n/th-TH/app.ts b/web/i18n/th-TH/app.ts
new file mode 100644
index 0000000000..6a55e0f51b
--- /dev/null
+++ b/web/i18n/th-TH/app.ts
@@ -0,0 +1,142 @@
+const translation = {
+ createApp: 'สร้างแอพ',
+ types: {
+ all: 'ทั้งหมด',
+ chatbot: 'แชทบอท',
+ agent: 'ตัวแทน',
+ workflow: 'เวิร์กโฟลว์',
+ completion: 'เสร็จ สมบูรณ์',
+ },
+ duplicate: 'สำเนา',
+ duplicateTitle: 'แอปที่ซ้ํากัน',
+ export: 'ส่งออก DSL',
+ exportFailed: 'ส่งออก DSL ล้มเหลว',
+ importDSL: 'นําเข้าไฟล์ DSL',
+ createFromConfigFile: 'สร้างจากไฟล์ DSL',
+ importFromDSL: 'นําเข้าจาก DSL',
+ importFromDSLFile: 'จากไฟล์ DSL',
+ importFromDSLUrl: 'จาก URL',
+ importFromDSLUrlPlaceholder: 'วางลิงค์ DSL ที่นี่',
+ deleteAppConfirmTitle: 'ลบแอพนี้?',
+ deleteAppConfirmContent: 'การลบแอปนั้นไม่สามารถย้อนกลับได้ ผู้ใช้จะไม่สามารถเข้าถึงแอปของคุณอีกต่อไป และการกําหนดค่าพร้อมท์และบันทึกทั้งหมดจะถูกลบอย่างถาวร',
+ appDeleted: 'แอพถูกลบ',
+ appDeleteFailed: 'ลบแอปไม่สําเร็จ',
+ join: 'เข้าร่วมชุมชน',
+ communityIntro: 'พูดคุยกับสมาชิกในทีม ผู้ร่วมให้ข้อมูล และนักพัฒนาในช่องทางต่างๆ',
+ roadmap: 'ดูแผนงานของเรา',
+ newApp: {
+ startFromBlank: 'สร้างจากช่องว่าง',
+ startFromTemplate: 'สร้างจากเทมเพลต',
+ captionAppType: 'คุณต้องการสร้างแอปประเภทใด',
+ chatbotDescription: 'สร้างแอปพลิเคชันที่ใช้การแชท แอพนี้ใช้รูปแบบคําถามและคําตอบ ทําให้สามารถสนทนาต่อเนื่องได้หลายรอบ',
+ completionDescription: 'สร้างแอปพลิเคชันที่สร้างข้อความคุณภาพสูงตามข้อความแจ้ง เช่น การสร้างบทความ สรุป การแปล และอื่นๆ',
+ completionWarning: 'แอปประเภทนี้จะไม่รองรับอีกต่อไป',
+ agentDescription: 'สร้างตัวแทนอัจฉริยะที่สามารถเลือกเครื่องมือเพื่อทํางานให้เสร็จได้โดยอัตโนมัติ',
+ workflowDescription: 'สร้างแอปพลิเคชันที่สร้างข้อความคุณภาพสูงตามการประสานเวิร์กโฟลว์ที่มีการปรับแต่งในระดับสูง เหมาะสําหรับผู้ใช้ที่มีประสบการณ์',
+ workflowWarning: 'ขณะนี้อยู่ในช่วงเบต้า',
+ chatbotType: 'วิธีการประสานแชทบอท',
+ basic: 'พื้นฐาน',
+ basicTip: 'สําหรับผู้เริ่มต้นสามารถเปลี่ยนไปใช้ Chatflow ได้ในภายหลัง',
+ basicFor: 'สําหรับผู้เริ่มต้น',
+ basicDescription: 'Basic Orchestrate ช่วยให้สามารถประสานแอปแชทบอทโดยใช้การตั้งค่าง่ายๆ โดยไม่สามารถแก้ไขข้อความแจ้งในตัวได้ เหมาะสําหรับผู้เริ่มต้น',
+ advanced: 'แชทโฟลว์',
+ advancedFor: 'สําหรับผู้ใช้ขั้นสูง',
+ advancedDescription: 'Workflow Orchestrate ประสานงาน Chatbots ในรูปแบบของเวิร์กโฟลว์ โดยนําเสนอการปรับแต่งในระดับสูง รวมถึงความสามารถในการแก้ไขข้อความแจ้งในตัว เหมาะสําหรับผู้ใช้ที่มีประสบการณ์',
+ captionName: 'ไอคอนและชื่อแอป',
+ appNamePlaceholder: 'ตั้งชื่อแอปของคุณ',
+ captionDescription: 'คำอธิบาย',
+ appDescriptionPlaceholder: 'ป้อนคําอธิบายของแอป',
+ useTemplate: 'ใช้เทมเพลตนี้',
+ previewDemo: 'ตัวอย่างการสาธิต',
+ chatApp: 'ผู้ช่วย',
+ chatAppIntro: 'ฉันต้องการสร้างแอปพลิเคชันที่ใช้การแชท แอพนี้ใช้รูปแบบคําถามและคําตอบ ทําให้สามารถสนทนาต่อเนื่องได้หลายรอบ',
+ agentAssistant: 'ผู้ช่วยตัวแทนใหม่',
+ completeApp: 'เครื่องกําเนิดข้อความ',
+ completeAppIntro: 'ฉันต้องการสร้างแอปพลิเคชันที่สร้างข้อความคุณภาพสูงตามข้อความแจ้ง เช่น การสร้างบทความ สรุป การแปล และอื่นๆ',
+ showTemplates: 'ฉันต้องการเลือกจากเทมเพลต',
+ hideTemplates: 'กลับไปที่การเลือกโหมด',
+ Create: 'สร้าง',
+ Cancel: 'ยกเลิก',
+ Confirm: 'ยืนยัน',
+ nameNotEmpty: 'ชื่อต้องไม่ว่างเปล่า',
+ appTemplateNotSelected: 'โปรดเลือกเทมเพลต',
+ appTypeRequired: 'โปรดเลือกประเภทแอป',
+ appCreated: 'สร้างแอป',
+ caution: 'ความระมัดระวัง',
+ appCreateDSLWarning: 'ข้อควรระวัง: ความแตกต่างของเวอร์ชัน DSL อาจส่งผลต่อคุณสมบัติบางอย่าง',
+ appCreateDSLErrorTitle: 'ความเข้ากันไม่ได้ของเวอร์ชัน',
+ appCreateDSLErrorPart1: 'ตรวจพบความแตกต่างอย่างมีนัยสําคัญในเวอร์ชัน DSL การบังคับนําเข้าอาจทําให้แอปพลิเคชันทํางานผิดปกติ',
+ appCreateDSLErrorPart2: 'คุณต้องการดําเนินการต่อหรือไม่?',
+ appCreateDSLErrorPart3: 'เวอร์ชัน DSL ของแอปพลิเคชันปัจจุบัน:',
+ appCreateDSLErrorPart4: 'เวอร์ชัน DSL ที่ระบบรองรับ:',
+ appCreateFailed: 'สร้างแอปไม่สําเร็จ',
+ },
+ editApp: 'แก้ไขข้อมูล',
+ editAppTitle: 'แก้ไขข้อมูลแอป',
+ editDone: 'อัปเดตข้อมูลแอป',
+ editFailed: 'อัปเดตข้อมูลแอปไม่สําเร็จ',
+ iconPicker: {
+ ok: 'ตกลง, ได้',
+ cancel: 'ยกเลิก',
+ emoji: 'อิโมจิ',
+ image: 'ภาพ',
+ },
+ answerIcon: {
+ title: 'ใช้ไอคอน WebApp เพื่อแทนที่ 🤖',
+ description: 'จะใช้ไอคอน WebApp เพื่อแทนที่🤖ในแอปพลิเคชันที่ใช้ร่วมกันหรือไม่',
+ descriptionInExplore: 'จะใช้ไอคอน WebApp เพื่อแทนที่🤖ใน Explore หรือไม่',
+ },
+ switch: 'เปลี่ยนไปใช้ Workflow Orchestrate',
+ switchTipStart: 'สําเนาแอปใหม่จะถูกสร้างขึ้นสําหรับคุณ และสําเนาใหม่จะเปลี่ยนเป็น Workflow Orchestration สําเนาใหม่จะ',
+ switchTip: 'ไม่อนุญาต',
+ switchTipEnd: 'เปลี่ยนกลับเป็น Basic Orchestrate',
+ switchLabel: 'สําเนาแอปที่จะสร้าง',
+ removeOriginal: 'ลบแอปเดิม',
+ switchStart: 'สวิตช์สตาร์ท',
+ typeSelector: {
+ all: 'ทุกประเภท',
+ chatbot: 'แชทบอท',
+ agent: 'ตัวแทน',
+ workflow: 'เวิร์กโฟลว์',
+ completion: 'เสร็จ สมบูรณ์',
+ },
+ tracing: {
+ title: 'การติดตามประสิทธิภาพของแอป',
+ description: 'การกําหนดค่าผู้ให้บริการ LLMOps บุคคลที่สามและประสิทธิภาพของแอปติดตาม',
+ config: 'กําหนดค่า',
+ view: 'ทิวทัศน์',
+ collapse: 'ทรุด',
+ expand: 'ขยาย',
+ tracing: 'ติดตาม',
+ disabled: 'พิการ',
+ disabledTip: 'โปรดกําหนดค่าผู้ให้บริการก่อน',
+ enabled: 'ให้บริการ',
+ tracingDescription: 'บันทึกบริบททั้งหมดของการดําเนินการแอป รวมถึงการเรียก LLM บริบท พรอมต์ คําขอ HTTP และอื่นๆ ไปยังแพลตฟอร์มการติดตามของบุคคลที่สาม',
+ configProviderTitle: {
+ configured: 'กําหนดค่าแล้ว',
+ notConfigured: 'ผู้ให้บริการกําหนดค่าเพื่อเปิดใช้งานการติดตาม',
+ moreProvider: 'ผู้ให้บริการเพิ่มเติม',
+ },
+ langsmith: {
+ title: 'แลงสมิธ',
+ description: 'แพลตฟอร์มนักพัฒนาแบบครบวงจรสําหรับทุกขั้นตอนของวงจรชีวิตแอปพลิเคชันที่ขับเคลื่อนด้วย LLM',
+ },
+ langfuse: {
+ title: 'แลงฟิวส์',
+ description: 'การติดตาม การประเมิน การจัดการพร้อมท์ และเมตริกเพื่อแก้ไขข้อบกพร่องและปรับปรุงแอปพลิเคชัน LLM ของคุณ',
+ },
+ inUse: 'ใช้งาน',
+ configProvider: {
+ title: 'กําหนดค่า',
+ placeholder: 'ป้อน {{key}} ของคุณ',
+ project: 'โครงการ',
+ publicKey: 'กุญแจสาธารณะ',
+ secretKey: 'กุญแจลับ',
+ viewDocsLink: 'ดูเอกสาร {{key}}',
+ removeConfirmTitle: 'ลบการกําหนดค่า {{key}} หรือไม่?',
+ removeConfirmContent: 'การกําหนดค่าปัจจุบันกําลังใช้งาน การลบออกจะเป็นการปิดคุณสมบัติการติดตาม',
+ },
+ },
+}
+
+export default translation
diff --git a/web/i18n/th-TH/billing.ts b/web/i18n/th-TH/billing.ts
new file mode 100644
index 0000000000..abe82754b4
--- /dev/null
+++ b/web/i18n/th-TH/billing.ts
@@ -0,0 +1,118 @@
+const translation = {
+ currentPlan: 'แผนปัจจุบัน',
+ upgradeBtn: {
+ plain: 'แผนการอัปเกรด',
+ encourage: 'อัปเกรดเดี๋ยวนี้',
+ encourageShort: 'อัพ เกรด',
+ },
+ viewBilling: 'จัดการการเรียกเก็บเงินและการสมัครใช้งาน',
+ buyPermissionDeniedTip: 'โปรดติดต่อผู้ดูแลระบบองค์กรของคุณเพื่อสมัครสมาชิก',
+ plansCommon: {
+ title: 'เลือกแผนบริการที่เหมาะกับคุณ',
+ yearlyTip: 'รับฟรี 2 เดือนโดยสมัครสมาชิกรายปี!',
+ mostPopular: 'แห่ง',
+ planRange: {
+ monthly: 'รายเดือน',
+ yearly: 'รายปี',
+ },
+ month: 'เดือน',
+ year: 'ปี',
+ save: 'ประหยัด',
+ free: 'ฟรี',
+ currentPlan: 'แผนปัจจุบัน',
+ contractSales: 'ติดต่อฝ่ายขาย',
+ contractOwner: 'ติดต่อผู้จัดการทีม',
+ startForFree: 'เริ่มฟรี',
+ getStartedWith: 'เริ่มต้นใช้งาน',
+ contactSales: 'ติดต่อฝ่ายขาย',
+ talkToSales: 'พูดคุยกับฝ่ายขาย',
+ modelProviders: 'ผู้ให้บริการโมเดล',
+ teamMembers: 'สมาชิกในทีม',
+ annotationQuota: 'โควต้าคําอธิบายประกอบ',
+ buildApps: 'สร้างแอพ',
+ vectorSpace: 'พื้นที่เวกเตอร์',
+ vectorSpaceBillingTooltip: 'แต่ละ 1MB สามารถจัดเก็บข้อมูลแบบเวกเตอร์ได้ประมาณ 1.2 ล้านอักขระ (โดยประมาณโดยใช้ OpenAI Embeddings แตกต่างกันไปตามรุ่น)',
+ vectorSpaceTooltip: 'Vector Space เป็นระบบหน่วยความจําระยะยาวที่จําเป็นสําหรับ LLM ในการทําความเข้าใจข้อมูลของคุณ',
+ documentsUploadQuota: 'โควต้าการอัปโหลดเอกสาร',
+ documentProcessingPriority: 'ลําดับความสําคัญในการประมวลผลเอกสาร',
+ documentProcessingPriorityTip: 'สําหรับลําดับความสําคัญในการประมวลผลเอกสารที่สูงขึ้น โปรดอัปเกรดแผนของคุณ',
+ documentProcessingPriorityUpgrade: 'ประมวลผลข้อมูลได้มากขึ้นด้วยความแม่นยําที่สูงขึ้นด้วยความเร็วที่เร็วขึ้น',
+ priority: {
+ 'standard': 'มาตรฐาน',
+ 'priority': 'สำคัญ',
+ 'top-priority': 'ลําดับความสําคัญสูงสุด',
+ },
+ logsHistory: 'ประวัติการบันทึก',
+ customTools: 'เครื่องมือที่กําหนดเอง',
+ unavailable: 'ไม่',
+ days: 'วัน',
+ unlimited: 'จำกัด',
+ support: 'สนับสนุน',
+ supportItems: {
+ communityForums: 'ฟอรัมชุมชน',
+ emailSupport: 'การสนับสนุนทางอีเมล',
+ priorityEmail: 'การสนับสนุนทางอีเมลและแชทลําดับความสําคัญ',
+ logoChange: 'การเปลี่ยนโลโก้',
+ SSOAuthentication: 'การตรวจสอบสิทธิ์ SSO',
+ personalizedSupport: 'การสนับสนุนส่วนบุคคล',
+ dedicatedAPISupport: 'รองรับ API เฉพาะ',
+ customIntegration: 'การผสานรวมและการสนับสนุนแบบกําหนดเอง',
+ ragAPIRequest: 'คําขอ RAG API',
+ bulkUpload: 'อัปโหลดเอกสารจํานวนมาก',
+ agentMode: 'โหมดตัวแทน',
+ workflow: 'เวิร์กโฟลว์',
+ llmLoadingBalancing: 'โหลดบาลานซ์ LLM',
+ llmLoadingBalancingTooltip: 'เพิ่มคีย์ API หลายคีย์ให้กับโมเดล โดยข้ามขีดจํากัดอัตรา API ได้อย่างมีประสิทธิภาพ',
+ },
+ comingSoon: 'เร็ว ๆ นี้',
+ member: 'สมาชิก',
+ memberAfter: 'สมาชิก',
+ messageRequest: {
+ title: 'เครดิตข้อความ',
+ tooltip: 'โควต้าการเรียกใช้ข้อความสําหรับแผนต่างๆ โดยใช้โมเดล OpenAI (ยกเว้น gpt4) ข้อความที่เกินขีดจํากัดจะใช้คีย์ OpenAI API ของคุณ',
+ },
+ annotatedResponse: {
+ title: 'ขีดจํากัดโควต้าคําอธิบายประกอบ',
+ tooltip: 'การแก้ไขและคําอธิบายประกอบการตอบกลับด้วยตนเองให้ความสามารถในการตอบคําถามคุณภาพสูงที่ปรับแต่งได้สําหรับแอป (ใช้ได้เฉพาะในแอปแชท)',
+ },
+ ragAPIRequestTooltip: 'หมายถึงจํานวนการเรียก API ที่เรียกใช้เฉพาะความสามารถในการประมวลผลฐานความรู้ของ Dify',
+ receiptInfo: 'เฉพาะเจ้าของทีมและผู้ดูแลทีมเท่านั้นที่สามารถสมัครสมาชิกและดูข้อมูลการเรียกเก็บเงินได้',
+ },
+ plans: {
+ sandbox: {
+ name: 'กระบะทราย',
+ description: 'ทดลองใช้ GPT ฟรี 200 ครั้ง',
+ includesTitle: 'มี:',
+ },
+ professional: {
+ name: 'มืออาชีพ',
+ description: 'สําหรับบุคคลและทีมขนาดเล็กเพื่อปลดล็อกพลังงานมากขึ้นในราคาย่อมเยา',
+ includesTitle: 'ทุกอย่างในแผนฟรี รวมถึง:',
+ },
+ team: {
+ name: 'ทีม',
+ description: 'ทํางานร่วมกันอย่างไร้ขีดจํากัดและเพลิดเพลินไปกับประสิทธิภาพระดับสูงสุด',
+ includesTitle: 'ทุกอย่างในแผน Professional รวมถึง:',
+ },
+ enterprise: {
+ name: 'กิจการ',
+ description: 'รับความสามารถและการสนับสนุนเต็มรูปแบบสําหรับระบบที่สําคัญต่อภารกิจขนาดใหญ่',
+ includesTitle: 'ทุกอย่างในแผนทีม รวมถึง:',
+ },
+ },
+ vectorSpace: {
+ fullTip: 'เวกเตอร์สเปซเต็ม',
+ fullSolution: 'อัปเกรดแผนของคุณเพื่อเพิ่มพื้นที่',
+ },
+ apps: {
+ fullTipLine1: 'อัปเกรดแผนของคุณเป็น',
+ fullTipLine2: 'สร้างแอปเพิ่มเติม',
+ },
+ annotatedResponse: {
+ fullTipLine1: 'อัปเกรดแผนของคุณเป็น',
+ fullTipLine2: 'ใส่คําอธิบายประกอบการสนทนาเพิ่มเติม',
+ quotaTitle: 'โควต้าตอบกลับคําอธิบายประกอบ',
+ },
+}
+
+export default translation
diff --git a/web/i18n/th-TH/common.ts b/web/i18n/th-TH/common.ts
new file mode 100644
index 0000000000..82eddae723
--- /dev/null
+++ b/web/i18n/th-TH/common.ts
@@ -0,0 +1,598 @@
+const translation = {
+ api: {
+ success: 'ความสําเร็จ',
+ actionSuccess: 'การดําเนินการสําเร็จ',
+ saved: 'บันทึก',
+ create: 'สร้าง',
+ remove: 'ถูก เอา ออก',
+ },
+ operation: {
+ create: 'สร้าง',
+ confirm: 'ยืนยัน',
+ cancel: 'ยกเลิก',
+ clear: 'ใส',
+ save: 'ประหยัด',
+ saveAndEnable: 'บันทึกและเปิดใช้งาน',
+ edit: 'แก้ไข',
+ add: 'เพิ่ม',
+ added: 'เพิ่ม',
+ refresh: 'เริ่มใหม่',
+ reset: 'รี เซ็ต',
+ search: 'ค้น',
+ change: 'เปลี่ยน',
+ remove: 'ถอด',
+ send: 'ส่ง',
+ copy: 'ลอก',
+ lineBreak: 'ตัวแบ่งบรรทัด',
+ sure: 'ฉันแน่ใจ',
+ download: 'ดาวน์โหลด',
+ delete: 'ลบ',
+ settings: 'การตั้งค่า',
+ setup: 'ตั้ง ค่า',
+ getForFree: 'รับฟรี',
+ reload: 'โหลด',
+ ok: 'ตกลง, ได้',
+ log: 'ซุง',
+ learnMore: 'ศึกษาเพิ่มเติม',
+ params: 'พารามิเตอร์',
+ duplicate: 'สำเนา',
+ rename: 'ตั้งชื่อใหม่',
+ audioSourceUnavailable: 'AudioSource ไม่พร้อมใช้งาน',
+ copyImage: 'คัดลอกรูปภาพ',
+ zoomOut: 'ซูมออก',
+ zoomIn: 'ซูมเข้า',
+ openInNewTab: 'เปิดในแท็บใหม่',
+ },
+ errorMsg: {
+ fieldRequired: '{{field}} เป็นสิ่งจําเป็น',
+ urlError: 'url ควรขึ้นต้นด้วย http:// หรือ https://',
+ },
+ placeholder: {
+ input: 'กรุณากรอก',
+ select: 'กรุณาเลือก',
+ },
+ voice: {
+ language: {
+ zhHans: 'จีน',
+ zhHant: 'ภาษาจีนตัวเต็ม',
+ enUS: 'อังกฤษ',
+ deDE: 'เยอรมัน',
+ frFR: 'ฝรั่งเศส',
+ esES: 'สเปน',
+ itIT: 'อิตาลี',
+ thTH: 'ไทย',
+ idID: 'อินโดนีเซีย',
+ jaJP: 'ญี่ปุ่น',
+ koKR: 'เกาหลี',
+ ptBR: 'โปรตุเกส',
+ ruRU: 'รัสเซีย',
+ ukUA: 'ยูเครน',
+ viVN: 'เวียดนาม',
+ plPL: 'โปแลนด์',
+ roRO: 'โรมาเนีย',
+ hiIN: 'ฮินดี',
+ trTR: 'ตุรกี',
+ faIR: 'ภาษาเปอร์เซีย',
+ },
+ },
+ unit: {
+ char: 'รถ ถัง',
+ },
+ actionMsg: {
+ noModification: 'ไม่มีการดัดแปลงในขณะนี้',
+ modifiedSuccessfully: 'แก้ไขสําเร็จแล้ว',
+ modifiedUnsuccessfully: 'แก้ไขไม่สําเร็จ',
+ copySuccessfully: 'คัดลอกสําเร็จแล้ว',
+ paySucceeded: 'การชําระเงินสําเร็จ',
+ payCancelled: 'ยกเลิกการชําระเงิน',
+ generatedSuccessfully: 'สร้างสําเร็จ',
+ generatedUnsuccessfully: 'สร้างไม่สําเร็จ',
+ },
+ model: {
+ params: {
+ temperature: 'อุณหภูมิ',
+ temperatureTip: 'ควบคุมการสุ่ม: การลดระดับส่งผลให้การสุ่มเสร็จน้อยลง เมื่ออุณหภูมิเข้าใกล้ศูนย์แบบจําลองจะกลายเป็นการกําหนดและซ้ําซาก',
+ top_p: 'ท็อป P',
+ top_pTip: 'ควบคุมความหลากหลายผ่านการสุ่มตัวอย่างนิวเคลียส: 0.5 หมายถึงครึ่งหนึ่งของตัวเลือกที่ถ่วงน้ําหนักความน่าจะเป็นทั้งหมดได้รับการพิจารณา',
+ presence_penalty: 'บทลงโทษการแสดงตน',
+ presence_penaltyTip: 'จะลงโทษโทเค็นใหม่เท่าใดโดยพิจารณาจากว่าโทเค็นเหล่านั้นปรากฏในข้อความหรือไม่\nเพิ่มโอกาสของโมเดลในการพูดคุยเกี่ยวกับหัวข้อใหม่',
+ frequency_penalty: 'บทลงโทษความถี่',
+ frequency_penaltyTip: 'จะลงโทษโทเค็นใหม่เท่าใดตามความถี่ที่มีอยู่ในข้อความจนถึงตอนนี้\nลดโอกาสของโมเดลที่จะทําซ้ําบรรทัดเดิมแบบคําต่อคํา',
+ max_tokens: 'โทเค็นสูงสุด',
+ max_tokensTip: 'ใช้เพื่อจํากัดความยาวสูงสุดของการตอบกลับเป็นโทเค็น \nค่าที่ใหญ่ขึ้นอาจจํากัดพื้นที่ที่เหลือสําหรับคําพร้อมท์ บันทึกการแชท และความรู้ \nขอแนะนําให้ตั้งค่าต่ํากว่าสองในสาม\nGPT-4-1106-preview, GPT-4-Vision-Preview โทเค็นสูงสุด (อินพุต 128K เอาต์พุต 4K)',
+ maxTokenSettingTip: 'การตั้งค่าโทเค็นสูงสุดของคุณสูง ซึ่งอาจจํากัดพื้นที่สําหรับข้อความแจ้ง แบบสอบถาม และข้อมูล พิจารณาตั้งค่าให้ต่ํากว่า 2/3',
+ setToCurrentModelMaxTokenTip: 'โทเค็นสูงสุดได้รับการอัปเดตเป็นโทเค็นสูงสุด 80% ของรุ่นปัจจุบัน {{maxToken}}',
+ stop_sequences: 'หยุดลําดับ',
+ stop_sequencesTip: 'สูงสุดสี่ลําดับที่ API จะหยุดสร้างโทเค็นเพิ่มเติม ข้อความที่ส่งคืนจะไม่มีลําดับการหยุด',
+ stop_sequencesPlaceholder: 'ป้อนลําดับแล้วกด Tab',
+ },
+ tone: {
+ Creative: 'สร้างสรรค์',
+ Balanced: 'สมดุล',
+ Precise: 'ถูกต้อง',
+ Custom: 'ธรรมเนียม',
+ },
+ addMoreModel: 'ไปที่การตั้งค่าเพื่อเพิ่มรุ่นเพิ่มเติม',
+ },
+ menus: {
+ status: 'Beta',
+ explore: 'สํารวจ',
+ apps: 'เรียน',
+ plugins: 'ปลั๊กอิน',
+ pluginsTips: 'รวมปลั๊กอินของบุคคลที่สามหรือสร้างปลั๊กอิน AI ที่เข้ากันได้กับ ChatGPT',
+ datasets: 'ความรู้',
+ datasetsTips: 'เร็ว ๆ นี้: นําเข้าข้อมูลข้อความของคุณเองหรือเขียนข้อมูลแบบเรียลไทม์ผ่าน Webhook เพื่อปรับปรุงบริบท LLM',
+ newApp: 'แอพใหม่',
+ newDataset: 'สร้างความรู้',
+ tools: 'เครื่อง มือ',
+ },
+ userProfile: {
+ settings: 'การตั้งค่า',
+ emailSupport: 'การสนับสนุนทางอีเมล',
+ workspace: 'พื้นที่',
+ createWorkspace: 'สร้างพื้นที่ทํางาน',
+ helpCenter: 'วิธีใช้',
+ communityFeedback: 'การตอบสนอง',
+ roadmap: 'แผนงาน',
+ community: 'ชุมชน',
+ about: 'ประมาณ',
+ logout: 'ออกจากระบบ',
+ },
+ settings: {
+ accountGroup: 'ทั่วไป',
+ workplaceGroup: 'พื้นที่',
+ account: 'บัญชีของฉัน',
+ members: 'สมาชิก',
+ billing: 'เรียก เก็บ เงิน',
+ integrations: 'บูรณาการ',
+ language: 'ภาษา',
+ provider: 'ผู้ให้บริการโมเดล',
+ dataSource: 'แหล่งข้อมูล',
+ plugin: 'ปลั๊กอิน',
+ apiBasedExtension: 'ส่วนขยาย API',
+ },
+ account: {
+ account: 'บัญชี',
+ myAccount: 'บัญชีของฉัน',
+ studio: 'Dify สตูดิโอ',
+ avatar: 'อวตาร',
+ name: 'ชื่อ',
+ email: 'อีเมล',
+ password: 'รหัสผ่าน',
+ passwordTip: 'คุณสามารถตั้งรหัสผ่านถาวรได้หากคุณไม่ต้องการใช้รหัสเข้าสู่ระบบชั่วคราว',
+ setPassword: 'ตั้งรหัสผ่าน',
+ resetPassword: 'รีเซ็ตรหัสผ่าน',
+ currentPassword: 'รหัสผ่านปัจจุบัน',
+ newPassword: 'รหัสผ่านใหม่',
+ confirmPassword: 'ยืนยันรหัสผ่าน',
+ notEqual: 'รหัสผ่านสองรหัสผ่านแตกต่างกัน',
+ langGeniusAccount: 'บัญชี Dify',
+ langGeniusAccountTip: 'บัญชี Dify และข้อมูลผู้ใช้ที่เกี่ยวข้อง',
+ editName: 'แก้ไขชื่อ',
+ showAppLength: 'แสดง {{length}} แอป',
+ delete: 'ลบบัญชี',
+ deleteTip: 'การลบบัญชีของคุณจะเป็นการลบข้อมูลทั้งหมดของคุณอย่างถาวรและไม่สามารถกู้คืนได้',
+ deleteConfirmTip: 'เพื่อยืนยัน โปรดส่งข้อมูลต่อไปนี้จากอีเมลที่ลงทะเบียนไว้ที่',
+ },
+ members: {
+ team: 'ทีม',
+ invite: 'เพิ่ม',
+ name: 'ชื่อ',
+ lastActive: 'ใช้งานล่าสุด',
+ role: 'บทบาท',
+ pending: 'รอ ',
+ owner: 'เจ้าของ',
+ admin: 'ผู้ดูแลระบบ',
+ adminTip: 'สามารถสร้างแอพและจัดการการตั้งค่าทีมได้',
+ normal: 'ปกติ',
+ normalTip: 'ใช้ได้เฉพาะแอพ สร้างแอพไม่ได้',
+ builder: 'ผู้สร้าง',
+ builderTip: 'สามารถสร้างและแก้ไขแอปของตัวเองได้',
+ editor: 'บรรณาธิการ',
+ editorTip: 'สามารถสร้างและแก้ไขแอปได้',
+ datasetOperator: 'ผู้ดูแลระบบความรู้',
+ datasetOperatorTip: 'สามารถจัดการฐานความรู้ได้เท่านั้น',
+ inviteTeamMember: 'เพิ่มสมาชิกในทีม',
+ inviteTeamMemberTip: 'พวกเขาสามารถเข้าถึงข้อมูลทีมของคุณได้โดยตรงหลังจากลงชื่อเข้าใช้',
+ email: 'อีเมล',
+ emailInvalid: 'รูปแบบอีเมลไม่ถูกต้อง',
+ emailPlaceholder: 'กรุณากรอกอีเมล',
+ sendInvite: 'ส่งคําเชิญ',
+ invitedAsRole: 'ได้รับเชิญให้เป็นผู้ใช้ {{role}}',
+ invitationSent: 'ส่งคําเชิญแล้ว',
+ invitationSentTip: 'ส่งคําเชิญแล้ว และพวกเขาสามารถลงชื่อเข้าใช้ Dify เพื่อเข้าถึงข้อมูลทีมของคุณได้',
+ invitationLink: 'ลิงค์คําเชิญ',
+ failedInvitationEmails: 'ผู้ใช้ด้านล่างไม่ได้รับเชิญสําเร็จ',
+ ok: 'ตกลง, ได้',
+ removeFromTeam: 'ลบออกจากทีม',
+ removeFromTeamTip: 'จะลบการเข้าถึงของทีม',
+ setAdmin: 'ตั้งเป็นผู้ดูแลระบบ',
+ setMember: 'ตั้งเป็นสมาชิกสามัญ',
+ setBuilder: 'ตั้งเป็นผู้สร้าง',
+ setEditor: 'ตั้งค่าเป็นตัวแก้ไข',
+ disInvite: 'ยกเลิกคําเชิญ',
+ deleteMember: 'ลบสมาชิก',
+ you: '(คุณ)',
+ },
+ integrations: {
+ connected: 'เชื่อม ต่อ',
+ google: 'กูเกิล',
+ googleAccount: 'เข้าสู่ระบบด้วยบัญชี Google',
+ github: 'เกวบ',
+ githubAccount: 'เข้าสู่ระบบด้วยบัญชี GitHub',
+ connect: 'ติด',
+ },
+ language: {
+ displayLanguage: 'ภาษาที่แสดง',
+ timezone: 'เขตเวลา',
+ },
+ provider: {
+ apiKey: 'คีย์ API',
+ enterYourKey: 'ป้อนคีย์ API ของคุณที่นี่',
+ invalidKey: 'คีย์ OpenAI API ไม่ถูกต้อง',
+ validatedError: 'การตรวจสอบล้มเหลว:',
+ validating: 'กําลังตรวจสอบความถูกต้องของคีย์...',
+ saveFailed: 'บันทึกคีย์ API ล้มเหลว',
+ apiKeyExceedBill: 'คีย์ API นี้ไม่มีโควต้า โปรดอ่าน',
+ addKey: 'เพิ่มคีย์',
+ comingSoon: 'เร็ว ๆ นี้',
+ editKey: 'แก้ไข',
+ invalidApiKey: 'คีย์ API ไม่ถูกต้อง',
+ azure: {
+ apiBase: 'ฐาน API',
+ apiBasePlaceholder: 'URL ฐาน API ของปลายทาง Azure OpenAI ของคุณ',
+ apiKey: 'คีย์ API',
+ apiKeyPlaceholder: 'ป้อนคีย์ API ของคุณที่นี่',
+ helpTip: 'เรียนรู้บริการ Azure OpenAI',
+ },
+ openaiHosted: {
+ openaiHosted: 'โฮสต์ OpenAI',
+ onTrial: 'ทดลองใช้',
+ exhausted: 'โควต้าหมด',
+ desc: 'บริการโฮสติ้ง OpenAI ที่ให้บริการโดย Dify ช่วยให้คุณใช้โมเดลต่างๆ เช่น GPT-3.5 ก่อนที่โควต้าการทดลองใช้ของคุณจะหมด คุณจําเป็นต้องตั้งค่าผู้ให้บริการรุ่นอื่นๆ',
+ callTimes: 'เวลาโทร',
+ usedUp: 'โควต้าทดลองใช้หมด เพิ่มผู้ให้บริการโมเดลของตัวเอง',
+ useYourModel: 'ปัจจุบันใช้ผู้ให้บริการโมเดลของตัวเอง',
+ close: 'ปิด',
+ },
+ anthropicHosted: {
+ anthropicHosted: 'Claude มานุษยวิทยา',
+ onTrial: 'ทดลองใช้',
+ exhausted: 'โควต้าหมด',
+ desc: 'โมเดลที่ทรงพลังซึ่งเก่งในงานที่หลากหลายตั้งแต่บทสนทนาที่ซับซ้อนและการสร้างเนื้อหาที่สร้างสรรค์ไปจนถึงคําแนะนําโดยละเอียด',
+ callTimes: 'เวลาโทร',
+ usedUp: 'โควต้าทดลองใช้หมด เพิ่มผู้ให้บริการโมเดลของตัวเอง',
+ useYourModel: 'ปัจจุบันใช้ผู้ให้บริการโมเดลของตัวเอง',
+ close: 'ปิด',
+ },
+ anthropic: {
+ using: 'ความสามารถในการฝังกําลังใช้',
+ enableTip: 'ในการเปิดใช้งานโมเดล Anthropic คุณต้องผูกกับ OpenAI หรือ Azure OpenAI Service ก่อน',
+ notEnabled: 'ไม่ได้เปิดใช้งาน',
+ keyFrom: 'รับคีย์ API ของคุณจาก Anthropic',
+ },
+ encrypted: {
+ front: 'คีย์ API ของคุณจะถูกเข้ารหัสและจัดเก็บโดยใช้',
+ back: 'เทคโนโลยี ',
+ },
+ },
+ modelProvider: {
+ notConfigured: 'โมเดลระบบยังไม่ได้รับการกําหนดค่าอย่างสมบูรณ์ และฟังก์ชันบางอย่างอาจไม่พร้อมใช้งาน',
+ systemModelSettings: 'การตั้งค่ารุ่นระบบ',
+ systemModelSettingsLink: 'เหตุใดจึงจําเป็นต้องตั้งค่าโมเดลระบบ',
+ selectModel: 'เลือกรุ่นของคุณ',
+ setupModelFirst: 'โปรดตั้งค่าโมเดลของคุณก่อน',
+ systemReasoningModel: {
+ key: 'แบบจําลองการให้เหตุผลของระบบ',
+ tip: 'ตั้งค่าโมเดลการอนุมานเริ่มต้นที่จะใช้สําหรับการสร้างแอปพลิเคชัน ตลอดจนคุณลักษณะต่างๆ เช่น การสร้างชื่อบทสนทนาและคําแนะนําคําถามถัดไปจะใช้โมเดลการอนุมานเริ่มต้นด้วย',
+ },
+ embeddingModel: {
+ key: 'โมเดลการฝัง',
+ tip: 'ตั้งค่าโมเดลเริ่มต้นสําหรับการประมวลผลการฝังเอกสารของความรู้ ทั้งการดึงข้อมูลและการนําเข้าความรู้ใช้โมเดลการฝังนี้สําหรับการประมวลผลแบบเวกเตอร์ การสลับจะทําให้มิติเวกเตอร์ระหว่างความรู้ที่นําเข้าและคําถามไม่สอดคล้องกัน เพื่อหลีกเลี่ยงความล้มเหลวในการดึงข้อมูล โปรดอย่าเปลี่ยนรุ่นนี้ตามต้องการ',
+ required: 'จําเป็นต้องมีแบบจําลองการฝัง',
+ },
+ speechToTextModel: {
+ key: 'โมเดลคําพูดเป็นข้อความ',
+ tip: 'ตั้งค่าโมเดลเริ่มต้นสําหรับการป้อนข้อมูลคําพูดเป็นข้อความในการสนทนา',
+ },
+ ttsModel: {
+ key: 'โมเดลการแปลงข้อความเป็นคําพูด',
+ tip: 'ตั้งค่าโมเดลเริ่มต้นสําหรับการป้อนข้อมูลเป็นข้อความเป็นคําพูดในการสนทนา',
+ },
+ rerankModel: {
+ key: 'จัดอันดับโมเดลใหม่',
+ tip: 'โมเดล Rerank จะจัดลําดับรายการเอกสารผู้สมัครใหม่ตามการจับคู่ความหมายกับการสืบค้นของผู้ใช้ ซึ่งช่วยปรับปรุงผลลัพธ์ของการจัดอันดับความหมาย',
+ },
+ apiKey: 'คีย์ API',
+ quota: 'โควตา',
+ searchModel: 'ค้นหารุ่น',
+ noModelFound: 'ไม่พบแบบจําลองสําหรับ {{model}}',
+ models: 'รุ่น',
+ showMoreModelProvider: 'แสดงผู้ให้บริการรุ่นเพิ่มเติม',
+ selector: {
+ tip: 'รุ่นนี้ถูกลบออกแล้ว โปรดเพิ่มรุ่นหรือเลือกรุ่นอื่น',
+ emptyTip: 'ไม่มีรุ่นที่พร้อมใช้งาน',
+ emptySetting: 'โปรดไปที่การตั้งค่าเพื่อกําหนดค่า',
+ rerankTip: 'โปรดตั้งค่าโมเดล Rerank',
+ },
+ card: {
+ quota: 'โควตา',
+ onTrial: 'ทดลองใช้',
+ paid: 'จ่าย',
+ quotaExhausted: 'โควต้าหมด',
+ callTimes: 'เวลาโทร',
+ tokens: 'โท เค็น',
+ buyQuota: 'ซื้อโควต้า',
+ priorityUse: 'ลําดับความสําคัญในการใช้งาน',
+ removeKey: 'ลบคีย์ API',
+ tip: 'ลําดับความสําคัญจะได้รับจากโควต้าที่จ่าย โควต้าทดลองใช้จะถูกใช้หลังจากโควต้าที่จ่ายหมด',
+ },
+ item: {
+ deleteDesc: '{{modelName}} ถูกใช้เป็นแบบจําลองการให้เหตุผลของระบบ ฟังก์ชันบางอย่างจะไม่สามารถใช้งานได้หลังจากการลบออก กรุณายืนยัน',
+ freeQuota: 'โควต้าฟรี',
+ },
+ addApiKey: 'เพิ่มคีย์ API ของคุณ',
+ invalidApiKey: 'คีย์ API ไม่ถูกต้อง',
+ encrypted: {
+ front: 'คีย์ API ของคุณจะถูกเข้ารหัสและจัดเก็บโดยใช้',
+ back: 'เทคโนโลยี ',
+ },
+ freeQuota: {
+ howToEarn: 'วิธีรับ',
+ },
+ addMoreModelProvider: 'เพิ่มผู้ให้บริการโมเดลเพิ่มเติม',
+ addModel: 'เพิ่มรุ่น',
+ modelsNum: '{{num}} รุ่น',
+ showModels: 'แสดงโมเดล',
+ showModelsNum: 'แสดง {{num}} โมเดล',
+ collapse: 'ทรุด',
+ config: 'กําหนดค่า',
+ modelAndParameters: 'รุ่นและพารามิเตอร์',
+ model: 'แบบ',
+ featureSupported: 'รองรับ {{feature}}',
+ callTimes: 'เวลาโทร',
+ credits: 'เครดิตข้อความ',
+ buyQuota: 'ซื้อโควต้า',
+ getFreeTokens: 'รับโทเค็นฟรี',
+ priorityUsing: 'จัดลําดับความสําคัญของการใช้',
+ deprecated: 'เลิกใช้งานแล้ว',
+ confirmDelete: 'ยืนยันการลบ?',
+ quotaTip: 'โทเค็นฟรีที่เหลืออยู่',
+ loadPresets: 'โหลดค่าที่ตั้งไว้ล่วงหน้า',
+ parameters: 'พารามิเตอร์',
+ loadBalancing: 'โหลดบาลานซ์',
+ loadBalancingDescription: 'ลดแรงกดดันด้วยข้อมูลประจําตัวหลายชุด',
+ loadBalancingHeadline: 'โหลดบาลานซ์',
+ configLoadBalancing: 'กําหนดค่าโหลดบาลานซ์',
+ modelHasBeenDeprecated: 'โมเดลนี้เลิกใช้แล้ว',
+ providerManaged: 'จัดการผู้ให้บริการ',
+ providerManagedDescription: 'ใช้ข้อมูลประจําตัวชุดเดียวที่ผู้ให้บริการโมเดลให้มา',
+ defaultConfig: 'การกําหนดค่าเริ่มต้น',
+ apiKeyStatusNormal: 'สถานะ APIKey เป็นปกติ',
+ apiKeyRateLimit: 'ถึงขีดจํากัดอัตราแล้ว พร้อมใช้งานหลังจาก {{seconds}}s',
+ addConfig: 'เพิ่มการกําหนดค่า',
+ editConfig: 'แก้ไขการกําหนดค่า',
+ loadBalancingLeastKeyWarning: 'หากต้องการเปิดใช้งานการปรับสมดุลโหลด ต้องเปิดใช้งานคีย์อย่างน้อย 2 ปุ่ม',
+ loadBalancingInfo: 'ตามค่าเริ่มต้น การปรับสมดุลภาระงานจะใช้กลยุทธ์แบบ Round-robin หากเปิดใช้งานการจํากัดอัตรา จะมีการใช้ระยะเวลาคูลดาวน์ 1 นาที',
+ upgradeForLoadBalancing: 'อัปเกรดแผนของคุณเพื่อเปิดใช้งานการปรับสมดุลโหลด',
+ },
+ dataSource: {
+ add: 'เพิ่มแหล่งข้อมูล',
+ connect: 'ติด',
+ configure: 'กําหนดค่า',
+ notion: {
+ title: 'แนวคิด',
+ description: 'การใช้ Notion เป็นแหล่งข้อมูลสําหรับความรู้',
+ connectedWorkspace: 'พื้นที่ทํางานที่เชื่อมต่อ',
+ addWorkspace: 'เพิ่มพื้นที่ทํางาน',
+ connected: 'เชื่อม ต่อ',
+ disconnected: 'เชื่อม ต่อ',
+ changeAuthorizedPages: 'เปลี่ยนหน้าที่ได้รับอนุญาต',
+ pagesAuthorized: 'เพจที่ได้รับอนุญาต',
+ sync: 'ซิงค์',
+ remove: 'ถอด',
+ selector: {
+ pageSelected: 'หน้าที่เลือก',
+ searchPages: 'หน้าค้นหา...',
+ noSearchResult: 'ไม่มีผลการค้นหา',
+ addPages: 'เพิ่มหน้า',
+ preview: 'ดูตัวอย่าง',
+ },
+ },
+ website: {
+ title: 'เว็บไซต์',
+ description: 'นําเข้าเนื้อหาจากเว็บไซต์โดยใช้โปรแกรมรวบรวมข้อมูลเว็บ',
+ with: 'กับ',
+ configuredCrawlers: 'โปรแกรมรวบรวมข้อมูลที่กําหนดค่าไว้',
+ active: 'กระปรี้กระเปร่า',
+ inactive: 'เกียจคร้าน',
+ },
+ },
+ plugin: {
+ serpapi: {
+ apiKey: 'คีย์ API',
+ apiKeyPlaceholder: 'ป้อนคีย์ API ของคุณ',
+ keyFrom: 'รับคีย์ SerpAPI ของคุณจากหน้าบัญชี SerpAPI',
+ },
+ },
+ apiBasedExtension: {
+ title: 'ส่วนขยาย API ให้การจัดการ API แบบรวมศูนย์ ทําให้การกําหนดค่าง่ายขึ้นเพื่อให้ใช้งานได้ง่ายในแอปพลิเคชันของ Dify',
+ link: 'เรียนรู้วิธีพัฒนาส่วนขยาย API ของคุณเอง',
+ linkUrl: 'https://docs.dify.ai/features/extension/api_based_extension',
+ add: 'เพิ่มส่วนขยาย API',
+ selector: {
+ title: 'ส่วนขยาย API',
+ placeholder: 'โปรดเลือกส่วนขยาย API',
+ manage: 'จัดการส่วนขยาย API',
+ },
+ modal: {
+ title: 'เพิ่มส่วนขยาย API',
+ editTitle: 'แก้ไขส่วนขยาย API',
+ name: {
+ title: 'ชื่อ',
+ placeholder: 'กรุณากรอกชื่อ',
+ },
+ apiEndpoint: {
+ title: 'ปลายทาง API',
+ placeholder: 'โปรดป้อนปลายทาง API',
+ },
+ apiKey: {
+ title: 'คีย์ API',
+ placeholder: 'กรุณาป้อนคีย์ API',
+ lengthError: 'ความยาวคีย์ API ต้องไม่น้อยกว่า 5 อักขระ',
+ },
+ },
+ type: 'ประเภท',
+ },
+ about: {
+ changeLog: 'บันทึกการเปลี่ยนแปลง',
+ updateNow: 'อัพเดตเดี๋ยวนี้',
+ nowAvailable: 'Dify {{version}} พร้อมใช้งานแล้ว',
+ latestAvailable: 'Dify {{version}} เป็นเวอร์ชันล่าสุดที่มี',
+ },
+ appMenus: {
+ overview: 'ตรวจ สอบ',
+ promptEng: 'ออเคสตร้า',
+ apiAccess: 'การเข้าถึง API',
+ logAndAnn: 'ล็อก & แอน.',
+ logs: 'บันทึก',
+ },
+ environment: {
+ testing: 'การทดสอบ',
+ development: 'พัฒนาการ',
+ },
+ appModes: {
+ completionApp: 'เครื่องกําเนิดข้อความ',
+ chatApp: 'แอพแชท',
+ },
+ datasetMenus: {
+ documents: 'เอกสาร',
+ hitTesting: 'การทดสอบการดึงข้อมูล',
+ settings: 'การตั้งค่า',
+ emptyTip: 'ความรู้ยังไม่ได้เชื่อมโยง โปรดไปที่แอปพลิเคชันหรือปลั๊กอินเพื่อเชื่อมโยงให้เสร็จสมบูรณ์',
+ viewDoc: 'ดูเอกสารประกอบ',
+ relatedApp: 'แอปที่เชื่อมโยง',
+ },
+ voiceInput: {
+ speaking: 'พูดเดี๋ยวนี้...',
+ converting: 'กําลังแปลงเป็นข้อความ...',
+ notAllow: 'ไม่ได้รับอนุญาตไมโครโฟน',
+ },
+ modelName: {
+ 'gpt-3.5-turbo': 'GPT-3.5-เทอร์โบ',
+ 'gpt-3.5-turbo-16k': 'GPT-3.5-เทอร์โบ-16K',
+ 'gpt-4': 'จีพีที-4',
+ 'gpt-4-32k': 'จีทีพี-4-32 เค',
+ 'text-davinci-003': 'ข้อความ-Davinci-003',
+ 'text-embedding-ada-002': 'การฝังข้อความ-ADA-002',
+ 'whisper-1': 'กระซิบ-1',
+ 'claude-instant-1': 'Claude-Instant',
+ 'claude-2': 'Claude-2 (โคลด-2)',
+ },
+ chat: {
+ renameConversation: 'เปลี่ยนชื่อการสนทนา',
+ conversationName: 'ชื่อการสนทนา',
+ conversationNamePlaceholder: 'กรุณากรอกชื่อการสนทนา',
+ conversationNameCanNotEmpty: 'ต้องมีชื่อการสนทนา',
+ citation: {
+ title: 'อ้าง อิง',
+ linkToDataset: 'ลิงค์สู่ความรู้',
+ characters: 'อักขระ:',
+ hitCount: 'จํานวนการดึงข้อมูล:',
+ vectorHash: 'แฮชเวกเตอร์:',
+ hitScore: 'คะแนนการดึงข้อมูล:',
+ },
+ inputPlaceholder: 'พูดคุยกับบอท',
+ },
+ promptEditor: {
+ placeholder: 'เขียนคําพร้อมท์ของคุณที่นี่ ป้อน \'{\' เพื่อแทรกตัวแปร ป้อน \'/\' เพื่อแทรกบล็อกเนื้อหาพร้อมท์',
+ context: {
+ item: {
+ title: 'บริบท',
+ desc: 'แทรกเทมเพลตบริบท',
+ },
+ modal: {
+ title: '{{num}} ความรู้ในบริบท',
+ add: 'เพิ่มบริบท',
+ footer: 'คุณสามารถจัดการบริบทได้ในส่วนบริบทด้านล่าง',
+ },
+ },
+ history: {
+ item: {
+ title: 'ประวัติการสนทนา',
+ desc: 'แทรกเทมเพลตข้อความในอดีต',
+ },
+ modal: {
+ title: 'ตัวอย่าง',
+ user: 'สวัสดี',
+ assistant: 'สวัสดี! ฉันจะช่วยคุณได้อย่างไรในวันนี้?',
+ edit: 'แก้ไขชื่อบทบาทการสนทนา',
+ },
+ },
+ variable: {
+ item: {
+ title: 'ตัวแปรและเครื่องมือภายนอก',
+ desc: 'แทรกตัวแปรและเครื่องมือภายนอก',
+ },
+ outputToolDisabledItem: {
+ title: 'ตัว แปร',
+ desc: 'แทรกตัวแปร',
+ },
+ modal: {
+ add: 'ตัวแปรใหม่',
+ addTool: 'เครื่องมือใหม่',
+ },
+ },
+ query: {
+ item: {
+ title: 'สอบถาม',
+ desc: 'แทรกเทมเพลตแบบสอบถามของผู้ใช้',
+ },
+ },
+ existed: 'มีอยู่แล้วในพรอมต์',
+ },
+ imageUploader: {
+ uploadFromComputer: 'อัปโหลดจากคอมพิวเตอร์',
+ uploadFromComputerReadError: 'การอ่านภาพล้มเหลว โปรดลองอีกครั้ง',
+ uploadFromComputerUploadError: 'อัปโหลดรูปภาพล้มเหลว โปรดอัปโหลดอีกครั้ง',
+ uploadFromComputerLimit: 'อัปโหลดรูปภาพต้องไม่เกิน {{size}} MB',
+ pasteImageLink: 'วางลิงก์รูปภาพ',
+ pasteImageLinkInputPlaceholder: 'วางลิงค์รูปภาพที่นี่',
+ pasteImageLinkInvalid: 'ลิงก์รูปภาพไม่ถูกต้อง',
+ imageUpload: 'อัปโหลดรูปภาพ',
+ },
+ fileUploader: {
+ uploadFromComputer: 'อัปโหลดในเครื่อง',
+ pasteFileLink: 'วางลิงค์ไฟล์',
+ pasteFileLinkInputPlaceholder: 'ป้อน URL...',
+ uploadFromComputerReadError: 'การอ่านไฟล์ล้มเหลว โปรดลองอีกครั้ง',
+ uploadFromComputerUploadError: 'อัปโหลดไฟล์ล้มเหลว โปรดอัปโหลดอีกครั้ง',
+ uploadFromComputerLimit: 'อัปโหลด {{type}} ต้องไม่เกิน {{size}}',
+ pasteFileLinkInvalid: 'ลิงก์ไฟล์ไม่ถูกต้อง',
+ fileExtensionNotSupport: 'ไม่รองรับนามสกุลไฟล์',
+ },
+ tag: {
+ placeholder: 'แท็กทั้งหมด',
+ addNew: 'เพิ่มแท็กใหม่',
+ noTag: 'ไม่มีแท็ก',
+ noTagYet: 'ยังไม่มีแท็ก',
+ addTag: 'เพิ่มแท็ก',
+ editTag: 'แก้ไขแท็ก',
+ manageTags: 'จัดการแท็ก',
+ selectorPlaceholder: 'พิมพ์เพื่อค้นหาหรือสร้าง',
+ create: 'สร้าง',
+ delete: 'ลบแท็ก',
+ deleteTip: 'แท็กกําลังถูกใช้ลบออก?',
+ created: 'สร้างแท็กสําเร็จ',
+ failed: 'การสร้างแท็กล้มเหลว',
+ },
+ license: {
+ expiring: 'หมดอายุในหนึ่งวัน',
+ expiring_plural: 'หมดอายุใน {{count}} วัน',
+ },
+ pagination: {
+ perPage: 'รายการต่อหน้า',
+ },
+}
+
+export default translation
diff --git a/web/i18n/th-TH/custom.ts b/web/i18n/th-TH/custom.ts
new file mode 100644
index 0000000000..dfed65c9a0
--- /dev/null
+++ b/web/i18n/th-TH/custom.ts
@@ -0,0 +1,30 @@
+const translation = {
+ custom: 'กำหนด เอง',
+ upgradeTip: {
+ prefix: 'อัปเกรดแผนของคุณเป็น',
+ suffix: 'ปรับแต่งแบรนด์ของคุณ',
+ },
+ webapp: {
+ title: 'ปรับแต่งแบรนด์ WebApp',
+ removeBrand: 'ลบ ขับเคลื่อนโดย Dify',
+ changeLogo: 'การเปลี่ยนแปลงที่ขับเคลื่อนโดยภาพลักษณ์ของแบรนด์',
+ changeLogoTip: 'รูปแบบ SVG หรือ PNG ที่มีขนาดขั้นต่ํา 40x40px',
+ },
+ app: {
+ title: 'ปรับแต่งแบรนด์ส่วนหัวของแอป',
+ changeLogoTip: 'รูปแบบ SVG หรือ PNG ที่มีขนาดขั้นต่ํา 80x80px',
+ },
+ upload: 'อัปโหลด',
+ uploading: 'อัป โหลด',
+ uploadedFail: 'อัปโหลดรูปภาพล้มเหลวโปรดอัปโหลดใหม่',
+ change: 'เปลี่ยน',
+ apply: 'ใช้',
+ restore: 'คืนค่าเริ่มต้น',
+ customize: {
+ contactUs: 'ติดต่อเรา',
+ prefix: 'หากต้องการปรับแต่งโลโก้แบรนด์ภายในแอพ โปรด',
+ suffix: 'เพื่ออัปเกรดเป็นรุ่น Enterprise',
+ },
+}
+
+export default translation
diff --git a/web/i18n/th-TH/dataset-creation.ts b/web/i18n/th-TH/dataset-creation.ts
new file mode 100644
index 0000000000..850477c568
--- /dev/null
+++ b/web/i18n/th-TH/dataset-creation.ts
@@ -0,0 +1,176 @@
+const translation = {
+ steps: {
+ header: {
+ creation: 'สร้างความรู้',
+ update: 'เพิ่มข้อมูล',
+ },
+ one: 'เลือกแหล่งข้อมูล',
+ two: 'การประมวลผลและการทําความสะอาดข้อความล่วงหน้า',
+ three: 'ดําเนินการและเสร็จสิ้น',
+ },
+ error: {
+ unavailable: 'ความรู้นี้ไม่มี',
+ },
+ firecrawl: {
+ configFirecrawl: 'กําหนดค่า 🔥Firecrawl',
+ apiKeyPlaceholder: 'คีย์ API จาก firecrawl.dev',
+ getApiKeyLinkText: 'รับคีย์ API ของคุณจาก firecrawl.dev',
+ },
+ jinaReader: {
+ configJinaReader: 'กําหนดค่า Jina Reader',
+ apiKeyPlaceholder: 'คีย์ API จาก jina.ai',
+ getApiKeyLinkText: 'รับคีย์ API ฟรีได้ที่ jina.ai',
+ },
+ stepOne: {
+ filePreview: 'ตัวอย่างไฟล์',
+ pagePreview: 'ตัวอย่างหน้า',
+ dataSourceType: {
+ file: 'นําเข้าจากไฟล์',
+ notion: 'ซิงค์จาก Notion',
+ web: 'ซิงค์จากเว็บไซต์',
+ },
+ uploader: {
+ title: 'อัปโหลดไฟล์',
+ button: 'ลากและวางไฟล์ หรือ',
+ browse: 'เล็ม',
+ tip: 'รองรับ {{supportTypes}} สูงสุด {{size}}MB แต่ละตัว',
+ validation: {
+ typeError: 'ไม่รองรับประเภทไฟล์',
+ size: 'ไฟล์ใหญ่เกินไป สูงสุดคือ {{size}}MB',
+ count: 'ไม่รองรับหลายไฟล์',
+ filesNumber: 'คุณถึงขีดจํากัดการอัปโหลดเป็นชุดของ {{filesNumber}} แล้ว',
+ },
+ cancel: 'ยกเลิก',
+ change: 'เปลี่ยน',
+ failed: 'อัปโหลดล้มเหลว',
+ },
+ notionSyncTitle: 'ความคิดไม่เชื่อมต่อ',
+ notionSyncTip: 'ในการซิงค์กับ Notion ต้องสร้างการเชื่อมต่อกับ Notion ก่อน',
+ connect: 'ไปที่เชื่อมต่อ',
+ button: 'ต่อไป',
+ emptyDatasetCreation: 'ฉันต้องการสร้างความรู้ที่ว่างเปล่า',
+ modal: {
+ title: 'สร้างความรู้ที่ว่างเปล่า',
+ tip: 'ความรู้ที่ว่างเปล่าจะไม่มีเอกสาร และคุณสามารถอัปโหลดเอกสารได้ตลอดเวลา',
+ input: 'ชื่อความรู้',
+ placeholder: 'กรุณาป้อน',
+ nameNotEmpty: 'ชื่อต้องไม่ว่างเปล่า',
+ nameLengthInvalid: 'ชื่อต้องมีอักขระระหว่าง 1 ถึง 40 ตัว',
+ cancelButton: 'ยกเลิก',
+ confirmButton: 'สร้าง',
+ failed: 'การสร้างล้มเหลว',
+ },
+ website: {
+ chooseProvider: 'เลือกผู้ให้บริการ',
+ fireCrawlNotConfigured: 'ไม่ได้กําหนดค่า Firecrawl',
+ fireCrawlNotConfiguredDescription: 'กําหนดค่า Firecrawl ด้วยคีย์ API เพื่อใช้งาน',
+ jinaReaderNotConfigured: 'ไม่ได้กําหนดค่า Jina Reader',
+ jinaReaderNotConfiguredDescription: 'ตั้งค่า Jina Reader โดยป้อนคีย์ API ฟรีเพื่อเข้าถึง',
+ configure: 'กําหนดค่า',
+ run: 'วิ่ง',
+ firecrawlTitle: 'แยกเนื้อหาเว็บด้วย 🔥Firecrawl',
+ firecrawlDoc: 'เอกสาร Firecrawl',
+ firecrawlDocLink: 'https://docs.dify.ai/guides/knowledge-base/sync-from-website',
+ jinaReaderTitle: 'แปลงทั้งไซต์เป็น Markdown',
+ jinaReaderDoc: 'เรียนรู้เพิ่มเติมเกี่ยวกับ Jina Reader',
+ jinaReaderDocLink: 'https://jina.ai/reader',
+ useSitemap: 'ใช้แผนผังเว็บไซต์',
+ useSitemapTooltip: 'ทําตามแผนผังเว็บไซต์เพื่อรวบรวมข้อมูลเว็บไซต์ หากไม่เป็นเช่นนั้น Jina Reader จะรวบรวมข้อมูลซ้ําๆ ตามความเกี่ยวข้องของหน้า โดยให้หน้าเว็บน้อยลงแต่มีคุณภาพสูงกว่า',
+ options: 'ตัวเลือก',
+ crawlSubPage: 'รวบรวมข้อมูลหน้าย่อย',
+ limit: 'เขต',
+ maxDepth: 'ความลึกสูงสุด',
+ excludePaths: 'ยกเว้นเส้นทาง',
+ includeOnlyPaths: 'รวมเฉพาะเส้นทาง',
+ extractOnlyMainContent: 'แยกเฉพาะเนื้อหาหลัก (ไม่มีส่วนหัว การนําทาง ส่วนท้าย ฯลฯ)',
+ exceptionErrorTitle: 'มีข้อยกเว้นเกิดขึ้นขณะรันงานการรวบรวมข้อมูล:',
+ unknownError: 'ข้อผิดพลาดที่ไม่รู้จัก',
+ totalPageScraped: 'จํานวนหน้าที่ขูด:',
+ selectAll: 'เลือกทั้งหมด',
+ resetAll: 'รีเซ็ตทั้งหมด',
+ scrapTimeInfo: 'ขูด {{total}} หน้าทั้งหมดภายใน {{time}}s',
+ preview: 'ดูตัวอย่าง',
+ maxDepthTooltip: 'ความลึกสูงสุดในการรวบรวมข้อมูลเมื่อเทียบกับ URL ที่ป้อน ความลึก 0 เพียงแค่ขูดหน้าของ URL ที่ป้อนความลึก 1 ขูด url และทุกอย่างหลังจาก enteredURL + หนึ่ง / เป็นต้น',
+ },
+ },
+ stepTwo: {
+ segmentation: 'การตั้งค่าก้อน',
+ auto: 'อัตโนมัติ',
+ autoDescription: 'ตั้งค่ากฎการแบ่งกลุ่มและการประมวลผลล่วงหน้าโดยอัตโนมัติ ขอแนะนําให้ผู้ใช้ที่ไม่คุ้นเคยเลือกสิ่งนี้',
+ custom: 'ธรรมเนียม',
+ customDescription: 'ปรับแต่งกฎของกลุ่ม ความยาวของกลุ่ม และกฎการประมวลผลล่วงหน้า ฯลฯ',
+ separator: 'ตัวคั่น',
+ separatorTip: 'ตัวคั่นคืออักขระที่ใช้ในการแยกข้อความ \\n\\n และ \\n เป็นตัวคั่นที่ใช้กันทั่วไปสําหรับการแยกย่อหน้าและบรรทัด เมื่อรวมกับเครื่องหมายจุลภาค (\\n\\n,\\n) ย่อหน้าจะถูกแบ่งตามบรรทัดเมื่อเกินความยาวของก้อนสูงสุด คุณยังสามารถใช้ตัวคั่นพิเศษที่กําหนดโดยตัวคุณเอง (เช่น ***)',
+ separatorPlaceholder: '\\n\\n สําหรับแยกย่อหน้า \\n สําหรับแยกเส้น',
+ maxLength: 'ความยาวก้อนสูงสุด',
+ maxLengthCheck: 'ความยาวก้อนสูงสุดควรน้อยกว่า 4000',
+ overlap: 'การทับซ้อนกันของก้อน',
+ overlapTip: 'การตั้งค่าการทับซ้อนกันของกลุ่มสามารถรักษาความเกี่ยวข้องทางความหมายระหว่างกันได้ ขอแนะนําให้ตั้งค่า 10%-25% ของขนาดก้อนสูงสุด',
+ overlapCheck: 'การทับซ้อนกันของก้อนไม่ควรใหญ่กว่าความยาวของก้อนสูงสุด',
+ rules: 'กฎการประมวลผลข้อความล่วงหน้า',
+ removeExtraSpaces: 'แทนที่ช่องว่างบรรทัดใหม่และแท็บที่ต่อเนื่องกัน',
+ removeUrlEmails: 'ลบ URL และที่อยู่อีเมลทั้งหมด',
+ removeStopwords: 'ลบคําหยุด เช่น "a", "an", "the"',
+ preview: 'ยืนยันและดูตัวอย่าง',
+ reset: 'รี เซ็ต',
+ indexMode: 'โหมดดัชนี',
+ qualified: 'คุณภาพสูง',
+ recommend: 'แนะนำ',
+ qualifiedTip: 'เรียกใช้อินเทอร์เฟซการฝังระบบเริ่มต้นสําหรับการประมวลผลเพื่อให้มีความแม่นยําสูงขึ้นเมื่อผู้ใช้สืบค้น',
+ warning: 'โปรดตั้งค่าคีย์ API ของผู้ให้บริการโมเดลก่อน',
+ click: 'ไปที่การตั้งค่า',
+ economical: 'ประหยัด',
+ economicalTip: 'ใช้เอ็นจิ้นเวกเตอร์ออฟไลน์ ดัชนีคําหลัก ฯลฯ เพื่อลดความแม่นยําโดยไม่ต้องใช้โทเค็น',
+ QATitle: 'การแบ่งกลุ่มในรูปแบบคําถามและคําตอบ',
+ QATip: 'การเปิดใช้งานตัวเลือกนี้จะใช้โทเค็นมากขึ้น',
+ QALanguage: 'แบ่งกลุ่มโดยใช้',
+ estimateCost: 'กะ',
+ estimateSegment: 'ก้อนโดยประมาณ',
+ segmentCount: 'ก้อน',
+ calculating: 'คำนวณ ',
+ fileSource: 'เตรียมเอกสารล่วงหน้า',
+ notionSource: 'หน้าประมวลผลล่วงหน้า',
+ websiteSource: 'เว็บไซต์ Preprocess',
+ other: 'และอื่น ๆ',
+ fileUnit: 'แฟ้ม',
+ notionUnit: 'หน้า',
+ webpageUnit: 'หน้า',
+ previousStep: 'ขั้นตอนก่อนหน้า',
+ nextStep: 'บันทึกและประมวลผล',
+ save: 'บันทึกและประมวลผล',
+ cancel: 'ยกเลิก',
+ sideTipTitle: 'ทําไมต้องแบ่งกลุ่มและเตรียมกระบวนการล่วงหน้า?',
+ sideTipP1: 'เมื่อประมวลผลข้อมูลข้อความ การแบ่งกลุ่มและการทําความสะอาดเป็นขั้นตอนการประมวลผลล่วงหน้าที่สําคัญสองขั้นตอน',
+ sideTipP2: 'การแบ่งส่วนจะแบ่งข้อความยาวออกเป็นย่อหน้าเพื่อให้โมเดลเข้าใจได้ดีขึ้น สิ่งนี้ช่วยปรับปรุงคุณภาพและความเกี่ยวข้องของผลลัพธ์ของแบบจําลอง',
+ sideTipP3: 'การทําความสะอาดจะลบอักขระและรูปแบบที่ไม่จําเป็น ทําให้ความรู้สะอาดขึ้นและง่ายต่อการแยกวิเคราะห์',
+ sideTipP4: 'การแบ่งส่วนและการทําความสะอาดที่เหมาะสมช่วยปรับปรุงประสิทธิภาพของโมเดล ให้ผลลัพธ์ที่แม่นยําและมีคุณค่ามากขึ้น',
+ previewTitle: 'ดูตัวอย่าง',
+ previewTitleButton: 'ดูตัวอย่าง',
+ previewButton: 'การเปลี่ยนไปใช้รูปแบบ Q&A',
+ previewSwitchTipStart: 'การแสดงตัวอย่างส่วนปัจจุบันอยู่ในรูปแบบข้อความ การเปลี่ยนไปใช้ตัวอย่างรูปแบบคําถามและคําตอบจะ',
+ previewSwitchTipEnd: 'ใช้โทเค็นเพิ่มเติม',
+ characters: 'อักขระ',
+ indexSettingTip: 'หากต้องการเปลี่ยนวิธีการจัดทําดัชนีและรูปแบบการฝัง โปรดไปที่',
+ retrievalSettingTip: 'หากต้องการเปลี่ยนการตั้งค่าการดึงข้อมูล โปรดไปที่',
+ datasetSettingLink: 'การตั้งค่าความรู้',
+ },
+ stepThree: {
+ creationTitle: '🎉 สร้างความรู้',
+ creationContent: 'เราตั้งชื่อความรู้โดยอัตโนมัติ คุณสามารถแก้ไขได้ตลอดเวลา',
+ label: 'ชื่อความรู้',
+ additionTitle: '🎉 อัปโหลดเอกสาร',
+ additionP1: 'เอกสารถูกอัปโหลดไปยังความรู้แล้ว',
+ additionP2: 'คุณสามารถค้นหาได้ในรายการเอกสารของความรู้',
+ stop: 'หยุดการประมวลผล',
+ resume: 'ดําเนินการต่อ',
+ navTo: 'ไปที่เอกสาร',
+ sideTipTitle: 'อะไรต่อไป',
+ sideTipContent: 'หลังจากที่เอกสารเสร็จสิ้นการจัดทําดัชนี ความรู้สามารถรวมเข้ากับแอปพลิเคชันเป็นบริบท คุณสามารถค้นหาการตั้งค่าบริบทในหน้าการประสานงานพร้อมท์ คุณยังสามารถสร้างเป็นปลั๊กอินการจัดทําดัชนี ChatGPT อิสระสําหรับการเผยแพร่',
+ modelTitle: 'คุณแน่ใจหรือว่าจะหยุดฝัง?',
+ modelContent: 'หากคุณต้องการดําเนินการต่อในภายหลัง คุณจะดําเนินการต่อจากจุดที่คุณค้างไว้',
+ modelButtonConfirm: 'ยืนยัน',
+ modelButtonCancel: 'ยกเลิก',
+ },
+}
+
+export default translation
diff --git a/web/i18n/th-TH/dataset-documents.ts b/web/i18n/th-TH/dataset-documents.ts
new file mode 100644
index 0000000000..411b8b7c8b
--- /dev/null
+++ b/web/i18n/th-TH/dataset-documents.ts
@@ -0,0 +1,351 @@
+const translation = {
+ list: {
+ title: 'เอกสาร',
+ desc: 'ไฟล์ทั้งหมดของความรู้จะแสดงที่นี่ และความรู้ทั้งหมดสามารถเชื่อมโยงกับการอ้างอิง Dify หรือจัดทําดัชนีผ่านปลั๊กอินแชท',
+ addFile: 'เพิ่มไฟล์',
+ addPages: 'เพิ่มหน้า',
+ addUrl: 'เพิ่ม URL',
+ table: {
+ header: {
+ fileName: 'ชื่อไฟล์',
+ words: 'นิรุกติ',
+ hitCount: 'จํานวนการดึงข้อมูล',
+ uploadTime: 'เวลาอัปโหลด',
+ status: 'สถานะ',
+ action: 'การเคลื่อนไหว',
+ },
+ rename: 'ตั้งชื่อใหม่',
+ name: 'ชื่อ',
+ },
+ action: {
+ uploadFile: 'อัปโหลดไฟล์ใหม่',
+ settings: 'การตั้งค่ากลุ่ม',
+ addButton: 'เพิ่มก้อน',
+ add: 'เพิ่มก้อน',
+ batchAdd: 'เพิ่มแบทช์',
+ archive: 'หอจดหมายเหตุ',
+ unarchive: 'ยกเลิกการเก็บถาวร',
+ delete: 'ลบ',
+ enableWarning: 'ไม่สามารถเปิดใช้งานไฟล์ที่เก็บถาวรได้',
+ sync: 'ซิงค์',
+ },
+ index: {
+ enable: 'เปิด',
+ disable: 'เก',
+ all: 'ทั้งหมด',
+ enableTip: 'สามารถจัดทําดัชนีไฟล์ได้',
+ disableTip: 'ไม่สามารถจัดทําดัชนีไฟล์',
+ },
+ status: {
+ queuing: 'จัด คิว',
+ indexing: 'ดัชนี',
+ paused: 'หยุดชั่วคราว',
+ error: 'ความผิดพลาด',
+ available: 'มีอยู่',
+ enabled: 'เปิด',
+ disabled: 'พิการ',
+ archived: 'เก็บ ถาวร',
+ },
+ empty: {
+ title: 'ยังไม่มีเอกสาร',
+ upload: {
+ tip: 'คุณสามารถอัปโหลดไฟล์ ซิงค์จากเว็บไซต์ หรือจากแอป webb เช่น Notion, GitHub เป็นต้น',
+ },
+ sync: {
+ tip: 'Dify จะดาวน์โหลดไฟล์จาก Notion ของคุณเป็นระยะและดําเนินการให้เสร็จสมบูรณ์',
+ },
+ },
+ delete: {
+ title: 'คุณแน่ใจหรือเปล่า ลบ?',
+ content: 'หากคุณต้องการดําเนินการต่อในภายหลัง คุณจะดําเนินการต่อจากจุดที่คุณค้างไว้',
+ },
+ batchModal: {
+ title: 'แบทช์เพิ่มก้อน',
+ csvUploadTitle: 'ลากและวางไฟล์ CSV ของคุณที่นี่ หรือ',
+ browse: 'เล็ม',
+ tip: 'ไฟล์ CSV ต้องสอดคล้องกับโครงสร้างต่อไปนี้:',
+ question: 'ปัญหา',
+ answer: 'ตอบ',
+ contentTitle: 'เนื้อหาก้อน',
+ content: 'เนื้อหา',
+ template: 'ดาวน์โหลดเทมเพลตที่นี่',
+ cancel: 'ยกเลิก',
+ run: 'เรียกใช้แบทช์',
+ runError: 'เรียกใช้ชุดงานล้มเหลว',
+ processing: 'ในการประมวลผลแบบแบทช์',
+ completed: 'นําเข้าเสร็จสมบูรณ์',
+ error: 'ข้อผิดพลาดในการนําเข้า',
+ ok: 'ตกลง, ได้',
+ },
+ },
+ metadata: {
+ title: 'ข้อมูลเมตา',
+ desc: 'การติดฉลากข้อมูลเมตาสําหรับเอกสารช่วยให้ AI สามารถเข้าถึงเอกสารได้ทันท่วงทีและเปิดเผยแหล่งที่มาของการอ้างอิงสําหรับผู้ใช้',
+ dateTimeFormat: 'มมมม ด, ป hh:mm A',
+ docTypeSelectTitle: 'โปรดเลือกประเภทเอกสาร',
+ docTypeChangeTitle: 'เปลี่ยนชนิดเอกสาร',
+ docTypeSelectWarning: 'หากชนิดเอกสารมีการเปลี่ยนแปลง ข้อมูลเมตาที่เติมในขณะนี้จะไม่ถูกเก็บรักษาไว้อีกต่อไป',
+ firstMetaAction: 'ไปกันเถอะ',
+ placeholder: {
+ add: 'เพิ่ม',
+ select: 'เลือก',
+ },
+ source: {
+ upload_file: 'อัปโหลดไฟล์',
+ notion: 'ซิงค์แบบฟอร์ม Notion',
+ github: 'แบบฟอร์มซิงค์ Github',
+ },
+ type: {
+ book: 'หนังสือ',
+ webPage: 'เว็บเพจ',
+ paper: 'กระดาษ',
+ socialMediaPost: 'โพสต์บนโซเชียลมีเดีย',
+ personalDocument: 'เอกสารส่วนตัว',
+ businessDocument: 'เอกสารทางธุรกิจ',
+ IMChat: 'แชท IM',
+ wikipediaEntry: 'รายการวิกิพีเดีย',
+ notion: 'ซิงค์แบบฟอร์ม Notion',
+ github: 'แบบฟอร์มซิงค์ Github',
+ technicalParameters: 'พารามิเตอร์ทางเทคนิค',
+ },
+ field: {
+ processRule: {
+ processDoc: 'เอกสารกระบวนการ',
+ segmentRule: 'กฎก้อน',
+ segmentLength: 'ความยาวของก้อน',
+ processClean: 'กระบวนการส่งข้อความที่สะอาด',
+ },
+ book: {
+ title: 'ชื่อเรื่อง',
+ language: 'ภาษา',
+ author: 'ผู้แต่ง',
+ publisher: 'ผู้พิมพ์',
+ publicationDate: 'วันที่ตีพิมพ์',
+ ISBN: 'ไอเอส',
+ category: 'ประเภท',
+ },
+ webPage: {
+ title: 'ชื่อเรื่อง',
+ url: 'URL',
+ language: 'ภาษา',
+ authorPublisher: 'ผู้เขียน/สํานักพิมพ์',
+ publishDate: 'วันที่เผยแพร่',
+ topicsKeywords: 'หัวข้อ/คําสําคัญ',
+ description: 'คำอธิบาย',
+ },
+ paper: {
+ title: 'ชื่อเรื่อง',
+ language: 'ภาษา',
+ author: 'ผู้แต่ง',
+ publishDate: 'วันที่เผยแพร่',
+ journalConferenceName: 'ชื่อวารสาร/การประชุม',
+ volumeIssuePage: 'ปริมาณ/ฉบับ/หน้า',
+ DOI: 'ดอย',
+ topicsKeywords: 'หัวข้อ/คําสําคัญ',
+ abstract: 'นามธรรม',
+ },
+ socialMediaPost: {
+ platform: 'แท่น',
+ authorUsername: 'ผู้เขียน/ชื่อผู้ใช้',
+ publishDate: 'วันที่เผยแพร่',
+ postURL: 'URL โพสต์',
+ topicsTags: 'หัวข้อ/แท็ก',
+ },
+ personalDocument: {
+ title: 'ชื่อเรื่อง',
+ author: 'ผู้แต่ง',
+ creationDate: 'วันที่สร้าง',
+ lastModifiedDate: 'วันที่แก้ไขล่าสุด',
+ documentType: 'ประเภทเอกสาร',
+ tagsCategory: 'แท็ก/หมวดหมู่',
+ },
+ businessDocument: {
+ title: 'ชื่อเรื่อง',
+ author: 'ผู้แต่ง',
+ creationDate: 'วันที่สร้าง',
+ lastModifiedDate: 'วันที่แก้ไขล่าสุด',
+ documentType: 'ประเภทเอกสาร',
+ departmentTeam: 'แผนก/ทีม',
+ },
+ IMChat: {
+ chatPlatform: 'แพลตฟอร์มแชท',
+ chatPartiesGroupName: 'ปาร์ตี้แชท/ชื่อกลุ่ม',
+ participants: 'คน',
+ startDate: 'วันที่เริ่มต้น',
+ endDate: 'วันที่สิ้นสุด',
+ topicsKeywords: 'หัวข้อ/คําสําคัญ',
+ fileType: 'ประเภทไฟล์',
+ },
+ wikipediaEntry: {
+ title: 'ชื่อเรื่อง',
+ language: 'ภาษา',
+ webpageURL: 'URL ของหน้าเว็บ',
+ editorContributor: 'บรรณาธิการ/ผู้ร่วมให้ข้อมูล',
+ lastEditDate: 'วันที่แก้ไขล่าสุด',
+ summaryIntroduction: 'สรุป/บทนํา',
+ },
+ notion: {
+ title: 'ชื่อเรื่อง',
+ language: 'ภาษา',
+ author: 'ผู้แต่ง',
+ createdTime: 'เวลาที่สร้างขึ้น',
+ lastModifiedTime: 'เวลาแก้ไขล่าสุด',
+ url: 'URL',
+ tag: 'ฉลาก',
+ description: 'คำอธิบาย',
+ },
+ github: {
+ repoName: 'ชื่อ Repo',
+ repoDesc: 'คําอธิบาย Repo',
+ repoOwner: 'เจ้าของ Repo',
+ fileName: 'ชื่อไฟล์',
+ filePath: 'เส้นทางไฟล์',
+ programmingLang: 'ภาษาโปรแกรม',
+ url: 'URL',
+ license: 'ใบอนุญาต',
+ lastCommitTime: 'เวลาคอมมิตล่าสุด',
+ lastCommitAuthor: 'ผู้เขียนคอมมิตล่าสุด',
+ },
+ originInfo: {
+ originalFilename: 'ชื่อไฟล์เดิม',
+ originalFileSize: 'ขนาดไฟล์ต้นฉบับ',
+ uploadDate: 'วันที่อัปโหลด',
+ lastUpdateDate: 'วันที่อัปเดตล่าสุด',
+ source: 'ที่มา',
+ },
+ technicalParameters: {
+ segmentSpecification: 'ข้อมูลจําเพาะของก้อน',
+ segmentLength: 'ความยาวของก้อน',
+ avgParagraphLength: 'ความยาวย่อหน้าเฉลี่ย',
+ paragraphs: 'ย่อหน้า',
+ hitCount: 'จํานวนการดึงข้อมูล',
+ embeddingTime: 'เวลาฝัง',
+ embeddedSpend: 'การใช้จ่ายแบบฝังตัว',
+ },
+ },
+ languageMap: {
+ zh: 'จีน',
+ en: 'อังกฤษ',
+ es: 'สเปน',
+ fr: 'ฝรั่งเศส',
+ de: 'เยอรมัน',
+ ja: 'ญี่ปุ่น',
+ ko: 'เกาหลี',
+ ru: 'รัสเซีย',
+ ar: 'อาหรับ',
+ pt: 'โปรตุเกส',
+ it: 'อิตาลี',
+ nl: 'ดัทช์',
+ pl: 'โปแลนด์',
+ sv: 'สวีเดน',
+ tr: 'ตุรกี',
+ he: 'เฮบรู',
+ hi: 'ฮินดี',
+ da: 'เดนมาร์ก',
+ fi: 'ฟินแลนด์',
+ no: 'นอร์เวย์',
+ hu: 'ฮังการี',
+ el: 'กรีก',
+ cs: 'เชก',
+ th: 'ไทย',
+ id: 'อินโดนีเซีย',
+ },
+ categoryMap: {
+ book: {
+ fiction: 'นิยาย',
+ biography: 'ชีวประวัติ',
+ history: 'ประวัติศาสตร์',
+ science: 'วิทยาศาสตร์',
+ technology: 'เทคโนโลยี',
+ education: 'การศึกษา',
+ philosophy: 'ปรัชญา',
+ religion: 'ศาสนา',
+ socialSciences: 'สังคมศาสตร์',
+ art: 'ศิลป์',
+ travel: 'เดินทาง',
+ health: 'สุขภาพ',
+ selfHelp: 'ช่วยเหลือตนเอง',
+ businessEconomics: 'ธุรกิจเศรษฐศาสตร์',
+ cooking: 'การหุงต้ม',
+ childrenYoungAdults: 'เด็กผู้ใหญ่',
+ comicsGraphicNovels: 'การ์ตูนนิยายกราฟิก',
+ poetry: 'กวีนิพนธ์',
+ drama: 'ละคร',
+ other: 'อื่นๆ',
+ },
+ personalDoc: {
+ notes: 'หมาย เหตุ',
+ blogDraft: 'ร่างบล็อก',
+ diary: 'ไดอารี่',
+ researchReport: 'รายงานการวิจัย',
+ bookExcerpt: 'ข้อความที่ตัดตอนมาจากหนังสือ',
+ schedule: 'ตาราง',
+ list: 'รายการ',
+ projectOverview: 'ภาพรวมโครงการ',
+ photoCollection: 'คอลเลกชันภาพถ่าย',
+ creativeWriting: 'การเขียนเชิงสร้างสรรค์',
+ codeSnippet: 'ข้อมูลโค้ด',
+ designDraft: 'ร่างการออกแบบ',
+ personalResume: 'ประวัติส่วนตัว',
+ other: 'อื่นๆ',
+ },
+ businessDoc: {
+ meetingMinutes: 'รายงานการประชุม',
+ researchReport: 'รายงานการวิจัย',
+ proposal: 'ข้อเสนอ',
+ employeeHandbook: 'คู่มือพนักงาน',
+ trainingMaterials: 'สื่อการฝึกอบรม',
+ requirementsDocument: 'เอกสารข้อกําหนด',
+ designDocument: 'เอกสารการออกแบบ',
+ productSpecification: 'คุณสมบัติของผลิตภัณฑ์',
+ financialReport: 'รายงานทางการเงิน',
+ marketAnalysis: 'การวิเคราะห์ตลาด',
+ projectPlan: 'แผนโครงการ',
+ teamStructure: 'โครงสร้างทีม',
+ policiesProcedures: 'นโยบายและขั้นตอน',
+ contractsAgreements: 'สัญญาและข้อตกลง',
+ emailCorrespondence: 'การติดต่อทางอีเมล',
+ other: 'อื่นๆ',
+ },
+ },
+ },
+ embedding: {
+ processing: 'การประมวลผลการฝัง...',
+ paused: 'การฝังหยุดชั่วคราว',
+ completed: 'การฝังเสร็จสมบูรณ์',
+ error: 'ข้อผิดพลาดในการฝัง',
+ docName: 'เอกสารการประมวลผลล่วงหน้า',
+ mode: 'กฎการแบ่งกลุ่ม',
+ segmentLength: 'ความยาวของก้อน',
+ textCleaning: 'การกําหนดข้อความล่วงหน้าและการทําความสะอาด',
+ segments: 'ย่อหน้า',
+ highQuality: 'โหมดคุณภาพสูง',
+ economy: 'โหมดประหยัด',
+ estimate: 'การบริโภคโดยประมาณ',
+ stop: 'หยุดการประมวลผล',
+ resume: 'ดําเนินการต่อ',
+ automatic: 'อัตโนมัติ',
+ custom: 'ธรรมเนียม',
+ previewTip: 'การแสดงตัวอย่างย่อหน้าจะพร้อมใช้งานหลังจากการฝังเสร็จสิ้น',
+ },
+ segment: {
+ paragraphs: 'ย่อหน้า',
+ keywords: 'คําสําคัญ',
+ addKeyWord: 'เพิ่มคําสําคัญ',
+ keywordError: 'ความยาวสูงสุดของคําหลักคือ 20',
+ characters: 'อักขระ',
+ hitCount: 'จํานวนการดึงข้อมูล',
+ vectorHash: 'แฮชเวกเตอร์:',
+ questionPlaceholder: 'เพิ่มคําถามที่นี่',
+ questionEmpty: 'คําถามไม่สามารถว่างเปล่าได้',
+ answerPlaceholder: 'เพิ่มคําตอบที่นี่',
+ answerEmpty: 'คําตอบไม่สามารถว่างเปล่าได้',
+ contentPlaceholder: 'เพิ่มเนื้อหาที่นี่',
+ contentEmpty: 'เนื้อหาไม่สามารถว่างเปล่าได้',
+ newTextSegment: 'เซ็กเมนต์ข้อความใหม่',
+ newQaSegment: 'ส่วนถาม & คําตอบใหม่',
+ delete: 'ลบส่วนนี้ ?',
+ },
+}
+
+export default translation
diff --git a/web/i18n/th-TH/dataset-hit-testing.ts b/web/i18n/th-TH/dataset-hit-testing.ts
new file mode 100644
index 0000000000..f5c692a191
--- /dev/null
+++ b/web/i18n/th-TH/dataset-hit-testing.ts
@@ -0,0 +1,30 @@
+const translation = {
+ title: 'การทดสอบการดึงข้อมูล',
+ settingTitle: 'การตั้งค่าการดึงข้อมูล',
+ desc: 'ทดสอบเอฟเฟกต์การตีของความรู้ตามข้อความแบบสอบถามที่กําหนด',
+ dateTimeFormat: 'MM/DD/YYYY hh:mm A',
+ recents: 'ล่าสุด',
+ table: {
+ header: {
+ source: 'ที่มา',
+ text: 'ข้อความ',
+ time: 'เวลา',
+ },
+ },
+ input: {
+ title: 'ข้อความต้นฉบับ',
+ placeholder: 'กรุณาป้อนข้อความแนะนําให้ใช้ประโยคประกาศสั้น ๆ',
+ countWarning: 'สูงสุด 200 อักขระ',
+ indexWarning: 'ความรู้คุณภาพสูงเท่านั้น',
+ testing: 'การทดสอบ',
+ },
+ hit: {
+ title: 'ย่อหน้าดึงข้อมูล',
+ emptyTip: 'ผลการทดสอบการดึงข้อมูลจะแสดงที่นี่',
+ },
+ noRecentTip: 'ไม่มีผลการค้นหาล่าสุดที่นี่',
+ viewChart: 'ดูแผนภูมิเวกเตอร์',
+ viewDetail: 'ดูรายละเอียด',
+}
+
+export default translation
diff --git a/web/i18n/th-TH/dataset-settings.ts b/web/i18n/th-TH/dataset-settings.ts
new file mode 100644
index 0000000000..2e49c95f9b
--- /dev/null
+++ b/web/i18n/th-TH/dataset-settings.ts
@@ -0,0 +1,38 @@
+const translation = {
+ title: 'การตั้งค่าความรู้',
+ desc: 'ที่นี่คุณสามารถแก้ไขคุณสมบัติและการตั้งค่าการดึงข้อมูลของความรู้นี้',
+ form: {
+ name: 'ชื่อความรู้',
+ namePlaceholder: 'กรุณากรอกชื่อความรู้',
+ nameError: 'ชื่อต้องไม่ว่างเปล่า',
+ desc: 'คําอธิบายความรู้',
+ descInfo: 'โปรดเขียนคําอธิบายข้อความที่ชัดเจนเพื่อร่างเนื้อหาของความรู้ คําอธิบายนี้จะใช้เป็นพื้นฐานสําหรับการจับคู่เมื่อเลือกจากความรู้หลายรายการเพื่อการอนุมาน',
+ descPlaceholder: 'อธิบายสิ่งที่อยู่ในความรู้นี้ (ไม่บังคับ)',
+ descWrite: 'เรียนรู้วิธีเขียนคําอธิบายความรู้ที่ดี',
+ permissions: 'สิทธิ์',
+ permissionsOnlyMe: 'ฉันเท่านั้น',
+ permissionsAllMember: 'สมาชิกในทีมทุกคน',
+ permissionsInvitedMembers: 'สมาชิกในทีมบางส่วน',
+ me: '(คุณ)',
+ indexMethod: 'วิธีการจัดทําดัชนี',
+ indexMethodHighQuality: 'คุณภาพสูง',
+ indexMethodHighQualityTip: 'เรียกใช้แบบจําลองการฝังตัวสําหรับการประมวลผลเพื่อให้มีความแม่นยําสูงขึ้นเมื่อผู้ใช้สืบค้น',
+ indexMethodEconomy: 'ประหยัด',
+ indexMethodEconomyTip: 'ใช้เอ็นจิ้นเวกเตอร์ออฟไลน์ ดัชนีคําหลัก ฯลฯ เพื่อลดความแม่นยําโดยไม่ต้องใช้โทเค็น',
+ embeddingModel: 'โมเดลการฝัง',
+ embeddingModelTip: 'เปลี่ยนรุ่นที่ฝังไว้ โปรดไปที่',
+ embeddingModelTipLink: 'การตั้งค่า',
+ retrievalSetting: {
+ title: 'การตั้งค่าการดึงข้อมูล',
+ learnMore: 'ศึกษาเพิ่มเติม',
+ description: 'เกี่ยวกับวิธีการดึงข้อมูล',
+ longDescription: 'เกี่ยวกับวิธีการดึงข้อมูล คุณสามารถเปลี่ยนแปลงได้ตลอดเวลาในการตั้งค่าความรู้',
+ },
+ externalKnowledgeAPI: 'API ความรู้ภายนอก',
+ externalKnowledgeID: 'ID ความรู้ภายนอก',
+ retrievalSettings: 'การตั้งค่าการดึงข้อมูล',
+ save: 'ประหยัด',
+ },
+}
+
+export default translation
diff --git a/web/i18n/th-TH/dataset.ts b/web/i18n/th-TH/dataset.ts
new file mode 100644
index 0000000000..f75ff462a6
--- /dev/null
+++ b/web/i18n/th-TH/dataset.ts
@@ -0,0 +1,150 @@
+const translation = {
+ knowledge: 'ความรู้',
+ externalTag: 'ภายนอก',
+ externalAPI: 'API ภายนอก',
+ externalAPIPanelTitle: 'API ความรู้ภายนอก',
+ externalKnowledgeId: 'ID ความรู้ภายนอก',
+ externalKnowledgeName: 'ชื่อความรู้ภายนอก',
+ externalKnowledgeDescription: 'คําอธิบายความรู้',
+ externalKnowledgeIdPlaceholder: 'โปรดป้อน Knowledge ID',
+ externalKnowledgeNamePlaceholder: 'โปรดป้อนชื่อฐานความรู้',
+ externalKnowledgeDescriptionPlaceholder: 'อธิบายสิ่งที่อยู่ในฐานความรู้นี้ (ไม่บังคับ)',
+ learnHowToWriteGoodKnowledgeDescription: 'เรียนรู้วิธีการเขียนคําอธิบายความรู้ที่ดี',
+ externalAPIPanelDescription: 'API ความรู้ภายนอกใช้เพื่อเชื่อมต่อกับฐานความรู้ภายนอก Dify และดึงความรู้จากฐานความรู้นั้น',
+ externalAPIPanelDocumentation: 'เรียนรู้วิธีสร้าง API ความรู้ภายนอก',
+ documentCount: 'เอกสาร',
+ wordCount: 'คํา k',
+ appCount: 'แอปที่เชื่อมโยง',
+ createDataset: 'สร้างความรู้',
+ createNewExternalAPI: 'สร้าง API ความรู้ภายนอกใหม่',
+ noExternalKnowledge: 'ยังไม่มี External Knowledge API คลิกที่นี่เพื่อสร้าง',
+ createExternalAPI: 'เพิ่ม API ความรู้ภายนอก',
+ editExternalAPIFormTitle: 'แก้ไข API ความรู้ภายนอก',
+ editExternalAPITooltipTitle: 'ความรู้ที่เชื่อมโยง',
+ editExternalAPIConfirmWarningContent: {
+ front: 'API ความรู้ภายนอกนี้เชื่อมโยงกับ',
+ end: 'ความรู้ภายนอกและการปรับเปลี่ยนนี้จะนําไปใช้กับพวกเขาทั้งหมด คุณแน่ใจหรือไม่ว่าต้องการบันทึกการเปลี่ยนแปลงนี้?',
+ },
+ editExternalAPIFormWarning: {
+ front: 'API ภายนอกนี้เชื่อมโยงกับ',
+ end: 'ความรู้ภายนอก',
+ },
+ deleteExternalAPIConfirmWarningContent: {
+ title: {
+ front: 'ลบ',
+ end: '?',
+ },
+ content: {
+ front: 'API ความรู้ภายนอกนี้เชื่อมโยงกับ',
+ end: 'ความรู้ภายนอก การลบ API นี้จะทําให้ API ทั้งหมดเป็นโมฆะ คุณแน่ใจหรือไม่ว่าต้องการลบ API นี้?',
+ },
+ noConnectionContent: 'คุณแน่ใจว่าจะลบ API นี้หรือไม่',
+ },
+ selectExternalKnowledgeAPI: {
+ placeholder: 'เลือก API ความรู้ภายนอก',
+ },
+ connectDataset: 'เชื่อมต่อกับฐานความรู้ภายนอก',
+ connectDatasetIntro: {
+ title: 'วิธีการเชื่อมต่อกับฐานความรู้ภายนอก',
+ content: {
+ front: 'เมื่อต้องการเชื่อมต่อกับฐานความรู้ภายนอก คุณต้องสร้าง API ภายนอกก่อน โปรดอ่านอย่างละเอียดและอ้างอิง',
+ link: 'ดูวิธีสร้าง API ภายนอก',
+ end: '. จากนั้นค้นหา Knowledge ID ที่เกี่ยวข้องและกรอกข้อมูลในแบบฟอร์มทางด้านซ้าย หากข้อมูลทั้งหมดถูกต้อง ข้อมูลจะข้ามไปยังการทดสอบการดึงข้อมูลในฐานความรู้โดยอัตโนมัติหลังจากคลิกปุ่มเชื่อมต่อ',
+ },
+ learnMore: 'ศึกษาเพิ่มเติม',
+ },
+ connectHelper: {
+ helper1: 'เชื่อมต่อกับฐานความรู้ภายนอกผ่าน API และ ID ฐานความรู้ ปัจจุบัน',
+ helper2: 'รองรับเฉพาะฟังก์ชันการดึงข้อมูล',
+ helper3: '. เราขอแนะนําให้คุณ',
+ helper4: 'อ่านเอกสารวิธีใช้',
+ helper5: 'ระมัดระวังก่อนใช้คุณสมบัตินี้',
+ },
+ createDatasetIntro: 'นําเข้าข้อมูลข้อความของคุณเองหรือเขียนข้อมูลแบบเรียลไทม์ผ่าน Webhook เพื่อปรับปรุงบริบท LLM',
+ deleteDatasetConfirmTitle: 'ลบความรู้นี้?',
+ deleteDatasetConfirmContent: 'การลบความรู้นั้นไม่สามารถย้อนกลับได้ ผู้ใช้จะไม่สามารถเข้าถึงความรู้ของคุณอีกต่อไป และการกําหนดค่าพร้อมท์และบันทึกทั้งหมดจะถูกลบอย่างถาวร',
+ datasetUsedByApp: 'ความรู้นี้ถูกใช้โดยบางแอป แอปจะไม่สามารถใช้ความรู้นี้ได้อีกต่อไป และการกําหนดค่าพร้อมท์และบันทึกทั้งหมดจะถูกลบอย่างถาวร',
+ datasetDeleted: 'ลบความรู้',
+ datasetDeleteFailed: 'ลบความรู้ไม่สําเร็จ',
+ didYouKnow: 'คุณรู้หรือไม่?',
+ intro1: 'ความรู้สามารถรวมเข้ากับแอปพลิเคชัน Dify ได้',
+ intro2: 'ตามบริบท',
+ intro3: ',',
+ intro4: 'หรือมัน',
+ intro5: 'สามารถสร้างได้',
+ intro6: 'เป็นปลั๊กอินดัชนี ChatGPT แบบสแตนด์อโลนเพื่อเผยแพร่',
+ unavailable: 'ไม่',
+ unavailableTip: 'โมเดลการฝังไม่พร้อมใช้งาน จําเป็นต้องกําหนดค่าโมเดลการฝังเริ่มต้น',
+ datasets: 'ความรู้',
+ datasetsApi: 'การเข้าถึง API',
+ externalKnowledgeForm: {
+ connect: 'ติด',
+ cancel: 'ยกเลิก',
+ },
+ externalAPIForm: {
+ name: 'ชื่อ',
+ endpoint: 'ปลายทาง API',
+ apiKey: 'คีย์ API',
+ save: 'ประหยัด',
+ cancel: 'ยกเลิก',
+ edit: 'แก้ไข',
+ encrypted: {
+ front: 'โทเค็น API ของคุณจะถูกเข้ารหัสและจัดเก็บโดยใช้',
+ end: 'เทคโนโลยี ',
+ },
+ },
+ retrieval: {
+ semantic_search: {
+ title: 'การค้นหาเวกเตอร์',
+ description: 'สร้างการฝังแบบสอบถามและค้นหาส่วนข้อความที่คล้ายกับการแสดงเวกเตอร์มากที่สุด',
+ },
+ full_text_search: {
+ title: 'การค้นหาข้อความแบบเต็ม',
+ description: 'จัดทําดัชนีคําศัพท์ทั้งหมดในเอกสาร เพื่อให้ผู้ใช้สามารถค้นหาคําศัพท์ใดก็ได้และดึงข้อความที่เกี่ยวข้องที่มีคําเหล่านั้น',
+ },
+ hybrid_search: {
+ title: 'การค้นหาแบบไฮบริด',
+ description: 'ดําเนินการค้นหาข้อความแบบเต็มและการค้นหาแบบเวกเตอร์พร้อมกันจัดอันดับใหม่เพื่อเลือกการจับคู่ที่ดีที่สุดสําหรับคําค้นหาของผู้ใช้ ผู้ใช้สามารถเลือกที่จะตั้งค่าน้ําหนักหรือกําหนดค่าเป็นโมเดล Rerank',
+ recommend: 'แนะนำ',
+ },
+ invertedIndex: {
+ title: 'ดัชนีกลับด้าน',
+ description: 'Inverted Index เป็นโครงสร้างที่ใช้สําหรับการดึงข้อมูลอย่างมีประสิทธิภาพ จัดเรียงตามคําศัพท์ แต่ละคําชี้ไปที่เอกสารหรือหน้าเว็บที่มีคําดังกล่าว',
+ },
+ change: 'เปลี่ยน',
+ changeRetrievalMethod: 'วิธีการเรียกดูการเปลี่ยนแปลง',
+ },
+ docsFailedNotice: 'เอกสารไม่สามารถจัดทําดัชนีได้',
+ retry: 'ลอง',
+ indexingTechnique: {
+ high_quality: 'สํานักงานใหญ่',
+ economy: 'อีโค',
+ },
+ indexingMethod: {
+ semantic_search: 'เวกเตอร์',
+ full_text_search: 'ข้อความฉบับเต็ม',
+ hybrid_search: 'พันธุ์ผสม',
+ invertedIndex: 'คว่ำ',
+ },
+ defaultRetrievalTip: 'การดึงข้อมูลหลายเส้นทางจะถูกใช้โดยค่าเริ่มต้น ความรู้จะถูกดึงมาจากฐานความรู้หลายแห่งแล้วจัดอันดับใหม่',
+ mixtureHighQualityAndEconomicTip: 'โมเดล Rerank จําเป็นสําหรับการผสมผสานระหว่างฐานความรู้คุณภาพสูงและประหยัด',
+ inconsistentEmbeddingModelTip: 'จําเป็นต้องมีแบบจําลอง Rerank หากแบบจําลองการฝังของฐานความรู้ที่เลือกไม่สอดคล้องกัน',
+ mixtureInternalAndExternalTip: 'โมเดล Rerank จําเป็นสําหรับการผสมผสานระหว่างความรู้ภายในและภายนอก',
+ allExternalTip: 'เมื่อใช้ความรู้ภายนอกเท่านั้น ผู้ใช้สามารถเลือกได้ว่าจะเปิดใช้งานโมเดล Rerank หรือไม่ หากไม่ได้เปิดใช้งาน ก้อนที่ดึงมาจะถูกจัดเรียงตามคะแนน เมื่อกลยุทธ์การดึงข้อมูลของฐานความรู้ที่แตกต่างกันไม่สอดคล้องกัน ก็จะไม่ถูกต้อง',
+ retrievalSettings: 'การตั้งค่าการดึงข้อมูล',
+ rerankSettings: 'การตั้งค่ารีไลน์',
+ weightedScore: {
+ title: 'คะแนนถ่วงน้ําหนัก',
+ description: 'กลยุทธ์การจัดอันดับใหม่นี้จะกําหนดว่าควรจัดลําดับความสําคัญของการจับคู่ความหมายหรือคีย์เวิร์ด',
+ semanticFirst: 'ความหมายก่อน',
+ keywordFirst: 'คีย์เวิร์ดก่อน',
+ customized: 'กำหนด เอง',
+ semantic: 'ความหมาย',
+ keyword: 'คำ',
+ },
+ nTo1RetrievalLegacy: 'การดึงข้อมูล N-to-1 จะเลิกใช้อย่างเป็นทางการตั้งแต่เดือนกันยายน ขอแนะนําให้ใช้การดึงข้อมูลหลายเส้นทางล่าสุดเพื่อให้ได้ผลลัพธ์ที่ดีขึ้น',
+ nTo1RetrievalLegacyLink: 'ศึกษาเพิ่มเติม',
+ nTo1RetrievalLegacyLinkText: 'การดึงข้อมูล N-to-1 จะเลิกใช้อย่างเป็นทางการในเดือนกันยายน',
+}
+
+export default translation
diff --git a/web/i18n/th-TH/explore.ts b/web/i18n/th-TH/explore.ts
new file mode 100644
index 0000000000..4f2ac0ee43
--- /dev/null
+++ b/web/i18n/th-TH/explore.ts
@@ -0,0 +1,41 @@
+const translation = {
+ title: 'สํารวจ',
+ sidebar: {
+ discovery: 'การค้นพบ',
+ chat: 'สนทนา',
+ workspace: 'พื้นที่',
+ action: {
+ pin: 'เข็มกลัด',
+ unpin: 'ปลดหมุด',
+ rename: 'ตั้งชื่อใหม่',
+ delete: 'ลบ',
+ },
+ delete: {
+ title: 'ลบแอป',
+ content: 'คุณแน่ใจหรือไม่ว่าต้องการลบแอปนี้?',
+ },
+ },
+ apps: {
+ title: 'สํารวจแอพโดย Dify',
+ description: 'ใช้แอปเทมเพลตเหล่านี้ทันทีหรือปรับแต่งแอปของคุณเองตามเทมเพลต',
+ allCategories: 'แนะ นำ',
+ },
+ appCard: {
+ addToWorkspace: 'เพิ่มไปยังพื้นที่ทํางาน',
+ customize: 'ปรับแต่ง',
+ },
+ appCustomize: {
+ title: 'สร้างแอปจาก {{name}}',
+ subTitle: 'ไอคอนและชื่อแอป',
+ nameRequired: 'ต้องใช้ชื่อแอป',
+ },
+ category: {
+ Assistant: 'ผู้ช่วย',
+ Writing: 'การเขียน',
+ Translate: 'แปล',
+ Programming: 'โปรแกรม',
+ HR: 'ชั่วโมง',
+ },
+}
+
+export default translation
diff --git a/web/i18n/th-TH/layout.ts b/web/i18n/th-TH/layout.ts
new file mode 100644
index 0000000000..e2410dd34b
--- /dev/null
+++ b/web/i18n/th-TH/layout.ts
@@ -0,0 +1,3 @@
+const translation = {}
+
+export default translation
diff --git a/web/i18n/th-TH/login.ts b/web/i18n/th-TH/login.ts
new file mode 100644
index 0000000000..75f569d3a2
--- /dev/null
+++ b/web/i18n/th-TH/login.ts
@@ -0,0 +1,109 @@
+const translation = {
+ pageTitle: 'เฮ้ มาเริ่มกันเลย!',
+ welcome: '👋 ยินดีต้อนรับสู่ Dify โปรดเข้าสู่ระบบเพื่อดําเนินการต่อ',
+ email: 'ที่อยู่อีเมล',
+ emailPlaceholder: 'อีเมลของคุณ',
+ password: 'รหัสผ่าน',
+ passwordPlaceholder: 'รหัสผ่านของคุณ',
+ name: 'ชื่อผู้ใช้',
+ namePlaceholder: 'ชื่อผู้ใช้ของคุณ',
+ forget: 'ลืมรหัสผ่านใช่ไหม',
+ signBtn: 'เข้าสู่ระบบ',
+ continueWithCode: 'ดําเนินการต่อด้วยรหัส',
+ sendVerificationCode: 'ส่งรหัสยืนยัน',
+ usePassword: 'ใช้รหัสผ่าน',
+ useVerificationCode: 'ใช้รหัสยืนยัน',
+ or: 'หรือ',
+ installBtn: 'สถาปนา',
+ setAdminAccount: 'การตั้งค่าบัญชีผู้ดูแลระบบ',
+ setAdminAccountDesc: 'สิทธิ์สูงสุดสําหรับบัญชีผู้ดูแลระบบ ซึ่งสามารถใช้สร้างแอปพลิเคชันและจัดการผู้ให้บริการ LLM เป็นต้น',
+ createAndSignIn: 'สร้างและลงชื่อเข้าใช้',
+ oneMoreStep: 'อีกหนึ่งขั้นตอน',
+ createSample: 'จากข้อมูลนี้ เราจะสร้างแอปพลิเคชันตัวอย่างสําหรับคุณ',
+ invitationCode: 'รหัสเชิญ',
+ invitationCodePlaceholder: 'รหัสเชิญของคุณ',
+ interfaceLanguage: 'ภาษาอินเทอร์เฟซ',
+ timezone: 'เขตเวลา',
+ go: 'ไปที่ Dify',
+ sendUsMail: 'ส่งอีเมลถึงเรา แล้วเราจะจัดการกับคําขอเชิญ',
+ acceptPP: 'ฉันได้อ่านและยอมรับนโยบายความเป็นส่วนตัวแล้ว',
+ reset: 'โปรดเรียกใช้คําสั่งต่อไปนี้เพื่อรีเซ็ตรหัสผ่านของคุณ',
+ withGitHub: 'ดําเนินการต่อด้วย GitHub',
+ withGoogle: 'ดําเนินการต่อกับ Google',
+ withSSO: 'ดําเนินการต่อด้วย SSO',
+ rightTitle: 'ปลดล็อกศักยภาพของ LLM อย่างเต็มที่',
+ rightDesc: 'สร้างแอปพลิเคชัน AI ที่ดึงดูดสายตา ใช้งานได้ และปรับปรุงได้อย่างง่ายดาย',
+ tos: 'ข้อกําหนดในการให้บริการ',
+ pp: 'นโยบายความเป็นส่วนตัว',
+ tosDesc: 'การลงทะเบียนแสดงว่าคุณยอมรับ',
+ goToInit: 'หากคุณยังไม่ได้เริ่มต้นบัญชี โปรดไปที่หน้าการเริ่มต้น',
+ dontHave: 'ไม่มี?',
+ invalidInvitationCode: 'รหัสเชิญไม่ถูกต้อง',
+ accountAlreadyInited: 'บัญชีเริ่มต้นแล้ว',
+ forgotPassword: 'ลืมรหัสผ่านใช่ไหม',
+ resetLinkSent: 'รีเซ็ตลิงก์ที่ส่ง',
+ sendResetLink: 'ส่งลิงก์รีเซ็ต',
+ backToSignIn: 'กลับไปที่การลงชื่อเข้าใช้',
+ forgotPasswordDesc: 'โปรดป้อนที่อยู่อีเมลของคุณเพื่อรีเซ็ตรหัสผ่านของคุณ เราจะส่งอีเมลพร้อมคําแนะนําเกี่ยวกับวิธีการรีเซ็ตรหัสผ่านของคุณ',
+ checkEmailForResetLink: 'โปรดตรวจสอบอีเมลของคุณเพื่อหาลิงก์สําหรับรีเซ็ตรหัสผ่านของคุณ หากไม่ปรากฏขึ้นภายใน 2-3 นาที โปรดตรวจสอบโฟลเดอร์สแปมของคุณ',
+ passwordChanged: 'ลงชื่อเข้าใช้ตอนนี้',
+ changePassword: 'ตั้งรหัสผ่าน',
+ changePasswordTip: 'โปรดป้อนรหัสผ่านใหม่สําหรับบัญชีของคุณ',
+ changePasswordBtn: 'ตั้งรหัสผ่าน',
+ invalidToken: 'โทเค็นไม่ถูกต้องหรือหมดอายุ',
+ confirmPassword: 'ยืนยันรหัสผ่าน',
+ confirmPasswordPlaceholder: 'ยืนยันรหัสผ่านใหม่ของคุณ',
+ passwordChangedTip: 'เปลี่ยนรหัสผ่านของคุณเรียบร้อยแล้ว',
+ error: {
+ emailEmpty: 'ต้องระบุที่อยู่อีเมล',
+ emailInValid: 'โปรดป้อนที่อยู่อีเมลที่ถูกต้อง',
+ nameEmpty: 'ต้องระบุชื่อ',
+ passwordEmpty: 'ต้องใช้รหัสผ่าน',
+ passwordLengthInValid: 'รหัสผ่านต้องมีอย่างน้อย 8 อักขระ',
+ passwordInvalid: 'รหัสผ่านต้องมีตัวอักษรและตัวเลข และความยาวต้องมากกว่า 8',
+ registrationNotAllowed: 'ไม่พบบัญชี โปรดติดต่อผู้ดูแลระบบเพื่อลงทะเบียน',
+ },
+ license: {
+ tip: 'ก่อนเริ่ม Dify Community Edition โปรดอ่าน GitHub',
+ link: 'ใบอนุญาตโอเพ่นซอร์ส',
+ },
+ join: 'ต่อ',
+ joinTipStart: 'เชิญคุณเข้าร่วม',
+ joinTipEnd: 'ทีมงานใน Dify',
+ invalid: 'ลิงก์หมดอายุ',
+ explore: 'สํารวจ Dify',
+ activatedTipStart: 'คุณได้เข้าร่วม',
+ activatedTipEnd: 'ทีม',
+ activated: 'ลงชื่อเข้าใช้ตอนนี้',
+ adminInitPassword: 'รหัสผ่านเริ่มต้นผู้ดูแลระบบ',
+ validate: 'ตรวจ สอบ',
+ checkCode: {
+ checkYourEmail: 'ตรวจสอบอีเมลของคุณ',
+ tips: 'เราส่งรหัสยืนยันไปที่ {{email}}',
+ validTime: 'โปรดทราบว่ารหัสนี้ใช้ได้นาน 5 นาที',
+ verificationCode: 'รหัสยืนยัน',
+ verificationCodePlaceholder: 'ป้อนรหัส 6 หลัก',
+ verify: 'ตรวจสอบ',
+ didNotReceiveCode: 'ไม่ได้รับรหัสใช่ไหม',
+ resend: 'ส่ง',
+ useAnotherMethod: 'ใช้วิธีอื่น',
+ emptyCode: 'ต้องใช้รหัส',
+ invalidCode: 'รหัสไม่ถูกต้อง',
+ },
+ resetPassword: 'รีเซ็ตรหัสผ่าน',
+ resetPasswordDesc: 'พิมพ์อีเมลที่คุณใช้ลงทะเบียนบน Dify แล้วเราจะส่งอีเมลรีเซ็ตรหัสผ่านให้คุณ',
+ backToLogin: 'กลับไปที่เข้าสู่ระบบ',
+ setYourAccount: 'ตั้งค่าบัญชีของคุณ',
+ enterYourName: 'โปรดป้อนชื่อผู้ใช้ของคุณ',
+ back: 'ย้อนกลับ',
+ noLoginMethod: 'ไม่ได้กําหนดค่าวิธีการตรวจสอบสิทธิ์',
+ noLoginMethodTip: 'โปรดติดต่อผู้ดูแลระบบเพื่อเพิ่มวิธีการรับรองความถูกต้อง',
+ licenseExpired: 'ใบอนุญาตหมดอายุ',
+ licenseExpiredTip: 'สิทธิ์การใช้งาน Dify Enterprise สําหรับพื้นที่ทํางานของคุณหมดอายุแล้ว โปรดติดต่อผู้ดูแลระบบของคุณเพื่อใช้ Dify ต่อไป',
+ licenseLost: 'ใบอนุญาตสูญหาย',
+ licenseLostTip: 'เชื่อมต่อเซิร์ฟเวอร์ใบอนุญาต Dify ไม่สําเร็จ โปรดติดต่อผู้ดูแลระบบของคุณเพื่อใช้ Dify ต่อไป',
+ licenseInactive: 'ใบอนุญาตไม่ใช้งาน',
+ licenseInactiveTip: 'สิทธิ์การใช้งาน Dify Enterprise สําหรับพื้นที่ทํางานของคุณไม่ได้ใช้งาน โปรดติดต่อผู้ดูแลระบบของคุณเพื่อใช้ Dify ต่อไป',
+}
+
+export default translation
diff --git a/web/i18n/th-TH/register.ts b/web/i18n/th-TH/register.ts
new file mode 100644
index 0000000000..e2410dd34b
--- /dev/null
+++ b/web/i18n/th-TH/register.ts
@@ -0,0 +1,3 @@
+const translation = {}
+
+export default translation
diff --git a/web/i18n/th-TH/run-log.ts b/web/i18n/th-TH/run-log.ts
new file mode 100644
index 0000000000..709767d860
--- /dev/null
+++ b/web/i18n/th-TH/run-log.ts
@@ -0,0 +1,29 @@
+const translation = {
+ input: 'อินพุต',
+ result: 'ผล',
+ detail: 'รายละเอียด',
+ tracing: 'ติดตาม',
+ resultPanel: {
+ status: 'สถานะ',
+ time: 'เวลาที่ผ่านไป',
+ tokens: 'โทเค็นทั้งหมด',
+ },
+ meta: {
+ title: 'ข้อมูลเมตา',
+ status: 'สถานะ',
+ version: 'เวอร์ชัน',
+ executor: 'ผู้ปฏิบัติการ',
+ startTime: 'เวลาเริ่มต้น',
+ time: 'เวลาที่ผ่านไป',
+ tokens: 'โทเค็นทั้งหมด',
+ steps: 'เรียกใช้ขั้นตอน',
+ },
+ resultEmpty: {
+ title: 'เรียกใช้เฉพาะรูปแบบ JSON เอาต์พุต',
+ tipLeft: 'กรุณาไปที่',
+ link: 'แผงรายละเอียด',
+ tipRight: 'ดูมัน',
+ },
+}
+
+export default translation
diff --git a/web/i18n/th-TH/share-app.ts b/web/i18n/th-TH/share-app.ts
new file mode 100644
index 0000000000..97920a9165
--- /dev/null
+++ b/web/i18n/th-TH/share-app.ts
@@ -0,0 +1,69 @@
+const translation = {
+ common: {
+ appUnavailable: 'แอพไม่พร้อมใช้งาน',
+ appUnknownError: 'แอพไม่พร้อมใช้งาน',
+ },
+ chat: {
+ newChat: 'แชทใหม่',
+ pinnedTitle: 'ปัก หมุด',
+ unpinnedTitle: 'แมว',
+ newChatDefaultName: 'การสนทนาใหม่',
+ resetChat: 'รีเซ็ตการสนทนา',
+ poweredBy: 'รับพลังมาจาก',
+ prompt: 'พร้อมท์',
+ privatePromptConfigTitle: 'การตั้งค่าการสนทนา',
+ publicPromptConfigTitle: 'พรอมต์เริ่มต้น',
+ configStatusDes: 'ก่อนเริ่ม คุณสามารถแก้ไขการตั้งค่าการสนทนาได้',
+ configDisabled: 'มีการใช้การตั้งค่าเซสชันก่อนหน้านี้สําหรับเซสชันนี้',
+ startChat: 'เริ่มแชท',
+ privacyPolicyLeft: 'โปรดอ่าน',
+ privacyPolicyMiddle: 'นโยบายความเป็นส่วนตัว',
+ privacyPolicyRight: 'จัดทําโดยนักพัฒนาแอป',
+ deleteConversation: {
+ title: 'ลบการสนทนา',
+ content: 'คุณแน่ใจหรือไม่ว่าต้องการลบการสนทนานี้?',
+ },
+ tryToSolve: 'พยายามแก้',
+ temporarySystemIssue: 'ขออภัย ปัญหาระบบชั่วคราว',
+ },
+ generation: {
+ tabs: {
+ create: 'เรียกใช้ครั้งเดียว',
+ batch: 'เรียกใช้แบทช์',
+ saved: 'บันทึก',
+ },
+ savedNoData: {
+ title: 'คุณยังไม่ได้บันทึกผลลัพธ์!',
+ description: 'เริ่มสร้างเนื้อหา และค้นหาผลลัพธ์ที่บันทึกไว้ที่นี่',
+ startCreateContent: 'เริ่มสร้างเนื้อหา',
+ },
+ title: 'ความสมบูรณ์ของ AI',
+ queryTitle: 'เนื้อหาแบบสอบถาม',
+ completionResult: 'ผลการเสร็จสมบูรณ์',
+ queryPlaceholder: 'เขียนเนื้อหาแบบสอบถามของคุณ...',
+ run: 'ประหารชีวิต',
+ copy: 'ลอก',
+ resultTitle: 'ความสมบูรณ์ของ AI',
+ noData: 'AI จะให้สิ่งที่คุณต้องการที่นี่',
+ csvUploadTitle: 'ลากและวางไฟล์ CSV ของคุณที่นี่ หรือ',
+ browse: 'เล็ม',
+ csvStructureTitle: 'ไฟล์ CSV ต้องสอดคล้องกับโครงสร้างต่อไปนี้:',
+ downloadTemplate: 'ดาวน์โหลดเทมเพลตที่นี่',
+ field: 'สนาม',
+ batchFailed: {
+ info: '{{num}} การดําเนินการที่ล้มเหลว',
+ retry: 'ลอง',
+ outputPlaceholder: 'ไม่มีเนื้อหาเอาต์พุต',
+ },
+ errorMsg: {
+ empty: 'กรุณาป้อนเนื้อหาในไฟล์ที่อัปโหลด',
+ fileStructNotMatch: 'ไฟล์ CSV ที่อัปโหลดไม่ตรงกับโครงสร้าง',
+ emptyLine: 'แถว {{rowIndex}} ว่างเปล่า',
+ invalidLine: 'แถว {{rowIndex}}: ค่า {{varName}} ต้องว่างเปล่าไม่ได้',
+ moreThanMaxLengthLine: 'แถว {{rowIndex}}: ค่า {{varName}} ต้องไม่เกิน {{maxLength}} อักขระ',
+ atLeastOne: 'โปรดป้อนอย่างน้อยหนึ่งแถวในไฟล์ที่อัปโหลด',
+ },
+ },
+}
+
+export default translation
diff --git a/web/i18n/th-TH/tools.ts b/web/i18n/th-TH/tools.ts
new file mode 100644
index 0000000000..a3e12bafd0
--- /dev/null
+++ b/web/i18n/th-TH/tools.ts
@@ -0,0 +1,153 @@
+const translation = {
+ title: 'เครื่อง มือ',
+ createCustomTool: 'สร้างเครื่องมือที่กําหนดเอง',
+ customToolTip: 'เรียนรู้เพิ่มเติมเกี่ยวกับเครื่องมือแบบกําหนดเองของ Dify',
+ type: {
+ all: 'ทั้งหมด',
+ builtIn: 'ในตัว',
+ custom: 'ธรรมเนียม',
+ workflow: 'เวิร์กโฟลว์',
+ },
+ contribute: {
+ line1: 'ฉันสนใจใน',
+ line2: 'เครื่องมือที่มีส่วนร่วมใน Dify',
+ viewGuide: 'ดูคู่มือ',
+ },
+ author: 'โดย',
+ auth: {
+ unauthorized: 'การอนุญาต',
+ authorized: 'อนุญาต',
+ setup: 'ตั้งค่าการให้สิทธิ์เพื่อใช้',
+ setupModalTitle: 'ตั้งค่าการให้สิทธิ์',
+ setupModalTitleDescription: 'หลังจากกําหนดค่าข้อมูลประจําตัวแล้ว สมาชิกทั้งหมดภายในพื้นที่ทํางานสามารถใช้เครื่องมือนี้เมื่อประสานงานแอปพลิเคชันได้',
+ },
+ includeToolNum: '{{num}} รวมเครื่องมือ',
+ addTool: 'เพิ่มเครื่องมือ',
+ addToolModal: {
+ type: 'ประเภท',
+ category: 'ประเภท',
+ add: 'เพิ่ม',
+ added: 'เพิ่ม',
+ manageInTools: 'จัดการในเครื่องมือ',
+ emptyTitle: 'ไม่มีเครื่องมือเวิร์กโฟลว์',
+ emptyTip: 'ไปที่ "เวิร์กโฟลว์ -> เผยแพร่เป็นเครื่องมือ"',
+ },
+ createTool: {
+ title: 'สร้างเครื่องมือที่กําหนดเอง',
+ editAction: 'กําหนดค่า',
+ editTitle: 'แก้ไขเครื่องมือที่กําหนดเอง',
+ name: 'ชื่อ',
+ toolNamePlaceHolder: 'ป้อนชื่อเครื่องมือ',
+ nameForToolCall: 'ชื่อการเรียกเครื่องมือ',
+ nameForToolCallPlaceHolder: 'ใช้สําหรับจดจําเครื่อง เช่น getCurrentWeather list_pets',
+ nameForToolCallTip: 'รองรับเฉพาะตัวเลข ตัวอักษร และขีดล่างเท่านั้น',
+ description: 'คำอธิบาย',
+ descriptionPlaceholder: 'คําอธิบายสั้น ๆ เกี่ยวกับวัตถุประสงค์ของเครื่องมือ เช่น รับอุณหภูมิสําหรับตําแหน่งเฉพาะ',
+ schema: 'แผนการ',
+ schemaPlaceHolder: 'ป้อนสคีมา OpenAPI ของคุณที่นี่',
+ viewSchemaSpec: 'ดูข้อมูลจําเพาะของ OpenAPI-Swagger',
+ importFromUrl: 'นําเข้าจาก URL',
+ importFromUrlPlaceHolder: 'https://...',
+ urlError: 'โปรดป้อน URL ที่ถูกต้อง',
+ examples: 'ตัว อย่าง เช่น',
+ exampleOptions: {
+ json: 'สภาพอากาศ(JSON)',
+ yaml: 'ร้านขายสัตว์เลี้ยง (YAML)',
+ blankTemplate: 'เทมเพลตเปล่า',
+ },
+ availableTools: {
+ title: 'เครื่องมือที่มี',
+ name: 'ชื่อ',
+ description: 'คำอธิบาย',
+ method: 'วิธี',
+ path: 'ทาง',
+ action: 'การดําเนินการ',
+ test: 'ทดสอบ',
+ },
+ authMethod: {
+ title: 'วิธีการอนุญาต',
+ type: 'ชนิดการอนุญาต',
+ keyTooltip: 'Http Header Key คุณสามารถปล่อยให้เป็น "การอนุญาต" ได้หากคุณไม่รู้ว่ามันคืออะไรหรือตั้งค่าเป็นค่าที่กําหนดเอง',
+ types: {
+ none: 'ไม่มีใคร',
+ api_key: 'คีย์ API',
+ apiKeyPlaceholder: 'ชื่อส่วนหัว HTTP สําหรับคีย์ API',
+ apiValuePlaceholder: 'ป้อนคีย์ API',
+ },
+ key: 'กุญแจ',
+ value: 'ค่า',
+ },
+ authHeaderPrefix: {
+ title: 'ประเภทการรับรองความถูกต้อง',
+ types: {
+ basic: 'พื้นฐาน',
+ bearer: 'ผู้ถือ',
+ custom: 'ธรรมเนียม',
+ },
+ },
+ privacyPolicy: 'นโยบายความเป็นส่วนตัว',
+ privacyPolicyPlaceholder: 'กรุณากรอกนโยบายความเป็นส่วนตัว',
+ toolInput: {
+ title: 'อินพุตเครื่องมือ',
+ name: 'ชื่อ',
+ required: 'ต้องระบุ',
+ method: 'วิธี',
+ methodSetting: 'ฉาก',
+ methodSettingTip: 'ผู้ใช้กรอกข้อมูลในการกําหนดค่าเครื่องมือ',
+ methodParameter: 'พารามิเตอร์',
+ methodParameterTip: 'การเติม LLM ระหว่างการอนุมาน',
+ label: 'ในตอนกลางวัน',
+ labelPlaceholder: 'เลือกแท็ก (ไม่บังคับ)',
+ description: 'คำอธิบาย',
+ descriptionPlaceholder: 'คําอธิบายความหมายของพารามิเตอร์',
+ },
+ customDisclaimer: 'ข้อจํากัดความรับผิดชอบที่กําหนดเอง',
+ customDisclaimerPlaceholder: 'โปรดป้อนข้อจํากัดความรับผิดชอบที่กําหนดเอง',
+ confirmTitle: 'ยืนยันการบันทึก ?',
+ confirmTip: 'แอปที่ใช้เครื่องมือนี้จะได้รับผลกระทบ',
+ deleteToolConfirmTitle: 'ลบเครื่องมือนี้?',
+ deleteToolConfirmContent: 'การลบเครื่องมือนั้นไม่สามารถย้อนกลับได้ ผู้ใช้จะไม่สามารถเข้าถึงเครื่องมือของคุณได้อีกต่อไป',
+ },
+ test: {
+ title: 'ทดสอบ',
+ parametersValue: 'พารามิเตอร์และค่า',
+ parameters: 'พารามิเตอร์',
+ value: 'ค่า',
+ testResult: 'ผลการทดสอบ',
+ testResultPlaceholder: 'ผลการทดสอบจะแสดงที่นี่',
+ },
+ thought: {
+ using: 'ใช้',
+ used: 'ใช้แล้ว',
+ requestTitle: 'ขอร้อง',
+ responseTitle: 'การตอบสนอง',
+ },
+ setBuiltInTools: {
+ info: 'ข้อมูล',
+ setting: 'ฉาก',
+ toolDescription: 'คําอธิบายเครื่องมือ',
+ parameters: 'พารามิเตอร์',
+ string: 'เชือก',
+ number: 'เลข',
+ required: 'ต้องระบุ',
+ infoAndSetting: 'ข้อมูลและการตั้งค่า',
+ },
+ noCustomTool: {
+ title: 'ไม่มีเครื่องมือที่กําหนดเอง!',
+ content: 'เพิ่มและจัดการเครื่องมือที่กําหนดเองของคุณที่นี่สําหรับการสร้างแอป AI',
+ createTool: 'สร้างเครื่องมือ',
+ },
+ noSearchRes: {
+ title: 'ขออภัย ไม่มีผลลัพธ์!',
+ content: 'เราไม่พบเครื่องมือที่ตรงกับการค้นหาของคุณ',
+ reset: 'รีเซ็ตการค้นหา',
+ },
+ builtInPromptTitle: 'พร้อมท์',
+ toolRemoved: 'เครื่องมือถูกลบออก',
+ notAuthorized: 'เครื่องมือไม่ได้รับอนุญาต',
+ howToGet: 'วิธีรับ',
+ openInStudio: 'เปิดในสตูดิโอ',
+ toolNameUsageTip: 'ชื่อการเรียกเครื่องมือสําหรับการใช้เหตุผลและการแจ้งเตือนของตัวแทน',
+}
+
+export default translation
diff --git a/web/i18n/th-TH/workflow.ts b/web/i18n/th-TH/workflow.ts
new file mode 100644
index 0000000000..71d82b98e5
--- /dev/null
+++ b/web/i18n/th-TH/workflow.ts
@@ -0,0 +1,635 @@
+const translation = {
+ common: {
+ undo: 'แก้',
+ redo: 'พร้อม',
+ editing: 'แก้ไข',
+ autoSaved: 'บันทึกอัตโนมัติ',
+ unpublished: 'ไม่ได้เผยแพร่',
+ published: 'เผย แพร่',
+ publish: 'ตีพิมพ์',
+ update: 'อัพเดต',
+ run: 'วิ่ง',
+ running: 'กำลัง เรียก ใช้',
+ inRunMode: 'ในโหมดเรียกใช้',
+ inPreview: 'ในการแสดงตัวอย่าง',
+ inPreviewMode: 'ในโหมดแสดงตัวอย่าง',
+ preview: 'ดูตัวอย่าง',
+ viewRunHistory: 'ดูประวัติการวิ่ง',
+ runHistory: 'ประวัติการวิ่ง',
+ goBackToEdit: 'กลับไปที่ตัวแก้ไข',
+ conversationLog: 'บันทึกการสนทนา',
+ features: 'หน้าตา',
+ featuresDescription: 'ปรับปรุงประสบการณ์ผู้ใช้เว็บแอป',
+ ImageUploadLegacyTip: 'ตอนนี้คุณสามารถสร้างตัวแปรชนิดไฟล์ในฟอร์มเริ่มต้นได้แล้ว เราจะไม่รองรับฟีเจอร์การอัปโหลดรูปภาพอีกต่อไปในอนาคต',
+ fileUploadTip: 'ฟีเจอร์การอัปโหลดรูปภาพได้รับการอัปเกรดเป็นการอัปโหลดไฟล์',
+ featuresDocLink: 'ศึกษาเพิ่มเติม',
+ debugAndPreview: 'ดูตัวอย่าง',
+ restart: 'เริ่มใหม่',
+ currentDraft: 'ร่างปัจจุบัน',
+ currentDraftUnpublished: 'ร่างปัจจุบันที่ไม่ได้เผยแพร่',
+ latestPublished: 'เผยแพร่ล่าสุด',
+ publishedAt: 'เผย แพร่',
+ restore: 'ซ่อมแซม',
+ runApp: 'เรียกใช้แอพ',
+ batchRunApp: 'แอป Batch Run',
+ accessAPIReference: 'การอ้างอิง API การเข้าถึง',
+ embedIntoSite: 'ฝังลงในไซต์',
+ addTitle: 'เพิ่มชื่อเรื่อง...',
+ addDescription: 'เพิ่มคําอธิบาย...',
+ noVar: 'ไม่มีตัวแปร',
+ searchVar: 'ตัวแปรการค้นหา',
+ variableNamePlaceholder: 'ชื่อตัวแปร',
+ setVarValuePlaceholder: 'ตั้งค่าตัวแปร',
+ needConnectTip: 'ขั้นตอนนี้ไม่ได้เชื่อมต่อกับสิ่งใด',
+ maxTreeDepth: 'ขีดจํากัดสูงสุดของ {{depth}} โหนดต่อสาขา',
+ needEndNode: 'ต้องเพิ่มบล็อก End',
+ needAnswerNode: 'ต้องเพิ่มบล็อกคําตอบ',
+ workflowProcess: 'กระบวนการเวิร์กโฟลว์',
+ notRunning: 'ยังไม่ได้ทํางาน',
+ previewPlaceholder: 'ป้อนเนื้อหาในช่องด้านล่างเพื่อเริ่มแก้ไขข้อบกพร่องของแชทบอท',
+ effectVarConfirm: {
+ title: 'ลบตัวแปร',
+ content: 'ตัวแปรนี้ใช้ในโหนดอื่น คุณยังต้องการลบออกหรือไม่?',
+ },
+ insertVarTip: 'กดปุ่ม \'/\' เพื่อแทรกอย่างรวดเร็ว',
+ processData: 'ประมวลผลข้อมูล',
+ input: 'อินพุต',
+ output: 'ผลิตภัณฑ์',
+ jinjaEditorPlaceholder: 'พิมพ์ \'/\' หรือ \'{\' เพื่อแทรกตัวแปร',
+ viewOnly: 'ดูเท่านั้น',
+ showRunHistory: 'แสดงประวัติการวิ่ง',
+ enableJinja: 'เปิดใช้งานการสนับสนุนเทมเพลต Jinja',
+ learnMore: 'ศึกษาเพิ่มเติม',
+ copy: 'ลอก',
+ duplicate: 'สำเนา',
+ addBlock: 'เพิ่มบล็อก',
+ pasteHere: 'วางที่นี่',
+ pointerMode: 'โหมดตัวชี้',
+ handMode: 'โหมดมือ',
+ model: 'แบบ',
+ workflowAsTool: 'เวิร์กโฟลว์เป็นเครื่องมือ',
+ configureRequired: 'กําหนดค่าที่จําเป็น',
+ configure: 'กําหนดค่า',
+ manageInTools: 'จัดการในเครื่องมือ',
+ workflowAsToolTip: 'จําเป็นต้องมีการกําหนดค่าเครื่องมือใหม่หลังจากการอัปเดตเวิร์กโฟลว์',
+ viewDetailInTracingPanel: 'ดูรายละเอียด',
+ syncingData: 'ซิงค์ข้อมูลเพียงไม่กี่วินาที',
+ importDSL: 'นําเข้า DSL',
+ importDSLTip: 'ร่างปัจจุบันจะถูกเขียนทับ\nส่งออกเวิร์กโฟลว์เป็นข้อมูลสํารองก่อนนําเข้า',
+ backupCurrentDraft: 'สํารองร่างปัจจุบัน',
+ chooseDSL: 'เลือกไฟล์ DSL',
+ overwriteAndImport: 'เขียนทับและนําเข้า',
+ importFailure: 'นําเข้าล้มเหลว',
+ importWarning: 'ความระมัดระวัง',
+ importWarningDetails: 'ความแตกต่างของเวอร์ชัน DSL อาจส่งผลต่อคุณสมบัติบางอย่าง',
+ importSuccess: 'นําเข้าสําเร็จ',
+ parallelRun: 'วิ่งแบบขนาน',
+ parallelTip: {
+ click: {
+ title: 'คลิก',
+ desc: 'เพื่อเพิ่ม',
+ },
+ drag: {
+ title: 'ลาก',
+ desc: 'เพื่อเชื่อมต่อ',
+ },
+ limit: 'ความขนานถูกจํากัดไว้ที่ {{num}} สาขา',
+ depthLimit: 'ขีดจํากัดเลเยอร์ซ้อนแบบขนานของ {{num}} เลเยอร์',
+ },
+ disconnect: 'ยก เลิก',
+ jumpToNode: 'ข้ามไปยังโหนดนี้',
+ addParallelNode: 'เพิ่มโหนดขนาน',
+ parallel: 'ขนาน',
+ branch: 'กิ่ง',
+ },
+ env: {
+ envPanelTitle: 'ตัวแปรสภาพแวดล้อม',
+ envDescription: 'ตัวแปรสภาพแวดล้อมสามารถใช้เพื่อจัดเก็บข้อมูลส่วนตัวและข้อมูลประจําตัวได้ เป็นแบบอ่านอย่างเดียวและสามารถแยกออกจากไฟล์ DSL ระหว่างการส่งออก',
+ envPanelButton: 'เพิ่มตัวแปร',
+ modal: {
+ title: 'เพิ่มตัวแปรสภาพแวดล้อม',
+ editTitle: 'แก้ไขตัวแปรสภาพแวดล้อม',
+ type: 'ประเภท',
+ name: 'ชื่อ',
+ namePlaceholder: 'ชื่อ env',
+ value: 'ค่า',
+ valuePlaceholder: 'ค่า env',
+ secretTip: 'ใช้เพื่อกําหนดข้อมูลหรือข้อมูลที่ละเอียดอ่อน โดยมีการตั้งค่า DSL ที่กําหนดค่าไว้เพื่อป้องกันการรั่วไหล',
+ },
+ export: {
+ title: 'ส่งออกตัวแปรสภาพแวดล้อม Secret หรือไม่',
+ checkbox: 'ส่งออกค่าข้อมูลลับ',
+ ignore: 'ส่งออก DSL',
+ export: 'ส่งออก DSL ด้วยค่าลับ',
+ },
+ },
+ chatVariable: {
+ panelTitle: 'ตัวแปรการสนทนา',
+ panelDescription: 'ตัวแปรการสนทนาใช้เพื่อจัดเก็บข้อมูลแบบโต้ตอบที่ LLM จําเป็นต้องจดจํา รวมถึงประวัติการสนทนา ไฟล์ที่อัปโหลด การตั้งค่าของผู้ใช้ พวกเขาอ่าน-เขียน',
+ docLink: 'เยี่ยมชมเอกสารของเราเพื่อเรียนรู้เพิ่มเติม',
+ button: 'เพิ่มตัวแปร',
+ modal: {
+ title: 'เพิ่มตัวแปรการสนทนา',
+ editTitle: 'แก้ไขตัวแปรการสนทนา',
+ name: 'ชื่อ',
+ namePlaceholder: 'ชื่อตัวแปร',
+ type: 'ประเภท',
+ value: 'ค่าเริ่มต้น',
+ valuePlaceholder: 'ค่าเริ่มต้น เว้นว่างไว้เพื่อไม่ให้ตั้งค่า',
+ description: 'คำอธิบาย',
+ descriptionPlaceholder: 'อธิบายตัวแปร',
+ editInJSON: 'แก้ไขใน JSON',
+ oneByOne: 'เพิ่มทีละรายการ',
+ editInForm: 'แก้ไขในแบบฟอร์ม',
+ arrayValue: 'ค่า',
+ addArrayValue: 'เพิ่มมูลค่า',
+ objectKey: 'กุญแจ',
+ objectType: 'ประเภท',
+ objectValue: 'ค่าเริ่มต้น',
+ },
+ storedContent: 'เนื้อหาที่เก็บไว้',
+ updatedAt: 'อัพเดทเมื่อ',
+ },
+ changeHistory: {
+ title: 'ประวัติการเปลี่ยนแปลง',
+ placeholder: 'คุณยังไม่ได้เปลี่ยนแปลงอะไรเลย',
+ clearHistory: 'ล้างประวัติ',
+ hint: 'คนอินเดีย',
+ hintText: 'การดําเนินการแก้ไขของคุณจะถูกติดตามในประวัติการเปลี่ยนแปลง ซึ่งจะถูกจัดเก็บไว้ในอุปกรณ์ของคุณตลอดระยะเวลาของเซสชันนี้ ประวัตินี้จะถูกล้างเมื่อคุณออกจากตัวแก้ไข',
+ stepBackward_one: '{{count}} ถอยหลัง',
+ stepBackward_other: '{{count}} ถอยหลัง',
+ stepForward_one: '{{count}} ก้าวไปข้างหน้า',
+ stepForward_other: '{{count}} ก้าวไปข้างหน้า',
+ sessionStart: 'เริ่มเซสชัน',
+ currentState: 'สถานะปัจจุบัน',
+ nodeTitleChange: 'เปลี่ยนชื่อบล็อก',
+ nodeDescriptionChange: 'คําอธิบายบล็อกเปลี่ยนไป',
+ nodeDragStop: 'บล็อกย้าย',
+ nodeChange: 'บล็อกเปลี่ยนไป',
+ nodeConnect: 'บล็อกเชื่อมต่อ',
+ nodePaste: 'บล็อกวาง',
+ nodeDelete: 'บล็อกลบ',
+ nodeAdd: 'เพิ่มบล็อก',
+ nodeResize: 'บล็อกปรับขนาด',
+ noteAdd: 'เพิ่มหมายเหตุ',
+ noteChange: 'เปลี่ยนหมายเหตุ',
+ noteDelete: 'ลบโน้ต',
+ edgeDelete: 'บล็อกตัดการเชื่อมต่อ',
+ },
+ errorMsg: {
+ fieldRequired: '{{field}} เป็นสิ่งจําเป็น',
+ rerankModelRequired: 'ก่อนเปิด Rerank Model โปรดยืนยันว่าได้กําหนดค่าโมเดลสําเร็จในการตั้งค่า',
+ authRequired: 'ต้องได้รับอนุญาต',
+ invalidJson: '{{field}} เป็น JSON ไม่ถูกต้อง',
+ fields: {
+ variable: 'ชื่อตัวแปร',
+ variableValue: 'ค่าตัวแปร',
+ code: 'รหัส',
+ model: 'แบบ',
+ rerankModel: 'จัดอันดับโมเดลใหม่',
+ visionVariable: 'ตัวแปรวิสัยทัศน์',
+ },
+ invalidVariable: 'ตัวแปรไม่ถูกต้อง',
+ },
+ singleRun: {
+ testRun: 'ทดสอบการทํางาน',
+ startRun: 'เริ่มวิ่ง',
+ running: 'กำลัง เรียก ใช้',
+ testRunIteration: 'การทดสอบการทําซ้ํา',
+ back: 'ย้อนกลับ',
+ iteration: 'เกิด ซ้ำ',
+ },
+ tabs: {
+ 'searchBlock': 'บล็อกการค้นหา',
+ 'blocks': 'บล็อก',
+ 'searchTool': 'เครื่องมือค้นหา',
+ 'tools': 'เครื่อง มือ',
+ 'allTool': 'ทั้งหมด',
+ 'builtInTool': 'ในตัว',
+ 'customTool': 'ธรรมเนียม',
+ 'workflowTool': 'เวิร์กโฟลว์',
+ 'question-understand': 'คําถาม: เข้าใจ',
+ 'logic': 'ตรรกวิทยา',
+ 'transform': 'แปลง',
+ 'utilities': 'สาธารณูปโภค',
+ 'noResult': 'ไม่พบการจับคู่',
+ },
+ blocks: {
+ 'start': 'เริ่ม',
+ 'end': 'ปลาย',
+ 'answer': 'ตอบ',
+ 'llm': 'นิติศาสตราจารย์',
+ 'knowledge-retrieval': 'การดึงความรู้',
+ 'question-classifier': 'ตัวจําแนกคําถาม',
+ 'if-else': 'ถ้า/อื่น',
+ 'code': 'รหัส',
+ 'template-transform': 'แม่ แบบ',
+ 'http-request': 'คําขอ HTTP',
+ 'variable-assigner': 'ตัวรวบรวมตัวแปร',
+ 'variable-aggregator': 'ตัวรวบรวมตัวแปร',
+ 'assigner': 'ตัวกําหนดตัวแปร',
+ 'iteration-start': 'เริ่มการทําซ้ํา',
+ 'iteration': 'เกิด ซ้ำ',
+ 'parameter-extractor': 'ตัวแยกพารามิเตอร์',
+ 'document-extractor': 'ตัวแยกเอกสาร',
+ 'list-operator': 'ตัวดําเนินการรายการ',
+ },
+ blocksAbout: {
+ 'start': 'กําหนดพารามิเตอร์เริ่มต้นสําหรับการเปิดใช้เวิร์กโฟลว์',
+ 'end': 'กําหนดชนิดสิ้นสุดและผลลัพธ์ของเวิร์กโฟลว์',
+ 'answer': 'กําหนดเนื้อหาการตอบกลับของการสนทนาแชท',
+ 'llm': 'การเรียกใช้โมเดลภาษาขนาดใหญ่เพื่อตอบคําถามหรือประมวลผลภาษาธรรมชาติ',
+ 'knowledge-retrieval': 'ช่วยให้คุณสามารถสอบถามเนื้อหาข้อความที่เกี่ยวข้องกับคําถามของผู้ใช้จากความรู้',
+ 'question-classifier': 'กําหนดเงื่อนไขการจําแนกประเภทของคําถามของผู้ใช้ LLM สามารถกําหนดความคืบหน้าของการสนทนาตามคําอธิบายการจําแนกประเภท',
+ 'if-else': 'ช่วยให้คุณสามารถแบ่งเวิร์กโฟลว์ออกเป็นสองสาขาตามเงื่อนไข if/else',
+ 'code': 'เรียกใช้โค้ด Python หรือ NodeJS เพื่อใช้ตรรกะที่กําหนดเอง',
+ 'template-transform': 'แปลงข้อมูลเป็นสตริงโดยใช้ไวยากรณ์เทมเพลต Jinja',
+ 'http-request': 'อนุญาตให้ส่งคําขอเซิร์ฟเวอร์ผ่านโปรโตคอล HTTP',
+ 'variable-assigner': 'รวมตัวแปรหลายสาขาเป็นตัวแปรเดียวสําหรับการกําหนดค่าแบบรวมของโหนดดาวน์สตรีม',
+ 'assigner': 'โหนดการกําหนดตัวแปรใช้สําหรับกําหนดค่าให้กับตัวแปรที่เขียนได้ (เช่นตัวแปรการสนทนา)',
+ 'variable-aggregator': 'รวมตัวแปรหลายสาขาเป็นตัวแปรเดียวสําหรับการกําหนดค่าแบบรวมของโหนดดาวน์สตรีม',
+ 'iteration': 'ดําเนินการหลายขั้นตอนกับวัตถุรายการจนกว่าจะส่งออกผลลัพธ์ทั้งหมด',
+ 'parameter-extractor': 'ใช้ LLM เพื่อแยกพารามิเตอร์ที่มีโครงสร้างจากภาษาธรรมชาติสําหรับการเรียกใช้เครื่องมือหรือคําขอ HTTP',
+ 'document-extractor': 'ใช้เพื่อแยกวิเคราะห์เอกสารที่อัปโหลดเป็นเนื้อหาข้อความที่ LLM เข้าใจได้ง่าย',
+ 'list-operator': 'ใช้เพื่อกรองหรือจัดเรียงเนื้อหาอาร์เรย์',
+ },
+ operator: {
+ zoomIn: 'ซูมเข้า',
+ zoomOut: 'ซูมออก',
+ zoomTo50: 'ซูมไปที่ 50%',
+ zoomTo100: 'ซูมไปที่ 100%',
+ zoomToFit: 'ซูมให้พอดี',
+ },
+ panel: {
+ userInputField: 'ฟิลด์ป้อนข้อมูลของผู้ใช้',
+ changeBlock: 'เปลี่ยนบล็อก',
+ helpLink: 'ลิงค์ช่วยเหลือ',
+ about: 'ประมาณ',
+ createdBy: 'สร้างโดย',
+ nextStep: 'ขั้นตอนถัดไป',
+ addNextStep: 'เพิ่มบล็อกถัดไปในเวิร์กโฟลว์นี้',
+ selectNextStep: 'เลือกบล็อกถัดไป',
+ runThisStep: 'เรียกใช้ขั้นตอนนี้',
+ checklist: 'ตรวจ สอบ',
+ checklistTip: 'ตรวจสอบให้แน่ใจว่าปัญหาทั้งหมดได้รับการแก้ไขแล้วก่อนที่จะเผยแพร่',
+ checklistResolved: 'ปัญหาทั้งหมดได้รับการแก้ไขแล้ว',
+ organizeBlocks: 'จัดระเบียบบล็อก',
+ change: 'เปลี่ยน',
+ optional: '(ไม่บังคับ)',
+ },
+ nodes: {
+ common: {
+ outputVars: 'ตัวแปรเอาต์พุต',
+ insertVarTip: 'แทรกตัวแปร',
+ memory: {
+ memory: 'ความจำ',
+ memoryTip: 'การตั้งค่าหน่วยความจําแชท',
+ windowSize: 'ขนาดหน้าต่าง',
+ conversationRoleName: 'ชื่อบทบาทการสนทนา',
+ user: 'คํานําหน้าผู้ใช้',
+ assistant: 'คํานําหน้าผู้ช่วย',
+ },
+ memories: {
+ title: 'ความ ทรง จำ',
+ tip: 'ความทรงจําการแชท',
+ builtIn: 'ในตัว',
+ },
+ },
+ start: {
+ required: 'ต้องระบุ',
+ inputField: 'ฟิลด์อินพุต',
+ builtInVar: 'ตัวแปรในตัว',
+ outputVars: {
+ query: 'การป้อนข้อมูลของผู้ใช้',
+ memories: {
+ des: 'ประวัติการสนทนา',
+ type: 'ประเภทข้อความ',
+ content: 'เนื้อหาข้อความ',
+ },
+ files: 'รายการไฟล์',
+ },
+ noVarTip: 'ตั้งค่าอินพุตที่สามารถใช้ในเวิร์กโฟลว์',
+ },
+ end: {
+ outputs: 'เอาต์ พุ ต',
+ output: {
+ type: 'ประเภทเอาต์พุต',
+ variable: 'ตัวแปรเอาต์พุต',
+ },
+ type: {
+ 'none': 'ไม่มีใคร',
+ 'plain-text': 'ข้อความธรรมดา',
+ 'structured': 'โครง สร้าง',
+ },
+ },
+ answer: {
+ answer: 'ตอบ',
+ outputVars: 'ตัวแปรเอาต์พุต',
+ },
+ llm: {
+ model: 'แบบ',
+ variables: 'ตัว แปร',
+ context: 'บริบท',
+ contextTooltip: 'คุณสามารถนําเข้าความรู้เป็นบริบทได้',
+ notSetContextInPromptTip: 'หากต้องการเปิดใช้งานคุณสมบัติบริบท โปรดกรอกตัวแปรบริบทใน PROMPT',
+ prompt: 'พร้อมท์',
+ roleDescription: {
+ system: 'ให้คําแนะนําระดับสูงสําหรับการสนทนา',
+ user: 'ให้คําแนะนํา แบบสอบถาม หรือการป้อนข้อมูลตามข้อความใดๆ ไปยังแบบจําลอง',
+ assistant: 'การตอบสนองของโมเดลตามข้อความของผู้ใช้',
+ },
+ addMessage: 'เพิ่มข้อความ',
+ vision: 'การมองเห็น',
+ files: 'แฟ้ม',
+ resolution: {
+ name: 'มติ',
+ high: 'สูง',
+ low: 'ต่ํา',
+ },
+ outputVars: {
+ output: 'สร้างเนื้อหา',
+ usage: 'ข้อมูลการใช้งานรุ่น',
+ },
+ singleRun: {
+ variable: 'ตัวแปร',
+ },
+ sysQueryInUser: 'sys.query ในข้อความผู้ใช้เป็นสิ่งจําเป็น',
+ },
+ knowledgeRetrieval: {
+ queryVariable: 'ตัวแปรแบบสอบถาม',
+ knowledge: 'ความรู้',
+ outputVars: {
+ output: 'การดึงข้อมูลที่แบ่งส่วน',
+ content: 'เนื้อหาที่แบ่งกลุ่ม',
+ title: 'ชื่อแบ่งส่วน',
+ icon: 'ไอคอนแบ่งส่วน',
+ url: 'URL ที่แบ่งกลุ่ม',
+ metadata: 'ข้อมูลเมตาอื่นๆ',
+ },
+ },
+ http: {
+ inputVars: 'ตัวแปรอินพุต',
+ api: 'เอพีไอ',
+ apiPlaceholder: 'ป้อน URL พิมพ์ \'/\' แทรกตัวแปร',
+ extractListPlaceholder: 'ป้อนดัชนีรายการพิมพ์ \'/\' แทรกตัวแปร',
+ notStartWithHttp: 'API ควรขึ้นต้นด้วย http:// หรือ https://',
+ key: 'กุญแจ',
+ type: 'ประเภท',
+ value: 'ค่า',
+ bulkEdit: 'แก้ไขจํานวนมาก',
+ keyValueEdit: 'การแก้ไขคีย์-ค่า',
+ headers: 'หัว กระดาษ',
+ params: 'พารามิเตอร์',
+ body: 'ร่างกาย',
+ binaryFileVariable: 'ตัวแปรไฟล์ไบนารี',
+ outputVars: {
+ body: 'เนื้อหาการตอบกลับ',
+ statusCode: 'รหัสสถานะการตอบกลับ',
+ headers: 'JSON รายการส่วนหัวการตอบสนอง',
+ files: 'รายการไฟล์',
+ },
+ authorization: {
+ 'authorization': 'การอนุญาต',
+ 'authorizationType': 'ประเภทการอนุญาต',
+ 'no-auth': 'ไม่มีใคร',
+ 'api-key': 'คีย์ API',
+ 'auth-type': 'ประเภทการรับรองความถูกต้อง',
+ 'basic': 'พื้นฐาน',
+ 'bearer': 'ผู้ถือ',
+ 'custom': 'ธรรมเนียม',
+ 'api-key-title': 'คีย์ API',
+ 'header': 'หัว ข้อ',
+ },
+ insertVarPlaceholder: 'พิมพ์ \'/\' เพื่อแทรกตัวแปร',
+ timeout: {
+ title: 'หมดเวลา',
+ connectLabel: 'หมดเวลาการเชื่อมต่อ',
+ connectPlaceholder: 'ป้อนการหมดเวลาการเชื่อมต่อเป็นวินาที',
+ readLabel: 'หมดเวลาการอ่าน',
+ readPlaceholder: 'ป้อนหมดเวลาการอ่านเป็นวินาที',
+ writeLabel: 'หมดเวลาการเขียน',
+ writePlaceholder: 'ป้อนหมดเวลาการเขียนเป็นวินาที',
+ },
+ curl: {
+ title: 'นําเข้าจาก cURL',
+ placeholder: 'วางสตริง cURL ที่นี่',
+ },
+ },
+ code: {
+ inputVars: 'ตัวแปรอินพุต',
+ outputVars: 'ตัวแปรเอาต์พุต',
+ advancedDependencies: 'การพึ่งพาขั้นสูง',
+ advancedDependenciesTip: 'เพิ่มการพึ่งพาที่โหลดไว้ล่วงหน้าซึ่งใช้เวลามากขึ้นในการใช้หรือไม่ใช่ค่าเริ่มต้นในตัวที่นี่',
+ searchDependencies: 'การพึ่งพาการค้นหา',
+ },
+ templateTransform: {
+ inputVars: 'ตัวแปรอินพุต',
+ code: 'รหัส',
+ codeSupportTip: 'รองรับเฉพาะ Jinja2',
+ outputVars: {
+ output: 'เนื้อหาที่แปลงโฉม',
+ },
+ },
+ ifElse: {
+ if: 'ถ้า',
+ else: 'อื่น',
+ elseDescription: 'ใช้เพื่อกําหนดตรรกะที่ควรดําเนินการเมื่อไม่ตรงตามเงื่อนไข if',
+ and: 'และ',
+ or: 'หรือ',
+ operator: 'ผู้ปฏิบัติการ',
+ notSetVariable: 'โปรดตั้งค่าตัวแปรก่อน',
+ comparisonOperator: {
+ 'contains': 'ประกอบ ด้วย',
+ 'not contains': 'ไม่มี',
+ 'start with': 'เริ่มต้นด้วย',
+ 'end with': 'ลงท้ายด้วย',
+ 'is': 'คือ',
+ 'is not': 'ไม่ใช่',
+ 'empty': 'ว่างเปล่า',
+ 'not empty': 'ไม่ว่างเปล่า',
+ 'null': 'เป็นโมฆะ',
+ 'not null': 'ไม่เป็นโมฆะ',
+ 'in': 'ใน',
+ 'not in': 'ไม่อยู่ใน',
+ 'all of': 'ทั้งหมด',
+ 'exists': 'อยู่',
+ 'not exists': 'ไม่มีอยู่จริง',
+ },
+ optionName: {
+ image: 'ภาพ',
+ doc: 'เอกสาร',
+ audio: 'เสียง',
+ video: 'วีดิทัศน์',
+ localUpload: 'อัปโหลดในเครื่อง',
+ url: 'URL',
+ },
+ enterValue: 'ป้อนค่า',
+ addCondition: 'เพิ่มเงื่อนไข',
+ conditionNotSetup: 'เงื่อนไข NOT ตั้งค่า',
+ selectVariable: 'เลือกตัวแปร...',
+ addSubVariable: 'ตัวแปรย่อย',
+ select: 'เลือก',
+ },
+ variableAssigner: {
+ title: 'กําหนดตัวแปร',
+ outputType: 'ประเภทเอาต์พุต',
+ varNotSet: 'ไม่ได้ตั้งค่าตัวแปร',
+ noVarTip: 'เพิ่มตัวแปรที่จะกําหนด',
+ type: {
+ string: 'เชือก',
+ number: 'เลข',
+ object: 'วัตถุ',
+ array: 'อาร์เรย์',
+ },
+ aggregationGroup: 'กลุ่มการรวม',
+ aggregationGroupTip: 'การเปิดใช้งานคุณลักษณะนี้ช่วยให้ตัวรวบรวมตัวแปรสามารถรวมชุดตัวแปรหลายชุดได้',
+ addGroup: 'เพิ่มกลุ่ม',
+ outputVars: {
+ varDescribe: '{{groupName}} เอาต์พุต',
+ },
+ setAssignVariable: 'ตั้งค่าตัวแปรกําหนด',
+ },
+ assigner: {
+ 'assignedVariable': 'ตัวแปรที่กําหนด',
+ 'writeMode': 'โหมดเขียน',
+ 'writeModeTip': 'โหมดผนวก: ใช้ได้กับตัวแปรอาร์เรย์เท่านั้น',
+ 'over-write': 'เขียน ทับ',
+ 'append': 'ผนวก',
+ 'plus': 'บวก',
+ 'clear': 'ใส',
+ 'setVariable': 'ตั้งค่าตัวแปร',
+ 'variable': 'ตัวแปร',
+ },
+ tool: {
+ toAuthorize: 'เพื่ออนุญาต',
+ inputVars: 'ตัวแปรอินพุต',
+ outputVars: {
+ text: 'เนื้อหาที่สร้างขึ้นด้วยเครื่องมือ',
+ files: {
+ title: 'ไฟล์ที่สร้างขึ้นด้วยเครื่องมือ',
+ type: 'ประเภทการสนับสนุน ตอนนี้รองรับเฉพาะรูปภาพ',
+ transfer_method: 'วิธีการโอน ค่าเป็น remote_url หรือ local_file',
+ url: 'URL ของรูปภาพ',
+ upload_file_id: 'อัปโหลดรหัสไฟล์',
+ },
+ json: 'เครื่องมือสร้าง JSON',
+ },
+ },
+ questionClassifiers: {
+ model: 'แบบ',
+ inputVars: 'ตัวแปรอินพุต',
+ outputVars: {
+ className: 'ชื่อคลาส',
+ },
+ class: 'ประเภท',
+ classNamePlaceholder: 'เขียนชื่อชั้นเรียนของคุณ',
+ advancedSetting: 'การตั้งค่าขั้นสูง',
+ topicName: 'ชื่อหัวข้อ',
+ topicPlaceholder: 'เขียนชื่อหัวข้อของคุณ',
+ addClass: 'เพิ่มชั้นเรียน',
+ instruction: 'การสอน',
+ instructionTip: 'ป้อนคําแนะนําเพิ่มเติมเพื่อช่วยให้ตัวจําแนกคําถามเข้าใจวิธีจัดหมวดหมู่คําถามได้ดียิ่งขึ้น',
+ instructionPlaceholder: 'เขียนคําแนะนําของคุณ',
+ },
+ parameterExtractor: {
+ inputVar: 'ตัวแปรอินพุต',
+ extractParameters: 'แยกพารามิเตอร์',
+ importFromTool: 'นําเข้าจากเครื่องมือ',
+ addExtractParameter: 'เพิ่มพารามิเตอร์การแยกข้อมูล',
+ addExtractParameterContent: {
+ name: 'ชื่อ',
+ namePlaceholder: 'แยกชื่อพารามิเตอร์',
+ type: 'ประเภท',
+ typePlaceholder: 'แยกประเภทพารามิเตอร์',
+ description: 'คำอธิบาย',
+ descriptionPlaceholder: 'แยกคําอธิบายพารามิเตอร์',
+ required: 'ต้องระบุ',
+ requiredContent: 'Required ใช้เป็นข้อมูลอ้างอิงสําหรับการอนุมานแบบจําลองเท่านั้น และไม่ใช่สําหรับการตรวจสอบความถูกต้องของเอาต์พุตพารามิเตอร์ที่จําเป็น',
+ },
+ extractParametersNotSet: 'ไม่ได้ตั้งค่าพารามิเตอร์การแยกข้อมูล',
+ instruction: 'การสอน',
+ instructionTip: 'ป้อนคําแนะนําเพิ่มเติมเพื่อช่วยให้ตัวแยกพารามิเตอร์เข้าใจวิธีการแยกพารามิเตอร์',
+ advancedSetting: 'การตั้งค่าขั้นสูง',
+ reasoningMode: 'โหมดการให้เหตุผล',
+ reasoningModeTip: 'คุณสามารถเลือกโหมดการให้เหตุผลที่เหมาะสมตามความสามารถของโมเดลในการตอบสนองต่อคําแนะนําสําหรับการเรียกใช้ฟังก์ชันหรือข้อความแจ้ง',
+ isSuccess: 'คือ Success เมื่อสําเร็จค่าคือ 1 เมื่อล้มเหลวค่าเป็น 0',
+ errorReason: 'สาเหตุข้อผิดพลาด',
+ },
+ iteration: {
+ deleteTitle: 'ลบโหนดการทําซ้ํา?',
+ deleteDesc: 'การลบโหนดการวนซ้ําจะเป็นการลบโหนดย่อยทั้งหมด',
+ input: 'อินพุต',
+ output: 'ตัวแปรเอาต์พุต',
+ iteration_one: '{{นับ}} เกิด ซ้ำ',
+ iteration_other: '{{นับ}} เกิด ซ้ำ',
+ currentIteration: 'การทําซ้ําปัจจุบัน',
+ comma: ',',
+ error_one: '{{นับ}} ความผิดพลาด',
+ error_other: '{{นับ}} ข้อ ผิด พลาด',
+ parallelMode: 'โหมดขนาน',
+ parallelModeUpper: 'โหมดขนาน',
+ parallelModeEnableTitle: 'เปิดใช้งานโหมดขนาน',
+ parallelModeEnableDesc: 'ในโหมดขนาน งานภายในการทําซ้ําจะสนับสนุนการดําเนินการแบบขนาน คุณสามารถกําหนดค่านี้ได้ในแผงคุณสมบัติทางด้านขวา',
+ parallelPanelDesc: 'ในโหมดขนาน งานในการวนซ้ําจะสนับสนุนการดําเนินการแบบขนาน',
+ MaxParallelismTitle: 'ความขนานสูงสุด',
+ MaxParallelismDesc: 'ความขนานสูงสุดใช้เพื่อควบคุมจํานวนงานที่ดําเนินการพร้อมกันในการทําซ้ําครั้งเดียว',
+ errorResponseMethod: 'วิธีการตอบสนองข้อผิดพลาด',
+ ErrorMethod: {
+ operationTerminated: 'ยก เลิก',
+ continueOnError: 'ดําเนินการต่อเมื่อเกิดข้อผิดพลาด',
+ removeAbnormalOutput: 'ลบเอาต์พุตที่ผิดปกติ',
+ },
+ answerNodeWarningDesc: 'คําเตือนโหมดคู่ขนาน: โหนดคําตอบ การกําหนดตัวแปรการสนทนา และการดําเนินการอ่าน/เขียนแบบถาวรภายในการวนซ้ําอาจทําให้เกิดข้อยกเว้น',
+ },
+ note: {
+ addNote: 'เพิ่มหมายเหตุ',
+ editor: {
+ placeholder: 'เขียนบันทึกของคุณ...',
+ small: 'เล็ก',
+ medium: 'ปานกลาง',
+ large: 'ใหญ่',
+ bold: 'กล้า',
+ italic: 'ตัวเอียง',
+ strikethrough: 'ขีดทับ',
+ link: 'ลิงก์',
+ openLink: 'เปิด',
+ unlink: 'ยก เลิก',
+ enterUrl: 'ป้อน URL...',
+ invalidUrl: 'URL ไม่ถูกต้อง',
+ bulletList: 'รายการสัญลักษณ์แสดงหัวข้อย่อย',
+ showAuthor: 'แสดงผู้เขียน',
+ },
+ },
+ docExtractor: {
+ inputVar: 'ตัวแปรอินพุต',
+ outputVars: {
+ text: 'ข้อความที่แยกออกมา',
+ },
+ supportFileTypes: 'ประเภทไฟล์ที่รองรับ: {{types}}',
+ learnMore: 'ศึกษาเพิ่มเติม',
+ },
+ listFilter: {
+ inputVar: 'ตัวแปรอินพุต',
+ filterCondition: 'เงื่อนไขการกรอง',
+ filterConditionKey: 'คีย์เงื่อนไขตัวกรอง',
+ extractsCondition: 'แยกรายการ N',
+ filterConditionComparisonOperator: 'ตัวดําเนินการเปรียบเทียบเงื่อนไขตัวกรอง',
+ filterConditionComparisonValue: 'ค่าเงื่อนไขตัวกรอง',
+ selectVariableKeyPlaceholder: 'เลือกคีย์ตัวแปรย่อย',
+ limit: 'ด้านบน N',
+ orderBy: 'สั่งซื้อโดย',
+ asc: 'เอเอสซี',
+ desc: 'สูง สุด',
+ outputVars: {
+ result: 'กรองผลลัพธ์',
+ first_record: 'บันทึกแรก',
+ last_record: 'บันทึกล่าสุด',
+ },
+ },
+ },
+ tracing: {
+ stopBy: 'แวะที่ {{user}}',
+ },
+}
+
+export default translation