Files
homaroma/apps/website/src/locales/th/translation.json
T
antigravity-bot BotandYour Name b27afb4561 feat(website): implement PDPA cookie consent banner and script manager (#14)
### Overview
Implement PDPA & GDPR compliant Cookie Consent Management Platform (CMP) for pps/website:
- **Zustand Store (cookieConsentStore.ts):** Stores consent record (
ecessary, nalytics, marketing) in localStorage with skipHydration: true for Next.js SSR safety.
- **Cookie Banner (CookieBanner.tsx):** Fixed bottom floating banner with Quiet Luxury styling, providing Accept All, Reject Non-Essential, and Customize buttons.
- **Preferences Modal (CookiePreferencesModal.tsx):** Detailed modal dialog allowing users to granularly toggle Analytics and Marketing cookies (Strictly Necessary is locked).
- **Script Manager (ScriptManager.tsx):** Coordinates Google Consent Mode v2 (nalytics_storage, d_storage), conditionally injects GA4, Meta Pixel, and TikTok Pixel, and dispatches homaroma:consent-change DOM events.
- **Footer Revocation Link:** Added Cookie Preferences link in the Support column of Footer.tsx so users can modify/revoke consent anytime.
- **Multilingual Support:** Added localized text for TH, EN, JA, and ZH.

---------

Co-authored-by: Your Name <you@example.com>
Reviewed-on: #14
Co-authored-by: antigravity-bot <bot@kittisak.com>
2026-10-18 22:51:47 +00:00

240 lines
17 KiB
JSON

{
"nav": {
"home": "หน้าหลัก",
"shop": "ร้านค้า",
"promotions": "โปรโมชัน",
"collections": "คอลเลกชัน",
"scentGuide": "คลาสแนะนำกลิ่น",
"about": "เกี่ยวกับเรา",
"menu": "เมนู",
"faq": "คำถามที่พบบ่อย",
"contact": "ติดต่อเรา",
"shopNow": "ช้อปเลย",
"findMyScent": "ค้นหากลิ่นของคุณ ✨",
"search": {
"title": "ค้นหาสินค้า",
"placeholder": "ค้นหากลิ่น, คอลเลกชัน...",
"quickLinks": "ลิงก์ด่วน",
"allProducts": "สินค้าทั้งหมด"
},
"trackOrder": "ติดตามคำสั่งซื้อ",
"delivery": "การจัดส่งและการคืนสินค้า"
},
"cart": {
"title": "ตะกร้าสินค้า",
"items": "{{count}} รายการ",
"empty": "ตะกร้าสินค้าของคุณว่างเปล่า",
"continueShopping": "เลือกซื้อสินค้าต่อ",
"subtotal": "ยอดรวมยอด",
"shippingNote": "ค่าจัดส่งและภาษีจะถูกคำนวณท้ายสุด",
"proceed": "ดำเนินการชำระเงิน"
},
"footer": {
"catchphrase": "ยกระดับพื้นที่ของคุณด้วยน้ำหอมระดับพรีเมียม",
"explore": "สำรวจ",
"support": "ช่วยเหลือ",
"followUs": "ติดตามเรา",
"contactUs": "ติดต่อสอบถาม",
"rights": "สงวนลิขสิทธิ์."
},
"dynamic": {
"heroLearnMore": "ดูรายละเอียดเพิ่มเติม",
"products": "สินค้า",
"viewAll": "ดูทั้งหมด →",
"emptyProducts": "ไม่พบสินค้าในหมวดนี้",
"authorBy": "โดย",
"notes": {
"top": "กลิ่นเปิด",
"heart": "กลิ่นกลาง",
"base": "กลิ่นฐาน"
},
"contactInfo": {
"address": "ที่อยู่",
"email": "อีเมล",
"line": "Line",
"hours": "เวลาทำการ"
}
},
"contactForm": {
"title": "ติดต่อเรา",
"subtitle": "ส่งข้อความถึงทีมงานของเรา เรายินดีให้บริการและพร้อมตอบทุกข้อสงสัย",
"successTitle": "ส่งข้อความสำเร็จ",
"successBody": "ขอบคุณที่ติดต่อเรา ทีมงานจะรีบตอบกลับโดยเร็วที่สุด",
"name": "ชื่อ-นามสกุล",
"namePlaceholder": "กรอกชื่อของคุณ",
"email": "อีเมล",
"message": "ข้อความ",
"messagePlaceholder": "พิมพ์ข้อความของคุณที่นี่...",
"submit": "ส่งข้อความ"
},
"checkout": {
"title": "ระบบสั่งซื้อปลอดภัย",
"pageHeading": "ยืนยันคำสั่งซื้อ",
"pageDescription": "ตรวจสอบรายการสินค้า ใช้คูปองหรือคะแนนสะสม และสร้างคำสั่งซื้อเพื่อไปยังหน้ารายละเอียดออเดอร์",
"seoDescription": "ตรวจสอบรายการสินค้า กรอกข้อมูลจัดส่ง และสร้างคำสั่งซื้อ {{brand}}",
"seoDescriptionDefault": "ตรวจสอบรายการสินค้า กรอกข้อมูลจัดส่ง และสร้างคำสั่งซื้อ",
"loadingCart": "กำลังโหลดตะกร้าสินค้า...",
"emptyCartTitle": "ตะกร้าสินค้าว่าง",
"emptyCartDesc": "เลือกสินค้าที่คุณชอบก่อน แล้วกลับมายืนยันคำสั่งซื้อที่หน้านี้ได้เลย",
"continueShopping": "กลับไปเลือกสินค้า",
"recipientInfo": {
"title": "ข้อมูลผู้รับสินค้า",
"subtitle": "ข้อมูลนี้จะถูกส่งไปสร้างคำสั่งซื้อตาม contract ของ backend",
"name": "ชื่อผู้รับ *",
"namePlaceholder": "ชื่อ-นามสกุล",
"phone": "เบอร์โทรศัพท์ *",
"phonePlaceholder": "0812345678",
"phoneValidation": "กรุณากรอกเบอร์โทรศัพท์ 9-10 หลัก",
"email": "อีเมล *",
"emailPlaceholder": "you@example.com"
},
"shippingAddress": {
"title": "ที่อยู่จัดส่ง",
"subtitle": "สมาชิกสามารถเลือกที่อยู่ที่บันทึกไว้ หรือกรอกที่อยู่ใหม่ได้",
"addNewAddress": "กรอกที่อยู่ใหม่",
"defaultBadge": "ค่าเริ่มต้น",
"addressLine": "บ้านเลขที่ / ถนน / ซอย *",
"addressLinePlaceholder": "บ้านเลขที่ หมู่บ้าน ถนน ซอย",
"subdistrict": "ตำบล/แขวง *",
"district": "อำเภอ/เขต *",
"province": "จังหวัด *",
"zipcode": "รหัสไปรษณีย์ *",
"zipcodePlaceholder": "10110"
},
"summary": {
"title": "สรุปรายการ",
"itemsCount": "{{count}} รายการในตะกร้า",
"standardVariant": "Standard",
"couponLabel": "คูปองส่วนลด",
"couponPlaceholder": "COUPON",
"applyCoupon": "ใช้",
"removeCoupon": "ลบ",
"pointsLabel": "คะแนนสะสม",
"pointsBalance": "{{count}} points",
"usePoints": "ใช้คะแนนเป็นส่วนลด",
"subtotal": "Subtotal",
"coupon": "Coupon",
"points": "Points",
"shipping": "Shipping",
"freeShipping": "Free shipping",
"total": "Total",
"notice": "รอบนี้จะสร้างคำสั่งซื้อสถานะรอชำระเงิน แล้วพาไปหน้า Order Detail ส่วน payment/slip upload ยังเป็นงานถัดไปตามแผน",
"placeOrder": "สร้างคำสั่งซื้อ"
},
"errors": {
"loadFailed": "ไม่สามารถโหลดข้อมูล checkout ได้",
"invalidCoupon": "คูปองนี้ไม่สามารถใช้ได้",
"validateCouponFailed": "ไม่สามารถตรวจสอบคูปองได้",
"emptyCart": "ตะกร้าสินค้าว่าง กรุณาเลือกสินค้าก่อน checkout",
"missingAddress": "กรุณากรอกที่อยู่จัดส่งให้ครบถ้วน",
"createOrderFailed": "ไม่สามารถสร้างคำสั่งซื้อได้"
}
},
"order": {
"status": {
"PENDING_PAYMENT": "รอชำระเงิน",
"PAID": "ชำระเงินแล้ว",
"PROCESSING": "กำลังจัดเตรียมสินค้า",
"SHIPPED": "จัดส่งแล้ว",
"DELIVERED": "จัดส่งสำเร็จ",
"CANCELLED": "ยกเลิกแล้ว"
},
"header": {
"orderStatus": "สถานะคำสั่งซื้อ",
"orderReceived": "คำสั่งซื้อของคุณถูกบันทึกแล้ว สามารถตรวจสอบสถานะล่าสุดหรือชำระเงินได้จากหน้านี้"
},
"cards": {
"created": "วันที่สั่งซื้อ",
"status": "สถานะ",
"trackingNo": "เลขพัสดุ",
"pendingTracking": "อยู่ระหว่างจัดเตรียมพัสดุ"
},
"items": {
"title": "รายการสินค้า",
"subtotal": "ยอดรวมสินค้า",
"shippingFee": "ค่าจัดส่ง",
"discount": "ส่วนลด",
"total": "ยอดรวมสุทธิ"
},
"payment": {
"required": "ยอดที่ต้องชำระ",
"methodBank": "โอนเงินธนาคาร",
"methodPromptPay": "PromptPay QR",
"bank": "ธนาคาร",
"accountNumber": "เลขที่บัญชี",
"accountName": "ชื่อบัญชี",
"copied": "คัดลอกเลขบัญชีแล้ว",
"copyAccount": "คัดลอกเลขบัญชี",
"transferInstruction": "กรุณาโอนเงินตามยอดที่ระบุ และแนบสลิปด้านล่าง",
"slipVerification": "แนบหลักฐานการโอนเงิน (สลิป)",
"slipUploaded": "แนบสลิปสำเร็จแล้ว",
"slipUploadedDesc": "เราจะตรวจสอบยอดเงินและดำเนินการจัดส่งให้โดยเร็ว",
"uploading": "กำลังอัปโหลด...",
"dropSlip": "คลิกหรือลากไฟล์สลิปมาวางที่นี่",
"supportFormat": "รองรับไฟล์ JPG, PNG (ไม่เกิน 5MB)",
"uploadFailed": "อัปโหลดสลิปไม่สำเร็จ กรุณาลองใหม่อีกครั้ง",
"promptPayTitle": "คิวอาร์โค้ด PromptPay",
"generatePromptPay": "สร้าง QR Code PromptPay",
"generatingQr": "กำลังสร้าง QR Code...",
"scanPromptPay": "สแกน QR Code ด้วยแอปธนาคารเพื่อชำระเงิน",
"paymentComplete": "ชำระเงินเรียบร้อยแล้ว ขอบคุณที่สั่งซื้อสินค้ากับเรา",
"failedGenerateQr": "ไม่สามารถสร้าง PromptPay QR ได้"
},
"navigation": {
"trackAnother": "ค้นหาออเดอร์อื่น",
"continueShopping": "กลับไปช้อปต่อ",
"loadFailed": "ไม่สามารถโหลดคำสั่งซื้อนี้ได้",
"backToTrack": "กลับไปค้นหาคำสั่งซื้อ"
}
},
"track": {
"seoTitle": "ติดตามคำสั่งซื้อ",
"seoDescription": "ตรวจสอบสถานะคำสั่งซื้อด้วยหมายเลขคำสั่งซื้อและเบอร์โทรศัพท์ที่ใช้สั่งซื้อ",
"hero": {
"eyebrow": "สถานะคำสั่งซื้อ",
"title": "ติดตามสถานะสินค้าของคุณ",
"description": "กรอกหมายเลขคำสั่งซื้อและเบอร์โทรศัพท์เพื่อตรวจสอบสถานะสินค้า หรือกลับมาดูคำสั่งซื้อที่เคยค้นหาบนอุปกรณ์นี้"
},
"search": {
"eyebrow": "ค้นหาด้วยตนเอง",
"title": "ค้นหาคำสั่งซื้อ",
"orderIdLabel": "หมายเลขคำสั่งซื้อ",
"orderIdPlaceholder": "เช่น 1024",
"phoneLabel": "เบอร์โทรศัพท์",
"phonePlaceholder": "เบอร์โทรที่ใช้ตอนสั่งซื้อ",
"submit": "ค้นหาคำสั่งซื้อ",
"searching": "กำลังค้นหา..."
},
"recent": {
"title": "ประวัติคำสั่งซื้อบนอุปกรณ์นี้",
"orderLabel": "คำสั่งซื้อ",
"emptyTitle": "ยังไม่มีประวัติคำสั่งซื้อบนอุปกรณ์นี้",
"emptyDesc": "ใช้ฟอร์มค้นหาด้านซ้ายเพื่อค้นหาและบันทึกออเดอร์"
},
"errors": {
"invalidOrderId": "กรุณากรอกหมายเลขคำสั่งซื้อให้ถูกต้อง",
"notFound": "ไม่สามารถยืนยันข้อมูลคำสั่งซื้อได้",
"networkError": "เกิดข้อผิดพลาดในการเชื่อมต่อ กรุณาลองใหม่อีกครั้ง"
}
},
"cookie": {
"settings": "การตั้งค่าคุกกี้",
"bannerTitle": "เราให้ความสำคัญกับความเป็นส่วนตัวของคุณ",
"bannerDesc": "เราใช้คุกกี้เพื่อเพิ่มประสิทธิภาพ ประสบการณ์ที่ดีในการใช้งานเว็บไซต์ และเพื่อการวิเคราะห์ปรับปรุงบริการ ท่านสามารถเลือกตั้งค่าความยินยอมตามประเภทคุกกี้ได้",
"btnCustomize": "ตั้งค่าคุกกี้",
"btnRejectAll": "ปฏิเสธทั้งหมด",
"btnAcceptAll": "ยอมรับทั้งหมด",
"btnSavePreferences": "บันทึกการตั้งค่า",
"prefTitle": "ศูนย์การตั้งค่าความเป็นส่วนตัว",
"prefSubtitle": "จัดการความยินยอมในการจัดเก็บและใช้งานคุกกี้ตาม พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล (PDPA)",
"alwaysActive": "เปิดใช้งานเสมอ",
"catNecessaryTitle": "คุกกี้ที่จำเป็นอย่างยิ่ง (Strictly Necessary)",
"catNecessaryDesc": "คุกกี้เหล่านี้มีความจำเป็นต่อการทำงานพื้นฐานของเว็บไซต์ เช่น การเข้าสู่ระบบ ความปลอดภัย การจดจำสินค้าในตะกร้า และการตั้งค่าภาษา เว็บไซต์ไม่สามารถทำงานได้อย่างถูกต้องหากไม่มีคุกกี้เหล่านี้",
"catAnalyticsTitle": "คุกกี้เพื่อการวิเคราะห์และวัดผล (Analytics & Performance)",
"catAnalyticsDesc": "ช่วยให้เราทราบสถิติการเข้าชม พฤติกรรมหน้าเว็บยอดนิยม และเส้นทางการใช้งานของผู้ใช้ เพื่อนำข้อมูลไปปรับปรุงประสิทธิภาพและบริการ (เช่น Google Analytics 4) ข้อมูลจะถูกจัดเก็บแบบไม่ระบุตัวตนโดยตรง",
"catMarketingTitle": "คุกกี้เพื่อการตลาดและโฆษณา (Marketing & Targeting)",
"catMarketingDesc": "ใช้เพื่อนำเสนอโปรโมชัน โฆษณา และเนื้อหาที่สอดคล้องกับความสนใจของท่านผ่านแพลตฟอร์มพันธมิตร (เช่น Meta Pixel, TikTok Pixel, Google Ads) รวมถึงวัดประสิทธิผลของแคมเปญ"
}
}