Files
th-hotel-simple/client/src/i18n/locales/th-TH.ts
2026-07-18 12:58:01 +07:00

742 lines
46 KiB
TypeScript

export default {
app: {
name: 'Hotel OMS',
theme: 'ธีม',
language: 'ภาษา',
navigationAria: 'เมนูการจอง',
healthUp: 'เชื่อมต่อหลังบ้านแล้ว',
healthDown: 'หลังบ้านออฟไลน์',
healthChecking: 'กำลังตรวจสอบ',
},
auth: {
loginTitle: 'เข้าสู่ระบบ',
loginSubtitle: 'ใช้บัญชีระบบเพื่อเข้าสู่พื้นที่ทำงานการจองของ TH Hotel',
username: 'ชื่อผู้ใช้',
password: 'รหัสผ่าน',
loginSubmit: 'เข้าสู่ระบบ',
loggingIn: 'กำลังเข้าสู่ระบบ',
loginFailed: 'ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง',
logout: 'ออกจากระบบ',
currentUser: 'ผู้ใช้ปัจจุบัน',
currentHotel: 'โรงแรมปัจจุบัน',
unauthorizedTitle: 'ไม่มีสิทธิ์เข้าถึง',
unauthorizedMessage: 'บัญชีนี้ไม่มีสิทธิ์เข้าถึงหน้านี้หรือการดำเนินการนี้',
backHome: 'กลับไปหน้าที่เข้าถึงได้',
},
nav: {
orders: 'รายการออเดอร์',
taskQueue: 'คิวงาน',
manualInvoice: 'ออกใบแจ้งหนี้เอง',
roomingList: 'สร้าง Rooming List',
sourceMessages: 'แหล่งที่มาข้อความ',
systemStatus: 'สถานะระบบ',
orderDetail: 'รายละเอียดออเดอร์',
taskDetail: 'รายละเอียดงาน',
sourceMessageConversation: 'เธรดอีเมล',
debugEml: 'Debug EML',
systemSettings: 'ตั้งค่าระบบ',
systemUsers: 'ผู้ใช้',
systemRoles: 'บทบาท',
systemMenus: 'เมนู',
systemHotels: 'โรงแรม',
systemAudits: 'บันทึกผู้ดูแล',
},
common: {
loading: 'กำลังโหลด',
noData: 'ไม่มีข้อมูล',
endpointPending: 'รอเชื่อมต่อ API',
endpointMissing: 'ยังขาดข้อมูลจาก API',
all: 'ทั้งหมด',
unknownStatus: 'สถานะไม่ทราบ',
unknownTaskType: 'ประเภทงานไม่ทราบ',
unknownTaskSubtype: 'ประเภทย่อยไม่ทราบ',
unknownReadonlyReason: 'ยังประมวลผลไม่ได้',
unknownActorType: 'ผู้ดำเนินการไม่ทราบ',
unknownAuditAction: 'การดำเนินการไม่ทราบ',
unknownOperation: 'การดำเนินการไม่ทราบ',
previousPage: 'หน้าก่อนหน้า',
nextPage: 'หน้าถัดไป',
pageStatus: 'หน้า {current} / {total}',
pageSize: 'ต่อหน้า',
refresh: 'รีเฟรช',
saving: 'กำลังบันทึก',
cancel: 'ยกเลิก',
},
notFound: {
title: 'หน้านี้ยังไม่พร้อม',
message: 'เมนูหรือลิงก์นี้ยังไม่มีหน้าฝั่งหน้าเว็บรองรับ',
backHome: 'กลับไปหน้าที่เข้าถึงได้',
},
systemAdmin: {
title: 'ตั้งค่าระบบ',
subtitle: 'ดูแลผู้ใช้ บทบาท สิทธิ์ เมนู และข้อมูลโรงแรม',
navigationAria: 'เมนูตั้งค่าระบบ',
common: {
keyword: 'คำค้น',
viewDetail: 'ดูรายละเอียด',
selectRow: 'เลือกหนึ่งแถวเพื่อดูรายละเอียด',
create: 'สร้าง',
save: 'บันทึก',
edit: 'แก้ไข',
yes: 'ใช่',
no: 'ไม่ใช่',
},
status: {
ACTIVE: 'เปิดใช้งาน',
DISABLED: 'ปิดใช้งาน',
},
users: {
title: 'ตัวกรองผู้ใช้',
tableTitle: 'ข้อมูลผู้ใช้',
detailTitle: 'รายละเอียดผู้ใช้',
createTitle: 'สร้างผู้ใช้',
totalSuffix: 'ผู้ใช้',
keywordPlaceholder: 'ชื่อผู้ใช้ / ชื่อแสดง / อีเมล',
userStatus: 'สถานะผู้ใช้',
username: 'ชื่อผู้ใช้',
initialPassword: 'รหัสผ่านเริ่มต้น',
displayName: 'ชื่อแสดง',
email: 'อีเมล',
phone: 'โทรศัพท์',
roles: 'บทบาท',
hotels: 'โรงแรมที่มีสิทธิ์',
defaultHotel: 'โรงแรมเริ่มต้น',
saveRoles: 'บันทึกบทบาท',
saveHotels: 'บันทึกสิทธิ์โรงแรม',
resetPassword: 'รีเซ็ตรหัสผ่าน',
temporaryPassword: 'รหัสผ่านชั่วคราว:',
created: 'สร้างผู้ใช้แล้ว',
columns: {
user: 'ผู้ใช้',
status: 'สถานะ',
roles: 'บทบาท',
defaultHotel: 'โรงแรมเริ่มต้น',
},
},
roles: {
title: 'ตัวกรองบทบาท',
tableTitle: 'ข้อมูลบทบาท',
detailTitle: 'รายละเอียดบทบาท',
createTitle: 'สร้างบทบาทเอง',
totalSuffix: 'บทบาท',
keywordPlaceholder: 'รหัสบทบาท / ชื่อบทบาท',
roleStatus: 'สถานะบทบาท',
roleCode: 'รหัสบทบาท',
roleName: 'ชื่อบทบาท',
builtinReadonly: 'บทบาทระบบถูกดูแลโดยระบบเริ่มต้น จึงแก้ไขที่นี่ไม่ได้',
savePermissions: 'บันทึกสิทธิ์',
columns: {
role: 'บทบาท',
status: 'สถานะ',
builtin: 'ระบบ',
permissions: 'สิทธิ์',
users: 'จำนวนผู้ใช้',
},
},
menus: {
title: 'ตัวกรองเมนู',
managementTitle: 'จัดการเมนู',
managementHint: 'ดูแลลำดับชั้น ลำดับการแสดง การมองเห็น และสิทธิ์ของเมนูด้านข้าง',
createTitle: 'สร้างเมนู',
editTitle: 'แก้ไขเมนู',
tableTitle: 'ข้อมูลเมนู',
totalSuffix: 'เมนู',
keywordPlaceholder: 'รหัสเมนู / ชื่อ / เส้นทาง',
menuStatus: 'สถานะเมนู',
visibleOnly: 'ดูเฉพาะเมนูที่แสดง',
treeWarningTitle: 'โครงสร้างเมนูมีการตั้งค่าที่ต้องตรวจสอบ',
treeWarningHint: 'หลังบ้านส่งโครงสร้างเมนูกลับมาแล้ว แต่รายการต่อไปนี้ต้องให้ผู้ดูแลตรวจสอบ',
treeTitle: 'โครงสร้างเมนู',
treeDirty: 'มีการปรับโครงสร้างที่ยังไม่ได้บันทึก',
treeDirtyActionBlocked: 'โปรดบันทึกโครงสร้างเมนูก่อนดำเนินการต่อ',
treeWarningSaveBlocked: 'โปรดแก้ไขคำเตือนของโครงสร้างเมนูและยืนยันเมนูหลักให้ถูกต้องก่อนบันทึก',
saveTreeOrder: 'บันทึกโครงสร้าง',
menuCode: 'รหัสเมนู',
menuName: 'ชื่อเมนู',
parentMenu: 'เมนูหลัก',
rootMenu: 'เมนูราก',
componentKey: 'รหัสคอมโพเนนต์',
iconKey: 'รหัสไอคอน',
unknownRoute: 'เส้นทางไม่รู้จัก',
unknownRouteHint: 'เส้นทางนี้ยังไม่ถูกรู้จักโดยหน้าเว็บ อาจเปิดไปยังหน้าที่ยังไม่พร้อม',
permissionLoadFailed: 'โหลดรายการสิทธิ์ไม่สำเร็จ จึงยังเลือกสิทธิ์และบันทึกการตั้งค่าเมนูไม่ได้',
moveUp: 'เลื่อนขึ้น',
moveDown: 'เลื่อนลง',
columns: {
menu: 'เมนู',
route: 'เส้นทาง',
permission: 'สิทธิ์',
visible: 'แสดง',
status: 'สถานะ',
sort: 'ลำดับ',
knownRoute: 'เส้นทางที่รู้จัก',
},
},
hotels: {
title: 'ตัวกรองโรงแรม',
createTitle: 'สร้างโรงแรม',
editTitle: 'แก้ไขโรงแรม',
tableTitle: 'ข้อมูลโรงแรม',
totalSuffix: 'โรงแรม',
keywordPlaceholder: 'รหัสโรงแรม / ชื่อโรงแรม',
hotelStatus: 'สถานะโรงแรม',
hotelId: 'รหัสโรงแรม',
hotelName: 'ชื่อโรงแรม',
saveStatus: 'บันทึกสถานะ',
singleActiveRule: 'โหมดโรงแรมเดียวอนุญาตให้มีโรงแรม ACTIVE ได้เพียงหนึ่งแห่ง โรงแรมที่สร้างใหม่จะปิดใช้งานก่อน',
columns: {
hotel: 'โรงแรม',
status: 'สถานะ',
timeZone: 'เขตเวลา',
authorizedUsers: 'ผู้ใช้ที่มีสิทธิ์',
sort: 'ลำดับ',
},
},
audits: {
title: 'ตัวกรองบันทึก',
tableTitle: 'ข้อมูลบันทึกผู้ดูแล',
totalSuffix: 'รายการบันทึก',
targetType: 'ประเภทเป้าหมาย',
targetId: 'รหัสเป้าหมาย',
action: 'การดำเนินการ',
columns: {
action: 'การดำเนินการ',
target: 'เป้าหมาย',
actor: 'ผู้ดำเนินการ',
occurredAt: 'เวลาเกิดเหตุ',
},
},
},
workbench: {
title: 'โต๊ะงานออเดอร์',
subtitle: 'ดู กรอง และจัดการงานออเดอร์การจอง',
filters: 'ตัวกรอง',
dateRange: 'ช่วงวันที่',
businessKey: 'เลขธุรกิจ / เลขชั่วคราว',
orderStatus: 'สถานะออเดอร์',
taskStatus: 'สถานะงาน',
taskCardType: 'ประเภทการ์ดงาน',
reset: 'รีเซ็ต',
tableTitle: 'ออเดอร์ / งาน',
columns: {
businessKey: 'เลขธุรกิจ',
orderStatus: 'สถานะออเดอร์',
currentTask: 'งานปัจจุบัน',
taskStatus: 'สถานะงาน',
updatedAt: 'อัปเดตล่าสุด',
operation: 'การดำเนินการ',
},
view: 'ดู',
totalPrefix: 'รวม',
totalSuffix: 'รายการงาน',
},
orderList: {
title: 'รายการออเดอร์',
subtitle: 'ดูงานการจองตามออเดอร์',
keyword: 'เลขกรุ๊ป / เลขยืนยัน',
keywordPlaceholder: 'เลขกรุ๊ป / เลขยืนยัน',
groupCode: 'เลขกรุ๊ป',
groupCodePlaceholder: 'กรอกเลขกรุ๊ป',
confirmationNumber: 'เลขยืนยัน',
confirmationNumberPlaceholder: 'กรอกเลขยืนยัน',
tableTitle: 'ข้อมูลออเดอร์',
totalSuffix: 'ออเดอร์',
viewDetail: 'ดูรายละเอียด',
continueTask: 'ทำงานต่อ',
noOpenTask: 'ไม่มีงานค้าง',
endpointPending: 'API รายการออเดอร์ยังไม่เชื่อมต่อ จึงไม่แสดงข้อมูลจำลอง',
columns: {
order: 'ออเดอร์',
status: 'สถานะ',
openTasks: 'งานที่ยังไม่ปิด',
createdAt: 'เวลาสร้าง',
},
},
manualInvoice: {
title: 'ออกใบแจ้งหนี้เอง',
createTitle: 'สร้าง Invoice',
subtitle: 'กรอกข้อมูลเองเพื่อสร้าง Proforma Invoice PDF โดยไม่ต้องอ้างอิงออเดอร์หรืองาน',
sourceBadge: 'สร้างด้วยตนเอง',
independentHint: 'หน้า V1 นี้ไม่ผูกกับออเดอร์หรืองาน หลังบ้านจะบันทึกประวัติการสร้างและ audit',
documentSection: 'ข้อมูลเอกสาร',
recipientSection: 'ผู้รับ',
bookingSection: 'ข้อมูลการจอง',
chargesSection: 'รายการค่าใช้จ่าย',
previewSection: 'ตัวอย่างยอดเงิน',
resultSection: 'ผลการสร้าง',
invoiceDate: 'วันที่ Invoice',
bookingDate: 'วันที่ Booking',
dueDate: 'Due Date',
companySeed: 'เลือก Company',
contactSeed: 'เลือก Attention',
selectCompany: 'เลือก Company',
selectContact: 'เลือก Attention',
company: 'Company',
attention: 'Attention',
address: 'Address',
companyInputPlaceholder: 'กรอกชื่อบริษัท',
attentionInputPlaceholder: 'กรอกชื่อผู้รับ',
addressInputPlaceholder: 'กรอกที่อยู่เรียกเก็บเงินแบบเต็ม',
telephone: 'Tel',
email: 'Email',
groupName: 'Group Name',
arrivalDate: 'Arrival Date',
departureDate: 'Departure Date',
roomRateNote: 'Room Rate Note',
roomRateNotePlaceholder: 'เช่น including BF',
datePlaceholder: 'yyyy-mm-dd',
extraBedRate: 'Extra Bed Rate',
description: 'Description',
roomType: 'Room Type',
quantity: 'Quantity',
rate: 'Rate',
nights: 'Nights',
amount: 'Amount',
subtotal: 'Sub-Total',
vat: 'VAT 7%',
total: 'Total',
addCharge: 'เพิ่มแถว',
removeCharge: 'ลบ',
chargeLineLabel: 'แถวที่ {index}',
removeChargeLineAria: 'ลบแถวที่ {index}',
maxChargesReached: 'V1 รองรับได้สูงสุด 10 รายการค่าใช้จ่าย',
previewDisclaimer: 'ยอดนี้เป็นเพียงตัวอย่าง ยอดสุดท้ายให้ยึด totals จากหลังบ้าน',
manualOverrideHint: 'เลือก Company / Attention แล้วระบบจะกรอกข้อมูลให้ แต่ยังแก้ไขข้อความได้ทั้งหมด',
generate: 'ยืนยันและสร้าง PDF',
generating: 'กำลังสร้าง',
openPdf: 'เปิด PDF',
downloadPdf: 'ดาวน์โหลด PDF',
downloadingPdf: 'กำลังดาวน์โหลด',
downloadFallback: 'เบราว์เซอร์ดาวน์โหลด PDF โดยตรงไม่ได้ จึงเปิดหน้า PDF ให้แทน',
technicalDetails: 'รายละเอียดทางเทคนิค',
generationId: 'รหัสการสร้าง',
generationStatus: 'สถานะ',
pdfUrl: 'ลิงก์ PDF',
hotelId: 'รหัสโรงแรม',
templateCode: 'เทมเพลต',
createdAt: 'เวลาสร้าง',
noPdfUrl: 'หลังบ้านไม่ได้ส่งลิงก์ PDF กลับมา',
backendTotals: 'ยอดจากหลังบ้าน',
validationTitle: 'กรุณาแก้ไขแบบฟอร์ม',
fieldErrors: {
required: 'จำเป็นต้องกรอก',
invalidEmail: 'รูปแบบ Email ไม่ถูกต้อง',
dateOrder: 'ลำดับวันที่ไม่ถูกต้อง',
positiveNumber: 'ต้องมากกว่า 0',
nonNegativeNumber: 'ต้องไม่ต่ำกว่า 0',
},
statuses: {
SUCCEEDED: 'สร้างแล้ว',
GENERATED: 'สร้างแล้ว',
FAILED: 'สร้างไม่สำเร็จ',
PROCESSING: 'กำลังสร้าง',
},
errors: {
FRONTEND_VALIDATION: 'ตรวจสอบแบบฟอร์มไม่ผ่าน กรุณาตรวจฟิลด์ที่จำเป็นและรายการค่าใช้จ่าย',
RESERVATION_INVOICE_VALIDATION_FAILED: 'ตรวจสอบข้อมูล Invoice ไม่ผ่าน กรุณาตรวจแบบฟอร์ม',
RESERVATION_INVOICE_CONTEXT_MISMATCH: 'ออเดอร์หรืองานไม่ตรงกัน',
DOCUMENT_CONVERSION_FAILED: 'สร้าง PDF ไม่สำเร็จ กรุณาลองอีกครั้งหรือติดต่อผู้ดูแล',
DOCUMENT_CONVERSION_TIMEOUT: 'สร้าง PDF หมดเวลา กรุณาลองใหม่ภายหลัง',
AUTH_401: 'เซสชันหมดอายุ กรุณาเข้าสู่ระบบใหม่',
AUTH_403: 'บัญชีนี้ไม่มีสิทธิ์ออกใบแจ้งหนี้เอง',
UNKNOWN: 'สร้างไม่สำเร็จ กรุณาลองอีกครั้ง',
requiredFields: 'กรุณากรอกวันที่ ผู้รับ ข้อมูลการจอง และอย่างน้อยหนึ่งรายการค่าใช้จ่ายที่ถูกต้อง',
invalidEmail: 'รูปแบบ Email ไม่ถูกต้อง',
dueDateBeforeBookingDate: 'Due Date ต้องไม่เร็วกว่าวันที่ Booking',
departureBeforeArrival: 'Departure Date ต้องหลัง Arrival Date',
extraBedNegative: 'Extra Bed Rate ต้องไม่ต่ำกว่า 0',
chargePositive: 'Quantity, Rate และ Nights ต้องมากกว่า 0',
},
},
roomingList: {
eyebrow: 'เครื่องมือ Reservation',
title: 'สร้าง Rooming List Excel',
subtitle: 'อัปโหลดรายชื่อกรุ๊ป กรอกจำนวนคนต่อห้องและค่าเริ่มต้น แล้วดาวน์โหลดไฟล์ Excel ที่สร้างแล้ว',
currentHotel: 'โรงแรมปัจจุบัน',
sourceSection: 'ไฟล์รายชื่อและข้อมูลจำเป็น',
targetSection: 'ค่าเริ่มต้นของ Excel ปลายทาง',
sourceFile: 'ไฟล์ Excel ต้นทาง',
sourceFileHint: 'รองรับ .xls / .xlsx และหน้าเว็บจะไม่อ่านหรือบันทึกข้อมูลรายชื่อแขก',
noFile: 'เลือกไฟล์ .xls / .xlsx',
peoplePerRoom: 'จำนวนคนต่อห้อง',
arrival: 'Arrival',
departure: 'Departure',
roomType: 'Room Type',
roomTypePlaceholder: 'เช่น DLX / TWN',
titleColumn: 'Title',
rateCode: 'Rate Code',
adults: 'Adults',
children: 'Children',
paymentType: 'Payment Type',
vip: 'VIP',
nationality: 'Nationality',
email: 'Email',
idType: 'ID Type',
idNumber: 'ID Number',
generate: 'สร้างและดาวน์โหลด Excel',
generating: 'กำลังสร้าง',
validationTitle: 'กรุณาแก้ไขแบบฟอร์ม',
resultSuccess: 'ผลการสร้าง',
resultDownloaded: 'สร้าง Excel แล้ว และเริ่มดาวน์โหลดในเบราว์เซอร์แล้ว',
downloadedFile: 'ไฟล์ที่ดาวน์โหลด',
fieldErrors: {
fileRequired: 'กรุณาเลือกไฟล์ Excel ต้นทาง',
fileType: 'รองรับเฉพาะไฟล์ .xls / .xlsx',
positiveInteger: 'จำนวนคนต่อห้องต้องมากกว่า 0',
nonNegativeInteger: 'ต้องเป็น 0 หรือจำนวนเต็มบวก',
arrivalRequired: 'กรุณากรอก Arrival',
departureRequired: 'กรุณากรอก Departure',
dateFormat: 'รูปแบบวันที่ต้องเป็น yyyy-MM-dd',
departureAfterArrival: 'Departure ต้องอยู่หลัง Arrival',
roomTypeRequired: 'กรุณากรอก Room Type',
invalidEmail: 'รูปแบบ Email ไม่ถูกต้อง',
},
errors: {
FRONTEND_VALIDATION: 'ตรวจสอบแบบฟอร์มไม่ผ่าน กรุณาตรวจฟิลด์ที่จำเป็น',
ROOMING_LIST_VALIDATION_FAILED: 'ตรวจสอบข้อมูล Rooming List ไม่ผ่าน กรุณาตรวจแบบฟอร์ม',
ROOMING_LIST_SOURCE_FILE_INVALID: 'ไฟล์รายชื่อต้นทางไม่ถูกต้อง กรุณาตรวจหัวตารางและรูปแบบไฟล์',
FRONTEND_PERMISSION_DENIED: 'บัญชีนี้ไม่มีสิทธิ์สร้าง Rooming List',
HOTEL_ACCESS_DENIED: 'บัญชีนี้ไม่มีสิทธิ์เข้าถึงโรงแรมที่เลือก',
AUTH_TOKEN_REQUIRED: 'กรุณาเข้าสู่ระบบก่อนสร้าง Rooming List',
AUTH_SESSION_INVALID: 'เซสชันหมดอายุ กรุณาเข้าสู่ระบบใหม่',
UNKNOWN: 'สร้าง Rooming List ไม่สำเร็จ กรุณาลองใหม่ภายหลัง',
},
},
order: {
summary: 'สรุปออเดอร์',
taskQueue: 'คิวงานของออเดอร์นี้',
sourceMessage: 'ข้อความต้นทาง',
businessKeySource: 'แหล่งที่มาของเลขธุรกิจ',
updatedAt: 'อัปเดตล่าสุด',
guestName: 'แขก',
arrivalDate: 'วันเข้าพัก',
roomType: 'ประเภทห้อง',
amount: 'ยอดเงิน',
openTask: 'จัดการงาน',
groupCode: 'เลขกรุ๊ป (Group Code)',
confirmationNumber: 'เลขยืนยัน (Confirmation No.)',
temporaryOrderNo: 'เลขออเดอร์ชั่วคราว',
blockCode: 'เลขบล็อกกรุ๊ป (Block Code)',
createdAt: 'เวลาสร้าง',
conversationMessageCount: 'จำนวนอีเมลในเธรด',
sourceSummaryPending: 'ข้อมูลสรุปอีเมลต้นทางในไทม์ไลน์งานยังรอหลังบ้านเพิ่มเติม โปรดเข้าไปดูจากงานที่เกี่ยวข้อง',
},
taskList: {
title: 'รายการงาน',
subtitle: 'ดูคิวงานการจองตามงาน',
keyword: 'คำค้นออเดอร์ / อีเมล',
keywordPlaceholder: 'เลขออเดอร์ / คำค้นอีเมล',
taskType: 'ประเภทงาน',
taskSubtype: 'ประเภทย่อยของงาน',
tableTitle: 'ข้อมูลงาน',
totalSuffix: 'งาน',
noSourceSubject: 'ไม่มีหัวข้ออีเมลต้นทาง',
sourceReceivedAt: 'เวลารับอีเมล',
canProcess: 'ประมวลผลได้',
cannotProcess: 'ประมวลผลไม่ได้',
queueParticipation: 'อยู่ในคิวหรือไม่',
queueAll: 'สถานะคิวทั้งหมด',
queueIncluded: 'อยู่ในคิว',
queueExcluded: 'ไม่อยู่ในคิว',
viewTask: 'ดูงาน',
viewOrder: 'ดูออเดอร์',
viewConversation: 'ดูเธรดอีเมล',
sourceOnlyOrderLabel: 'ข้อความต้นทางแบบอ่านอย่างเดียว',
hiddenTechnicalOrder: 'ไม่มีออเดอร์ที่แสดงได้',
columns: {
task: 'งาน',
order: 'ออเดอร์',
card: 'การ์ดงาน',
status: 'สถานะ',
source: 'อีเมลต้นทาง',
queue: 'คิว',
},
},
task: {
title: 'การ์ดงาน',
fieldContract: 'สัญญาข้อมูล',
evidence: 'หลักฐาน',
saveDraft: 'บันทึกร่าง',
confirm: 'ยืนยันงาน',
blocked: 'ถูกบล็อก',
readOnly: 'อ่านอย่างเดียว',
operaOperations: 'การจำลอง OPERA',
audits: 'ไทม์ไลน์ตรวจสอบ',
noOperations: 'การจำลอง OPERA จะถูกสร้างหลังยืนยันงาน',
noAudits: 'ยังไม่มีบันทึกตรวจสอบ',
execute: 'ดำเนินการ',
retry: 'ลองใหม่',
simulateFailure: 'จำลองความล้มเหลว',
fieldNotes: 'หมายเหตุข้อมูล',
emptyValue: 'ยังไม่กรอก',
attachments: 'ไฟล์แนบ',
fieldAreaFallback: 'ข้อมูลพื้นฐาน',
savedLocally: 'บันทึกร่างแล้ว',
confirmedLocally: 'ยืนยันงานแล้ว',
validationFailed: 'โปรดแก้ไขข้อมูลก่อน',
validation: {
required: '{field} จำเป็นต้องกรอก',
enum: '{field} ต้องเลือกจากตัวเลือกที่กำหนด',
date: '{field} ต้องใช้รูปแบบวันที่ YYYY-MM-DD',
number: '{field} ต้องเป็นตัวเลข',
},
viewOrder: 'ดูออเดอร์',
viewConversation: 'ดูเธรดอีเมล',
parentGroup: 'Parent Group',
sourceMessageId: 'รหัสข้อความต้นทาง (ID)',
sourceSubject: 'หัวข้อต้นทาง',
sourceSender: 'ผู้ส่ง',
sourceReceivedAt: 'เวลารับ',
sourceSummaryPending: 'ข้อมูลสรุปอีเมลต้นทางยังรอหลังบ้านเพิ่มเติม',
sourceEmailPreview: 'ตัวอย่างอีเมลต้นทาง',
sourceEmailExcerpt: 'ข้อความบางส่วนของอีเมล',
sourceEmailAttachments: 'ไฟล์แนบ',
sourceEmailNoExcerpt: 'ไม่มีข้อความบางส่วน',
sourceEmailNoAttachments: 'ไม่มีไฟล์แนบ',
sourceEmailFullConversation: 'ดูเธรดอีเมลทั้งหมด',
sourceOnlyResult: 'ผลลัพธ์ทางเข้าของข้อความต้นทาง',
sourceOnlyReadonly: 'งานนี้ใช้แสดงผลลัพธ์ทางเข้าของข้อความต้นทางเท่านั้น ไม่เข้าสู่การจัดการออเดอร์ การแก้ไขข้อมูล หรือ OPERA',
sourceOnlyNoOpera: 'งานประเภทนี้ไม่เกี่ยวข้องกับ OPERA',
routeInfo: 'ข้อมูลเส้นทางและการประมวลผล',
resultType: 'ประเภทผลลัพธ์',
aiTaskType: 'ประเภทงานจาก AI',
systemTaskType: 'ประเภทงานของระบบ',
taskCardType: 'ประเภทการ์ดงาน',
taskSubtype: 'ประเภทย่อยของงาน',
routeCode: 'รหัสเส้นทาง',
systemProcessCategory: 'หมวดการประมวลผลระบบ',
reviewStatus: 'สถานะการตรวจสอบ',
entryResultCode: 'รหัสผลลัพธ์ทางเข้า',
entryResultMeaning: 'ความหมายผลลัพธ์',
entryResultDescription: 'คำอธิบายผลลัพธ์',
entryResultSourceMessageId: 'รหัสข้อความต้นทางของผลลัพธ์',
rawAnswer: 'คำตอบดิบจาก SuperAgent',
agentAssessment: 'ข้อมูลดิบจาก AI',
sourceNotification: 'การแจ้งเตือนข้อความต้นทาง',
manualReviewData: 'ข้อมูลตรวจสอบด้วยคน',
manualReviewEvidence: 'หลักฐานการตรวจสอบด้วยคน',
manualReviewEvidenceFallback: 'ยืนยันตัวตน Parent Group จากอีเมลต้นทางและรายการตัวเลือก',
manualReviewMissingFields: 'ข้อมูลที่ขาด',
manualReviewBlockingPoints: 'จุดที่บล็อก',
manualReviewConflictingPoints: 'จุดที่ขัดแย้ง',
manualReviewSuggestedActions: 'การดำเนินการที่แนะนำ',
manualReviewEvidenceToCheck: 'หลักฐานที่ควรตรวจ',
parentIdentityCandidates: 'ตัวเลือก Parent Group',
parentIdentityCandidate: 'ตัวเลือก',
noParentIdentityCandidates: 'ยังไม่มีตัวเลือก Parent Group ต้องให้หลังบ้านส่ง context_used.parent_identity_candidates',
adapterContractErrors: 'ข้อผิดพลาดสัญญา Adapter',
unhandledIntents: 'เจตนาที่ยังไม่รองรับ',
noSourceOnlyResult: 'ยังไม่มีผลลัพธ์ทางเข้าของข้อความต้นทาง',
manualResolution: {
title: 'ปลดบล็อกการตรวจสอบด้วยคน',
description: 'เติมข้อมูลที่ขาดบนการ์ดงานเดิม แล้วให้หลังบ้านตรวจสอบและปลดบล็อกงาน',
pendingStatus: 'รอตรวจสอบ',
resolvedTitle: 'ตรวจสอบแล้ว',
reasonCode: 'รหัสเหตุผล',
reviewInstruction: 'คำแนะนำการตรวจสอบ',
confirmedOrderId: 'รหัสออเดอร์ที่ยืนยัน',
fieldValuePlaceholder: 'กรอกค่าที่ยืนยันแล้ว',
noSupportedMissingFields: 'ข้อมูลที่ขาดปัจจุบันยังไม่รองรับการปลดบล็อกจากหน้าเว็บ โปรดยืนยัน mapping กับหลังบ้าน',
unopenedFieldsTitle: 'ข้อมูลที่ยังไม่เปิดให้แก้ไข',
fieldBackendUnopened: 'หลังบ้านยังไม่ได้เปิดให้แก้ไขข้อมูลนี้',
fieldRequired: 'โปรดกรอกข้อมูลที่ขาดและรหัสออเดอร์ที่ยืนยัน',
reason: 'หมายเหตุการจัดการ',
reasonPlaceholder: 'ไม่บังคับ ระบุเหตุผลการตัดสินใจ',
submit: 'ส่งผลตรวจสอบ',
succeeded: 'ปลดบล็อกการตรวจสอบด้วยคนแล้ว และรีเฟรชสถานะงานแล้ว',
},
manualConversion: {
title: 'แปลงงานด้วยคน',
description: 'แปลงงาน Fallback / งานตรวจสอบด้วยคนให้เป็นงานการจองที่ประมวลผลได้',
targetTaskType: 'ประเภทงานปลายทาง',
targetOrder: 'ออเดอร์ปลายทาง',
targetOrderHelp: 'งานแก้ไขหรือยกเลิกต้องเลือกออเดอร์ที่ยังไม่ถูกลบ',
targetOrderKeyword: 'ค้นหาออเดอร์ปลายทาง',
targetOrderKeywordPlaceholder: 'เลขกรุ๊ป เลขยืนยัน หรือคำค้นออเดอร์',
searchTargetOrders: 'ค้นหาออเดอร์',
noTargetOrderCandidates: 'กรอกคำค้นแล้วค้นหาออเดอร์ปลายทาง',
orderDeletedDisabled: 'เลือกออเดอร์ที่ถูกลบแล้วไม่ได้',
newBookingHint: 'การแปลงเป็นจองใหม่ไม่จำเป็นต้องเลือกออเดอร์ปลายทาง ระบบหลังบ้านจะจัดออเดอร์ตามบริบทงาน',
reason: 'เหตุผลการแปลง',
reasonPlaceholder: 'ไม่บังคับ ระบุเหตุผลการตัดสินใจ',
submit: 'แปลงงาน',
targetOrderRequired: 'โปรดเลือกออเดอร์ปลายทาง',
succeeded: 'แปลงงานสำเร็จ: {taskType}, ออเดอร์ปลายทาง {orderId}',
orderId: 'รหัสออเดอร์',
},
},
conversation: {
title: 'รายละเอียดเธรดอีเมล',
subtitle: 'ดูอีเมลทั้งหมดและการตอบกลับในเธรดต้นทาง',
endpointPending: 'API รายละเอียดเธรดอีเมลยังไม่เชื่อมต่อ จึงไม่แสดงข้อมูลจำลอง',
subject: 'หัวข้อเธรด',
messageCount: 'จำนวนอีเมล',
channel: 'ช่องทาง',
firstReceivedAt: 'รับครั้งแรก',
lastReceivedAt: 'รับล่าสุด',
emptyBody: 'เนื้อหาอีเมลว่าง',
attachments: 'ไฟล์แนบ / รูปภาพในอีเมล',
unnamedAttachment: 'ไฟล์แนบไม่มีชื่อ',
relatedOrders: 'ออเดอร์ที่เกี่ยวข้อง',
relatedTasks: 'งานที่เกี่ยวข้อง',
},
debugEml: {
title: 'อัปโหลด Debug EML',
subtitle: 'อัปโหลดอีเมล .eml หนึ่งฉบับและดูผล Debug ของ SourceMessage กับ SuperAgent',
uploadConfig: 'ค่าการอัปโหลด',
hotelId: 'Hotel ID',
debugUploadKey: 'คีย์อัปโหลด Debug',
runLabel: 'ป้ายกำกับรัน',
emlFile: 'ไฟล์ .eml',
submit: 'ส่ง Debug',
submitting: 'รอ SuperAgent',
executionStatus: 'สถานะการทำงาน',
status: 'สถานะ',
debugRunId: 'Debug run ID',
backendStatus: 'สถานะจากระบบหลังบ้าน',
backendMessage: 'ข้อความจากระบบหลังบ้าน',
waitingSuperAgent: 'กำลังแยกอีเมลและรอ SuperAgent ตอบกลับ',
systemStages: 'ขั้นตอนของระบบ',
superAgentTrace: 'SuperAgent Trace',
traceToolName: 'เครื่องมือ',
traceInputSummary: 'สรุป input',
traceOutputSummary: 'สรุป output',
traceStatus: 'สถานะ',
traceTime: 'เวลา',
sourceTrace: 'การติดตาม SourceMessage',
sourceMessageId: 'SourceMessage ID',
sourceProvider: 'Source provider',
externalMessageId: 'External message ID',
externalConversationId: 'External conversation ID',
mailPreview: 'ตัวอย่างอีเมล',
noSafeHtml: 'ยังไม่มี HTML ที่ปลอดภัยสำหรับแสดงผล',
uploadedMedia: 'สื่อที่อัปโหลด',
unnamedMedia: 'สื่อไม่มีชื่อ',
rawHtml: 'HTML หลังประมวลผลดิบ',
superAgentResult: 'ผลจาก SuperAgent',
superAgentSessionId: 'SuperAgent session ID',
superAgentRunId: 'SuperAgent run ID',
parsedJson: 'JSON ที่แยกแล้ว',
rawAnswer: 'คำตอบดิบ',
warnings: 'คำเตือน',
debugPayload: 'Debug payload',
statuses: {
idle: 'รออัปโหลด',
uploading: 'กำลังทำงาน',
succeeded: 'สำเร็จ',
failed: 'ล้มเหลว',
},
errors: {
REQUEST_FIELD_REQUIRED: 'ขาดข้อมูลจำเป็น โปรดตรวจ Hotel ID ไฟล์ หรือพารามิเตอร์คำขอ',
EML_FILE_REQUIRED: 'โปรดเลือกไฟล์อีเมล .eml',
EML_FILE_TOO_LARGE: 'ไฟล์อีเมลเกินขนาดที่หลังบ้านกำหนด',
INVALID_FILE_TYPE: 'รองรับเฉพาะไฟล์อีเมล .eml',
DEBUG_UPLOAD_KEY_INVALID: 'คีย์อัปโหลด Debug ขาดหายหรือไม่ถูกต้อง',
EML_PARSE_FAILED: 'ไม่สามารถแยกไฟล์อีเมลได้',
OSS_UPLOAD_FAILED: 'อัปโหลด OSS ล้มเหลว โปรดให้หลังบ้านตรวจสอบ',
SUPERAGENT_OPEN_API_FAILED: 'เรียก SuperAgent ล้มเหลว SourceMessage อาจถูกบันทึกแล้ว',
DEBUG_EML_RUN_FAILED: 'กระบวนการ Debug EML ล้มเหลวภายใน',
UNKNOWN: 'อัปโหลด Debug EML ล้มเหลว',
},
},
status: {
TEMPORARY: 'ชั่วคราว',
ACTIVE: 'ใช้งานอยู่',
ENDED: 'สิ้นสุดแล้ว',
LOGIC_DELETED: 'ลบแล้ว',
PENDING_CONFIRM: 'รอยืนยัน',
READY: 'รอดำเนินการ',
EXECUTING: 'กำลังดำเนินการ',
FAILED: 'ล้มเหลว',
COMPLETED: 'เสร็จแล้ว',
PENDING: 'รอดำเนินการ',
SUCCEEDED: 'สำเร็จ',
BLOCKED: 'ถูกบล็อก',
SKIPPED: 'ข้าม',
},
cardType: {
NEW_BOOKING: 'จองใหม่',
UPDATE_BOOKING: 'แก้ไขการจอง',
CANCEL_BOOKING: 'ยกเลิกการจอง',
CANCEL_ALLOTMENT: 'ยกเลิกโควตา Parent Group',
VOUCHER: 'วอเชอร์',
ROOMING_LIST: 'รายชื่อห้องพัก',
AMEND_GROUP_CODE: 'แก้ไขเลขกรุ๊ป',
TRACE_NOTE: 'หมายเหตุติดตาม (Trace)',
TA_RECORD: 'ข้อมูลบริษัททัวร์',
MESSAGE_NOTIFICATION: 'แจ้งเตือนข้อความ',
INFORMATIONAL_MESSAGE: 'แจ้งเตือนข้อความ (เดิม)',
SOURCE_MESSAGE_REVIEW_NOTIFICATION: 'แจ้งเตือนข้อความต้นทาง',
SOURCE_MESSAGE_ONLY: 'ข้อความต้นทางแบบอ่านอย่างเดียว',
MANUAL_REVIEW: 'ตรวจสอบด้วยคน',
FALLBACK_REVIEW: 'ตรวจสอบด้วยคน',
},
taskSubtype: {
NEW_BOOKING: 'จองใหม่',
UPDATE_BOOKING: 'แก้ไขการจอง',
CANCEL_BOOKING: 'ยกเลิกการจอง',
RATE_CHANGE: 'ปรับราคา',
UPDATE_STAY_DATES: 'แก้ไขวันเข้าพัก',
UPDATE_ROOM_TYPE: 'แก้ไขประเภทห้อง',
UPDATE_FIX_CHARGE: 'แก้ไขค่าบริการคงที่',
CANCEL_ALLOTMENT_CONTROL_BLOCK: 'ยกเลิกบล็อก Parent Group ทั้งก้อน',
NEW_GROUP_BLOCK: 'บล็อกกรุ๊ปใหม่',
NEW_FIT_RESERVATION: 'จองรายบุคคลใหม่',
MANUAL_REVIEW: 'ตรวจสอบด้วยคน',
S10: 'อีเมลข้อมูลทั่วไป (S10)',
S99: 'สร้างชุดข้อมูลธุรกิจไม่ได้ (S99)',
S000: 'อีเมลข้อมูลทั่วไป',
S999: 'ไม่สามารถสร้างชุดข้อมูลธุรกิจได้',
},
resultType: {
NORMAL_TASK: 'งานปกติ',
MANUAL_REVIEW: 'ตรวจสอบด้วยคน',
SOURCE_MESSAGE_REVIEW_NOTIFICATION: 'แจ้งเตือนข้อความต้นทาง',
ADAPTER_CONTRACT_ERROR: 'ข้อผิดพลาดสัญญา Adapter',
UNHANDLED_CURRENT_INTENT: 'เจตนาที่ยังไม่รองรับ',
},
systemProcessCategory: {
BUSINESS_TASK: 'งานธุรกิจ',
SOURCE_MESSAGE_NOTIFICATION: 'แจ้งเตือนข้อความต้นทาง',
ADAPTER_CONTRACT_ERROR: 'ข้อผิดพลาดสัญญา Adapter',
UNHANDLED_CURRENT_INTENT: 'เจตนาที่ยังไม่รองรับ',
},
readonlyReason: {
PROCESSABLE: 'ประมวลผลได้',
PREVIOUS_TASK_NOT_FINISHED: 'งานก่อนหน้ายังไม่เสร็จ',
TASK_FINISHED: 'งานเสร็จแล้ว',
TASK_READ_ONLY: 'งานเป็นอ่านอย่างเดียว',
ORDER_CLOSED: 'ออเดอร์ปิดแล้ว',
QUEUE_EXCLUDED: 'ไม่อยู่ในคิว',
BLOCKED: 'ถูกบล็อก',
MANUAL_REVIEW_REQUIRED: 'ต้องตรวจสอบด้วยคน',
},
actorType: {
USER: 'ผู้ใช้',
SYSTEM: 'ระบบ',
AI: 'AI',
AGENT: 'ผู้ช่วยภายนอก',
BACKEND: 'บริการหลังบ้าน',
},
auditAction: {
TASK_CREATED: 'สร้างงาน',
TASK_LOADED: 'อ่านงาน',
TASK_CONFIRMED: 'ยืนยันงาน',
TASK_CONFIRM: 'ยืนยันงาน',
DRAFT_SAVED: 'บันทึกร่าง',
TASK_UPDATED: 'อัปเดตงาน',
OPERA_EXECUTED: 'ดำเนินการ OPERA',
OPERA_RETRIED: 'ลอง OPERA ใหม่',
MANUAL_REVIEW_CREATED: 'สร้างงานตรวจสอบด้วยคน',
MANUAL_REVIEW_CONVERT: 'แปลงงานด้วยคน',
MANUAL_REVIEW_RESOLVED: 'ปลดบล็อกการตรวจสอบด้วยคน',
},
operaOperation: {
CREATE_RESERVATION: 'สร้างการจอง',
UPDATE_RESERVATION: 'อัปเดตการจอง',
CANCEL_RESERVATION: 'ยกเลิกการจอง',
UPDATE_ROOMING_LIST: 'อัปเดตรายชื่อห้องพัก',
ADD_TRACE_NOTE: 'เพิ่มหมายเหตุติดตาม',
},
}