From 1078bf9a8e173921838d198e358f00d8e4bf6aed Mon Sep 17 00:00:00 2001 From: SkateSpots Date: Tue, 6 Oct 2026 13:54:07 +0700 Subject: [PATCH] =?UTF-8?q?i18n(th):=20batch=205=20=E2=80=94=20routing/dir?= =?UTF-8?q?ections=20+=20Sasquatch=20assistant=20(UI=20+=20FAQ)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/i18n/th/batch5.ts | 364 ++++++++++++++++++++++++++++++++++++++++++ src/i18n/th/index.ts | 2 + 2 files changed, 366 insertions(+) create mode 100644 src/i18n/th/batch5.ts diff --git a/src/i18n/th/batch5.ts b/src/i18n/th/batch5.ts new file mode 100644 index 0000000..e1f22c4 --- /dev/null +++ b/src/i18n/th/batch5.ts @@ -0,0 +1,364 @@ +/** + * Thai (ไทย) — batch 5: routing/directions (routeUi) and the Sasquatch AI + * assistant (sasquatchUi + sasquatchChat). LLM prompts stay English; only the + * UI + static FAQ prose are translated. Skate/Nostr terms stay English. + */ +const thBatch5 = { + routeUi: { + destination: 'ปลายทาง', + routeTo: 'นำทางไป {{label}}', + routeToLabel: 'นำทางไป', + search: 'ค้นหา', + description: 'ตัวเลือกเส้นทางและนำทางในแอป', + routeMapAria: 'แผนที่เส้นทาง', + findingLocation: 'กำลังหาตำแหน่งของคุณ…', + plottingRoute: 'กำลังวางเส้นทาง…', + refiningLocation: 'กำลังปรับตำแหน่ง…', + offlineSavedRoute: 'ออฟไลน์ · เส้นทางที่บันทึกไว้ {{age}}', + tapMapStart: 'แตะแผนที่เพื่อกำหนดจุดเริ่มต้น', + fitRouteAria: 'แสดงเส้นทางทั้งหมดบนแผนที่', + wholeRoute: 'ทั้งเส้นทาง', + next: 'ถัดไป', + nextStep: 'ถัดไป · ขั้นที่ {{n}}', + followTheLine: 'ตามเส้นทาง', + toTheTurn: 'ถึงทางเลี้ยว', + toGo: 'เหลืออีก', + tryAgain: 'ลองอีกครั้ง', + mode: { + foot: 'สเก็ต / เดิน', + bike: 'จักรยาน', + moto: 'มอเตอร์ไซค์', + car: 'รถยนต์', + transit: 'ขนส่งสาธารณะ', + }, + from: 'จาก', + myLocation: 'ตำแหน่งของฉัน', + tapTheMap: 'แตะแผนที่…', + chooseOnMap: 'เลือกบนแผนที่', + direct: 'ตรง', + transferOne: 'ต่อ 1 ครั้ง', + transfers: 'ต่อ {{count}} ครั้ง', + options: '{{count}} ตัวเลือก', + ride: 'นั่ง', + arrive: 'ถึง', + speedAvg: 'เฉลี่ย {{speed}} กม./ชม.', + stepsCount: '{{count}} ขั้น', + onABoard: 'บนบอร์ด', + usesDrivingRoads: 'ใช้ถนนสำหรับรถยนต์', + drivingEstimate: 'ประมาณการสำหรับรถยนต์', + updating: 'กำลังอัปเดต…', + pickMode: 'เลือกโหมดเพื่อดูเส้นทาง', + waitingLocation: 'รอตำแหน่งของคุณ…', + routeSteps: 'ขั้นตอนเส้นทาง', + walkingRoute: 'เส้นทางเดิน — เร็วขึ้นบนบอร์ด', + planningView: 'มุมมองวางแผน — แตะ เริ่ม เพื่อติดตามด้วยทางเลี้ยวสด เสียง และการมาถึง', + leaveNow: 'ออกตอนนี้', + departAt: 'ออกเวลา', + arriveBy: 'ถึงก่อน', + departureTime: 'เวลาออก', + arrivalTime: 'เวลาถึง', + only: 'เฉพาะ', + clear: 'ล้าง', + itinerary: 'ตารางเดินทาง', + group: { + bus: 'รถบัส', + tram: 'รถราง', + metro: 'รถไฟใต้ดิน', + train: 'รถไฟ', + ferry: 'เรือเฟอร์รี', + }, + walk: 'เดิน', + rideVerb: 'นั่ง', + walkLower: 'เดิน', + rideLower: 'นั่ง', + toStop: 'ไป', + track: 'ชานชาลา {{track}}', + stopOne: '1 ป้าย', + stopsCount: '{{count}} ป้าย', + tickets: 'ตั๋ว ↗', + done: 'เสร็จ', + stop: 'หยุด', + start: 'เริ่ม', + arrived: 'คุณมาถึงแล้ว 🛹', + voiceOnNote: 'หน้าจอเปิดอยู่ · เสียงเปิด — มีการพูดทางเลี้ยวและการมาถึง', + voiceOffNote: 'หน้าจอเปิดอยู่ · เสียงปิด', + followNote: 'ทางเลี้ยว เสียง และการมาถึงขณะเล่น หน้าจอเปิดไว้', + voiceOffAria: 'ปิดคำแนะนำด้วยเสียง', + voiceOnAria: 'เปิดคำแนะนำด้วยเสียง', + voiceStart: 'กำลังเริ่มนำทาง', + voiceArrived: 'คุณมาถึงแล้ว', + voiceIn: 'อีก {{metres}} เมตร {{instruction}}', + voiceContinue: 'ไปต่อ', + voiceContinueCaps: 'ไปต่อ', + errPermissionDenied: 'ไม่ได้รับอนุญาตตำแหน่ง', + errWaitingGps: 'กำลังรอสัญญาณ GPS…', + errPermissionDeniedLong: 'ไม่ได้รับอนุญาตตำแหน่ง เปิดตำแหน่งเพื่อนำทางจากที่ที่คุณอยู่', + errNoLocation: 'ระบุตำแหน่งของคุณไม่ได้ ลองอีกครั้ง', + errNoLocationShort: 'ระบุตำแหน่งของคุณไม่ได้', + errTransitNoRouteFiltered: 'ไม่มีเส้นทางสำหรับเวลาหรือโหมดขนส่งนั้น — ลองเวลาอื่น หรือเลือกโหมดเพิ่ม', + errTransitNoRoute: 'ไม่พบเส้นทางขนส่งสาธารณะที่นี่ — พื้นที่นี้อาจไม่เผยแพร่ตารางเวลาสาธารณะ', + errTransitUnreachable: 'เชื่อมต่อบริการขนส่งไม่ได้ ตรวจการเชื่อมต่อแล้วลองใหม่', + errRoutingBusy: 'บริการนำทางไม่ว่างตอนนี้ — ลองอีกครั้งในอีกสักครู่', + errNoRouteMode: 'ไม่มีเส้นทางสำหรับโหมดนี้ — ปลายทางอาจอยู่นอกโครงข่ายถนน ลองโหมดอื่น', + errRoutingUnreachable: 'เชื่อมต่อบริการนำทางไม่ได้ ตรวจการเชื่อมต่อแล้วลองใหม่', + departures: 'เที่ยวออก', + upcomingFrom: 'เที่ยวออกกำลังจะมาถึงจาก {{stop}}', + loadingDepartures: 'กำลังโหลดเที่ยวออก…', + noDepartures: 'ไม่พบเที่ยวออกที่กำลังจะมาถึงที่ป้ายนี้', + live: 'สด', + cancelled: 'ยกเลิก', + refresh: 'รีเฟรช', + tripLoginTitle: 'เข้าสู่ระบบเพื่อบันทึก', + tripLoginDesc: 'เข้าสู่ระบบเพื่อเก็บทริปนี้เป็นคอลเลกชัน', + tripCollectionTitle: 'ทริปสเก็ต {{destination}} 🛹', + tripCollectionDesc: 'แผนทริปโดย The Sasquatch — {{count}} วันใน {{destination}}', + tripCollectionDescOne: 'แผนทริปโดย The Sasquatch — {{count}} วันใน {{destination}}', + tripSavedTitle: 'บันทึกในคอลเลกชันแล้ว 🦧', + tripSavedDesc: 'ทริป {{destination}} ของคุณถูกบุ๊กมาร์กแล้ว', + tripSaveFailed: 'บันทึกไม่สำเร็จ', + tripSaveFailedDesc: 'ลองอีกครั้งในอีกสักครู่', + daysInDestinationOne: '{{count}} วันใน {{destination}}', + daysInDestination: '{{count}} วันใน {{destination}}', + wetForecast: 'พยากรณ์ฝน — หา Crew ท้องถิ่นถามสปอตที่มีหลังคา/ในร่ม', + dayLabel: 'วันที่ {{n}}', + freeSkate: 'เล่นอิสระ — สำรวจ & ถ่ายคลิป 🎥', + tapToBook: 'แตะเพื่อจอง / zap ⚡', + localCrews: 'Crew ท้องถิ่น', + saving: 'กำลังบันทึก…', + savedToCollections: 'บันทึกในคอลเลกชันแล้ว', + saveSpotOne: 'บันทึก {{count}} สปอตลงคอลเลกชัน', + saveSpots: 'บันทึก {{count}} สปอตลงคอลเลกชัน', + flights: 'เที่ยวบิน', + stays: 'ที่พัก', + gettingAround: 'การเดินทาง', + noMiddleman: 'ฉันวางแผนการเล่นสเก็ต — เที่ยวบิน & ที่พักเปิดบนเว็บจริง (ไม่มี KYC ไม่มีคนกลาง)', + ageJustNow: 'เมื่อสักครู่', + ageMinAgo: '{{count}} นาทีที่แล้ว', + ageHourAgo: '{{count}} ชม. ที่แล้ว', + ageDayAgo: '{{count}} วันที่แล้ว', + skateRightHere: 'ตรงนี้เลย', + skateMin: '~{{count}} นาที cruise', + skateHours: '~{{hours}} ชม. cruise', + maneuver: { + headOut: 'ออกเดินทาง', + arrive: 'ถึงสปอต', + continueStraight: 'ไปต่อตรง ๆ', + bearLeft: 'เบี่ยงซ้าย', + bearRight: 'เบี่ยงขวา', + turnLeft: 'เลี้ยวซ้าย', + turnRight: 'เลี้ยวขวา', + sharpLeft: 'เลี้ยวซ้ายหักศอก', + sharpRight: 'เลี้ยวขวาหักศอก', + turn: 'เลี้ยว', + keepLeft: 'ชิดซ้าย', + keepRight: 'ชิดขวา', + takeFork: 'แยกทาง', + merge: 'รวมช่องทาง', + roundabout: 'เข้าไปในวงเวียน', + takeRamp: 'ขึ้นทางลาด', + takeExit: 'ออกทางออก', + }, + maneuverOnto: '{{instruction}} เข้าสู่ {{road}}', + }, + sasquatchUi: { + live: 'สด', + offline: 'ออฟไลน์', + genericTitle: 'ผู้ช่วย SkateSpots 🦧', + genericGreeting: 'โย่! ฉันคือ The Sasquatch ถามอะไรก็ได้เกี่ยวกับสปอต อีเวนต์ โค้ช Gear หรือวิธีใช้แอป ฉันมีข้อมูลสดจาก relay ของ SkateSpots!', + q1: 'วางแผน 3 วันในลิสบอนให้หน่อย', + q2: 'หาสปอตใกล้ฉัน', + q3: 'มีอีเวนต์กำลังจะมาถึงไหม?', + q4: 'Crews คืออะไร?', + q5: 'zap ทำงานยังไง?', + q6: 'Nostr คืออะไร?', + q7: 'My Stash คืออะไร?', + q8: 'อันนี้ฟรีไหม?', + bubbleTitle: 'กดค้างแล้วลากเพื่อย้าย · แตะเพื่อเปิด', + openGuideAria: 'เปิดไกด์ Sasquatch', + hideAria: 'ซ่อนผู้ช่วย Sasquatch', + hide: 'ซ่อนผู้ช่วย', + showAria: 'แสดงผู้ช่วย Sasquatch', + activeUntil: 'ใช้งานถึง {{date}}', + platformOwner: 'เจ้าของแพลตฟอร์ม', + upgradeTitle: 'อัปเกรดเป็น Sasquatch Pro', + goPro: 'Go Pro', + goProBlurb: 'AI ส่วนตัว · เริ่ม 2k sats', + aiBalanceTitle: 'ยอดเครดิต Sasquatch AI (เฉพาะเจ้าของ) — เติมที่ {{provider}}', + aiChip: '⚡ AI {{balance}}', + minimizeToBubbleAria: 'ย่อเป็นบับเบิล', + minimize: 'ย่อ', + closePanelAria: 'ปิดแผง', + close: 'ปิด', + askLab: 'ถามเรื่อง Coaching & Filming', + askMap: 'ถามเรื่อง Spots, Shops & Gear', + askAnything: 'ถามอะไรก็ได้ 🛹', + quickQuestions: 'คำถามด่วน:', + you: '🧑 คุณ', + thinking: 'กำลังคิด...', + inputPlaceholder: 'ถามเรื่องสปอต อีเวนต์ โค้ช...', + liveDataFrom: 'ข้อมูลสดจาก', + nostrRelays: 'relay Nostr', + clear: 'ล้าง', + gettingLocation: '📍 กำลังหาตำแหน่งของคุณ…', + findingClosest: '🔍 กำลังหาสปอตที่ใกล้ที่สุด…', + checkingLive: '🔍 กำลังตรวจข้อมูลสด…', + planningTrip: '🗺️ กำลังวางแผนทริป {{destination}} ของคุณ...', + searchingRelays: '🔍 กำลังค้น relay สำหรับ {{tool}}...', + perk1: 'ผู้ช่วยส่วนตัว — Sasquatch อ่าน Stash, crew, สปอต & รายการของคุณ', + perk2: 'ร่างการดำเนินการ: ลงขาย Gear, โพสต์สถานะสเก็ต, วางแผนทริป — คุณยืนยันก่อนเผยแพร่', + perk3: 'คำตอบใช้บริบทส่วนตัวของคุณ ไม่ใช่แค่ข้อมูลสาธารณะ', + perk4: '⚡ สนับสนุน SkateSpots โดยตรง & ช่วยให้ฟรีและไม่มีโฆษณา', + welcomeTitle: 'ขอบคุณที่สนับสนุน Sasquatch Pro! 🦧⚡', + welcomeDesc: 'ส่งการชำระเงินแล้ว — บัตรของคุณจะเปิดใช้งานเมื่อผู้ให้บริการยืนยัน (ปกติภายในหนึ่งนาที) ขอบคุณที่ช่วยให้ถนนยังฟรี', + invoiceCopied: 'คัดลอกใบแจ้งหนี้แล้ว', + dialogDesc: 'เพิ่มพลังให้ไกด์สเก็ต AI ของคุณ 100% สนับสนุนแอปชุมชนที่ฟรีและไม่มีโฆษณา', + proSupporter: 'คุณเป็นผู้สนับสนุน Pro ⚡', + extendPrompt: 'อยากต่ออายุไหม? เลือกแพ็กเกจด้านล่างเพื่อเพิ่มเวลา', + scanToPayPre: 'สแกนเพื่อจ่าย', + scanToPayAmount: '{{sats}} sats', + scanToPayPost: 'สำหรับ {{label}} ของ Pro', + invoiceQrAlt: 'QR ใบแจ้งหนี้ Lightning', + copyInvoice: 'คัดลอกใบแจ้งหนี้', + ivePaid: 'จ่ายแล้ว', + ivePaidHint: 'แตะ "จ่ายแล้ว" หลังกระเป๋าเงินของคุณยืนยัน — นี่จะบันทึกบัตรของคุณกับตัวตน Nostr', + freeStaysPre: 'Sasquatch ฟรียังคงฟรี — ค้นหาสปอต/อีเวนต์/โค้ชสาธารณะ วางแผนทริป + อภิธานศัพท์ทริกทั้งหมด Pro เพิ่ม ', + freeStaysEmphasis: 'ส่วนตัว + การดำเนินการ', + freeStaysPost: ' เลเยอร์', + loginFirst: 'เข้าสู่ระบบก่อนเพื่ออัปเกรด', + paysTo: 'จ่ายให้', + overLightning: 'ผ่าน Lightning ผูกกับ npub ของคุณ', + popular: 'ยอดนิยม', + sats: 'sats', + extend: 'ต่ออายุ', + done: 'เสร็จ!', + cancelledNothing: 'ยกเลิก — ไม่มีอะไรถูกเผยแพร่', + draftReview: 'ฉบับร่าง — ตรวจสอบ & ยืนยัน', + statusTextPlaceholder: 'ข้อความสถานะ', + titlePlaceholder: 'ชื่อ', + priceSatsPlaceholder: 'ราคา (sats)', + conditionPlaceholder: 'สภาพ', + cancel: 'ยกเลิก', + aiTitle: 'Sasquatch AI', + owner: 'เจ้าของ', + notConfigured: 'ยังไม่ได้ตั้งค่า', + unavailable: 'ใช้ไม่ได้', + satsValue: '{{balance}} sats', + theNode: 'โหนด', + lowBalance: 'ใกล้หมด — เติมที่ {{provider}} ไม่งั้น AI จะถอยไปใช้ผู้ให้บริการแบบไม่ใช้คีย์', + aiDesc: 'AI จ่ายตามการใช้งาน เติมด้วย sats ผ่าน Routstr เติมอัตโนมัติเมื่อใกล้หมด', + tier7d: '7 วัน', + tier1m: '1 เดือน', + tier3m: '3 เดือน', + tier1y: '1 ปี', + badgeTry: 'ลองเลย', + badgeOff20: 'ลด 20%', + badgeBest: 'คุ้มที่สุด · ลด 40%', + draftPostStatusTitle: 'โพสต์สถานะการเล่นสเก็ต', + draftAutoExpires: 'หมดอายุอัตโนมัติใน {{count}} นาที', + draftPostStatusCta: 'โพสต์สถานะ', + draftCategory: 'หมวดหมู่: {{value}}', + draftSize: 'ขนาด: {{value}}', + draftCondition: 'สภาพ: {{value}}', + draftMaxPrice: 'ราคาสูงสุด: {{price}} {{currency}}', + draftPriceOpen: 'ราคา: เปิดรับ', + draftLookingForTitle: 'กำลังหา "{{title}}"', + draftWantedCta: 'โพสต์ประกาศซื้อ', + draftPrice: 'ราคา: {{price}} {{currency}}', + draftPriceOffer: 'ราคา: ต่อรองได้', + draftListTitle: 'ลงขาย "{{title}}"', + draftPublishCta: 'เผยแพร่รายการ', + statusPosted: 'โพสต์สถานะแล้ว 🛹', + wantedPublished: 'เผยแพร่ประกาศซื้อแล้ว 🔎', + listingPublished: 'เผยแพร่รายการแล้ว 💸', + mustBeLoggedIn: 'คุณต้องเข้าสู่ระบบ', + }, + sasquatchChat: { + faq: { + hi: 'เฮ้! ฉันคือ The Sasquatch 🦧 ไกด์สเก็ต AI ของคุณ ถามเรื่องสปอต อีเวนต์ โค้ช Gear — หรืออะไรก็ได้เกี่ยวกับแอป คุณต้องการอะไร?', + hello: 'เป็นไง! 🛹 ฉันคือ The Sasquatch ถามเรื่องสปอตสเก็ต อีเวนต์ โค้ช หรือวิธีใช้แอป มีอะไร?', + hey: 'เฮ้ นักสเก็ต! 🤙 ถามเรื่องสปอตใกล้คุณ อีเวนต์กำลังจะมาถึง โค้ช หรืออะไรก็ได้เกี่ยวกับ SkateSpots', + whoAreYou: 'ฉันคือ The Sasquatch 🦧 — ไกด์ AI ของ SkateSpots ฉันหาสปอตสเก็ตทั่วโลก ดูอีเวนต์ โค้ช ช่างถ่าย และรายการ Gear ได้ทั้งหมดขับเคลื่อนด้วยข้อมูล Nostr สด ถามมาเลย!', + whatCanYouDo: 'ฉันหาสปอตสเก็ตตามเมืองหรือประเทศ ดูอีเวนต์กำลังจะมาถึง หาโค้ชและช่างถ่ายใน The Lab ค้นรายการ Gear และตอบคำถามเกี่ยวกับวิธีใช้แอป ลอง: "สปอตในกรุงเทพ" หรือ "หาโค้ช"! 🛹', + whatIsNostr: 'Nostr คือโปรโตคอลเปิดที่เรียบง่ายสำหรับเครือข่ายสังคมแบบกระจายศูนย์ คิดว่ามันคือ Twitter แต่ไม่มีบริษัทเดียวควบคุม — คุณใช้คีย์เข้ารหัสแทนชื่อผู้ใช้ เลือกได้ว่า relay ไหนเก็บข้อมูล (หรือรันเอง) และบัญชีเดียวใช้ได้กับทุกแอป Nostr! 🔑', + isThisPrivate: 'นี่คือสรุปตรง ๆ 🛡️\n\n• **ตำแหน่ง GPS ของคุณอยู่ในเครื่อง** — "ใกล้ฉัน" แค่จัดแผนที่ให้อยู่ที่ตำแหน่ง ไม่เคยส่งให้เราหรือเผยแพร่\n• **สปอตที่คุณเพิ่มเป็นสาธารณะ** (นั่นคือจุดประสงค์ของแผนที่ที่แชร์กัน) — อย่าปักหมุดที่หน้าบ้านตัวเอง\n• **DM & แชต crew เข้ารหัสแบบปลายทางถึงปลายทาง** — เฉพาะสมาชิกอ่านได้\n• เหมือนเว็บไซต์ทั่วไป เซิร์ฟเวอร์ที่คุณเชื่อมต่อ (ไทล์แผนที่, relay) เห็น **IP** ของคุณ อยากซ่อนด้วย? ใช้ VPN หรือ Tor\n\nรายละเอียดทั้งหมดที่ [หน้าความเป็นส่วนตัว](/privacy) 🛹', + privacy: 'สรุปสั้น ๆ 🛡️: GPS ของคุณไม่เคยออกจากเครื่อง สปอตที่คุณเผยแพร่เป็นสาธารณะโดยออกแบบ และ DM/แชต crew เข้ารหัสปลายทางถึงปลายทาง เซิร์ฟเวอร์ยังเห็น IP ของคุณ (ปกติของทุกเว็บ) — VPN หรือ Tor ซ่อนได้หากต้องการ รายละเอียดที่ [หน้าความเป็นส่วนตัว](/privacy)', + amITracked: 'SkateSpots ไม่ติดตามคุณ — ไม่มีโฆษณา ไม่มีการวิเคราะห์โปรไฟล์ ไม่ขายข้อมูล และไม่มีเซิร์ฟเวอร์ SkateSpots เก็บตำแหน่งของคุณ GPS อยู่ในเครื่อง สิ่งเดียวที่เซิร์ฟเวอร์เห็น (ไทล์แผนที่, relay) คือ **IP** — เหมือนทุกเว็บ ใช้ VPN หรือ Tor ซ่อนได้ เพิ่มเติมที่ [หน้าความเป็นส่วนตัว](/privacy) 🛡️', + doYouTrack: 'ไม่ — ไม่ติดตาม ไม่มีโฆษณา ไม่เก็บข้อมูล GPS อยู่ในเครื่องและไม่มีเซิร์ฟเวอร์กลางบันทึกคุณ เซิร์ฟเวอร์ที่เชื่อมต่อเห็น IP (เหมือนทุกเว็บ); VPN/Tor ซ่อนได้ ดู [หน้าความเป็นส่วนตัว](/privacy) 🛹', + vpn: 'ไม่บังคับเลย แต่ดีถ้าต้องการความเป็นส่วนตัวเพิ่ม 🛡️ VPN ซ่อน **IP** (ตำแหน่งคร่าว ๆ) จากเซิร์ฟเวอร์ที่ SkateSpots คุยด้วย — ไทล์แผนที่ relay ฯลฯ เลือกผู้ให้บริการ no-logs ที่เชื่อถือได้ (เช่น Mullvad); เลี่ยงตัวฟรีที่น่าสงสัย\n\nข้อควรรู้: VPN **ไม่** ซ่อนสปอตที่คุณเผยแพร่ (สาธารณะ) และอย่าเปิด GPS เบราว์เซอร์ถ้าอยากนิรนาม รายละเอียดที่ [หน้าความเป็นส่วนตัว](/privacy)', + tor: 'Tor Browser ให้ความเป็นส่วนตัว IP สูงสุด — เส้นทางผ่าน relay หลายชั้นจนเซิร์ฟเวอร์ไม่เห็น IP จริง 🧅 ข้อแลกเปลี่ยน: ช้ากว่า และแผนที่ + relay บางตัวอาจหน่วงหรือบล็อก Tor เหมาะกับคนระวังเป็นพิเศษ\n\nจำไว้: Tor ซ่อน IP ไม่ใช่สปอตที่คุณเผยแพร่ และอย่าเปิด GPS เบราว์เซอร์ถ้าเป้าหมายคือนิรนาม เพิ่มเติมที่ [หน้าความเป็นส่วนตัว](/privacy)', + hideMyIp: 'สองทางเลือกฟรี 🛡️: **VPN ที่น่าเชื่อถือ** (ง่าย เร็ว — ซ่อน IP หลังเซิร์ฟเวอร์เขา) หรือ **Tor Browser** (เป็นส่วนตัวสูงสุด ช้ากว่า) ทั้งคู่ทำให้เซิร์ฟเวอร์ที่ SkateSpots เชื่อมต่อไม่เห็น IP จริง หมายเหตุ: ไม่ซ่อนสปอตที่คุณเผยแพร่ ดู [หน้าความเป็นส่วนตัว](/privacy)', + isMyLocation: 'ตำแหน่งของคุณปลอดภัย 📍 — "ใกล้ฉัน" อ่าน GPS บนเครื่องเท่านั้น เพื่อจัดแผนที่และเรียงสปอตใกล้ ๆ ไม่เคยเผยแพร่ไป Nostr ไม่เคยส่งให้เรา ไม่เคยแชร์ เฉพาะสปอตที่คุณตั้งใจเพิ่มเท่านั้นที่เป็นสาธารณะ รายละเอียดที่ [หน้าความเป็นส่วนตัว](/privacy)', + whatAreZaps: 'Zap คือทิป Bitcoin Lightning ทันทีที่ส่งผ่าน Nostr! คลิก ⚡ บนเนื้อหาใดก็ได้ ส่ง sats ตรงเข้ากระเป๋าเงินของผู้สร้าง เหมือนกด "ถูกใจ" แต่ด้วยเงินจริง ทันที peer-to-peer ไม่มีคนกลาง ⚡', + howToLogin: 'สองวิธี:\n1. **ส่วนขยายเบราว์เซอร์** (เดสก์ท็อป): ติดตั้ง Alby หรือ nos2x แล้วคลิก "เข้าสู่ระบบ"\n2. **ผู้ใช้ใหม่**: คลิก "สมัคร" เพื่อสร้างคีย์ ดาวน์โหลด nsec (คีย์ลับ) แล้ว**เก็บให้ดี** — นี่คือบัญชีของคุณตลอดไป!', + whatIsCashu: 'กระเป๋าเงิน Bitcoin ในตัว! โทเคน ecash ของ Cashu ที่หนุนด้วย Lightning — ใช้ได้ออฟไลน์ที่สปอตสเก็ต เน้นความเป็นส่วนตัว (mint ติดตามการจ่ายไม่ได้) ไปที่ กระเป๋าเงิน ในตั้งค่าเพื่อใช้ 🥜', + whatIsNwc: 'Nostr Wallet Connect — เหมือน USB-C ของกระเป๋าเงิน Lightning เชื่อม Alby, Minibits, Zeus หรือ Coinos ครั้งเดียว แล้ว zap ด้วยคลิกเดียวตลอดไป เข้ารหัส คุณคุมวงเงินเอง 🔌⚡', + isItFree: 'ฟรี 100% ไม่มีโฆษณา ไม่มีค่าสมาชิก ไม่มีเรื่ององค์กร สร้างโดยนักสเก็ตเพื่อนักสเก็ต ระดมทุนโดยชุมชนผ่าน Angor — ดูหน้าผู้สนับสนุน คุณยังรับ Bitcoin ผ่าน zap ของชุมชนจากการเพิ่มสปอตที่มีคุณภาพได้ 🛹', + whatCanIDo: 'ค้นสปอตทั่วโลกบนแผนที่ จ้างมืออาชีพใน The Lab (โค้ช ช่างถ่าย ช่างภาพ ตัดต่อ ช่างสร้าง ramp) ออกไปกับ crew ร่วมอีเวนต์ ไปทัวร์ ซื้อ/ขาย Gear ติดตาม Stash ส่วนตัว zap ผู้สร้าง เช็กอากาศสปอต และสร้างชุมชนสเก็ตแบบกระจายศูนย์!', + whatIsTheLab: 'The Lab คือที่ที่คุณจ้างมืออาชีพในวงการสเก็ต: โค้ช ช่างถ่าย ช่างภาพ ตัดต่อวิดีโอ และช่างสร้าง ramp/พาร์ค/DIY แต่ละคนเป็นบุคคลเดียวหรือกลุ่ม (crew/สตูดิโอ) — สมาชิทยืนยันด้วยคีย์ของตัวเองจึงน่าเชื่อถือ ทั้งหมดบน Nostr ไม่มีบัญชีปลอม 🎓', + whatIsACrew: 'Crew คือครอบครัวสเก็ตที่ผูกกับแผนที่ของคุณ — คนที่คุณเล่นด้วย ไม่ใช่คนที่คุณจ้าง แต่ละ crew มีบ้านเกิดบนแผนที่ (หมุดสีเขียวน้ำทะเล) สปอตประจำ สมาชิก บรรยากาศ และแถลงการณ์ สมาชิทยืนยันด้วยคีย์ตัวเอง สร้างได้ที่ Crews → "สร้าง Crew" 🤘', + whatAreCrews: 'Crew คือครอบครัวสเก็ตที่ผูกกับแผนที่ของคุณ — คนที่คุณเล่นด้วย ไม่ใช่คนที่คุณจ้าง แต่ละ crew มีบ้านเกิดบนแผนที่ (หมุดสีเขียวน้ำทะเล) สปอตประจำ สมาชิก และแถลงการณ์ สมาชิทยืนยันด้วยคีย์ตัวเอง ไปที่แท็บ Crews เพื่อเริ่มหรือเข้าร่วม! 🤘', + howToStartACrew: 'ไปที่แท็บ Crews → "สร้าง Crew" ตั้งชื่อ ปักหมุดบ้านเกิดบนแผนที่ เพิ่มบรรยากาศ (หรือ #hashtag ของคุณเอง) เชื่อมสปอตประจำ และเพิ่มสมาชิกด้วย npub สมาชิกแต่ละคนยืนยันด้วยคีย์ของตัวเองทำให้รายชื่อน่าเชื่อถือ 🤘', + whatIsMyStash: 'My Stash คือล็อกเกอร์ Gear ส่วนตัวที่เข้ารหัส (เข้ารหัส NIP-44) ติดตาม Deck, Trucks, Wheels, รองเท้าของคุณ — พร้อมที่เก็บ สภาพ ความหายาก และราคา มีแค่คุณที่อ่านได้เว้นแต่ตั้งเป็นสาธารณะ เหมาะกับการทำประกันหรือวางแผนสลับของ 🎒', + whatIsStash: 'My Stash คือคลัง Gear ส่วนตัวที่เข้ารหัส บันทึกทุกอย่างที่คุณมี — สภาพ ที่เก็บ มูลค่า — เข้ารหัสทั้งหมดให้มีแค่คุณเห็น ตั้งเป็นสาธารณะได้ถ้าอยากขายหรือโชว์ 🎒', + whatIsABuilder: 'Builder คือ crew ramp/พาร์ค/DIY ใน The Lab ที่คุณจ้างสร้าง transition, bowl, rail หรือทั้งพาร์คได้ พวกเขาลงสิ่งที่สร้าง วัสดุ ขนาดโปรเจกต์ และอาจมีใบอนุญาต/ประกัน มักเป็นกลุ่ม — และเชื่อมสปอตที่สร้างไว้กับแผนที่ได้ 🏗️', + whatIsANutzap: 'Nutzap (NIP-61) คือทิป ecash ที่ส่งผ่าน Nostr — โทเคน Cashu ส่วนตัวที่ zap ตรงถึงคน ตั้งค่ารับ nutzap ได้ในกระเป๋าเงิน (การส่ง nutzap เต็มรูปแบบกำลังทยอยเปิด — ตอนนี้ใช้ Lightning zap) 🥜⚡', + whatIsClink: 'CLINK คือรหัสจ่ายเงินแบบ Nostr-native (เรียกว่า "noffer") ร้านค้า crew และมืออาชีพใน The Lab เพิ่มได้ เพื่อให้คุณจ่ายได้โดยไม่ต้องมีที่อยู่ Lightning — คุณจะเห็นปุ่ม "จ่ายผ่าน CLINK" พร้อม QR สแกนด้วยกระเป๋าเงิน CLINK อย่าง ShockWallet 🔗⚡ [สเปก](https://clinkme.dev/specs.html) [แอป](https://clinkme.dev/apps.html)', + whatIsNoffer: 'noffer คือรหัสจ่ายเงิน CLINK — วิธีรับเงินแบบ Nostr-native ที่ใช้ซ้ำได้โดยไม่ต้องมีเว็บเซิร์ฟเวอร์หรือที่อยู่ Lightning เพิ่มของคุณในร้าน/crew/โปรไฟล์ Lab แล้วคนจ่ายตรงถึงคุณได้ 🔗', + whatAreTours: 'Tours คือทริปสเก็ตมีไกด์ — เซสชันท้องถิ่น ทริปข้ามเมือง หรือทัวร์ world destruction หาได้บนแผนที่หรือส่วน Tours นัดเจอ แล้วออกไปเล่นภูมิประเทศใหม่กับคนท้องถิ่น 🗺️🛹', + whatIsAShop: 'Skate Shops คือร้านท้องถิ่นที่ลงบนแผนที่ ค้นพบและสนับสนุนร้านสเก็ตของจริง (หรือออนไลน์) ในพื้นที่คุณ — บางร้านรับ Bitcoin ด้วย 🏪', + howToSellGear: 'ไปที่ Gear Swap / Marketplace แล้วสร้างรายการ (NIP-99) เพิ่มรูป ตั้งราคาเป็น sats ระบุสภาพ และปักหมุดกับสปอตก็ได้ให้แสดงบนแผนที่ ผู้ซื้อจะ zap หรือส่งข้อความหาคุณตรง ๆ 🛹💸', + supporters: 'SkateSpots ระดมทุนโดยชุมชนผ่าน Angor (คราวด์ฟันด์ Bitcoin แบบกระจายศูนย์) — ไม่มีโฆษณา ไม่มีนักลงทุน ไม่ขายข้อมูล ดูหน้าผู้สนับสนุนเพื่อสนับสนุนโปรเจกต์และรักษาถนนให้ฟรี ❤️⚡', + trustScore: 'คะแนนความน่าเชื่อถือ (0-100) ขับเคลื่อนโดย Relatr วิเคราะห์เครือข่าย Nostr ของคุณ: ผู้ติดตาม กิจกรรม การมีส่วนร่วม zap ยิ่งสูง = น่าเชื่อถือขึ้น ช่วยกรองบอตและสแปม ดูโปรไฟล์ใดก็ได้เพื่อดูคะแนน 🛡️', + whatRelay: 'SkateSpots ใช้: 🛹 goskatespots.nostr1.com (หลัก อยู่ใน allowlist เพื่อคุณภาพ) + relay.ditto.pub (ทั่วโลก) + purplepag.es (รวมโปรไฟล์) ข้อมูลของคุณถูกทำสำเนาไปยังทั้งหมดเพื่อความทนทาน', + tripPlanner: 'บอกชื่อเมืองมา แล้วฉันจะสร้างทริปสเก็ตรายวัน 🗺️ — สปอต อีเวนต์ โค้ช และ crew ท้องถิ่น โดยคำนึงถึงอากาศ (วันฝนตก = แนะนำ crew สำหรับสปอตมีหลังคา) ลอง "วางแผน 3 วันในลิสบอน" ฉันบันทึกทั้งหมดลงคอลเลกชันได้ และส่งต่อไปยังเที่ยวบิน/ที่พักบนเว็บจริง (ไม่มี KYC ไม่มีคนกลาง) 🛹', + planATrip: 'แค่พูด "วางแผน 3 วันในบาร์เซโลนา" (หรือเมืองใดก็ได้) แล้วฉันจะวางสปอต เซสชัน โค้ช และ crew ท้องถิ่นให้แต่ละวัน บันทึกเป็นคอลเลกชันแล้วไปเล่นได้เลย 🗺️🛹', + sasquatchPro: '**Sasquatch Pro** 🦧⚡ คือบัตรผู้สนับสนุน Lightning ที่ปลดล็อกด้านส่วนตัวของฉัน:\n\n• 🧠 **ผู้ช่วยส่วนตัว** — ฉันอ่าน Stash, crew, สปอต & รายการของคุณ\n• ✨ **ร่างการดำเนินการ** — ลงขาย Gear, โพสต์สถานะสเก็ต, วางแผนทริป (คุณยืนยันก่อนเผยแพร่เสมอ)\n• 💬 **บริบทส่วนตัว** — คำตอบใช้ข้อมูลของคุณ ไม่ใช่แค่ผลสาธารณะ\n• ⚡ **สนับสนุนโปรเจกต์** — คุณรักษา SkateSpots ให้ฟรีและไม่มีโฆษณา\n\nSasquatch ฟรียังคงฟรี: ค้นหาสปอต/อีเวนต์/โค้ช/crew สาธารณะ อภิธานศัพท์ & การวางแผนทริปทำงานได้โดยไม่ต้อง Pro Pro เพิ่มแค่ของส่วนตัว แตะ **⚡ Go Pro** ด้านบน แพ็กเกจ: 7 วัน ~2k sats, 1 เดือน ~5k, 3 เดือน ~12k, 1 ปี ~36k', + proPerks: 'สิทธิ Pro 🦧⚡: ผู้ช่วยส่วนตัว (อ่าน Stash/crew/สปอต/รายการ), ร่างการดำเนินการ (ลงขาย Gear, โพสต์สถานะ, วางแผนทริป — คุณยืนยัน), และคำตอบที่ใช้บริบทส่วนตัวของคุณ อีกทั้งคุณสนับสนุน SkateSpots โดยตรงและรักษาให้ฟรี + ไม่มีโฆษณา ฟรียังฟรี — Pro เพิ่มเลเยอร์ส่วนตัว แตะ **⚡ Go Pro** ด้านบน', + proVersion: 'เวอร์ชัน Pro ของฉัน 🦧⚡ เพิ่ม **ผู้ช่วยส่วนตัว**: อ่าน Stash, crew, สปอต & รายการของคุณ ร่างการดำเนินการให้ (ลงขาย Gear, โพสต์สถานะ, วางแผนทริป — คุณยืนยันก่อนเสมอ) และใช้บริบทส่วนตัวในคำตอบ อีกทั้งสนับสนุนโปรเจกต์โดยตรง Sasquatch ฟรี (ค้นสปอต/อีเวนต์/โค้ช/crew, อภิธานศัพท์, วางแผนทริป) ยังฟรี แตะ **⚡ Go Pro** ด้านบน', + perks: 'สิทธิ Pro 🦧⚡: ผู้ช่วยส่วนตัว (Stash/crew/สปอต/รายการของคุณ), ร่างการดำเนินการที่คุณยืนยัน, และคำตอบที่ใช้บริบทของคุณ — อีกทั้งรักษาแอปให้ฟรี & ไม่มีโฆษณา แตะ **⚡ Go Pro** ด้านบน', + goPro: 'แตะปุ่ม **⚡ Go Pro** ด้านบนเพื่อเปิดหน้าอัปเกรด Pro ปลดล็อกผู้ช่วยส่วนตัว (Stash/crew/สปอต/รายการ) และร่างการดำเนินการ และสนับสนุนโปรเจกต์โดยตรง จ่ายด้วย Lightning — 7 วัน ~2k sats ถึง 1 ปี ~36k sats ฟีเจอร์ฟรียังฟรี 🦧', + proPricing: 'แพ็กเกจ Pro (จ่ายด้วย Lightning ⚡): **7 วัน** ~2,000 sats (~$1.20), **1 เดือน** ~5,000 sats (~$3), **3 เดือน** ~12,000 sats (~$7 ลด 20%), **1 ปี** ~36,000 sats (~$21 คุ้มที่สุด) แตะ **⚡ Go Pro** ด้านบน', + howMuchIsPro: 'แพ็กเกจ Pro: 7 วัน ~2,000 sats, 1 เดือน ~5,000 sats, 3 เดือน ~12,000 sats (ลด 20%), 1 ปี ~36,000 sats (คุ้มที่สุด) จ่ายด้วย Lightning ⚡ แตะ **⚡ Go Pro** ด้านบน', + upgrade: 'อัปเกรดเป็น Sasquatch Pro ได้โดยแตะปุ่ม **⚡ Go Pro** ด้านบน จ่ายด้วย Lightning (7 วัน ~2k sats ถึง 1 ปี ~36k) Pro ปลดล็อกผู้ช่วยส่วนตัวและร่างการดำเนินการ และสนับสนุนโปรเจกต์โดยตรง 🦧⚡', + }, + statsTitle: '📊 **SkateSpots ในตัวเลข**', + weatherTemp: '• {{temp}}°C (รู้สึก {{feels}}°C)', + weatherSkateability: '• เล่นได้: **{{label}}** ({{score}}/100)', + weatherError: 'อ่านอากาศตอนนี้ไม่ได้ ลองอีกครั้งในอีกสักครู่ 🌧️', + labelSpots: 'สปอต', + labelEvents: 'อีเวนต์', + labelLabPros: 'มืออาชีพใน Lab', + labelCrews: 'crew', + labelShops: 'สเก็ตช็อป', + labelTours: 'ทัวร์', + labelGear: 'รายการ Gear', + unnamed: 'ไม่มีชื่อ', + emptyWhere: ' ใน **{{place}}**', + emptyResult: 'ตอนนี้ไม่พบ {{label}}{{where}} 🦧\n\nอาจหมายถึงยังไม่มีใครลงไว้ — หรือ relay ตอบช้า ลองอีกครั้งในอีกสักครู่ ตรวจการสะกด หรือ[เพิ่มอันแรกบนแผนที่](https://skate-spots.org/map) 🛹', + foundTitle: '{{emoji}} พบ **{{count}}** {{label}}:\n{{lines}}{{more}}', + moreResults: '\n\n…และอีก **{{count}}** — [ดูทั้งหมดบนแผนที่](https://skate-spots.org/map) 🗺️', + locationDenied: 'ฉันเห็นตำแหน่งคุณไม่ได้ — ไม่มีอะไรออกจากเครื่องเลย ฉันอ่านเฉพาะเมื่อคุณขอ และเบราว์เซอร์เพิ่งปฏิเสธ แตะ 🎯 **ใกล้ฉัน** บนแผนที่ หรือบอกชื่อเมือง: "สปอตในกรุงเทพ" 🛹', + noNearbySpots: 'ยังไม่มีสปอตที่แมปไว้ใกล้คุณ 🦧 — [เป็นคนแรกที่ปักหมุด](https://skate-spots.org/create-spot) 🛹', + closestTitle: 'ใกล้คุณที่สุดตอนนี้:', + closestFooter: '_คำนวณบนเครื่องคุณ — ตำแหน่งของคุณไม่เคยออกไป_', + proNudge: 'นั่นเป็นเรื่องของ **Sasquatch Pro** 🦧⚡ — ด้วย Pro ฉันอ่าน Stash, crew, สปอต และรายการของคุณ ร่างรายการ Gear ประกาศซื้อ และสถานะสเก็ต และวางแผนทริปได้ เป็นบัตรผู้สนับสนุน Lightning ที่รักษา SkateSpots ให้ฟรี & ไม่มีโฆษณา แตะปุ่ม **⚡ Go Pro** ด้านบนเพื่อปลดล็อก 🛹', + draftingProPerk: 'การร่างการดำเนินการ (โพสต์สถานะ ลงขาย Gear) เป็นสิทธิ **Sasquatch Pro** 🦧⚡ — แตะ **⚡ Go Pro** ด้านบนเพื่อปลดล็อก', + draftIntro: 'นี่คือฉบับร่าง — ตรวจสอบแล้วแตะเพื่อเผยแพร่ ไม่มีอะไรเผยแพร่จนคุณยืนยัน 🛹', + draftFailed: 'ฉันสร้างร่างนั้นไม่ค่อยได้ — ลองบอกรายละเอียดอีกครั้ง (เช่น "ลงขายล้อ Spitfire ของฉัน 8000 sats")', + tripAskCity: 'จะไปไหน? บอกชื่อเมือง (เช่น "วางแผน 3 วันในลิสบอน") แล้วฉันจะสร้างทริป 🗺️', + tripEmptyMap: 'ยังไม่มีอะไรบนแผนที่สำหรับ **{{destination}}** 🦧 — เป็นคนแรกที่ปักหมุดสปอตที่ [skate-spots.org](https://skate-spots.org) เมื่อคนท้องถิ่นเพิ่มสปอต crew & อีเวนต์ ฉันจะสร้างทริปเต็มให้', + tripLocked: 'จัดภารกิจ **{{destination}}** ให้คุณแล้ว 🛹 — สปอต เซสชัน และคนท้องถิ่นด้านล่าง ปรับหรือบันทึกได้', + tripFailed: 'เชื่อมข้อมูลสดเพื่อวางแผนตอนนี้ไม่ได้ ลองอีกครั้งในอีกสักครู่! 🛹', + tripEmptyMapLocal: 'ยังไม่มีอะไรบนแผนที่สำหรับ **{{destination}}** 🦧 — เป็นคนแรกที่ [skate-spots.org](https://skate-spots.org)', + tripMissionLocal: 'นี่คือภารกิจ **{{destination}}** 🛹 — สปอต เซสชัน & คนท้องถิ่นด้านล่าง', + relayFailed: 'relay ไม่ตอบทันตอนนี้ 🛰️ — ปกติเป็นเพราะการเชื่อมต่อช้า ไม่ใช่สปอตหาย ลองอีกครั้งในอีกสักครู่ 🛹', + couldNotProcess: 'อืม ประมวลผลอันนั้นไม่ได้ ลองเขียนใหม่!', + freeTierFallback: 'อันนั้นต้องใช้การคิดของ AI — ฟีเจอร์ **Sasquatch Pro** ⚡🦧\n\nฉันยังหา **สปอต อีเวนต์ โค้ช crew ร้าน ทัวร์ และ Gear** จาก relay ได้ตรง ๆ — ถามเช่น "สปอตในบาร์เซโลนา" — และ [อภิธานศัพท์](/glossary) ครอบคลุม 150+ ทริก & คำศัพท์ แตะ **⚡ Go Pro** ด้านบนเพื่อปลดล็อกคำตอบ AI', + aiDownFallback: 'สมอง AI ของฉันกำลังโดดอยู่ตอนนี้ 🦧 — แต่ยังช่วยคุณได้:\n\n• 🗺️ [แผนที่](/) — สปอต ร้าน อีเวนต์ใกล้คุณ\n• 🧪 [The Lab](/lab) — โค้ช ช่างถ่าย ตัดต่อ\n• 📖 [อภิธานศัพท์](/glossary) — 150+ ทริก & คำศัพท์\n• 👥 [Crews](/crews) — หาคนของคุณ\n\nหรือบอก **เมือง** ("สปอตในบาร์เซโลนา") หรือ **ทริก** ("nollie คืออะไร") แล้วฉันจะตอบให้ 🛹', + wentWrong: 'มีอะไรผิดพลาดทางฝั่งฉัน ลองอีกครั้งในอีกสักครู่! 🦧', + publishError: 'เผยแพร่อันนั้นไม่สำเร็จ: {{error}} ลองอีกครั้งในอีกสักครู่', + unknownError: 'ข้อผิดพลาดไม่ทราบสาเหตุ', + }, +}; + +export default thBatch5; diff --git a/src/i18n/th/index.ts b/src/i18n/th/index.ts index 9d4f9e9..ec4dc5a 100644 --- a/src/i18n/th/index.ts +++ b/src/i18n/th/index.ts @@ -2,6 +2,7 @@ import batch1 from './batch1'; import batch2 from './batch2'; import batch3 from './batch3'; import batch4 from './batch4'; +import batch5 from './batch5'; /** * Thai (ไทย) translations — composed from fragments so parallel translation @@ -16,6 +17,7 @@ const th = { ...batch2, ...batch3, ...batch4, + ...batch5, }; export default th;