diff --git a/src/i18n/th/batch3.ts b/src/i18n/th/batch3.ts new file mode 100644 index 0000000..0a63d76 --- /dev/null +++ b/src/i18n/th/batch3.ts @@ -0,0 +1,502 @@ +/** + * Thai (ไทย) — batch 3: spot detail/forms (spotUi) + DIY hub (diyUi). + * Skate terms stay English (Spot, Skate Spot, Skate Shop, Gear, Crew, Coach, + * Filmer, Deck, Nose, Tail, Wheelbase, Concave, Kicks, Ledge, Flatbar, Coping, + * Truck, Bearings, DIY, The Lab, Marketplace, Nostr, NIP-05, npub, sats, Zap). + */ +const thBatch3 = { + spotUi: { + claim: { + areYouOwner: 'นี่คือสปอตของคุณหรือไม่?', + privateDesc: 'สปอตนี้ถูกทำเครื่องหมายเป็นส่วนตัว ถ้าคุณเป็นเจ้าของหรือดูแลอยู่ ให้อ้างสิทธิ์ — ผู้ดูแล SkateSpots จะยืนยันความเป็นเจ้าของ แล้วคุณจึงเข้าควบคุมรายการได้', + claimSpot: 'อ้างสิทธิ์สปอตนี้', + nip05Required: 'คุณต้องมี NIP-05 ที่ยืนยันแล้วเพื่ออ้างสิทธิ์สปอตส่วนตัว (หลักฐานว่าคุณควบคุมตัวตนบน Nostr) เพิ่มในโปรไฟล์ก่อน แล้วกลับมาใหม่', + addNip05: 'เพิ่ม NIP-05 ในตั้งค่า', + pendingTitle: 'คำอ้างสิทธิ์รอตรวจสอบ', + pendingDesc: 'ส่งคำอ้างสิทธิ์แล้ว ผู้ดูแล SkateSpots จะตรวจสอบ — คุณจะอ้างสิทธิ์สปอตให้เสร็จได้เมื่อได้รับอนุมัติ', + approvedTitle: 'อนุมัติคำอ้างสิทธิ์แล้ว', + approvedDesc: 'ผู้ดูแลอนุมัติคำอ้างสิทธิ์ของคุณแล้ว ทำขั้นตอนสุดท้ายเพื่อเป็นเจ้าของสปอตนี้', + complete: 'ทำการอ้างสิทธิ์ให้เสร็จ', + submitted: 'ส่งคำอ้างสิทธิ์แล้ว', + submittedDesc: 'ผู้ดูแลจะตรวจสอบคำอ้างสิทธิ์ของคุณ คุณจะได้สปอตเมื่อได้รับอนุมัติ', + submitFailed: 'ส่งคำอ้างสิทธิ์ไม่สำเร็จ', + submit: 'ส่งคำอ้างสิทธิ์', + submitting: 'กำลังส่ง…', + confirmTitle: 'อ้างสิทธิ์ "{{title}}"?', + confirmIntro: 'คุณกำลังขอเป็นเจ้าของสปอตส่วนตัวนี้', + confirmBullet1: 'ผู้ดูแล SkateSpots จะตรวจสอบคำขอ (เรายืนยันกรรมสิทธิ์ทรัพย์สินไม่ได้ ยืนยันได้แค่คีย์ Nostr)', + confirmBullet2: 'ถ้าอนุมัติ คุณทำขั้นตอนสุดท้ายเพื่อเป็นเจ้าของและแก้ไขสปอตได้', + confirmBullet3: 'สปอตต้นฉบับยังอยู่บน Nostr — เครือข่ายนี้กระจายศูนย์', + adminTitle: 'คำอ้างสิทธิ์ความเป็นเจ้าของที่รออยู่', + adminApprove: 'อนุมัติ', + adminApproved: 'อนุมัติแล้ว', + adminApprovedDesc: 'ตอนนี้พวกเขาทำการอ้างสิทธิ์สปอตให้เสร็จได้แล้ว', + adminApproveFailed: 'อนุมัติคำอ้างสิทธิ์ไม่สำเร็จ', + loginRequired: 'เข้าสู่ระบบเพื่ออ้างสิทธิ์สปอตส่วนตัวนี้ หรือขอความเป็นเจ้าของ', + }, + abandonedDesc: 'อัปเดตล่าสุด {{time}} ถ้าเจ้าของเดิมไม่แอ็กทีฟแล้ว คุณอ้างสิทธิ์สปอตนี้เพื่อดูแลและปรับปรุงได้', + claimedNotice: 'รายการที่ถูกอ้างสิทธิ์', + claimedNoticeDesc: 'สปอตนี้ถูกเผยแพร่ใหม่โดยเจ้าของคนใหม่หลังการอ้างสิทธิ์ รายการต้นฉบับอาจยังอยู่แยกต่างหาก', + abandonedLoginDesc: 'อัปเดตล่าสุด {{time}} เข้าสู่ระบบเพื่ออ้างสิทธิ์และดูแลสปอตนี้', + accessDeniedDesc: 'คุณแก้ไขได้เฉพาะสปอตที่คุณสร้างเอง', + accessDeniedTitle: 'ไม่มีสิทธิ์เข้าถึง', + addAtLeastOneTag: 'กรุณาเพิ่มอย่างน้อยหนึ่งแท็ก', + additionalDetails: 'รายละเอียดเพิ่มเติม (ไม่บังคับ)', + additionalDetailsPlaceholder: 'ใส่ข้อมูลเพิ่มเติมที่จะช่วยได้...', + addNewTags: 'เพิ่มแท็กใหม่:', + addNip05InSettings: 'เพิ่ม NIP-05 ในตั้งค่า', + addPhoto: 'เพิ่มรูป', + addPhotoDesc: 'ร่วมเพิ่มรูปเพื่อช่วยให้คนอื่นค้นพบสปอตนี้', + addPhotoOrDescription: 'เพิ่มรูปหรือคำอธิบาย', + addPhotoOrDescriptionDesc: 'ให้นักสเก็ตมีอะไรอ้างอิง — รูป หรือคำบรรยายสถานที่', + addPhotos: 'เพิ่มรูป', + addPhotoToSpot: 'เพิ่มรูปให้สปอต', + adminDeleteDialogDesc: 'ในฐานะผู้ดูแล SkateSpots คุณกำลังนำ "{{title}}" ออก จะถูกซ่อนทั่วทั้งแอปสำหรับทุกคน และจะส่งคำขอลบไปยัง relay', + adminDeleteReason: 'ผู้ดูแล SkateSpots ลบสปอต "{{title}}"', + airQuality: 'คุณภาพอากาศ', + altSkateSpot: 'สปอตสเก็ต: {{title}}', + areYouShopOwner: 'คุณเป็นเจ้าของร้านนี้หรือไม่?', + askBeforeSkating: 'ถามก่อนเล่น', + backToSpot: 'กลับไปที่สปอต', + beFirstToListGear: 'เป็นคนแรกที่ลงขาย Gear ที่สปอตนี้!', + beFirstToSay: 'เป็นคนแรกที่พูดอะไรบางอย่าง', + byAuthor: 'โดย {{name}}', + captionPlaceholder: 'ใส่คำบรรยาย (ไม่บังคับ) — อธิบายว่าในรูปมีอะไร ถ่ายเมื่อไร ฯลฯ', + chatPublicNote: 'ใครก็อ่านได้ — ข้อความสาธารณะและชั่วคราว สำหรับแชตส่วนตัวใช้ข้อความโดยตรง', + checkPinBelow: 'ตรวจหมุดด้านล่างก่อนเพิ่มซ้ำ', + claimBullet1: 'คุณกลายเป็นเจ้าของและแก้ไขสปอตได้', + claimBullet2: 'สปอตต้นฉบับยังอยู่ (Nostr กระจายศูนย์)', + claimBullet3: 'เวอร์ชันของคุณอาจปรากฏเคียงข้างต้นฉบับ', + claimFailed: 'อ้างสิทธิ์ไม่สำเร็จ', + claiming: 'กำลังอ้างสิทธิ์...', + claimIntro: 'คุณกำลังจะอ้างสิทธิ์ความเป็นเจ้าของสปอตนี้ จะสร้างสปอตเวอร์ชันของคุณเองที่แก้ไขและดูแลได้', + claimSpot: 'อ้างสิทธิ์สปอต', + claimThisSpot: 'อ้างสิทธิ์สปอตนี้', + claimTitle: 'อ้างสิทธิ์ "{{title}}"?', + claimWhatHappens: 'สิ่งที่จะเกิดขึ้นเมื่อคุณอ้างสิทธิ์:', + coachesAndFilmersAvailable: 'มีโค้ชและช่างถ่ายให้บริการที่สปอตนี้', + coachesCount: 'โค้ช ({{count}})', + coachHere: 'โค้ชที่นี่', + community: 'ชุมชน', + communityVerified: 'ชุมชนยืนยันแล้ว', + communityVerifiedTitle: 'นักสเก็ตคนอื่นมีส่วนร่วมที่นี่ (รูปหรือรายงานสภาพ)', + conditions: 'สภาพ', + contactForPermission: 'ติดต่อเพื่อขออนุญาต', + contactInfo: 'ข้อมูลติดต่อ', + contributePhoto: 'ร่วมส่งรูป', + contributing: 'กำลังส่ง...', + couldNotSendMessage: 'ส่งข้อความไม่สำเร็จ', + couldNotSubmit: 'ส่งไม่สำเร็จ', + couldNotUploadPhoto: 'อัปโหลดรูปไม่สำเร็จ คุณเพิ่มด้านล่างได้', + crewsThatSkateHere: 'Crew ที่เล่นที่นี่', + current: 'ปัจจุบัน:', + currentTags: 'แท็กปัจจุบันของสปอตนี้:', + daysAgo: '{{count}} วันที่แล้ว', + daysAgoPlural: '{{count}} วันที่แล้ว', + deleteDialogDesc: 'การลบ "{{title}}" จะถาวรจากทุก relay และย้อนกลับไม่ได้', + deletedSpotReason: 'ลบสปอตแล้ว', + deleteFailed: 'ลบไม่สำเร็จ', + deleteSpot: 'ลบสปอต', + deleteSpotTitle: 'ลบสปอต?', + differentSpotPublishAnyway: 'เป็นคนละสปอต — เผยแพร่ต่อไป', + dragDropOrClick: 'ลากมาวางหรือคลิก', + dropPhotos: 'วางรูป', + duplicateOne: 'มีสปอตอยู่ในระยะ 60 ม. จากหมุดของคุณ ถ้าเป็นที่เดียวกัน ให้เพิ่มรูปหรือรายงานสภาพที่นั่นแทนการสร้างซ้ำ', + duplicateOther: 'มีสปอตหลายแห่งในระยะ 60 ม. จากหมุดของคุณ ถ้าเป็นที่เดียวกัน ให้เพิ่มรูปหรือรายงานสภาพที่นั่นแทนการสร้างซ้ำ', + editSpotSeoDesc: 'แก้ไขสปอตสเก็ตของคุณ', + failedToContribute: 'ส่งไม่สำเร็จ', + failedToPublish: 'เผยแพร่ไม่สำเร็จ', + failedToPublishDesc: 'มีบางอย่างผิดพลาด ตรวจสอบ console เพื่อดูรายละเอียด', + failedToSubmitReport: 'ส่งรายงานไม่สำเร็จ', + failedToSuggestTags: 'เสนอแท็กไม่สำเร็จ', + failedToUpdate: 'อัปเดตไม่สำเร็จ', + failedToUploadImage: 'อัปโหลดรูปภาพไม่สำเร็จ', + failedToUploadPhoto: 'อัปโหลดรูปไม่สำเร็จ', + feelsLikeTemp: 'รู้สึกเหมือน {{temp}}°C', + filmersCount: 'ช่างถ่าย ({{count}})', + filmHere: 'ถ่ายที่นี่', + gearSwap: 'Gear Swap', + geolocationNotSupported: 'ไม่รองรับตำแหน่ง', + geolocationNotSupportedDesc: 'เบราว์เซอร์ของคุณไม่รองรับการระบุตำแหน่ง', + getDirections: 'ขอเส้นทาง', + hangTight: 'รอสักครู่', + hangTightDesc: 'รูปของคุณยังอัปโหลดอยู่ จะแนบให้ในไม่ช้า', + helpImproveSpot: 'ช่วยปรับปรุงสปอตนี้ด้วยการเพิ่มรูปหรือเสนอแท็ก', + hiddenByModerator: 'ถูกซ่อนโดยผู้ดูแล', + hiddenByModeratorDesc: 'สปอตนี้ไม่แสดงบนแผนที่หรือผลการค้นหา คุณยังเห็นได้เพราะเป็นของคุณ การแก้ไขจะไม่ทำให้กลับมาแสดง — จะซ่อนอยู่จนกว่าผู้ดูแลจะถอนคำตัดสิน', + humidity: 'ความชื้น', + imageUploaded: 'อัปโหลดรูปแล้ว', + imageUploadedDesc: 'อัปโหลดรูปของคุณสำเร็จแล้ว', + imHere: 'ฉันอยู่ที่นี่', + invalidCoordinates: 'พิกัดไม่ถูกต้อง', + invalidCoordinatesDesc: 'กรุณากรอกละติจูด (-90 ถึง 90) และลองจิจูด (-180 ถึง 180) ที่ถูกต้อง', + invalidNpub: 'npub ไม่ถูกต้อง', + invalidNpubDesc: 'กรุณากรอกที่อยู่ npub ที่ถูกต้อง', + lastReported: 'ล่าสุด {{time}}', + listGear: 'ลงขาย Gear', + listYourGearHere: 'ลงขาย Gear ของคุณที่นี่', + loadingChat: 'กำลังโหลดแชต…', + locationError: 'ตำแหน่งผิดพลาด', + locationFound: 'พบตำแหน่ง', + locationFoundDesc: 'ตั้งตำแหน่งปัจจุบันของคุณแล้ว', + locationRequired: 'ต้องระบุตำแหน่ง', + locationRequiredDesc: 'กรุณากรอกพิกัดหรือใช้ตำแหน่งปัจจุบันของคุณ', + loginRequiredTitle: 'ต้องเข้าสู่ระบบ', + logInToChat: 'เข้าสู่ระบบเพื่อร่วมแชตท้องถิ่น', + logInToContributePhotos: 'เข้าสู่ระบบเพื่อร่วมส่งรูป', + loginToEditSpot: 'คุณต้องเข้าสู่ระบบเพื่อแก้ไขสปอตนี้', + logInToReport: 'คุณต้องเข้าสู่ระบบเพื่อรายงานเนื้อหา', + logInToReportStatus: 'เข้าสู่ระบบเพื่อรายงานสภาพของสปอตนี้', + logInToSuggestTags: 'เข้าสู่ระบบเพื่อเสนอแท็ก', + manageNip05ToClaim: 'จัดการ NIP-05 เพื่ออ้างสิทธิ์', + meetAtSpotForPickup: '💡 นัดที่สปอตนี้เพื่อรับของอย่างปลอดภัย', + memberOne: 'สมาชิก {{count}} คน', + memberOther: 'สมาชิก {{count}} คน', + messageFailed: 'ส่งข้อความไม่สำเร็จ', + messageMapper: 'ส่งข้อความถึงผู้แมป', + messagePlaceholder: 'ส่งข้อความถึงสปอตนี้… (ลอง /me หรือ /who)', + messagesHiddenOne: 'มี {{count}} ข้อความถูกซ่อนโดยตัวกรองความน่าเชื่อถือ ลดตัวกรองเพื่อดูเพิ่ม', + messagesHiddenOther: 'มี {{count}} ข้อความถูกซ่อนโดยตัวกรองความน่าเชื่อถือ ลดตัวกรองเพื่อดูเพิ่ม', + messagesHiddenShortOne: 'มี {{count}} ข้อความถูกซ่อนโดยตัวกรองความน่าเชื่อถือ', + messagesHiddenShortOther: 'มี {{count}} ข้อความถูกซ่อนโดยตัวกรองความน่าเชื่อถือ', + metresAway: 'ห่าง {{distance}} ม.', + moderatorVouchedDesc: 'ผู้ดูแลตรวจสอบสปอตนี้และรับรองให้ เยี่ยมมาก', + monthsAgo: '{{count}} เดือนที่แล้ว', + monthsAgoPlural: '{{count}} เดือนที่แล้ว', + newOwnerNpub: 'npub ของเจ้าของใหม่', + newOwnerNpubHint: 'กรอก npub ของผู้ใช้ที่คุณต้องการโอนสปอตนี้ให้', + nip05RequiredToClaim: '⚠️ ต้องยืนยัน NIP-05 เพื่ออ้างสิทธิ์ร้านค้า', + noCommunitySignalTitle: 'ยังไม่มีรูปจากชุมชนหรือรายงานสภาพ — ยังไม่มีใครยืนยันสถานที่นี้', + breakdownPhotos: '{{count}} รูป', + breakdownStatus: '{{count}} รายงานสภาพ', + breakdownComments: '{{count}} คอมเมนต์', + breakdownReactions: '{{count}} รีแอ็กชัน', + breakdownCollections: '{{count}} การบันทึก', + breakdownZaps: '{{count}} zap', + breakdownTags: '{{count}} การเสนอแท็ก', + breakdownCrews: '{{count}} crew', + breakdownLab: '{{count}} ลิงก์ผู้เชี่ยวชาญ', + verifyNudgeTitle: 'เป็นคนแรกที่ยืนยันสปอตนี้', + verifyNudgeBody: 'รูปหรือการบอกว่า “เคยเล่นที่นี่” คือวิธีที่สปอตได้รับการยืนยัน — ช่วยนักสเก็ตคนต่อไปหน่อย', + verifyNudgeStatus: 'เคยเล่นที่นี่', + communityChip: 'ชุมชน', + seenChip: 'เห็นแล้ว', + noGearListedYet: 'ยังไม่มี Gear ที่ลงขาย', + noMessagesYet: 'ยังไม่มีข้อความในช่องท้องถิ่นนี้ ทักทายหน่อย — "คืนนี้มีใครเล่นไหม?"', + noPhoto: 'ไม่มีรูป', + noReportsYet: 'ยังไม่มีรายงาน', + noTags: 'ไม่มีแท็ก', + notASkateSpot: 'ไม่ใช่สปอตสเก็ต', + offerServicesHere: '💡 เสนอบริการของคุณที่สปอตนี้', + photoCaptured: 'ถ่ายรูปแล้ว!', + photoCapturedDesc: 'อัปโหลดรูปของคุณสำเร็จแล้ว', + photoContributed: 'ร่วมส่งรูปแล้ว!', + photoContributedDesc: 'รูปของคุณถูกเพิ่มในสปอตนี้แล้ว', + photosAdded: 'เพิ่มรูปของคุณแล้ว', + photosRecommended: 'แนะนำอย่างยิ่ง — สปอตที่ไม่มีรูปจะยังขึ้นว่า ยังไม่ยืนยัน', + photosUploaded: 'อัปโหลด {{count}} รูปแล้ว', + photoUploaded: 'อัปโหลดรูปแล้ว', + photoUploadedDesc: 'ใส่คำบรรยายแล้วส่งเพื่อร่วมส่ง!', + photoUploadFailed: 'อัปโหลดรูปไม่สำเร็จ', + pleaseTryAgain: 'กรุณาลองอีกครั้ง', + public: 'สาธารณะ', + publicChatTitle: 'ใครก็อ่านข้อความในช่องนี้ได้ — เป็นสาธารณะและไม่เข้ารหัส', + recentReports: 'รายงานล่าสุด', + recipientRequired: 'ต้องระบุผู้รับ', + recipientRequiredDesc: 'กรุณากรอก npub ของเจ้าของใหม่', + removeAdmin: 'นำออก (ผู้ดูแล)', + removeSpot: 'นำสปอตออก', + removeSpotAdminTitle: 'นำสปอตนี้้ออก? (ผู้ดูแล)', + reportOne: 'รายงาน', + reportContent: 'รายงานเนื้อหา', + reportContentDesc: 'ช่วยให้ชุมชนปลอดภัยด้วยการรายงานเนื้อหาที่ไม่เหมาะสม', + reportedBySkaters: ' โดยนักสเก็ต {{count}} คน — อยู่ระหว่างตรวจสอบ ถ้าเป็นสปอตจริง ให้เพิ่มรูปหรือรายงานสภาพเพื่อยืนยัน', + reportedNotASpot: 'ถูกรายงานว่าไม่ใช่สปอตสเก็ต', + reportingType: 'กำลังรายงาน {{type}}', + reports: 'รายงาน', + reportShop: 'รายงานร้าน', + reportSpot: 'รายงานสปอต', + reportStatus: 'รายงานสภาพ', + reportSubmitted: 'ส่งรายงานแล้ว', + reportSubmittedDesc: 'ขอบคุณที่ช่วยรักษา SkateSpots ให้ปลอดภัย', + reportSubmittedLong: 'ขอบคุณที่ช่วยให้ SkateSpots ปลอดภัยและแม่นยำ รายงานของคุณจะถูกตรวจสอบโดยสมาชิกชุมชนที่เชื่อถือได้', + reportSubmittedTitle: 'ส่งรายงานแล้ว', + report: { + notASkateSpot: { + label: 'ไม่ใช่สปอตสเก็ต', + description: 'รายการทดสอบ หรือสถานที่ที่ไม่ได้ใช้เล่นสเก็ตเลย', + }, + fakeSpot: { + label: 'สปอตปลอม/ไม่มีอยู่จริง', + description: 'สปอตนี้ไม่มีอยู่จริงหรือตำแหน่งผิด', + }, + stolenPhotos: { + label: 'รูปปลอม/ขโมยมา', + description: 'รูปเป็นภาพสต็อกหรือขโมยมาจากที่อื่น', + }, + spamAd: { + label: 'สแปมหรือโฆษณา', + description: 'เนื้อหาโปรโมตหรือรายการซ้ำ', + }, + dangerousLocation: { + label: 'ตำแหน่งอันตราย', + description: 'ที่ดินส่วนบุคคล ไม่ปลอดภัย หรือเข้าถึงผิดกฎหมาย', + }, + inappropriateContent: { + label: 'เนื้อหาไม่เหมาะสม', + description: 'มีเนื้อหาลามกหรือสำหรับผู้ใหญ่', + }, + impersonation: { + label: 'แอบอ้างเป็นผู้อื่น', + description: 'มีคนแอบอ้างเป็นคนอื่น', + }, + other: { + label: 'อื่น ๆ', + description: 'เรื่องอื่นที่ไม่ได้ระบุข้างต้น', + }, + }, + targetType: { + spot: 'Spot', + event: 'อีเวนต์', + tour: 'ทัวร์', + shop: 'ร้าน', + user: 'ผู้ใช้', + listing: 'รายการ', + coach: 'โค้ช', + filmer: 'ช่างถ่าย', + }, + sameOwner: 'เจ้าของคนเดียวกัน', + sameOwnerDesc: 'โอนให้เจ้าของปัจจุบันไม่ได้', + saveChanges: 'บันทึกการเปลี่ยนแปลง', + saving: 'กำลังบันทึก...', + services: 'บริการ', + shareSpotText: 'ลองดูสปอตสเก็ตนี้: {{title}}', + shelter: 'ที่กำบัง', + shelterHint: 'สปอตนี้โดนฝนไหม? ช่วยให้นักสเก็ตหาที่แห้งตอนฝนตก', + shopClaimDesc: 'ถ้าคุณเป็นเจ้าของหรือดูแลร้านนี้ อ้างสิทธิ์เพื่อยืนยันความเป็นเจ้าของและจัดการรายการได้', + shopClaimNip05Hint: 'การอ้างสิทธิ์ร้านนี้ ต้องเพิ่ม NIP-05 ที่ตรงกับโดเมนเว็บไซต์ของร้าน', + skatersActiveDesc: 'คนที่โพสต์ในช่องนี้ใน 24 ชม. ที่ผ่านมา', + skatersActiveOne: 'มีนักสเก็ต {{count}} คนแอ็กทีฟที่นี่', + skatersActiveOther: 'มีนักสเก็ต {{count}} คนแอ็กทีฟที่นี่', + skatersSellingGear: 'นักสเก็ตที่สปอตนี้กำลังขาย Gear', + skateSpot: 'Skate Spot', + somethingWentWrong: 'มีบางอย่างผิดพลาด', + spot: 'Spot', + spotAdded: 'เพิ่มสปอตแล้ว!', + spotAddedDesc: 'สปอตสเก็ตของคุณถูกเผยแพร่สู่เครือข่ายแล้ว', + spotAddedNoPhoto: 'เผยแพร่แล้ว — และขึ้นว่า ยังไม่ยืนยัน จนกว่าจะมีคนเพิ่มรูป รูปของสปอตช่วยได้มาก', + spotChat: 'Spot Chat', + spotClaimed: 'อ้างสิทธิ์สปอตแล้ว!', + spotClaimedDesc: 'ตอนนี้คุณเป็นเจ้าของสปอตนี้แล้ว แก้ไขได้จากโปรไฟล์ของคุณ', + spotDeleted: 'ลบสปอตแล้ว', + spotDeletedDesc: 'ส่งคำขอลบไปยัง relay แล้ว relay ส่วนใหญ่จะนำเนื้อหานี้ออก', + spotMayAlreadyBeOnMap: 'สปอตนั้นอาจอยู่บนแผนที่แล้ว', + spotMayAlreadyExist: 'สปอตนี้้อาจมีอยู่แล้ว', + spotMayBeAbandoned: 'สปอตอาจถูกทิ้ง', + spotPhotoAlt: 'Spot', + spotRemoved: 'นำสปอตออกแล้ว', + spotRemovedDesc: 'สปอตนี้ถูกนำออกและจะถูกซ่อนทั่วทั้ง SkateSpots', + spotSeoDesc: 'ดูสปอตสเก็ตนี้บน SkateSpots', + spotStatus: 'สภาพสปอต', + spotStatusDesc: '"{{title}}" ยังเล่นได้อยู่ไหม? บอกชุมชนถึงสภาพปัจจุบัน', + spotTypeRequired: 'ต้องเลือกประเภทสปอต', + spotTypeRequiredDesc: 'กรุณาเลือกประเภทสปอตเพื่อให้รู้ว่าจะไปเจออะไร', + spotUpdated: 'อัปเดตสปอตแล้ว!', + spotUpdatedDesc: 'การเปลี่ยนแปลงของคุณถูกเผยแพร่สู่เครือข่ายแล้ว', + staffVerifiedTitle: 'ผู้ดูแล SkateSpots ตรวจสอบและรับรองสปอตนี้', + statusNotePlaceholder: 'ไม่บังคับ: เพิ่มรายละเอียด (เช่น "มีน็อตใหม่บน ledge", "รปภ. ไล่หลัง 6 โมงเย็น")', + statusReported: 'รายงานสภาพแล้ว', + statusReportedDesc: 'ขอบคุณที่ช่วยให้แผนที่สดใหม่ รายงานของคุณเผยแพร่แล้ว', + submitReport: 'ส่งรายงาน', + submitting: 'กำลังส่ง...', + suggestedByUser: 'เสนอโดยผู้ใช้ {{count}} คน', + suggestedByUsers: 'เสนอโดยผู้ใช้ {{count}} คน', + suggestedTagsContent: 'แท็กที่เสนอสำหรับ {{title}}: {{tags}}', + suggestNTags: 'เสนอ {{count}} แท็ก', + suggestOneTag: 'เสนอ 1 แท็ก', + suggestTags: 'เสนอแท็ก', + suggestTagsDesc: 'ช่วยจัดหมวดสปอตนี้ด้วยการเสนอแท็กที่เกี่ยวข้อง', + tags: 'แท็ก', + tagsHint: 'เพิ่มแท็กสำหรับลักษณะ พื้นผิว บรรยากาศ (สูงสุด {{max}})', + tagsSuggested: 'เสนอแท็กแล้ว!', + tagsSuggestedDesc: 'ส่งข้อเสนอแนะแท็กของคุณแล้ว', + takePhoto: 'ถ่ายรูป', + threeDayForecast: 'พยากรณ์ 3 วัน', + tipTheMapper: 'ให้ทิปผู้แมป', + tipTheMapperDesc: 'สปอตนี้มีประโยชน์ไหม? ส่ง zap เพื่อขอบคุณผู้แมป!', + titleRequired: 'ต้องระบุชื่อ', + titleRequiredDesc: 'กรุณากรอกชื่อสำหรับสปอตนี้', + today: 'วันนี้', + tomorrow: 'พรุ่งนี้', + transferDesc: 'โอน "{{title}}" ให้ผู้ใช้คนอื่น การกระทำนี้ย้อนกลับไม่ได้', + transferFailed: 'โอนไม่สำเร็จ', + transferOwnership: 'โอนความเป็นเจ้าของ', + transferRequestContent: 'คำขอโอนความเป็นเจ้าของสปอต "{{title}}"', + transferRequested: 'ขอโอนแล้ว', + transferRequestedDesc: 'เจ้าของใหม่ต้องอ้างสิทธิ์สปอตเพื่อทำการโอนให้เสร็จ', + transferring: 'กำลังโอน...', + transferSpotOwnership: 'โอนความเป็นเจ้าของสปอต', + transferWarningDesc: 'หลังโอน คุณจะแก้ไขหรือลบสปอตนี้ไม่ได้อีก', + typeToSearchTags: 'พิมพ์เพื่อค้นหาหรือเพิ่มแท็ก...', + underReview: ' — อยู่ระหว่างตรวจสอบ ถ้าเป็นสปอตจริง ให้เพิ่มรูปหรือรายงานสภาพเพื่อยืนยัน', + untitledSpot: 'สปอตไม่มีชื่อ', + unverified: 'ยังไม่ยืนยัน', + updateDetailsFor: 'อัปเดตรายละเอียดของ {{title}}', + updateSpotDesc: 'อัปเดตข้อมูลของสปอตนี้ ช่องที่มี * จำเป็นต้องกรอก', + uploadAPhoto: 'อัปโหลดรูป', + uploadAPhotoHint: 'ลากมาวางหรือคลิก · JPG, PNG, WebP', + uploadedAlt: 'อัปโหลดแล้ว', + uploadFailed: 'อัปโหลดไม่สำเร็จ', + uploadingPhoto: 'กำลังอัปโหลดรูป…', + uploadPhotoFirst: 'กรุณาอัปโหลดรูปก่อน', + uvIndex: 'ดัชนี UV', + verifiedBySkateSpots: 'ยืนยันโดย SkateSpots', + viewPhotoFullScreen: 'ดูรูปเต็มจอ', + viewPhotoOf: 'ดูรูปที่ {{n}} จาก {{total}}', + warning: 'คำเตือน', + weatherConditions: 'สภาพอากาศ', + weatherOnly: 'เฉพาะสภาพอากาศ', + weatherOnlyUnconfirmed: 'เฉพาะสภาพอากาศ ยังไม่มีใครยืนยันว่านี่คือสปอตสเก็ต จึงยังไม่มีคะแนนสภาพ — เพิ่มรูปหรือรายงานสภาพเพื่อยืนยัน', + whyReporting: 'คุณรายงานเรื่องนี้เพราะอะไร?', + wind: 'ลม', + yearsAgo: '{{count}} ปีที่แล้ว', + yearsAgoPlural: '{{count}} ปีที่แล้ว', + }, + diyUi: { + title: 'DIY — ทำเอง', + tagline: 'คู่มือ เครื่องมือเปิด และแบบแปลนสำหรับทำ Deck แร็มป์ และสปอตคอนกรีตด้วยตัวเอง — แล้วหาคน สถานที่ และตลาดที่ไปด้วยกัน', + doItWithPeople: 'ทำกับผู้คน', + backToDiy: 'กลับไปที่ DIY', + calc: { + title: 'เครื่องคิดต้นทุน Deck', + intro: 'Deck หนึ่งแผ่นมีต้นทุนเท่าไร — ค่าแรง อุปกรณ์ วัสดุ เวลาผลิต บรรจุภัณฑ์ และกำไร — พร้อมราคาขายที่เป็นธรรม บันทึกไว้ในเครื่องนี้', + }, + designer: { + title: 'Deck designer', + intro: 'ขึ้นรูปทรงสเก็ตบอร์ดหรือลองบอร์ด แล้วส่งออกเทมเพลตพิมพ์ 1:1, SVG หรือ DXF สำหรับ CNC บันทึกไว้ในเครื่องนี้', + presets: 'พรีเซ็ต', + dimensions: 'ขนาด', + shape: 'รูปทรง', + kicks: 'Kicks', + hardware: 'รู Truck', + width: 'ความกว้างสูงสุด', + wheelbase: 'Wheelbase', + nose: 'ความยาว Nose', + tail: 'ความยาว Tail', + length: 'ความยาวรวม', + waist: 'Waist', + endRound: 'ความมนปลาย', + concave: 'Concave', + thickness: 'ความหนา', + tailKick: 'Tail kick', + noseKick: 'Nose kick', + holeNew: 'New school (2.125″)', + holeOld: 'Old school (2.5″)', + holeSpacing: 'New school คือ 2.125″ × 1.625″ (54 × 41 มม.); old school คือ 2.5″ × 1.625″ รูยึด 3/16″', + topView: 'มุมมองด้านบน', + sideView: 'ด้านข้าง', + concaveSection: 'ภาคตัด Concave', + export: 'ส่งออก', + pdfA4: 'PDF 1:1 · A4', + pdfLetter: 'PDF 1:1 · Letter', + printNote: 'พิมพ์ PDF ที่ 100% (ไม่เลือก "พอดีหน้า") แล้วต่อแผ่นโดยใช้กากบาทที่มุม SVG ก็เป็นขนาดจริงเช่นกัน', + note: 'นี่คือโครงร่าง 2D ที่คุณลอกและตัด สำหรับรูปทรง 3D เต็มรูปแบบและการออกแบบแม่พิมพ์ เครื่องมือ CAD จริงยังเป็นทางเลือกที่ถูกต้อง', + }, + source: 'แหล่งที่มา', + comingSoon: 'เร็ว ๆ นี้', + footer: 'คู่มือทีละขั้นกำลังจะมา ระหว่างนี้: หาคนที่สร้างใน The Lab, แมปสปอตของคุณ และซื้อหรือขายใน Marketplace ทำงานอย่างปลอดภัย — สวมสนับมือ ถุงมือ และแว่นตากันลม', + categories: { + boards: 'Boards', + ramps: 'Ramps & อุปกรณ์ไม้', + concrete: 'คอนกรีต & สปอต DIY', + repairs: 'ซ่อม & จูน', + tools: 'เครื่องมือ & แบบแปลน', + }, + cards: { + ossBuild: { + title: 'สร้างสเก็ตบอร์ด', + blurb: 'ขั้นตอนการทำ Deck — วีเนียร์ แม่พิมพ์ แท่นอัด และการเก็บงาน', + }, + sk8cad: { + title: 'SK8CAD', + blurb: 'CAD โอเพนซอร์สสำหรับรูปทรง Deck, Concave และการออกแบบแม่พิมพ์', + }, + deckCost: { + title: 'ต้นทุน & ราคา Deck', + blurb: 'คำนวณวัสดุ ค่าแรง และราคาขายที่เป็นธรรมก่อนลงมือสร้าง', + }, + deckDesigner: { + title: 'Deck designer', + blurb: 'ขึ้นโครงร่างและพิมพ์เทมเพลต 1:1 — หรือส่งออก SVG/DXF สำหรับ CNC', + }, + ledgeBox: { + title: 'สร้าง Ledge หรือ Box', + blurb: 'อุปกรณ์ไม้ที่มือใหม่ทำได้ในหนึ่งสุดสัปดาห์', + }, + quarterpipe: { + title: 'สร้าง Quarterpipe', + blurb: 'แบบแปลน Transition และ Coping สำหรับ Mini หลังบ้าน', + }, + flatbar: { + title: 'สร้าง Flatbar', + blurb: 'ถูก พกพาง่าย และเป็นวิธีที่ดีที่สุดในการหัดเล่น Rails', + }, + concreteBasics: { + title: 'พื้นฐานคอนกรีต', + blurb: 'การผสม ขึ้นแบบ และเก็บผิว Ledge หรือ Bank ที่ทนทาน', + }, + coping: { + title: 'Coping & ขอบ', + blurb: 'วิธีติดตั้ง Coping และเก็บผิว Transition ให้ grind ลื่น', + }, + buyParts: { + title: 'ซื้ออะไหล่ & Gear', + blurb: 'หา Deck, Hardware และเครื่องมือจากผู้ขายใน Marketplace', + }, + mapSpot: { + title: 'แมปสปอต DIY ของคุณ', + blurb: 'สร้างอะไรไว้? เพิ่มลงแผนที่ให้คนอื่นเจอและไปเล่นได้', + }, + regrip: { + title: 'เปลี่ยน Grip', + blurb: 'ลอก Grip เก่าและติด Grip ใหม่ให้เรียบเนียน', + }, + tune: { + title: 'จูน Bearings & Truck', + blurb: 'ล้าง Bearings เปลี่ยน Bushing และตั้งเรขาคณิต Truck', + }, + printMolds: { + title: 'แม่พิมพ์พิมพ์ 3D', + blurb: 'ไฟล์แม่พิมพ์และฐานจัดตำแหน่งที่พิมพ์ได้จากชุมชน', + }, + sk8cadTools: { + title: 'เครื่องมือแม่พิมพ์ & จัดตำแหน่ง', + blurb: 'ออกแบบแม่พิมพ์พร้อมฐานจัดตำแหน่งในตัว', + }, + }, + actions: { + findBuilder: { + title: 'หาช่างสร้าง', + blurb: 'ช่างสร้าง ramp และ DIY ใน The Lab ที่ออกแบบหรือเทให้คุณได้', + }, + findCrew: { + title: 'หา Crew DIY', + blurb: 'Crew ที่เน้นลงมือสร้าง — ร่วมกับคนที่เปลี่ยนสปอตให้เป็นจริง', + }, + mapSpot: { + title: 'แมปสปอต DIY', + blurb: 'เพิ่มสปอตที่คุณสร้างไว้ให้อยู่บนแผนที่', + }, + sellBuilds: { + title: 'ขายสิ่งที่คุณทำ', + blurb: 'ลงขาย Deck, ramp หรืออะไหล่ที่คุณทำใน Marketplace', + }, + findCoach: { + title: 'หาโค้ช', + blurb: 'โค้ชที่สอนโมดูลสเก็ต DIY และการสร้างสปอต', + }, + }, + }, +}; + +export default thBatch3; diff --git a/src/i18n/th/index.ts b/src/i18n/th/index.ts index 112ca65..c2e4ea9 100644 --- a/src/i18n/th/index.ts +++ b/src/i18n/th/index.ts @@ -1,5 +1,6 @@ import batch1 from './batch1'; import batch2 from './batch2'; +import batch3 from './batch3'; /** * Thai (ไทย) translations — composed from fragments so parallel translation @@ -12,6 +13,7 @@ import batch2 from './batch2'; const th = { ...batch1, ...batch2, + ...batch3, }; export default th;