From e3119112a6d6305a47b3954534ec3bf8cf91bea3 Mon Sep 17 00:00:00 2001 From: Yi Xiao <54782454+YIXIAO0@users.noreply.github.com> Date: Fri, 29 Nov 2024 14:20:48 +0800 Subject: [PATCH] chore: add Thai GUI (#11201) --- api/constants/languages.py | 1 + web/i18n/language.ts | 4 + web/i18n/languages.json | 2 +- web/i18n/th-TH/app-annotation.ts | 87 ++++ web/i18n/th-TH/app-api.ts | 85 ++++ web/i18n/th-TH/app-debug.ts | 0 web/i18n/th-TH/app-log.ts | 94 ++++ web/i18n/th-TH/app-overview.ts | 168 +++++++ web/i18n/th-TH/app.ts | 142 ++++++ web/i18n/th-TH/billing.ts | 118 +++++ web/i18n/th-TH/common.ts | 598 ++++++++++++++++++++++++ web/i18n/th-TH/custom.ts | 30 ++ web/i18n/th-TH/dataset-creation.ts | 176 +++++++ web/i18n/th-TH/dataset-documents.ts | 351 ++++++++++++++ web/i18n/th-TH/dataset-hit-testing.ts | 30 ++ web/i18n/th-TH/dataset-settings.ts | 38 ++ web/i18n/th-TH/dataset.ts | 150 ++++++ web/i18n/th-TH/explore.ts | 41 ++ web/i18n/th-TH/layout.ts | 3 + web/i18n/th-TH/login.ts | 109 +++++ web/i18n/th-TH/register.ts | 3 + web/i18n/th-TH/run-log.ts | 29 ++ web/i18n/th-TH/share-app.ts | 69 +++ web/i18n/th-TH/tools.ts | 153 +++++++ web/i18n/th-TH/workflow.ts | 635 ++++++++++++++++++++++++++ 25 files changed, 3115 insertions(+), 1 deletion(-) create mode 100644 web/i18n/th-TH/app-annotation.ts create mode 100644 web/i18n/th-TH/app-api.ts create mode 100644 web/i18n/th-TH/app-debug.ts create mode 100644 web/i18n/th-TH/app-log.ts create mode 100644 web/i18n/th-TH/app-overview.ts create mode 100644 web/i18n/th-TH/app.ts create mode 100644 web/i18n/th-TH/billing.ts create mode 100644 web/i18n/th-TH/common.ts create mode 100644 web/i18n/th-TH/custom.ts create mode 100644 web/i18n/th-TH/dataset-creation.ts create mode 100644 web/i18n/th-TH/dataset-documents.ts create mode 100644 web/i18n/th-TH/dataset-hit-testing.ts create mode 100644 web/i18n/th-TH/dataset-settings.ts create mode 100644 web/i18n/th-TH/dataset.ts create mode 100644 web/i18n/th-TH/explore.ts create mode 100644 web/i18n/th-TH/layout.ts create mode 100644 web/i18n/th-TH/login.ts create mode 100644 web/i18n/th-TH/register.ts create mode 100644 web/i18n/th-TH/run-log.ts create mode 100644 web/i18n/th-TH/share-app.ts create mode 100644 web/i18n/th-TH/tools.ts create mode 100644 web/i18n/th-TH/workflow.ts 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