From 59cf47d3e6fafe035416b5cd0512fd61897c7137 Mon Sep 17 00:00:00 2001 From: SkateSpots Date: Tue, 6 Oct 2026 13:51:23 +0700 Subject: [PATCH] =?UTF-8?q?i18n(th):=20batch=204=20=E2=80=94=20shared=20la?= =?UTF-8?q?bels,=20fees=20&=20receipts,=20physical=20cards?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/i18n/th/batch4.ts | 490 ++++++++++++++++++++++++++++++++++++++++++ src/i18n/th/index.ts | 2 + 2 files changed, 492 insertions(+) create mode 100644 src/i18n/th/batch4.ts diff --git a/src/i18n/th/batch4.ts b/src/i18n/th/batch4.ts new file mode 100644 index 0000000..7e649d5 --- /dev/null +++ b/src/i18n/th/batch4.ts @@ -0,0 +1,490 @@ +/** + * Thai (ไทย) — batch 4: labels (features, categories, status), fees (featured + * placement + Pro receipts) and physical cards. + * Obstacle/feature names and skate hardware stay English. + */ +const thBatch4 = { + labelsUi: { + spotCategory: { + street: { label: 'Street', description: 'สปอตที่พบเจอทั่วไป ภูมิประเทศในเมือง' }, + transition: { label: 'Transition', description: 'พื้นผิวโค้ง/ทางลาด' }, + park: { label: 'Park', description: 'สเก็ตพาร์คที่สร้างขึ้น' }, + plaza: { label: 'Plaza', description: 'ลานเมือง (เช่น MACBA, Love Park)' }, + }, + spotFeature: { + wallrides: 'Wallrides', + stairs: 'Stairs & Handrails', + rails: 'Rails', + ledges: 'Ledges & Curbs', + gaps: 'Gaps', + flatground: 'Flatground', + 'manual-pads': 'Manual Pads', + 'half-pipes': 'Half Pipes', + 'quarter-pipes': 'Quarter Pipes', + 'mini-ramps': 'Mini Ramps', + bowls: 'Bowls', + vert: 'Vert Ramps', + 'mega-ramps': 'Mega Ramps', + hubbas: 'Hubbas', + 'euro-gaps': 'Euro Gaps', + banks: 'Banks', + 'spine-ramps': 'Spine Ramps', + 'roll-ins': 'Roll-ins', + hips: 'Hips', + volcano: 'Volcano', + pyramids: 'Pyramids / Funboxes', + 'snake-runs': 'Snake Runs', + 'pump-track': 'Pump Track Rollers', + 'flat-bars': 'Flat Bars', + }, + spotType: { + street: 'Street', + transition: 'Transition', + park: 'Park', + plaza: 'Plaza', + wallrides: 'Wallrides', + stairs: 'Stairs & Handrails', + rails: 'Rails', + ledges: 'Ledges & Curbs', + gaps: 'Gaps', + flatground: 'Flatground', + 'manual-pads': 'Manual Pads', + 'half-pipes': 'Half Pipes', + 'quarter-pipes': 'Quarter Pipes', + 'mini-ramps': 'Mini Ramps', + bowls: 'Bowls', + vert: 'Vert Ramps', + 'mega-ramps': 'Mega Ramps', + hubbas: 'Hubbas', + 'euro-gaps': 'Euro Gaps', + banks: 'Banks', + 'spine-ramps': 'Spine Ramps', + 'roll-ins': 'Roll-ins', + hips: 'Hips', + volcano: 'Volcano', + pyramids: 'Pyramids / Funboxes', + 'snake-runs': 'Snake Runs', + 'pump-track': 'Pump Track Rollers', + 'flat-bars': 'Flat Bars', + diy: 'DIY', + rail: 'Rail', + ledge: 'Ledge', + gap: 'Gap', + bowl: 'Bowl', + stall: 'Stall', + slappy: 'Slappy', + }, + access: { + public: { label: 'สาธารณะ - เปิดให้ทุกคน' }, + private: { label: 'ที่ดินส่วนบุคคล - ต้องขออนุญาต' }, + locals: { label: 'ถามคนท้องถิ่นก่อน' }, + }, + shelter: { + outdoor: { label: 'กลางแจ้ง', short: 'กลางแจ้ง', description: 'โล่งสนิท — ฝนตกเล่นไม่ได้' }, + partial: { label: 'มีที่กำบังบางส่วน', short: 'กำบังบางส่วน', description: 'สิ่งกีดขวางบางส่วนยังแห้งอยู่' }, + covered: { label: 'มีหลังคา/มุง', short: 'มีหลังคา', description: 'กลางแจ้งแต่มีหลังคาคลุม' }, + indoor: { label: 'ในร่ม', short: 'ในร่ม', description: 'ปิดมิดชิด — เล่นได้ทั้งฝนและแดด' }, + }, + eventType: { + contest: 'การแข่งขัน', + demo: 'Demo', + session: 'Session', + workshop: 'เวิร์กช็อป', + premiere: 'รอบปฐมทัศน์', + tradeshow: 'งานแสดงสินค้า', + gameskate: 'Game of Skate', + concert: '🎸 คอนเสิร์ต', + jam: '🎵 Jam', + festival: '🎪 เทศกาล', + popup: '🎯 ป็อปอัป', + }, + gearCategory: { + deck: 'Deck', + trucks: 'Trucks', + wheels: 'Wheels', + bearings: 'Bearings', + shoes: 'รองเท้าสเก็ต', + clothing: 'เสื้อผ้า', + protective: 'Gear ป้องกัน', + stickers: 'สติกเกอร์', + wax: 'Wax', + tools: 'เครื่องมือ', + griptape: 'Griptape', + rubbrick: 'Rub Brick', + }, + gearCondition: { + new: { label: 'ใหม่', description: 'ไม่เคยใช้ ยังอยู่ในบรรจุภัณฑ์' }, + like_new: { label: 'เหมือนใหม่', description: 'แทบไม่ใช้ สภาพดีเยี่ยม' }, + good: { label: 'ดี', description: 'ใช้งานปกติ ทำงานสมบูรณ์' }, + well_used: { label: 'ใช้มาพอสมควร', description: 'มีร่องรอยแต่ยังใช้ได้' }, + }, + priceType: { + fixed: { label: 'ราคาคงที่', description: 'กำหนดราคาเป็น USD หรือ sats' }, + free: { label: 'ฟรี', description: 'แจก' }, + trade: { label: 'แลกเปลี่ยน', description: 'หาคนสลับของ' }, + offer: { label: 'ต่อรองได้', description: 'ราคาเจรจาได้' }, + }, + listingType: { + selling: { label: 'ขาย', description: 'ลงขาย Gear' }, + wtb: { label: 'ต้องการซื้อ', description: 'กำลังหา Gear เฉพาะ' }, + }, + tour: { + spotType: { + street: 'Street', + park: 'Park', + diy: 'DIY', + transition: 'Transition', + hidden: 'สถานที่ลับ', + }, + category: { + local: { label: 'Local Tour', description: 'พาชมสปอตที่ซ่อนในเมืองของคุณ' }, + national: { label: 'National Tour', description: 'ทริปข้ามเมืองทั่วประเทศ' }, + international: { label: 'International Tour', description: 'ผจญภัยข้ามพรมแดนหลายประเทศ' }, + destruction: { label: 'World Destruction', description: 'การแข่งขันทีมระดับโลกสไตล์ KOTR' }, + }, + }, + crew: { + vibe: { + street: 'Street', + transition: 'Transition / Vert', + park: 'Park', + diy: 'DIY', + cruising: 'Cruising / ถ่ายคลิป', + oldschool: 'Old School', + allterrain: 'All Terrain', + girls: 'Girl / Woman', + youth: 'Youth / Groms', + adaptive: 'Adaptive', + punk: 'Punk', + hiphop: 'Rap / Hip-Hop', + }, + focus: { + mixed: 'Mixed / ทั่วไป', + builder: 'DIY & ช่างสร้าง', + photo: 'ถ่ายภาพ & หนัง', + coaching: 'โค้ชชิ่ง', + art: 'ศิลปะ & ดีไซน์', + music: 'วงดนตรี & ดนตรี', + wellness: 'ฝึกซ้อม & กายภาพ', + }, + focusDescription: { + mixed: 'Crew สเก็ตทั่วไป — แสดงเฉพาะหน้า Crews', + builder: 'Crew DIY / สร้างพาร์ค — แสดงใน The Lab หมวด Builders ด้วย', + photo: 'Crew ถ่ายคลิป ถ่ายภาพ หรือตัดต่อ — แสดงใน The Lab หมวด Photo & Film ด้วย', + coaching: 'Crew โค้ชชิ่ง / สอน — แสดงใน The Lab หมวด Coaching ด้วย', + art: 'กลุ่มศิลปะ ดีไซน์ Graffiti หรือรอยสัก — แสดงใน The Lab หมวด Art & Design ด้วย', + music: 'วงดนตรีหรือกลุ่มดนตรี — แสดงใน The Lab หมวด Music ด้วย', + wellness: 'Crew ฝึกซ้อม ฟิตเนส หรือกายภาพ — แสดงใน The Lab หมวด Training ด้วย', + }, + lookingFor: { + filmer: 'Filmer', + photographer: 'ช่างภาพ', + editor: 'ตัดต่อวิดีโอ', + coach: 'โค้ช', + builder: 'ช่างสร้าง Ramp', + artist: 'ศิลปิน / ดีไซเนอร์', + musician: 'นักดนตรี / วง', + members: 'สมาชิกใหม่', + }, + role: { + filmer: 'Filmer', + photographer: 'ช่างภาพ', + editor: 'ตัดต่อ', + coach: 'โค้ช', + builder: 'ช่างสร้าง', + artist: 'ศิลปิน', + graffiti: 'Graffiti', + tattoo: 'Tattoo', + trainer: 'เทรนเนอร์', + musician: 'นักดนตรี', + judge: 'กรรมการ', + manager: 'ผู้จัดการทีม', + og: 'OG', + }, + }, + memberVisibility: { + public: { + label: 'สาธารณะ', + description: 'ใครก็เห็นคุณใน crew นี้ — บนหน้า crew สาธารณะและในการค้นหาเพื่อน crew', + }, + crew: { + label: 'เฉพาะ crew', + description: 'เฉพาะเพื่อน crew ที่ยืนยันแล้วและผู้ก่อตั้งเห็นคุณที่นี่ คนอื่นเห็นคุณเป็น “สมาชิกที่ซ่อนอยู่” ไม่ระบุตัวตน หมายเหตุ: นี่คือความเป็นส่วนตัวระดับแอป — แท็กสมาชิกของคุณยังอยู่สาธารณะบน relay แค่ไม่แสดงให้คนนอกเห็น', + }, + }, + tagCategory: { + features: { name: 'ลักษณะ', description: 'สิ่งกีดขวางและภูมิประเทศ' }, + surfaces: { name: 'พื้นผิว', description: 'วัสดุและผิวสัมผัส' }, + sizes: { name: 'ขนาด', description: 'มิติและสเกล' }, + stairs: { name: 'จำนวนขั้น', description: 'จำนวนขั้นบันได' }, + vibes: { name: 'บรรยากาศ', description: 'บรรยากาศและสภาพ' }, + location: { name: 'ตำแหน่ง', description: 'บริบทของสถานที่' }, + tricks: { name: 'ทริก', description: 'เหมาะกับทริกเฉพาะ' }, + }, + spotTagCategory: { + street: { label: 'Street', description: 'สปอต Street - บันได Rails Ledges' }, + park: { label: 'Park', description: 'สเก็ตพาร์ค - สาธารณะหรือส่วนตัว' }, + diy: { label: 'DIY', description: 'สปอต DIY/ทำเอง' }, + plaza: { label: 'Plaza', description: 'ลานสาธารณะที่มีสถาปัตยกรรมเหมาะกับสเก็ต' }, + }, + status: { + active: { label: 'ใช้งานได้', description: 'พร้อมเล่น — ไปเลย' }, + bust: { label: 'เสี่ยงถูกไล่', description: 'เสี่ยงถูกไล่สูง — รปภ. หรือตำรวจ' }, + skate_stopped: { label: 'ถูกกันสเก็ต', description: 'มีที่กั้น/ฝาครอบ แต่เล่นได้บางส่วน' }, + closed: { label: 'ปิด', description: 'ปิดชั่วคราว — ก่อสร้างหรือมีอีเวนต์' }, + gone: { label: 'หายไป', description: 'ถูกรื้อ ปูทับ หรือกั้นถาวร' }, + }, + price: { + free: 'ฟรี', + trade: 'แลกเปลี่ยน', + makeOffer: 'ต่อรองได้', + offer: 'ข้อเสนอ', + }, + }, + feesUi: { + feeFeaturedEventLabel: 'อีเวนต์แนะนำ', + feeFeaturedEventDesc: 'โปรโมตอีเวนต์ของคุณบน SkateSpots', + feeFeaturedEventBenefit: 'อีเวนต์ของคุณจะอยู่ด้านบนของหน้าอีเวนต์', + feeLabProfileLabel: 'โปรไฟล์ Lab Pro', + feeLabProfileDesc: 'โปรโมตบริการของคุณใน The Lab', + feeLabProfileBenefit: 'ป้าย Pro + ตำแหน่งแนะนำเมื่อนักสเก็ตดู The Lab', + feeFeaturedShopLabel: 'ร้านแนะนำ', + feeFeaturedShopDesc: 'โปรโมตสเก็ตช็อปของคุณบนแผนที่และไดเรกทอรี', + feeFeaturedShopBenefit: 'ป้ายยืนยัน + หมุดแนะนำบนแผนที่', + feeFeaturedTourLabel: 'ทัวร์แนะนำ', + feeFeaturedTourDesc: 'โปรโมตทัวร์ของคุณบน SkateSpots', + feeFeaturedTourBenefit: 'ป้าย Pro + ตำแหน่งบนสุดเมื่อนักสเก็ตดูทัวร์', + duration7d: '7 วัน', + duration30d: '1 เดือน', + duration90d: '3 เดือน', + duration365d: '12 เดือน', + metaActive: '{{label}} — ใช้งานอยู่', + daysRemainingOne: 'เหลือ {{count}} วัน', + daysRemainingMany: 'เหลือ {{count}} วัน', + zapRequestContent: 'SkateSpots {{label}} ({{tier}})', + errGenerate: 'สร้างใบแจ้งหนี้ไม่สำเร็จ', + paymentReceived: '⚡ ได้รับการชำระเงิน!', + paymentReceivedDesc: '{{amount}} sats — {{label}} เปิดใช้งานแล้ว', + autoPayFailed: 'จ่ายอัตโนมัติไม่สำเร็จ', + autoPayFailedDesc: 'จ่ายเองโดยใช้ QR หรือใบแจ้งหนี้ด้านล่าง', + payStatusUnknown: 'ไม่ทราบสถานะการชำระเงิน — อาจจ่ายไปแล้ว ตรวจกระเป๋าเงินก่อนจ่ายซ้ำ', + invoiceCopied: 'คัดลอกใบแจ้งหนี้แล้ว!', + activeBang: '{{label}} เปิดใช้งานแล้ว!', + chooseDuration: 'เลือกระยะเวลา', + bestValue: 'คุ้มที่สุด', + perDay: '{{price}}/วัน', + validFor: 'ใช้ได้', + amountLine: '~${{usd}} USD · ถึง {{name}} · {{tier}}', + payToContinue: 'จ่าย {{amount}} sats เพื่อดำเนินการต่อ', + generating: 'กำลังสร้างใบแจ้งหนี้…', + processing: 'กำลังประมวลผลการชำระเงิน…', + invoiceQrAlt: 'QR ใบแจ้งหนี้ Lightning', + copyInvoice: 'คัดลอกใบแจ้งหนี้', + openWallet: 'เปิดกระเป๋าเงิน', + payConnected: 'จ่ายด้วยกระเป๋าเงินที่เชื่อมต่อ', + scanAny: 'สแกนด้วยกระเป๋าเงิน Lightning ใดก็ได้', + tryAgain: 'ลองอีกครั้ง', + proReceiptTitle: '🦧⚡ Sasquatch Pro — คุณเข้ามาแล้ว!', + proReceiptPass: 'บัตร: {{pass}} ({{sats}} sats)', + proReceiptActiveUntil: 'ใช้งานถึง: {{until}}', + proReceiptUnlocked: 'สิ่งที่คุณปลดล็อก:', + proReceiptBullet1: '• ผู้ช่วยส่วนตัว — อ่าน Stash, crew, สปอต & รายการของคุณ', + proReceiptBullet2: '• ร่างการดำเนินการ — ลงขาย Gear, โพสต์สภาพสปอต, วางแผนทริป (คุณยืนยัน)', + proReceiptBullet3: '• คำตอบที่ใช้บริบทส่วนตัวของคุณ ไม่ใช่แค่ข้อมูลสาธารณะ', + proReceiptBullet4: '• ⚡ คุณสนับสนุน SkateSpots โดยตรงและช่วยให้ฟรี + ไม่มีโฆษณา', + proReceiptThanks: 'ขอบคุณที่ช่วยให้ SkateSpots ฟรีและไม่มีโฆษณา ไปเล่นได้เลย 🛹', + proReceiptSubject: 'ใบเสร็จ Sasquatch Pro', + receiptContent: 'Sasquatch Pro — บัตรผู้สนับสนุน {{tier}} 🦧⚡', + receiptAlt: 'บัตรผู้สนับสนุน Sasquatch Pro ({{tier}}) ใช้ได้ถึง {{until}}', + purchaseComment: 'Sasquatch Pro — {{tier}} 🦧', + errLogin: 'เข้าสู่ระบบเพื่ออัปเกรดเป็น Pro', + errStart: 'เริ่มการซื้อไม่สำเร็จ', + errRecord: 'บันทึกบัตรของคุณไม่สำเร็จ', + }, + cardUi: { + save: 'บันทึกการ์ดลง Nostr', + saved: 'บันทึกการ์ดแล้ว', + savedDesc: 'การ์ดของคุณลงนามและตรวจสอบได้แล้ว', + saveFailed: 'บันทึกการ์ดไม่สำเร็จ', + notPublished: 'ยังไม่เผยแพร่', + titleNeon: 'Rider', + titleRest: 'Card', + saveFrontPng: 'บันทึกด้านหน้า (PNG)', + expired: 'หมดอายุ', + logoUploaded: 'อัปโหลดโลโก้แล้ว', + logoUploadFailed: 'อัปโหลดโลโก้ไม่สำเร็จ', + venue: 'สถานที่ที่เชื่อม (ไม่บังคับ)', + venueNone: 'ไม่มีสถานที่', + venueHint: 'เลือกสปอตของคุณเองเพื่อผูกบัตรนี้กับสถานที่ ผู้ตรวจสอบจะยืนยันว่าคุณเป็นเจ้าของ', + venuePick: 'เลือกสถานที่ของคุณ', + parkNoVenue: 'บัตร Park ออกได้เฉพาะเจ้าของสถานที่ — แมปสปอตที่คุณเป็นเจ้าของก่อน', + parkAddVenue: 'เพิ่มสปอต', + parkNeedsVenue: 'เลือกสถานที่ที่คุณเป็นเจ้าของ', + parkIssued: 'บัตรที่ออกแล้ว', + parkRevoke: 'เพิกถอน', + parkRevoked: 'เพิกถอนแล้ว', + parkRevokeFailed: 'เพิกถอนไม่สำเร็จ', + v: { + valid: 'ใช้ได้', + validDesc: 'ลายเซ็นถูกต้องและออกโดยสถานที่', + expired: 'หมดอายุ', + expiredDesc: 'เลยวันหมดอายุแล้ว', + revoked: 'เพิกถอนแล้ว', + revokedDesc: 'ผู้ออกยกเลิกบัตรนี้ — อย่ารับ', + invalid: 'ไม่ถูกต้อง', + invalidDesc: 'ลายเซ็นตรวจสอบไม่ผ่าน อย่าเชื่อถือ', + notFound: 'ไม่พบ', + notFoundDesc: 'ไม่พบบันทึกที่ตรงกันบน relay', + unverifiedIssuer: 'ผู้ออกที่ยังไม่ยืนยัน', + unverifiedIssuerDesc: 'บัตรนี้อ้างถึงสถานที่ที่ไม่ได้เป็นของคีย์ผู้ออก', + notBound: 'ไม่ผูกกับสถานที่', + notBoundDesc: 'ไม่ผูกกับสถานที่ — ไม่ได้พิสูจน์เรื่องการเข้าถึง', + noRsvp: 'ไม่มี RSVP', + noRsvpDesc: 'ผู้ถือไม่มี RSVP ของอีเวนต์นี้ในบันทึก', + admitted: 'รับเข้า', + admittedDesc: 'อีเวนต์ของผู้จัด + ผู้ถือ RSVP แล้ว', + noHolder: 'ไม่มีผู้ถือในลิงก์', + noHolderDesc: 'QR นี้ไม่มีผู้ถือตั๋ว (`?h=`) จึงตรวจสอบผู้ถือไม่ได้', + }, + passes: { + tab: 'บัตรของฉัน', + pass: 'บัตรเข้า', + none: 'ยังไม่มีบัตร เมื่อสถานที่หรือผู้จัดออกบัตรให้ จะแสดงที่นี่', + }, + facets: { + title: 'แสดงมิติตัวตน', + crews: 'Crews', + local: 'ท้องถิ่น', + roles: 'บทบาท Lab', + }, + roles: { + coach: 'โค้ช', + filmer: 'Filmer', + editor: 'ตัดต่อ', + photographer: 'ช่างภาพ', + builder: 'ช่างสร้าง', + artist: 'ศิลปิน', + graffiti: 'Graffiti', + tattoo: 'Tattoo', + trainer: 'เทรนเนอร์', + musician: 'นักดนตรี', + judge: 'กรรมการ', + organizer: 'ผู้จัด', + barber: 'ช่างตัดผม', + }, + crew: { + crewCard: 'CREW CARD', + crewSub: 'Crew ของคุณ บนการ์ด', + pick: 'เลือก crew', + none: 'คุณยังไม่อยู่ใน crew — เข้าร่วมหรือสร้างก่อน', + hint: 'การ์ดสร้างจากข้อมูลที่ crew ลงนามเอง แก้ไข crew ที่หน้า crew เพื่อเปลี่ยน', + members: 'MEMBERS', + spots: 'SPOTS', + est: 'ก่อตั้ง {{year}}', + openCall: 'เปิดรับ', + verifiedCrew: 'Crew ที่ยืนยันแล้ว', + viewCrew: 'ดู crew', + }, + event: { + pass: 'EVENT PASS', + passSub: 'บัตรสำหรับอีเวนต์ที่คุณจะไป', + pick: 'เลือกอีเวนต์', + none: 'ยังไม่มีอีเวนต์ — สร้างหรือ RSVP ก่อน', + hint: 'บัตรสร้างจากข้อมูลที่อีเวนต์ลงนามเอง เฉพาะผู้จัดเท่านั้นที่เปลี่ยนได้', + admits: 'รับเข้า', + going: '{{count}} คนไป', + verifiedEvent: 'อีเวนต์ที่ยืนยันแล้ว', + viewEvent: 'ดูอีเวนต์', + issuePass: 'ออกบัตรเช็กอิน', + issuePassBtn: 'ออกบัตร', + issuePassHint: 'บัตรที่ลงนามสำหรับผู้เข้าร่วมคนหนึ่ง — พวกเขาโชว์ที่ประตู', + notOrganiser: 'เฉพาะผู้จัดเท่านั้นที่ออกบัตรได้', + passIssued: 'ออกบัตรแล้ว', + issueFailed: 'ออกบัตรไม่สำเร็จ', + issuedPasses: 'บัตรเช็กอินที่ออกแล้ว', + }, + studio: { + unsaved: 'การเปลี่ยนแปลงที่ยังไม่บันทึก', + saved: 'บันทึกแล้ว', + saveChanges: 'บันทึกการเปลี่ยนแปลง', + allSaved: 'บันทึกแล้ว — เป็นปัจจุบัน', + showOnCard: 'แสดงบนการ์ด', + derived: 'จากโปรไฟล์ Skater ของคุณ', + noSkaterProfile: 'ยังไม่มีโปรไฟล์ Skater —', + editSkaterProfile: 'เพิ่มสไตล์ & ระดับของคุณ', + noPhoto: 'ยังไม่มีรูปโปรไฟล์ —', + addPhoto: 'เพิ่มในโปรไฟล์ของคุณ', + finishTitle: 'ทำการ์ดให้เสร็จ', + finishDesc: 'รูปและโปรไฟล์ Skater ทำให้ดูจริง', + checkPhoto: 'รูปโปรไฟล์', + checkName: 'ชื่อที่แสดง', + checkProfile: 'สไตล์ & ระดับ', + checkCrew: 'เข้าร่วม crew', + moreTypes: 'ประเภทการ์ดเพิ่มเติมจะปลดล็อกเมื่อคุณแมปสปอตที่คุณเป็นเจ้าของ เข้าร่วม crew หรือ RSVP อีเวนต์', + accent: 'สีเน้น', + accentHint: 'แทนที่สีเน้นของธีม', + accentClear: 'ใช้สีของธีม', + logo: 'โลโก้ / ตราประจำตัว', + logoAdd: 'อัปโหลด', + logoChange: 'เปลี่ยน', + logoClear: 'นำออก', + }, + back: { + title: 'ด้านหลังสำหรับพิมพ์', + desc: 'Crews บทบาท ผู้สนับสนุน & ลิงก์ที่ด้านหลัง', + showBack: 'แสดงด้านหลัง', + showFront: 'แสดงด้านหน้า', + empty: 'ยังไม่มีอะไรที่นี่ — เพิ่ม crew บทบาท หรือผู้สนับสนุน', + }, + verify: { + checking: 'กำลังตรวจสอบการ์ด…', + notFound: 'ไม่พบการ์ด', + notFoundDesc: 'ไม่พบอีเวนต์ที่ตรงกันบน relay อาจถูกลบไปแล้ว หรือลิงก์ผิด', + invalid: 'ลายเซ็นไม่ถูกต้อง', + invalidDesc: 'อีเวนต์นี้มีอยู่แต่ลายเซ็นตรวจสอบไม่ผ่าน อย่าเชื่อถือ', + authentic: 'ของแท้', + authenticDesc: 'ลายเซ็นของผู้ออกถูกต้อง', + kind: 'ประเภท', + kindPark: 'บัตรเข้า Park', + kindRider: 'Rider Card', + kindCrew: 'Crew Card', + kindEvent: 'Event pass', + organiser: 'ผู้จัด', + expired: 'หมดอายุ', + valid: 'ใช้ได้', + holder: 'ผู้ถือ', + ticketHolder: 'ผู้ถือตั๋ว', + rsvp: 'RSVP', + rsvpGoing: 'ไป', + rsvpInterested: 'สนใจ', + rsvpNone: 'ไม่พบ RSVP', + revoked: 'บัตรถูกเพิกถอน', + revokedDesc: 'ผู้ออกยกเลิกบัตรนี้ — อย่ารับ', + issuedBy: 'ออกโดย', + accessLevel: 'ระดับการเข้าถึง', + validThru: 'ใช้ได้ถึง', + selfIssued: 'สถานะ', + selfIssuedDesc: 'บัตรประจำตัวที่ออกเอง', + venue: 'สถานที่', + venueVerified: 'ยืนยันแล้ว — คีย์เจ้าของสถานที่นี้ตรงกับผู้ออก', + venueMismatch: 'บัตรนี้อ้างถึงสถานที่ที่ไม่ได้เป็นของคีย์ผู้ออก', + venueNone: 'ไม่ผูกกับสถานที่', + viewCard: 'ดูการ์ด', + disclaimer: 'ลายเซ็นที่ถูกต้องพิสูจน์ว่าใครลงนามบนการ์ดนี้ — ไม่ได้พิสูจน์ฝีมือหรือสิทธิ์การเข้าถึงเกินกว่าที่สถานที่ออกให้', + details: 'รายละเอียด', + invalidLink: 'ลิงก์ไม่ถูกต้อง', + invalidLinkDesc: 'นั่นดูไม่เหมือนลิงก์การ์ดที่ถูกต้อง', + }, + public: { + invalid: 'นั่นดูไม่เหมือนลิงก์การ์ดที่ถูกต้อง', + createYourOwn: 'สร้างการ์ดของคุณเอง', + editYourCard: 'แก้ไขการ์ดของคุณ', + backToEditor: 'กลับไปที่ตัวแก้ไข', + backHome: 'กลับหน้าแรก', + notCustomised: 'นักสเก็ตคนนี้ยังไม่ได้ปรับแต่งการ์ด — นี่คือหน้าตาเริ่มต้น', + verifyNote: 'สแกน QR บนการ์ดเพื่อตรวจสอบ', + }, + }, +}; + +export default thBatch4; diff --git a/src/i18n/th/index.ts b/src/i18n/th/index.ts index c2e4ea9..9d4f9e9 100644 --- a/src/i18n/th/index.ts +++ b/src/i18n/th/index.ts @@ -1,6 +1,7 @@ import batch1 from './batch1'; import batch2 from './batch2'; import batch3 from './batch3'; +import batch4 from './batch4'; /** * Thai (ไทย) translations — composed from fragments so parallel translation @@ -14,6 +15,7 @@ const th = { ...batch1, ...batch2, ...batch3, + ...batch4, }; export default th;