diff --git a/src/components/LanguageToggle.tsx b/src/components/LanguageToggle.tsx index 1825f74..0622577 100644 --- a/src/components/LanguageToggle.tsx +++ b/src/components/LanguageToggle.tsx @@ -31,6 +31,7 @@ const languages: LanguageOption[] = [ { code: 'th', name: 'Thai', nativeName: 'ไทย', flag: '🇹🇭' }, { code: 'ja', name: 'Japanese', nativeName: '日本語', flag: '🇯🇵' }, { code: 'zh-CN', name: 'Chinese (Simplified)', nativeName: '简体中文', flag: '🇨🇳' }, + { code: 'zh-TW', name: 'Chinese (Traditional)', nativeName: '繁體中文', flag: '🇹🇼' }, ]; interface LanguageToggleProps { diff --git a/src/i18n/zh-TW/batch1.ts b/src/i18n/zh-TW/batch1.ts index 4b0fe76..4aa45ab 100644 --- a/src/i18n/zh-TW/batch1.ts +++ b/src/i18n/zh-TW/batch1.ts @@ -1,4 +1,313 @@ -/** zh-TW — batch 1. Filled by the translation pass; empty until then. */ -const zhTWBatch1 = {}; +/** + * Traditional Chinese (繁體中文) — batch 1: app shell + static pages. + * + * Policy: skate vocabulary stays English (Spot, Park, Bowl, Vert, Crew, Deck, + * Trucks, Wheels, Bearings, Griptape, Stash, The Lab, Nostr, Lightning, Zap, + * Relay, sats). Street/Transition/Plaza/DIY/Skatepark/Mini Ramp also stay + * English, matching the other locales. Trick names stay English. Everything + * else is Traditional Chinese. + * + * Keys MUST match the `en` namespaces exactly; missing keys fall back to English. + */ +const zhTWBatch1 = { + common: { + loading: '載入中…', + error: '錯誤', + save: '儲存', + cancel: '取消', + delete: '刪除', + edit: '編輯', + add: '新增', + remove: '移除', + create: '建立', + submit: '提交', + close: '關閉', + back: '返回', + next: '下一步', + done: '完成', + search: '搜尋', + filter: '篩選', + sort: '排序', + share: '分享', + more: '更多', + copy: '複製', + copied: '已複製!', + viewAll: '查看全部', + seeMore: '查看更多', + showMore: '顯示更多', + showLess: '收起', + noResults: '找不到結果', + tryAgain: '重試', + learnMore: '瞭解更多', + getStarted: '開始使用', + yes: '是', + no: '否', + or: '或', + and: '和', + free: '免費', + new: '新', + popular: '熱門', + featured: '精選', + verified: '已驗證', + sats: 'sats', + clear: '清除', + clearFilters: '清除篩選', + clearAll: '全部清除', + hide: '隱藏', + undo: '復原', + }, + nav: { + home: '首頁', + map: 'Spots', + lab: 'The Lab', + events: '活動', + crews: 'Crews', + wallet: '錢包', + settings: '設定', + more: '更多', + rewards: '獎勵', + stats: '社群統計', + about: '關於', + food: '美食', + marketplace: '市集', + mints: 'Mints', + appShop: '應用程式商店', + diy: 'DIY', + trades: '市集', + stash: 'Stash', + collections: '收藏集', + contacts: '聯絡人', + messages: '訊息', + skaters: '滑手', + glossary: '術語表', + riderCard: '滑手卡', + supporters: '支持者 ⚡', + newsletter: '電子報', + viewProfile: '查看個人檔案', + leaderboards: '排行榜', + }, + chromeUi: { + skipToContent: '跳至內容', + menu: '選單', + inBadge: 'In', + loggedIn: '已登入', + profile: '個人檔案', + logIn: '登入', + logOut: '登出', + notLoggedIn: '未登入', + loggedOutPrompt: '登入即可新增 Spot、給滑手打賞 Zap 並收藏你的最愛', + accounts: '帳戶', + addAnotherAccount: '新增其他帳戶', + setStatus: '設定狀態', + setYourStatus: '設定你的狀態', + status: '狀態', + addSpot: '新增 Spot', + myData: '我的資料', + myStash: '我的 Stash', + myCollections: '我的收藏集', + viewMyProfile: '查看我的個人檔案', + customizeNavBar: '自訂導覽列', + ecash: 'Ecash', + madeWith: '用', + forSkateCommunity: '為滑板社群打造', + beta: '測試版', + license: '授權條款', + privacy: '隱私', + collaborators: '合作者與朋友', + notSponsoredBy: '未獲以下贊助:', + errorTitle: '無法載入', + errorDescription: '網路請求失敗。請檢查你的連線後重試。', + tryAgain: '重試', + weatherOn: '天氣:開', + weatherOff: '天氣:關', + trustFilter: '信任篩選', + filterByTrustLevel: '依信任等級篩選', + trust: { + all: '全部使用者', + allDesc: '顯示所有人的內容', + verified: '已驗證', + verifiedDesc: '你關注的人或已驗證使用者(信任 ≥90)', + trusted: '受信任', + trustedDesc: '朋友的朋友或 NIP-05 已驗證(信任 ≥60)', + following: '僅關注', + followingDesc: '僅顯示你關注的人的內容', + followingShort: '關注中', + }, + sort: { + recent: '最新', + recentDesc: '最新優先', + trust: '信任最高', + trustDesc: '最受信任的創作者', + proximity: '離我最近', + proximityDesc: '最近的位置', + popular: '最熱門', + popularDesc: '留言/互動最多', + zaps: 'Zap 最多', + zapsDesc: '收到的價值最高', + }, + spotType: { + street: 'Street', + transition: 'Transition', + park: 'Park', + plaza: 'Plaza', + diy: 'DIY', + bowl: 'Bowl', + vert: 'Vert', + indoor: '室內', + skatepark: 'Skatepark', + miniramp: 'Mini Ramp', + }, + }, + desktopNav: { + title: '桌面導覽', + desc: '選擇顯示在頂部列的標籤及其順序。隱藏的標籤仍會保留在「更多」選單中。', + fixed: '固定', + shownInTopBar: '顯示在頂部列({{count}})', + noExtraTabs: '未顯示額外標籤——全部都在「更多」選單中。在下方新增一些吧。', + inMoreMenu: '在「更多」選單中({{count}})', + moveUp: '將 {{name}} 上移', + moveDown: '將 {{name}} 下移', + hide: '隱藏 {{name}}', + moveToMore: '移到「更多」選單', + show: '顯示', + showInTopBar: '在頂部列顯示 {{name}}', + showInTopBarTitle: '在頂部列顯示', + reset: '重設為預設', + }, + navSheet: { + title: '自訂你的導覽列', + desc: '挑選你最常用的 {{count}} 個標籤。其餘的都留在選單裡。', + preview: '預覽', + empty: '空', + order: '順序({{done}}/{{total}})', + available: '可用標籤', + full: '導覽列已滿——移除一個以替換', + moveUp: '將 {{name}} 上移', + moveDown: '將 {{name}} 下移', + login: '登入', + profile: '個人檔案', + reset: '重設', + done: '完成', + }, + pwa: { + installTitle: '安裝 SkateSpots', + installSubtitle: '獲得完整的應用程式體驗', + addToHomeScreen: '加入主畫面', + installApp: '安裝應用程式', + maybeLater: '稍後再說', + gotIt: '知道了!', + benefits: { + fast: '極速', + offline: '離線可用', + fullAccess: '完整存取', + }, + iosStep1: '點一下分享按鈕', + iosStep1Hint: '位於 Safari 底部', + iosStep2: '捲動並點一下「加入主畫面」', + iosStep2Hint: '在分享選單中', + iosStep3: '點一下「加入」以安裝', + iosStep3Hint: '應用程式將出現在你的主畫面上', + androidStep1: '點一下選單按鈕', + androidStep1Hint: '瀏覽器中的(三個點)', + androidStep2: '選擇「加入主畫面」', + androidStep2Hint: '或「安裝應用程式」', + androidStep3: '確認安裝', + androidStep3Hint: '應用程式將出現在你的主畫面上', + tagline: '免費 • 離線可用 • 快速可靠', + }, + home: { + tagline: '社群驅動 • 基於 Relay', + title: 'SKATE SPOTS', + subtitle: '發現 Spot • 約起來 • 學招式 • 支持在地', + description: '真正的滑板發生在離線世界——這個工具幫你找到它。', + betaWarning: 'BETA - 建置中 • 使用風險自負', + pwaHint: '漸進式 Web 應用程式——安裝到你的裝置', + exploreMap: '探索地圖', + addSpot: '新增 Spot', + globalSpots: '全球 Spots', + openCommunity: '開放社群', + lightningZaps: 'Lightning Zaps', + featuredSpots: '精選 Spots', + featuredSpotsDesc: '來自世界各地、經社群驗證的滑板 Spot', + upcomingEvents: '即將舉行的活動', + upcomingEventsDesc: '即將舉辦的比賽、聚會和活動', + noSpotsYet: '還沒有找到 Spot', + noSpotsHint: '成為第一個新增滑板 Spot 的人!', + noEventsYet: '沒有即將舉行的活動', + noEventsHint: '稍後再回來看看,或建立一個!', + theLab: 'The Lab', + theLabDesc: '學習招式、找到教練,提升你的滑板程度', + coaches: '教練', + coachesDesc: '向經驗豐富的滑手學習,助你進步', + filmers: '攝影師', + filmersDesc: '聯絡攝影師,拍下你最精彩的片段', + findCoach: '尋找教練', + becomeCoach: '成為教練', + findFilmer: '尋找攝影師', + becomeFilmer: '成為攝影師', + viewAllSpots: '查看全部 Spots', + viewAllEvents: '查看全部活動', + createEvent: '建立活動', + readyToShare: '準備好分享了嗎?', + readyToShareDesc: + '新增你最喜歡的 Spot,幫助滑板社群成長。你分享的每一個地點都能幫助其他滑手發現新的滑板去處。', + }, + about: { + title: '關於 SkateSpots', + subtitle: '一個去中心化的滑板社群', + whatIs: '什麼是 SkateSpots?', + whatIsDesc: + 'SkateSpots 是一個由社群驅動的平台,用於探索全球的滑板地點。它建構在 Nostr 之上,讓滑手真正擁有自己的資料。', + features: '功能', + featuresDesc: + '探索 Spot、建立活動、聯絡教練,並支持你在地的滑板店——盡在一處。', + nostr: '建構於 Nostr', + nostrDesc: + 'Nostr 是一個簡單、開放、能夠真正抵抗審查的全球通訊協定。你的帳戶和資料都屬於你。', + openSource: '開放原始碼', + openSourceDesc: + 'SkateSpots 完全開放原始碼。歡迎貢獻、分叉或執行你自己的執行個體。', + lightning: 'Lightning 付款', + lightningDesc: + '用 Bitcoin Lightning 給你最喜歡的滑手、教練和內容創作者打 Zap。', + }, + faq: { + title: '常見問題', + subtitle: '關於 SkateSpots 你需要了解的一切', + whatIsNostr: '什麼是 Nostr?', + whatIsNostrAnswer: + 'Nostr 是一個用於去中心化社群網路的開放協定。與傳統平台不同,你的資料和身分都屬於你自己。', + howToStart: '如何開始?', + howToStartAnswer: + '點一下「註冊」建立新的 Nostr 帳戶,如果你已有帳戶則點一下「登入」。你可以使用瀏覽器擴充功能、行動應用程式或私密金鑰。', + whatAreZaps: '什麼是 Zap?', + whatAreZapsAnswer: + 'Zap 是可以傳送給其他使用者的 Bitcoin Lightning 打賞。它是表達對優秀內容的欣賞或支持創作者的一種方式。', + howToAddSpot: '如何新增 Spot?', + howToAddSpotAnswer: + '登入你的帳戶,點一下「新增 Spot」,填寫詳細資訊,包括地點、照片和描述。', + isItFree: 'SkateSpots 免費嗎?', + isItFreeAnswer: + '是的!SkateSpots 完全免費使用。你也可以選擇向其他使用者傳送 Zap(Bitcoin 打賞)。', + canIEditSpot: '我可以編輯或刪除我的 Spot 嗎?', + canIEditSpotAnswer: + '可以,你可以編輯自己建立的 Spot。由於 Nostr 的去中心化特性,刪除請求會被傳送,但一些 Relay 可能會保留資料。', + }, + onboarding: { + welcome: '歡迎來到 SkateSpots!', + welcomeDesc: '只需幾步,我們就能幫你完成設定。', + step1Title: '建立你的帳戶', + step1Desc: '正在產生你的 Nostr 金鑰。這就像你自己掌控的密碼。', + step2Title: '備份你的金鑰', + step2Desc: '把你的復原片語保存在安全的地方。這是找回帳戶的唯一方法!', + step3Title: '設定你的個人檔案', + step3Desc: '向社群介紹一下你自己。', + step4Title: '你準備好了!', + step4Desc: '開始探索 Spot、活動,並與其他滑手建立連結。', + skipForNow: '暫時跳過', + continueToApp: '繼續進入應用程式', + }, +}; export default zhTWBatch1; +export { zhTWBatch1 }; diff --git a/src/i18n/zh-TW/batch2.ts b/src/i18n/zh-TW/batch2.ts index 19ca8cf..bfaee65 100644 --- a/src/i18n/zh-TW/batch2.ts +++ b/src/i18n/zh-TW/batch2.ts @@ -1,4 +1,1598 @@ -/** zh-TW — batch 2. Filled by the translation pass; empty until then. */ -const zhTWBatch2 = {}; +/** + * zh-TW — batch 2: map, spot, DIY, labels, fees, cards, routing and the + * Sasquatch assistant. Skate vocabulary stays in English (Spot, Park, Bowl, + * Vert, Crew, Deck, Trucks, Wheels, Bearings, Griptape, Ledge, Rail, Stash, + * The Lab, Nostr, Lightning, Zap, Relay, sats, NIP-05); trick names remain + * English. Placeholders/markdown/URLs preserved. + */ +const zhTWBatch2 = { + mapUi: { + mapFooter: { + links: "連結", + hide: "隱藏地圖連結欄", + }, + findingSpots: "正在尋找 Spot", + loadingSpots: "正在載入 Spot", + loadingMap: "正在載入地圖...", + mapViewAria: "地圖檢視", + listViewAria: "清單檢視", + layers: "圖層", + mapLayers: "地圖圖層", + showOnMap: "在地圖上顯示", + showResults: "顯示結果", + quickActions: "快速操作", + spots: "Spot", + shops: "商店", + gear: "裝備", + tours: "Tour", + events: "活動", + crews: "Crew", + spotType: "Spot 型別", + sortBy: "排序方式", + trustLevel: "信任等級", + weather: "天氣", + buySellGear: "買賣裝備", + stash: "Stash", + more: "更多", + newHere: "第一次來?", + welcomeDesc: "發現滑板 Spot、活動和社群。", + getOnZapstore: "在 Zapstore 取得", + dismiss: "忽略", + addedBy: "新增者", + directions: "路線", + viewDetails: "檢視詳情", + viewDetailsArrow: "檢視詳情 →", + spotDetails: "Spot 詳情", + skateShop: "滑板商店", + skateSpot: "滑板 Spot", + youAreHere: "你在這裡", + conditions: "狀況", + weatherScoreSuffix: "天氣 {{score}}/100", + wind: "風", + humidity: "溼度", + airQuality: "空氣品質", + threeDayForecast: "3 天預報", + gearForSale: "出售中的裝備({{count}})", + viewItems: "檢視物品 →", + viewAllItems: "檢視全部 {{count}} 件物品 →", + viewGear: "檢視裝備 →", + localTour: "本地 Tour", + meetAt: "集合地點:{{place}}", + hours: "{{count}} 小時", + level: "{{level}} 級", + viewTour: "檢視 Tour →", + upcomingEvent: "即將舉行的活動", + viewEvent: "檢視活動 →", + skateCrew: "滑板 Crew", + members: "{{count}} 名成員", + since: "始於 {{year}}", + viewCrew: "檢視 Crew →", + acceptsBitcoin: "接受 Bitcoin", + boosted: "已推廣", + website: "網站", + offlineSavedSpots: "離線 · 顯示已儲存的 Spot", + cantReachRelays: "無法連線 Relay", + relayOnlineNoAnswer: "你線上,但社群 Relay 目前沒有回應。", + youreOffline: "你處於離線狀態。", + savedOnDevice: "你看過的 Spot 已儲存在本裝置上,將在此處顯示。", + noSpotsMatchTitle: "沒有符合的 Spot", + noSpotsMatchDesc: "試試其他搜尋詞或清除篩選條件。", + noSpotsMappedYet: "還沒有標記任何 Spot", + noSpotsMappedDesc: "第一個標記你的公園吧——只需一分鐘,它就是你的,下一位路過的滑手會感謝你。", + addFirstSpot: "新增第一個 Spot", + findSpotsNearMe: "查詢附近的 Spot", + locating: "正在定位…", + refiningLocation: "正在精準定位…", + refiningLocationDesc: "以你上次的 Spot 為中心——正在取得新的 GPS 定位。", + locatingYou: "正在定位你…", + locatingDesc: "正在取得 GPS 定位。首次可能需要長達一分鐘。", + foundYou: "找到你了", + foundYouDesc: "已將地圖居中到你的位置。", + locationPermissionNeeded: "需要位置權限", + permissionNeededDesc: "在裝置的“設定 → App → SkateSpots → 權限”中允許 SkateSpots 使用位置,然後再次點選“附近”。", + locationTimedOut: "定位逾時", + timeoutNativeDesc: "未能及時取得位置。如果你在室內,GPS 看不到衛星——請啟用網路定位(設定 → 位置)或走到室外,然後重試。", + timeoutWebDesc: "未能及時取得你的位置。請檢查訊號後重試。", + noLocationProvider: "沒有定位服務", + noProviderNativeDesc: "你的手機未提供位置。在注重隱私的 ROM(如 GrapheneOS)上,請在“設定 → 位置”中啟用網路定位,或確保 GPS 已開啟併到室外嘗試。", + noProviderWebDesc: "沒有可用的定位服務。請啟用定位服務後重試。", + locationUnavailable: "位置不可用", + unavailableNativeDesc: "請在手機設定中開啟位置/GPS,允許 SkateSpots 使用位置(設定 → App → SkateSpots → 權限),然後重試。", + unavailableWebDesc: "無法確定你的位置。請確保已啟用定位服務。", + locationBlocked: "位置被阻止", + locationBlockedDesc: "你的瀏覽器已阻止此網站存取位置。重新啟用的方法如下:", + locationPlatformAndroid: "Android Chrome", + locationPlatformIos: "iOS Safari", + locationPlatformDesktop: "桌面版 Chrome", + locationPlatformFirefox: "Firefox", + locationStepsAndroid: "點選位址列中的鎖形圖示 → 網站設定 → 位置 → 允許", + locationStepsIos: "“設定”App → Safari → 位置 → 允許(或點選 Safari 位址列中的“AA”按鈕)", + locationStepsDesktop: "點選鎖形圖示 → 網站設定 → 位置 → 允許", + locationStepsFirefox: "點選鎖形圖示 → 連線安全 → 更多資訊 → 權限 → 存取你的位置 → 允許", + gotIt: "知道了", + addSpot: "新增 Spot", + addShop: "新增商店", + addEvent: "新增活動", + addSpotHereTitle: "在這裡新增 Spot?", + addSpotHereDesc: "在你點選的位置放置標記", + sellGear: "出售裝備", + offerTour: "發布 Tour", + closeAddMenu: "關閉新增選單", + addMenuAria: "新增 Spot、商店、活動、裝備或 Tour", + localChat: "本地聊天", + localChatDesc: "地圖中心所在位置的即時聊天。選擇頻道覆蓋的範圍。", + btcMapShowing: "顯示附近 {{count}} 個可使用 sats 的場所", + btcMapShow: "顯示可使用 sats 的場所(透過 BTC Map)", + yourPrivateStash: "你的私人 Stash", + stashIntro: "記錄你的裝備、設定價格,並與其他滑手進行交易。", + encryptionRequired: "需要加密", + encryptionRequiredDesc: "請使用支援 NIP-44 的簽名器(Alby、nos2x、Amber)。", + myStash: "我的 Stash", + encrypted: "已加密", + itemsCount: "{{count}} 件物品", + items: "物品", + wishlist: "心願單", + types: "型別", + stashEmpty: "你的 Stash 是空的", + addFirstItem: "新增第一件物品", + wishlistCount: "心願單({{count}})", + myGearCount: "我的裝備({{count}})", + openFullStash: "開啟完整 Stash", + addItem: "新增物品", + searchSpotsPlaceholder: "搜尋 Spot...", + selected: "已選擇", + noSpotsFound: "未找到 Spot。試試其他搜尋詞。", + addingSpotsHint: "新增 Spot 有助於其他人在瀏覽特定位置時找到你", + report: "舉報", + spotSingular: "1 個 Spot", + spotPlural: "{{count}} 個 Spot", + view: "檢視", + myCollections: "我的合集", + collectionsSubtitle: "把你最喜歡的 Spot 整理成個性化清單", + newCollection: "新建合集", + loginToCreate: "登入以建立合集", + loginToCreateDesc: "將你最喜歡的 Spot 儲存到“2024 巴塞羅那之旅”或“洛杉磯最佳 Rail”等個性化清單", + noCollections: "還沒有合集", + noCollectionsDesc: "建立你的第一個合集,開始整理 Spot", + createFirstCollection: "建立你的第一個合集", + createNewCollection: "建立新合集", + createCollectionDesc: "為你的合集取個名字,並可新增描述", + collectionName: "合集名稱", + collectionNamePlaceholder: "2024 巴塞羅那之旅", + descriptionOptional: "描述(可選)", + descriptionPlaceholder: "我巴塞羅那之旅中最喜歡的 Spot...", + creating: "正在建立...", + createCollection: "建立合集", + editCollection: "編輯合集", + saving: "正在儲存...", + saveChanges: "儲存變更", + deleteCollectionTitle: "刪除合集?", + deleteCollectionDesc: "這將永久刪除“{{title}}”。Spot 本身不會受到影響。", + deleting: "正在刪除...", + collectionCreated: "合集已建立!", + collectionCreatedDesc: "“{{title}}”已準備好新增 Spot", + collectionCreateFailed: "建立合集失敗", + collectionUpdated: "合集已更新!", + changesSaved: "你的變更已儲存", + collectionUpdateFailed: "更新合集失敗", + collectionDeleted: "合集已刪除", + collectionDeletedDesc: "“{{title}}”已被移除", + collectionDeleteFailed: "刪除合集失敗", + somethingWentWrong: "出了點問題", + }, + mapPage: { + title: "商店與 Spot", + spots: "Spot", + shops: "商店", + filters: "篩選", + listView: "清單", + mapView: "地圖", + nearMe: "附近", + searchPlaceholder: "搜尋 Spot...", + noSpotsInArea: "此區域沒有 Spot", + zoomIn: "放大", + zoomOut: "縮小", + myLocation: "我的位置", + locationsFound: "找到 {{count}} 個地點", + spotsOnly: "僅 Spot", + shopsOnly: "僅商店", + spotsAndShops: "Spot 與商店", + noSpotsMatch: "沒有符合篩選條件的 Spot。", + noSpotsYet: "還沒有新增任何 Spot。", + addFirstSpot: "新增第一個 Spot", + }, + spotUi: { + claim: { + areYouOwner: "這是你的 Spot 嗎?", + privateDesc: "此 Spot 被標記為私人。如果你擁有或管理它,請認領——SkateSpots 版主確認所有權後,你即可接管該條目。", + claimSpot: "認領此 Spot", + nip05Required: "認領私人 Spot 需要已驗證的 NIP-05 標識(證明你掌控某個 Nostr 身份)。請先在你的個人資料中新增一個,然後再回來。", + addNip05: "在設定中新增 NIP-05", + pendingTitle: "認領待稽核", + pendingDesc: "你的認領已提交。SkateSpots 版主將進行稽核——稽核透過後你即可完成認領。", + approvedTitle: "認領已批准", + approvedDesc: "版主已批准你的認領。完成操作即可成為此 Spot 的擁有者。", + complete: "完成認領", + submitted: "認領已提交", + submittedDesc: "版主將稽核你的認領。稽核透過後你即可接管此 Spot。", + submitFailed: "無法提交認領", + submit: "提交認領", + submitting: "正在提交…", + confirmTitle: "認領“{{title}}”?", + confirmIntro: "你正在申請成為此私人 Spot 的擁有者。", + confirmBullet1: "SkateSpots 版主會稽核該請求(我們無法核實產權,只能核實 Nostr 金鑰)", + confirmBullet2: "若獲批准,你完成認領即可成為擁有者並編輯該 Spot", + confirmBullet3: "原始 Spot 仍保留在 Nostr 上——網路是去中心化的", + adminTitle: "待處理的所有權認領", + adminApprove: "批准", + adminApproved: "已批准", + adminApprovedDesc: "他們現在可以完成認領此 Spot。", + adminApproveFailed: "無法批准該認領", + loginRequired: "登入以認領此私人 Spot,或申請所有權。", + }, + abandonedDesc: "最後更新於 {{time}}。如果原擁有者不活躍,你可以認領此 Spot 來維護和改進它。", + claimedNotice: "已認領的條目", + claimedNoticeDesc: "此 Spot 在認領後由新擁有者重新發布。原始條目可能仍單獨存在。", + abandonedLoginDesc: "最後更新於 {{time}}。登入以認領並維護此 Spot。", + accessDeniedDesc: "你只能編輯自己建立的 Spot。", + accessDeniedTitle: "存取遭拒", + addAtLeastOneTag: "請至少新增一個標籤。", + additionalDetails: "其他詳情(可選)", + additionalDetailsPlaceholder: "提供任何可能有幫助的其他背景資訊...", + addNewTags: "新增新標籤:", + addNip05InSettings: "在設定中新增 NIP-05", + addPhoto: "新增照片", + addPhotoDesc: "貢獻一張照片,幫助他人發現此 Spot。", + addPhotoOrDescription: "新增照片或描述", + addPhotoOrDescriptionDesc: "給滑手們一些參考——一張照片,或一句關於此地的描述。", + addPhotos: "新增照片", + addPhotoToSpot: "為 Spot 新增照片", + adminDeleteDialogDesc: "作為 SkateSpots 管理員,你正在下架“{{title}}”。它將在整個 App 中對所有人隱藏,並向 Relay 傳送刪除請求。", + adminDeleteReason: "SkateSpots 管理員移除了 Spot“{{title}}”", + airQuality: "空氣品質", + altSkateSpot: "滑板 Spot:{{title}}", + areYouShopOwner: "你是這家商店的店主嗎?", + askBeforeSkating: "滑行前先詢問", + backToSpot: "返回 Spot", + beFirstToListGear: "成為第一個在此 Spot 列出裝備的人!", + beFirstToSay: "成為第一個發言的人。", + byAuthor: "作者 {{name}}", + captionPlaceholder: "新增說明(可選)——描述照片內容、拍攝時間等。", + chatPublicNote: "任何人都可以閱讀此內容——訊息是公開且短暫的。私人聊天請使用私信。", + checkPinBelow: "新增重複項前,請檢查下方的標記。", + claimBullet1: "你成為擁有者,可以編輯該 Spot", + claimBullet2: "原始 Spot 仍然保留(Nostr 是去中心化的)", + claimBullet3: "你的版本可能與原始版本同時出現", + claimFailed: "認領失敗", + claiming: "正在認領...", + claimIntro: "你即將認領此 Spot 的所有權。這會建立你自己版本的 Spot,你可以編輯和維護它。", + claimSpot: "認領 Spot", + claimThisSpot: "認領此 Spot", + claimTitle: "認領“{{title}}”?", + claimWhatHappens: "認領後會發生什麼:", + coachesAndFilmersAvailable: "此 Spot 有可用的教練和攝像師", + coachesCount: "教練({{count}})", + coachHere: "此處教練", + community: "社群", + communityVerified: "社群已驗證", + communityVerifiedTitle: "另一位滑手在這裡做出了貢獻(照片或狀態報告)。", + conditions: "狀況", + contactForPermission: "聯絡以獲得許可", + contactInfo: "聯絡資訊", + contributePhoto: "貢獻照片", + contributing: "正在貢獻...", + couldNotSendMessage: "無法傳送訊息。", + couldNotSubmit: "無法提交", + couldNotUploadPhoto: "無法上傳照片。你可以在下方新增一張。", + crewsThatSkateHere: "在此滑行的 Crew", + current: "當前:", + currentTags: "此 Spot 的當前標籤:", + daysAgo: "{{count}} 天前", + daysAgoPlural: "{{count}} 天前", + deleteDialogDesc: "這將從所有 Relay 中永久刪除“{{title}}”。此操作無法撤銷。", + deletedSpotReason: "已刪除的 Spot", + deleteFailed: "刪除失敗", + deleteSpot: "刪除 Spot", + deleteSpotTitle: "刪除 Spot?", + differentSpotPublishAnyway: "這是不同的 Spot——仍然發布", + dragDropOrClick: "拖放或點選", + dropPhotos: "拖放照片", + duplicateOne: "你的標記 60 米內已有一個 Spot。如果是同一個地方,請在那裡新增照片或狀態報告,而不是建立重複項。", + duplicateOther: "你的標記 60 米內已有 Spot。如果是同一個地方,請在那裡新增照片或狀態報告,而不是建立重複項。", + editSpotSeoDesc: "編輯你的滑板 Spot。", + failedToContribute: "貢獻失敗", + failedToPublish: "發布失敗", + failedToPublishDesc: "出了點問題。請檢視控制檯瞭解詳情。", + failedToSubmitReport: "提交舉報失敗", + failedToSuggestTags: "推薦標籤失敗", + failedToUpdate: "更新失敗", + failedToUploadImage: "上傳圖片失敗", + failedToUploadPhoto: "上傳照片失敗", + feelsLikeTemp: "體感 {{temp}}°C", + filmersCount: "攝像師({{count}})", + filmHere: "在此拍攝", + gearSwap: "裝備交換", + geolocationNotSupported: "不支援地理定位", + geolocationNotSupportedDesc: "你的瀏覽器不支援地理定位。", + getDirections: "取得路線", + hangTight: "稍等", + hangTightDesc: "你的照片仍在上傳中。馬上就會附加完成。", + helpImproveSpot: "透過新增照片或推薦標籤來幫助改進此 Spot", + hiddenByModerator: "已被版主隱藏", + hiddenByModeratorDesc: "此 Spot 不會顯示在地圖或搜尋中。你仍能看到它,因為它是你建立的。編輯它不會取消隱藏——在版主撤銷裁決之前它會一直隱藏。", + humidity: "溼度", + imageUploaded: "圖片已上傳", + imageUploadedDesc: "你的圖片已成功上傳。", + imHere: "我在這裡", + invalidCoordinates: "無效的座標", + invalidCoordinatesDesc: "請輸入有效的緯度(-90 到 90)和經度(-180 到 180)。", + invalidNpub: "無效的 npub", + invalidNpubDesc: "請輸入有效的 npub 地址。", + lastReported: "最近 {{time}}", + listGear: "列出裝備", + listYourGearHere: "在此列出你的裝備", + loadingChat: "正在載入聊天…", + locationError: "定位錯誤", + locationFound: "已找到位置", + locationFoundDesc: "你的當前位置已設定。", + locationRequired: "需要位置", + locationRequiredDesc: "請輸入座標或使用你的當前位置。", + loginRequiredTitle: "需要登入", + logInToChat: "登入以加入本地聊天。", + logInToContributePhotos: "登入以貢獻照片", + loginToEditSpot: "你需要登入才能編輯此 Spot。", + logInToReport: "你需要登入才能舉報內容。", + logInToReportStatus: "登入以報告此 Spot 的狀態。", + logInToSuggestTags: "登入以推薦標籤", + manageNip05ToClaim: "管理 NIP-05 以認領", + meetAtSpotForPickup: "💡 在此 Spot 碰面以便安全取貨", + memberOne: "{{count}} 名成員", + memberOther: "{{count}} 名成員", + messageFailed: "訊息傳送失敗", + messageMapper: "給標記者留言", + messagePlaceholder: "給此 Spot 留言…(試試 /me 或 /who)", + messagesHiddenOne: "{{count}} 條訊息被你的信任篩選隱藏。降低篩選等級以檢視更多。", + messagesHiddenOther: "{{count}} 條訊息被你的信任篩選隱藏。降低篩選等級以檢視更多。", + messagesHiddenShortOne: "{{count}} 條訊息被你的信任篩選隱藏", + messagesHiddenShortOther: "{{count}} 條訊息被你的信任篩選隱藏", + metresAway: "距離 {{distance}} 米", + moderatorVouchedDesc: "版主稽核了此 Spot 併為其背書。幹得漂亮。", + monthsAgo: "{{count}} 個月前", + monthsAgoPlural: "{{count}} 個月前", + newOwnerNpub: "新擁有者的 npub", + newOwnerNpubHint: "輸入你想將此後 Spot 轉讓給其的使用者的 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: "成為第一個確認此 Spot 的人", + verifyNudgeBody: "一張照片或一句“我在這裡滑過”就是 Spot 獲得驗證的方式——幫下一位滑手一把。", + verifyNudgeStatus: "我在這裡滑過", + communityChip: "社群", + seenChip: "已見", + noGearListedYet: "還沒有列出裝備", + noMessagesYet: "此本地頻道還沒有訊息。打個招呼吧——“今晚有人滑嗎?”", + noPhoto: "沒有照片", + noReportsYet: "還沒有舉報", + noTags: "沒有標籤", + notASkateSpot: "不是滑板 Spot", + offerServicesHere: "💡 在此 Spot 提供你的服務", + photoCaptured: "照片已拍攝!", + photoCapturedDesc: "你的照片已成功上傳。", + photoContributed: "照片已貢獻!", + photoContributedDesc: "你的照片已新增到此 Spot。", + photosAdded: "你的照片已新增。", + photosRecommended: "強烈推薦——沒有照片的 Spot 會一直標記為未驗證", + photosUploaded: "已上傳 {{count}} 張照片", + photoUploaded: "照片已上傳", + photoUploadedDesc: "新增說明並提交以貢獻!", + photoUploadFailed: "照片上傳失敗", + pleaseTryAgain: "請重試", + public: "公開", + publicChatTitle: "任何人都可以閱讀此頻道中的訊息——它是公開且未加密的。", + recentReports: "最近的舉報", + recipientRequired: "需要收件人", + recipientRequiredDesc: "請輸入新擁有者的 npub。", + removeAdmin: "移除(管理員)", + removeSpot: "移除 Spot", + removeSpotAdminTitle: "移除此 Spot?(管理員)", + reportOne: "舉報", + reportContent: "舉報內容", + reportContentDesc: "透過舉報不當內容來幫助維護社群安全。", + reportedBySkaters: " 被 {{count}} 名滑手舉報——正在稽核中。如果這是真實的 Spot,請新增照片或狀態報告以確認它。", + reportedNotASpot: "被舉報為非滑板 Spot", + reportingType: "舉報 {{type}}", + reports: "舉報", + reportShop: "舉報商店", + reportSpot: "舉報 Spot", + reportStatus: "舉報狀態", + reportSubmitted: "舉報已提交", + reportSubmittedDesc: "感謝你幫助維護 SkateSpots 的安全。", + reportSubmittedLong: "感謝你幫助維護 SkateSpots 的安全與準確。你的舉報將由值得信賴的社群成員稽核。", + reportSubmittedTitle: "舉報已提交", + report: { + notASkateSpot: { + label: "不是滑板 Spot", + description: "測試條目,或完全不適合滑板的地方", + }, + fakeSpot: { + label: "虛假/不存在的 Spot", + description: "此 Spot 不存在或位置錯誤", + }, + stolenPhotos: { + label: "盜用/虛假照片", + description: "照片是相簿圖片或從別處盜用", + }, + spamAd: { + label: "垃圾資訊或廣告", + description: "宣傳內容或重複條目", + }, + dangerousLocation: { + label: "危險地點", + description: "私人領地、不安全或進入違法", + }, + inappropriateContent: { + label: "不當內容", + description: "包含冒犯性或成人內容", + }, + impersonation: { + label: "冒充他人", + description: "有人冒充他人", + }, + other: { + label: "其他", + description: "以上未列出的其他情況", + }, + }, + targetType: { + spot: "Spot", + event: "活動", + tour: "Tour", + shop: "商店", + user: "使用者", + listing: "商品", + coach: "教練", + filmer: "攝像師", + }, + sameOwner: "同一擁有者", + sameOwnerDesc: "無法轉讓給當前擁有者。", + saveChanges: "儲存變更", + saving: "正在儲存...", + services: "服務", + shareSpotText: "快來看看這個滑板 Spot:{{title}}", + shelter: "遮蔽", + shelterHint: "此 Spot 是否暴露在天氣中?幫助滑手在下雨時找到乾燥的 Spot。", + shopClaimDesc: "如果你擁有或管理這家商店,可以認領它以驗證所有權並管理條目。", + shopClaimNip05Hint: "要認領這家商店,請新增與商店網站域名符合的 NIP-05 標識。", + skatersActiveDesc: "過去 24 小時內在此頻道發帖的人。", + skatersActiveOne: "此處有 {{count}} 名滑手活躍", + skatersActiveOther: "此處有 {{count}} 名滑手活躍", + skatersSellingGear: "此 Spot 的滑手正在出售裝備", + skateSpot: "滑板 Spot", + somethingWentWrong: "出了點問題", + spot: "Spot", + spotAdded: "Spot 已新增!", + spotAddedDesc: "你的滑板 Spot 已發布到網路。", + spotAddedNoPhoto: "已發布——在有人新增照片之前會標記為未驗證。一張 Spot 的照片意義重大。", + spotChat: "Spot 聊天", + spotClaimed: "Spot 已認領!", + spotClaimedDesc: "你現在是此 Spot 的擁有者。你可以從個人資料中編輯它。", + spotDeleted: "Spot 已刪除", + spotDeletedDesc: "刪除請求已傳送到 Relay。大多數 Relay 會移除此內容。", + spotMayAlreadyBeOnMap: "該 Spot 可能已經在地圖上", + spotMayAlreadyExist: "此 Spot 可能已存在", + spotMayBeAbandoned: "Spot 可能已被遺棄", + spotPhotoAlt: "Spot", + spotRemoved: "Spot 已移除", + spotRemovedDesc: "此 Spot 已被下架,將在整個 SkateSpots 中隱藏。", + spotSeoDesc: "在 SkateSpots 上檢視這個滑板 Spot。", + spotStatus: "Spot 狀態", + spotStatusDesc: "“{{title}}”還能滑嗎?讓社群瞭解它的當前狀態。", + spotTypeRequired: "需要 Spot 型別", + spotTypeRequiredDesc: "請選擇一個 Spot 型別,讓滑手知道他們要去的是什麼地方。", + spotUpdated: "Spot 已更新!", + spotUpdatedDesc: "你的變更已發布到網路。", + staffVerifiedTitle: "SkateSpots 管理員稽核併為此 Spot 背書。", + statusNotePlaceholder: "可選:新增詳情(例如“Ledge 上裝了新防滑釘”“保安下午 6 點後趕人”)", + statusReported: "狀態已報告", + statusReportedDesc: "感謝你保持地圖的新鮮。你的報告已生效。", + submitReport: "提交舉報", + submitting: "正在提交...", + suggestedByUser: "由 {{count}} 名使用者推薦", + suggestedByUsers: "由 {{count}} 名使用者推薦", + suggestedTagsContent: "為 {{title}} 推薦的標籤:{{tags}}", + suggestNTags: "推薦 {{count}} 個標籤", + suggestOneTag: "推薦 1 個標籤", + suggestTags: "推薦標籤", + suggestTagsDesc: "透過推薦相關標籤幫助為此 Spot 分類。", + tags: "標籤", + tagsHint: "新增標籤以描述特徵、地面、氛圍(最多 {{max}} 個)", + tagsSuggested: "標籤已推薦!", + tagsSuggestedDesc: "你的標籤推薦已提交。", + takePhoto: "拍照", + threeDayForecast: "3 天預報", + tipTheMapper: "給標記者打賞", + tipTheMapperDesc: "覺得這個 Spot 有用?發個 Zap 感謝標記者吧!", + titleRequired: "需要標題", + titleRequiredDesc: "請為此 Spot 輸入名稱。", + today: "今天", + tomorrow: "明天", + transferDesc: "將“{{title}}”轉讓給另一位使用者。此操作無法撤銷。", + transferFailed: "轉讓失敗", + transferOwnership: "轉讓所有權", + transferRequestContent: "Spot“{{title}}”的所有權轉讓請求", + transferRequested: "已請求轉讓", + transferRequestedDesc: "新擁有者需要認領該 Spot 才能完成轉讓。", + transferring: "正在轉讓...", + transferSpotOwnership: "轉讓 Spot 所有權", + transferWarningDesc: "轉讓後,你將無法再編輯或刪除此 Spot。", + typeToSearchTags: "輸入以搜尋或新增標籤...", + underReview: "——正在稽核中。如果這是真實的 Spot,請新增照片或狀態報告以確認它。", + untitledSpot: "未命名 Spot", + unverified: "未驗證", + updateDetailsFor: "更新 {{title}} 的詳情", + updateSpotDesc: "更新此 Spot 的資訊。所有標有 * 的欄位均為必填。", + uploadAPhoto: "上傳照片", + uploadAPhotoHint: "拖放或點選 · JPG、PNG、WebP", + uploadedAlt: "已上傳", + uploadFailed: "上傳失敗", + uploadingPhoto: "正在上傳照片…", + uploadPhotoFirst: "請先上傳一張照片。", + uvIndex: "紫外線指數", + verifiedBySkateSpots: "SkateSpots 已驗證", + viewPhotoFullScreen: "全屏檢視照片", + viewPhotoOf: "檢視第 {{n}} 張照片,共 {{total}} 張", + warning: "警告", + weatherConditions: "天氣狀況", + weatherOnly: "僅天氣", + weatherOnlyUnconfirmed: "僅天氣。還沒有人確認這是滑板 Spot,所以沒有狀況評分——新增照片或狀態報告以確認它。", + whyReporting: "你為什麼要舉報?", + wind: "風", + yearsAgo: "{{count}} 年前", + yearsAgoPlural: "{{count}} 年前", + }, + diyUi: { + title: "DIY —— 自己動手做", + tagline: "指南、開源工具和圖紙,幫你打造自己的 Deck、坡道和水泥 Spot——再去尋找配套的人、地點和市場。", + doItWithPeople: "和大家一起做", + backToDiy: "返回 DIY", + calc: { + title: "Deck 成本計算器", + intro: "製作一塊 Deck 的成本——人工、裝置、材料、工序時間、包裝和利潤——以及合理的售價。儲存在本裝置上。", + }, + designer: { + title: "Deck 設計器", + intro: "繪製滑板或長板的外形輪廓,然後匯出可列印的 1:1 模板、SVG 或用於 CNC 的 DXF。儲存在本裝置上。", + presets: "預設", + dimensions: "尺寸", + shape: "形狀", + kicks: "翹頭", + hardware: "Trucks 孔位", + width: "最大寬度", + wheelbase: "軸距", + nose: "板頭長度", + tail: "板尾長度", + length: "總長度", + waist: "腰部", + endRound: "端部圓度", + concave: "凹度", + thickness: "厚度", + tailKick: "板尾翹度", + noseKick: "板頭翹度", + holeNew: "新式(2.125″)", + holeOld: "老式(2.5″)", + holeSpacing: "新式孔距為 2.125″ × 1.625″(54 × 41 mm);老式為 2.5″ × 1.625″。3/16″ 安裝孔。", + topView: "俯檢視", + sideView: "側檢視", + concaveSection: "凹面截面", + export: "匯出", + pdfA4: "1:1 PDF · A4", + pdfLetter: "1:1 PDF · Letter", + printNote: "以 100% 比例列印 PDF(不要“適應頁面”),然後用角上的十字標記拼接紙張。SVG 也是真實尺寸。", + note: "這是你描摹和切割的 2D 輪廓。對於完整 3D 形狀和模具設計,真正的 CAD 工具仍是更好的選擇。", + }, + source: "來源", + comingSoon: "即將推出", + footer: "分步指南即將推出。目前:在 The Lab 尋找製作的人,在地圖上標記你的 Spot,並在 Marketplace 上買賣。安全作業——護具、手套和護目鏡。", + categories: { + boards: "板面", + ramps: "坡道與木製障礙", + concrete: "水泥與 DIY Spot", + repairs: "維修與除錯", + tools: "工具與圖紙", + }, + cards: { + ossBuild: { title: "製作一塊滑板", blurb: "分步的 Deck 製作——木皮、模具、壓機和收尾。" }, + sk8cad: { title: "SK8CAD", blurb: "用於 Deck 形狀、凹面和模具設計的開源 CAD。" }, + deckCost: { title: "Deck 成本與定價", blurb: "在製作之前算清材料、人工和合理售價。" }, + deckDesigner: { title: "Deck 設計器", blurb: "繪製輪廓並列印 1:1 模板——或匯出 SVG/DXF 用於 CNC。" }, + ledgeBox: { title: "製作 Ledge 或箱子", blurb: "一個適合新手的木製障礙,一個週末就能做好。" }, + quarterpipe: { title: "製作 quarterpipe", blurb: "後院 mini 的坡道圖紙、過渡和 coping。" }, + flatbar: { title: "製作 flatbar", blurb: "便宜、便攜,是學習 Rail 的最佳方式。" }, + concreteBasics: { title: "水泥基礎", blurb: "攪拌、支模和收尾,做出能持久的 Ledge 或斜面。" }, + coping: { title: "Coping 與邊緣", blurb: "如何安裝 coping 並做好過渡,讓 grind 更順滑。" }, + buyParts: { title: "購買零件與裝備", blurb: "在 Marketplace 向賣家購買 Deck、五金和工具。" }, + mapSpot: { title: "標記你的 DIY Spot", blurb: "做成了什麼?把它新增到地圖上,讓別人也能找到並滑它。" }, + regrip: { title: "重新貼 Griptape", blurb: "撕掉舊 Griptape,平整地貼上新的。" }, + tune: { title: "除錯 Bearings 與 Trucks", blurb: "清潔 Bearings、更換襯套並調整 Trucks 的幾何。" }, + printMolds: { title: "3D 列印模具", blurb: "來自社群的可列印模具和對齊底座檔案。" }, + sk8cadTools: { title: "模具與對齊工具", blurb: "設計內建對齊底座的模具。" }, + }, + actions: { + findBuilder: { title: "尋找建造者", blurb: "The Lab 中能為你設計或澆築坡道和 DIY 的建造者。" }, + findCrew: { title: "尋找 DIY Crew", blurb: "專注於建造的 Crew——加入那些把 Spot 變成現實的人。" }, + mapSpot: { title: "標記一個 DIY Spot", blurb: "新增你建造的 Spot,讓它出現在地圖上。" }, + sellBuilds: { title: "出售你的作品", blurb: "在 Marketplace 列出你製作的 Deck、坡道或零件。" }, + findCoach: { title: "尋找教練", blurb: "教授 DIY 滑板課程和 Spot 建造的教練。" }, + }, + }, + labelsUi: { + spotCategory: { + street: { + label: "街式", + description: "隨機發現的 Spot、城市地形", + }, + transition: { + label: "過渡", + description: "弧形/坡道地面", + }, + park: { + label: "Park", + description: "建造的滑板公園", + }, + plaza: { + label: "廣場", + description: "城市廣場(如 MACBA、Love Park)", + }, + }, + spotFeature: { + wallrides: "Wallrides", + stairs: "臺階與扶手", + rails: "Rail", + ledges: "Ledge 與路緣", + gaps: "Gap", + flatground: "平地", + "manual-pads": "Manual 臺", + "half-pipes": "Half Pipe", + "quarter-pipes": "Quarter Pipe", + "mini-ramps": "Mini Ramp", + bowls: "Bowl", + vert: "Vert Ramp", + "mega-ramps": "Mega Ramp", + hubbas: "Hubba", + "euro-gaps": "Euro Gap", + banks: "斜面", + "spine-ramps": "Spine Ramp", + "roll-ins": "Roll-in", + hips: "Hip", + volcano: "Volcano", + pyramids: "金字塔 / Funbox", + "snake-runs": "Snake Run", + "pump-track": "Pump Track 波浪", + "flat-bars": "Flat Bar", + }, + spotType: { + street: "街式", + transition: "過渡", + park: "Park", + plaza: "廣場", + wallrides: "Wallrides", + stairs: "臺階與扶手", + rails: "Rail", + ledges: "Ledge 與路緣", + gaps: "Gap", + flatground: "平地", + "manual-pads": "Manual 臺", + "half-pipes": "Half Pipe", + "quarter-pipes": "Quarter Pipe", + "mini-ramps": "Mini Ramp", + bowls: "Bowl", + vert: "Vert Ramp", + "mega-ramps": "Mega Ramp", + hubbas: "Hubba", + "euro-gaps": "Euro Gap", + banks: "斜面", + "spine-ramps": "Spine Ramp", + "roll-ins": "Roll-in", + hips: "Hip", + volcano: "Volcano", + pyramids: "金字塔 / Funbox", + "snake-runs": "Snake Run", + "pump-track": "Pump Track 波浪", + "flat-bars": "Flat Bar", + 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: "護具", + stickers: "貼紙", + wax: "蠟", + tools: "工具", + griptape: "Griptape", + rubbrick: "磨石", + }, + gearCondition: { + new: { + label: "全新", + description: "從未使用,仍在包裝中", + }, + like_new: { + label: "幾乎全新", + description: "幾乎沒用過,狀況極佳", + }, + good: { + label: "良好", + description: "正常磨損,功能完好", + }, + well_used: { + label: "使用較多", + description: "有磨損但仍可正常使用", + }, + }, + priceType: { + fixed: { + label: "固定價格", + description: "以美元或 sats 設定的價格", + }, + free: { + label: "免費", + description: "贈送", + }, + trade: { + label: "交換", + description: "想換物", + }, + offer: { + label: "接受出價", + description: "價格可議", + }, + }, + listingType: { + selling: { + label: "出售", + description: "列出待售裝備", + }, + wtb: { + label: "想買", + description: "尋找特定裝備", + }, + }, + tour: { + spotType: { + street: "街式", + park: "Park", + diy: "DIY", + transition: "過渡", + hidden: "隱藏寶地", + }, + category: { + local: { + label: "本地 Tour", + description: "帶你看你所在城市的隱藏 Spot", + }, + national: { + label: "全國 Tour", + description: "橫跨全國的多城市公路之旅", + }, + international: { + label: "國際 Tour", + description: "跨越多個國家的跨境冒險", + }, + destruction: { + label: "世界毀滅之旅", + description: "KOTR 風格的全球團隊競賽", + }, + }, + }, + crew: { + vibe: { + street: "街式", + transition: "過渡 / Vert", + park: "Park", + diy: "DIY", + cruising: "巡航 / 拍攝", + oldschool: "老派", + allterrain: "全地形", + girls: "女生 / 女性", + youth: "青少年 / 小孩", + adaptive: "適應性", + punk: "朋克", + hiphop: "說唱 / Hip-Hop", + }, + focus: { + mixed: "混合 / 綜合", + builder: "DIY 與建造者", + photo: "攝影與攝像", + coaching: "教學", + art: "藝術與設計", + music: "樂隊與音樂", + wellness: "訓練與理療", + }, + focusDescription: { + mixed: "一個普通滑板 Crew——只顯示在 Crew 頁面上。", + builder: "一個 DIY / 公園建造 Crew——也會顯示在 The Lab 的建造者下。", + photo: "一個攝像、攝影或剪輯 Crew——也會顯示在 The Lab 的攝影與攝像下。", + coaching: "一個教學 / 課程 Crew——也會顯示在 The Lab 的教學下。", + art: "一個藝術、設計、塗鴉或紋身團體——也會顯示在 The Lab 的藝術與設計下。", + music: "一個樂隊或音樂團體——也會顯示在 The Lab 的音樂下。", + wellness: "一個訓練、健身或理療 Crew——也會顯示在 The Lab 的訓練下。", + }, + lookingFor: { + filmer: "攝像師", + photographer: "攝影師", + editor: "影片剪輯", + coach: "教練", + builder: "坡道建造者", + artist: "藝術家 / 設計師", + musician: "樂手 / 樂隊", + members: "新成員", + }, + role: { + filmer: "攝像師", + photographer: "攝影師", + editor: "剪輯", + coach: "教練", + builder: "建造者", + artist: "藝術家", + graffiti: "塗鴉", + tattoo: "紋身", + trainer: "訓練師", + musician: "樂手", + judge: "裁判", + manager: "團隊經理", + og: "OG", + }, + }, + memberVisibility: { + public: { + label: "公開", + description: "任何人都能在公開的 Crew 頁面和隊友發現中看到你。", + }, + crew: { + label: "僅 Crew 可見", + description: "只有已確認的隊友和創辦人能在這裡看到你。對其他人來說,你顯示為匿名的“隱藏成員”。注意:這是App 層級的隱私——你的成員標籤仍然公開存在於 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: "街式", + description: "街式 Spot——臺階、Rail、Ledge", + }, + park: { + label: "Park", + description: "滑板公園——公共或私人", + }, + diy: { + label: "DIY", + description: "DIY / 自制 Spot", + }, + plaza: { + label: "廣場", + 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: "The Lab 專業資料", + feeLabProfileDesc: "在 The Lab 中推薦你的服務", + feeLabProfileBenefit: "滑手瀏覽 The Lab 時獲得專業徽章和推薦位置", + feeFeaturedShopLabel: "推薦商店", + feeFeaturedShopDesc: "在地圖和目錄中推薦你的滑板商店", + feeFeaturedShopBenefit: "已驗證徽章 + 地圖上的推薦標記", + feeFeaturedTourLabel: "推薦 Tour", + feeFeaturedTourDesc: "在 SkateSpots 上推薦你的 Tour", + feeFeaturedTourBenefit: "滑手瀏覽 Tour 時獲得專業徽章和置頂位置", + 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: "請使用下方的二維碼或發票手動支付。", + payStatusUnknown: "支付狀態未知——款項可能已支付。再次支付前請先檢查你的錢包。", + invoiceCopied: "發票已複製!", + activeBang: "{{label}} 已生效!", + chooseDuration: "選擇時長", + bestValue: "最超值", + perDay: "{{price}}/天", + validFor: "有效期", + amountLine: "約 ${{usd}} USD · 支付給 {{name}} · {{tier}}", + payToContinue: "支付 {{amount}} sats 以繼續", + generating: "正在生成發票…", + processing: "正在處理付款…", + invoiceQrAlt: "Lightning 發票二維碼", + copyInvoice: "複製發票", + openWallet: "開啟錢包", + payConnected: "使用已連線的錢包支付", + scanAny: "用任意 Lightning 錢包掃描", + tryAgain: "重試", + proReceiptTitle: "🦧⚡ Sasquatch Pro —— 你已加入!", + proReceiptPass: "通行證:{{pass}}({{sats}} sats)", + proReceiptActiveUntil: "有效期至:{{until}}", + proReceiptUnlocked: "你解鎖了:", + proReceiptBullet1: "• 個人助理——我讀取你的 Stash、Crew、Spot 和商品", + proReceiptBullet2: "• 操作草稿——列出裝備、發布 Spot 狀態、規劃旅行(由你確認)", + 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: "Logo 已上傳", + logoUploadFailed: "無法上傳 Logo", + venue: "關聯場地(可選)", + venueNone: "無場地", + venueHint: "選擇你自己的一個 Spot,將此通行證繫結到某個場地。驗證者會確認你擁有它。", + venuePick: "選擇你的場地", + parkNoVenue: "Park 通行證只能由場地擁有者簽發——請先標記一個你擁有的 Spot。", + parkAddVenue: "新增 Spot", + 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: "此二維碼沒有票據持有者(`?h=`),因此無法核對持有者。", + }, + passes: { + tab: "我的通行證", + pass: "准入通行證", + none: "還沒有通行證。當場地或組織者為你簽發時,它會顯示在這裡。", + }, + facets: { + title: "顯示身份特徵", + crews: "Crew", + local: "本地", + roles: "The Lab 角色", + }, + roles: { + coach: "教練", + filmer: "攝像師", + editor: "剪輯", + photographer: "攝影師", + builder: "建造者", + artist: "藝術家", + graffiti: "塗鴉", + tattoo: "紋身", + trainer: "訓練師", + musician: "樂手", + judge: "裁判", + organizer: "組織者", + barber: "理髮師", + }, + crew: { + crewCard: "CREW CARD", + crewSub: "你的 Crew,印在卡片上", + pick: "選擇一個 Crew", + none: "你還沒有加入任何 Crew——請先加入或建立一個。", + hint: "卡片由 Crew 自己簽名的資料生成。要變更它,請在 Crew 頁面編輯。", + members: "成員", + spots: "SPOT", + est: "成立於 {{year}}", + openCall: "公開招募", + verifiedCrew: "已驗證 Crew", + viewCrew: "檢視 Crew", + }, + 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: "當你標記自己擁有的 Spot、加入 Crew 或 RSVP 活動時,會解鎖更多卡片型別。", + accent: "強調色", + accentHint: "覆蓋主題強調色", + accentClear: "使用主題顏色", + logo: "自定義 Logo / 徽章", + logoAdd: "上傳", + logoChange: "更換", + logoClear: "移除", + }, + back: { + title: "可列印的背面", + desc: "背面的 Crew、角色、贊助商和連結", + showBack: "顯示背面", + showFront: "顯示正面", + empty: "這裡還沒有內容——新增 Crew、角色或贊助商。", + }, + verify: { + checking: "正在檢查卡片…", + notFound: "未找到卡片", + notFoundDesc: "Relay 上沒有找到符合的事件。它可能已被刪除,或連結有誤。", + invalid: "簽名無效", + invalidDesc: "此事件存在,但簽名無法驗證。請勿信任。", + authentic: "真實", + authenticDesc: "簽發者的簽名有效。", + kind: "型別", + kindPark: "Park 准入卡", + kindRider: "Rider Card", + kindCrew: "Crew Card", + kindEvent: "活動通行證", + 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: "掃描卡片上的二維碼以驗證它。", + }, + }, + routeUi: { + destination: "目的地", + routeTo: "前往 {{label}} 的路線", + routeToLabel: "前往", + search: "搜尋", + description: "路線選項和App 內導航。", + 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}} km/h", + 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 規劃的旅行——在 {{destination}} 的 {{count}} 天。", + tripCollectionDescOne: "The Sasquatch 規劃的旅行——在 {{destination}} 的 {{count}} 天。", + tripSavedTitle: "已儲存到合集 🦧", + tripSavedDesc: "你的 {{destination}} 之旅已收藏。", + tripSaveFailed: "無法儲存", + tripSaveFailedDesc: "請稍後重試。", + daysInDestinationOne: "在 {{destination}} 的 {{count}} 天", + daysInDestination: "在 {{destination}} 的 {{count}} 天", + wetForecast: "雨天預報——找本地 Crew 推薦有遮蔽/室內的選項。", + dayLabel: "第 {{n}} 天", + freeSkate: "自由滑行——探索並拍攝。🎥", + tapToBook: "點選預訂 / Zap ⚡", + localCrews: "本地 Crew", + saving: "正在儲存…", + savedToCollections: "已儲存到合集", + saveSpotOne: "儲存 {{count}} 個 Spot 到合集", + saveSpots: "儲存 {{count}} 個 Spot 到合集", + flights: "航班", + stays: "住宿", + gettingAround: "出行", + noMiddleman: "我負責規劃滑板行程——航班和住宿會在真實網站上開啟(無 KYC,無中間商)。", + ageJustNow: "剛剛", + ageMinAgo: "{{count}} 分鐘前", + ageHourAgo: "{{count}} 小時前", + ageDayAgo: "{{count}} 天前", + skateRightHere: "就在這裡", + skateMin: "約 {{count}} 分鐘滑行", + skateHours: "約 {{hours}} 小時滑行", + maneuver: { + headOut: "出發", + arrive: "到達 Spot", + 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。關於 Spot、活動、教練、裝備或App怎麼用,儘管問我。我有來自 SkateSpots Relay 的即時資料!", + q1: "幫我規劃里斯本 3 天", + q2: "找我附近的 Spot", + q3: "有什麼即將舉行的活動?", + q4: "Crew 是什麼?", + q5: "Zap 是怎麼運作的?", + q6: "Nostr 是什麼?", + q7: "我的 Stash 是什麼?", + q8: "這是免費的嗎?", + bubbleTitle: "按住拖動來移動 · 點選開啟", + openGuideAria: "開啟 Sasquatch 指南", + hideAria: "隱藏 Sasquatch 助手", + hide: "隱藏助手", + showAria: "顯示 Sasquatch 助手", + activeUntil: "有效期至 {{date}}", + platformOwner: "平臺擁有者", + upgradeTitle: "升級到 Sasquatch Pro", + goPro: "升級 Pro", + goProBlurb: "個人 AI · 2000 sats 起", + aiBalanceTitle: "Sasquatch AI 餘額(僅擁有者可見)——在 {{provider}} 加值", + aiChip: "⚡ AI {{balance}}", + minimizeToBubbleAria: "最小化為氣泡", + minimize: "最小化", + closePanelAria: "關閉面板", + close: "關閉", + askLab: "詢問教學與拍攝", + askMap: "詢問 Spot、商店與裝備", + askAnything: "有任何問題都可以問我 🛹", + quickQuestions: "快速問題:", + you: "🧑 你", + thinking: "思考中...", + inputPlaceholder: "詢問 Spot、活動、教練...", + liveDataFrom: "即時資料來自", + nostrRelays: "Nostr Relay", + clear: "清除", + gettingLocation: "📍 正在取得你的位置…", + findingClosest: "🔍 正在尋找最近的 Spot…", + checkingLive: "🔍 正在檢查即時資料…", + planningTrip: "🗺️ 正在規劃你的 {{destination}} 之旅...", + searchingRelays: "🔍 正在 Relay 中搜尋 {{tool}}...", + perk1: "個人助理——Sasquatch 讀取你自己的 Stash、Crew、Spot 和商品", + perk2: "操作草稿:列出裝備、發布滑板狀態、規劃旅行——任何內容發布前都由你確認", + perk3: "答案使用你的個人背景,而不只是公開資料", + perk4: "⚡ 直接支援 SkateSpots,讓它保持免費且無廣告", + welcomeTitle: "感謝你支援 Sasquatch Pro!🦧⚡", + welcomeDesc: "付款已傳送——供應商確認後你的通行證即會啟用(通常在 1 分鐘內)。感謝你讓街頭保持自由。", + invoiceCopied: "發票已複製", + dialogDesc: "給你的 AI 滑板嚮導加速。100% 用於資助一個免費、無廣告的社群 App。", + proSupporter: "你是 Pro 支持者 ⚡", + extendPrompt: "想延長?在下面選擇一個檔位來新增更多時間。", + scanToPayPre: "掃碼支付", + scanToPayAmount: "{{sats}} sats", + scanToPayPost: "以獲得 {{label}} 的 Pro", + invoiceQrAlt: "Lightning 發票二維碼", + copyInvoice: "複製發票", + ivePaid: "我已支付", + ivePaidHint: "錢包確認後點選“我已支付”——這會將你的通行證記錄到你的 Nostr 身份。", + freeStaysPre: "免費版 Sasquatch 始終保持免費——公開的 Spot/活動/教練搜尋、旅行規劃和完整的招式詞彙表。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,透過 Routstr 以 sats 加值。餘額不足時自動加值。", + tier7d: "7 天", + tier1m: "1 個月", + tier3m: "3 個月", + tier1y: "1 年", + badgeTry: "試試", + badgeOff20: "8 折", + badgeBest: "最超值 · 6 折", + 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 滑板嚮導。關於 Spot、活動、教練、裝備——或App的任何問題,都可以問我。你需要什麼?", + hello: "嘿!🛹 我是 The Sasquatch。關於滑板 Spot、活動、教練,或App怎麼用,儘管問我。有什麼想了解的?", + hey: "嘿,滑手!🤙 問我你附近的 Spot、即將舉行的活動、教練,或任何 SkateSpots 相關的問題。", + whoAreYou: "我是 The Sasquatch 🦧——SkateSpots 的 AI 嚮導。我可以查詢全球的滑板 Spot、查詢活動、教練、攝像師和裝備商品。全部由即時 Nostr 資料驅動。儘管問!", + whatCanYouDo: "我可以按城市或國家查詢滑板 Spot、查詢即將舉行的活動、在 The Lab 中尋找教練和攝像師、搜尋裝備商品,並回答關於App如何運作的問題。試試:“曼谷的 Spot”或“找教練”!🛹", + whatIsNostr: "Nostr 是一種簡單、開放的去中心化社交網路協議。可以理解為 Twitter,但沒有單一公司控制它——你用密碼學金鑰代替使用者名稱,選擇哪些 Relay 儲存你的資料(也可以自建),一個帳號可在所有 Nostr App間通用!🔑", + isThisPrivate: "這是坦誠的說明 🛡️\n\n• 你的 **GPS 位置保留在你的裝置上**——“附近”只是將地圖居中。它絕不會傳送給我們或被發布。\n• **你新增的 Spot 是公開的**(這正是共享地圖的意義)——所以不要把標記放在自己家門口。\n• **私信和 Crew 聊天是端到端加密的**——只有成員能讀取。\n• 與任何網站一樣,你連線的伺服器(地圖瓦片、Relay)可以看到你的 **IP**。想連這個也隱藏?使用 VPN 或 Tor。\n\n完整詳情見[隱私頁面](/privacy)。🛹", + privacy: "簡要版 🛡️:你的 GPS 從不離開你的裝置,你發布的 Spot 按設計就是公開的,私信/Crew 聊天是端到端加密的。伺服器仍能看到你的 IP(任何網站都如此)——想的話可以用 VPN 或 Tor 隱藏。完整說明見[隱私頁面](/privacy)。", + amITracked: "SkateSpots 不追蹤你——沒有廣告、沒有分析畫像、不售賣資料,也沒有 SkateSpots 伺服器收集你的位置。你的 GPS 保留在裝置上。伺服器能看到的一件事是 **IP**(地圖瓦片、Relay)——和任何網站一樣。想隱藏就用 VPN 或 Tor。更多見[隱私頁面](/privacy)。🛡️", + doYouTrack: "不會——沒有追蹤、沒有廣告、沒有資料收集。你的 GPS 保留在裝置上,也沒有中央伺服器記錄你。你連線的伺服器可以看到你的 IP(和任何網站一樣);VPN/Tor 可以隱藏它。見[隱私頁面](/privacy)。🛹", + vpn: "完全可選,但如果你想獲得額外隱私,這很靠譜 🛡️。VPN 會向 SkateSpots 通訊的伺服器(地圖瓦片、Relay 等)隱藏你的 **IP**(大致位置)。選擇一個你信任的、不記錄日誌的供應商(如 Mullvad);避免來路不明的免費 VPN。\n\n注意:VPN **不能**隱藏你發布的 Spot(那些是公開的),如果你要保持匿名,就不要開啟瀏覽器 GPS。完整詳情見[隱私頁面](/privacy)。", + tor: "Tor 瀏覽器能提供最強的 IP 隱私——它會透過多個 Relay 路由你,使伺服器看不到你的真實 IP 🧅。代價:速度更慢,地圖和某些 Nostr Relay 可能延遲或阻止 Tor 出口節點。非常適合格外謹慎的人。\n\n記住:Tor 隱藏的是你的 IP,不是你發布的 Spot;如果目標是匿名,就不要啟用瀏覽器 GPS。更多見[隱私頁面](/privacy)。", + hideMyIp: "兩個免費選項 🛡️:**信譽良好的 VPN**(簡單、快速——將你的 IP 隱藏在其伺服器後面)或 **Tor 瀏覽器**(隱私最強,速度較慢)。任何一個都能讓 SkateSpots 連線的伺服器看不到你的真實 IP。注意它們不會隱藏你發布的 Spot。見[隱私頁面](/privacy)。", + isMyLocation: "你的位置很安全 📍——“附近”只在你的裝置上讀取你的 GPS,用於將地圖居中並排序附近的 Spot。它絕不會發布到 Nostr、絕不會傳送給我們、絕不會共享。只有你主動新增的 Spot 才是公開的。詳情見[隱私頁面](/privacy)。", + whatAreZaps: "Zap 是透過 Nostr 傳送的即時 Bitcoin Lightning 打賞!點選任意內容上的 ⚡,直接把 sats 傳送到創作者的錢包。就像點贊,但用的是真錢。即時、點對點、無中間商。⚡", + howToLogin: "兩種方式:\n1. **瀏覽器擴充套件**(桌面端):安裝 Alby 或 nos2x,然後點選“登入”\n2. **新使用者**:點選“註冊”生成金鑰。下載你的 nsec(私鑰)並儲存好——這是你永遠的帳號!", + whatIsCashu: "內建 Bitcoin 錢包!Cashu ecash 代幣由 Lightning 背書——在滑板 Spot 可離線使用,注重隱私(Mint 無法追蹤支付)。前往“設定”中的錢包使用。🥜", + whatIsNwc: "Nostr Wallet Connect——就像 Lightning 錢包的 USB-C。連線一次 Alby、Minibits、Zeus 或 Coinos,之後一鍵 Zap。已加密,支出限額由你控制。🔌⚡", + isItFree: "100% 免費。沒有廣告,沒有訂閱,沒有企業套路。由滑手為滑手打造。透過 Angor 由社群資助——檢視支持者頁面。你也可以透過貢獻優質 Spot 從社群 Zap 中獲得 Bitcoin。🛹", + whatCanIDo: "在地圖上發現全球 Spot,在 The Lab 僱傭專業人士(教練、攝像師、攝影師、剪輯師、坡道建造者),加入 Crew 一起滑,參加活動,參加 Tour,買賣裝備,記錄你的私人 Stash,Zap 創作者,檢視 Spot 天氣,並共建這個去中心化的滑板社群!", + whatIsTheLab: "The Lab 是你僱傭滑板圈專業人士的地方:教練、攝像師、攝影師、影片剪輯師,以及坡道/公園/DIY 建造者。每個都可以是個人或團體(Crew/工作室)——成員用各自的金鑰確認,所以真實可靠。全部在 Nostr 上,沒有假帳號。🎓", + whatIsACrew: "Crew 是錨定在地圖上的滑板家人——是你一起滑的人,不是你僱傭的人。每個 Crew 在地圖上都有主場(青色標記)、常去 Spot、成員、氛圍和宣言。成員用各自的金鑰確認。在 Crew →“建立 Crew”中建立一個。🤘", + whatAreCrews: "Crew 是錨定在地圖上的滑板家人——是你一起滑的人,不是你僱傭的人。每個 Crew 在地圖上都有主場(青色標記)、常去 Spot、成員和宣言。成員用各自的金鑰確認。前往 Crew 標籤頁建立或加入一個!🤘", + howToStartACrew: "前往 Crew 標籤頁 →“建立 Crew”。取個名字,在地圖上放置你的主場,新增氛圍(或自定義 #話題標籤),關聯你的常去 Spot,並按 npub 新增成員。每位成員用各自的金鑰確認,所以名單是真實可靠的。🤘", + whatIsMyStash: "我的 Stash 是你的私人、加密裝備櫃(NIP-44 加密)。記錄你的 Deck、Trucks、Wheels、鞋子——包括存放位置、成色、稀有度和價格。除非你把物品標記為公開,否則只有你能讀取。非常適合保險或計劃交換。🎒", + whatIsStash: "我的 Stash 是你的私人、加密裝備清單。記錄你擁有的一切——成色、存放位置、價值——全部加密,只有你能看到。想出售或展示時把物品標記為公開。🎒", + whatIsABuilder: "建造者是 The Lab 中的坡道/公園/DIY Crew,你可以僱傭他們建造過渡、Bowl、Rail 或整個公園。他們會列出建造內容、材料、專案規模,並且可以有執照/保險。通常是團體——他們還能把建造的 Spot 關聯到地圖上。🏗️", + whatIsANutzap: "Nutzap(NIP-61)是透過 Nostr 傳送的 ecash 打賞——私密的 Cashu 代幣直接 Zap 給某人。你可以在錢包中設定接收 nutzap。(傳送完整 nutzap 正在逐步推出——目前請使用 Lightning Zap。)🥜⚡", + whatIsClink: "CLINK 是一種 Nostr 原生的支付碼(“noffer”)。商店、Crew 和 The Lab 專業人士都可以新增一個,這樣你無需 Lightning 地址也能向他們付款——你會看到一個帶二維碼的“透過 CLINK 支付”按鈕。用像 ShockWallet 這樣的 CLINK 錢包掃描它。🔗⚡ [規範](https://clinkme.dev/specs.html) [App](https://clinkme.dev/apps.html)", + whatIsNoffer: "noffer 是一種 CLINK 支付碼——一種可複用的、Nostr 原生的收款方式,無需 Web 伺服器或 Lightning 地址。在你的商店/Crew/The Lab 資料中新增你的,別人就能直接向你付款。🔗", + whatAreTours: "Tour 是有人帶領的滑板之旅——本地的場次、全國公路之旅,或世界毀滅之旅。在地圖或 Tour 版塊找到它們,碰面,並與本地人一起滑新地形。🗺️🛹", + whatIsAShop: "滑板商店是地圖上列出的本地商店。發現並支援你所在地區的實體(或線上)滑板商店——有些甚至接受 Bitcoin。🏪", + howToSellGear: "前往裝備交換 / Marketplace 建立商品(NIP-99)。新增照片、以 sats 定價、成色,並可選地把它固定到一個 Spot 上以顯示在地圖上。買家直接 Zap 或私信你。🛹💸", + supporters: "SkateSpots 透過 Angor(去中心化 Bitcoin 眾籌)由社群資助——沒有廣告、沒有投資人、不售賣資料。檢視支持者頁面來支援這個專案,讓街頭保持自由。❤️⚡", + trustScore: "信任分數(0-100)由 Relatr 提供。分析你的 Nostr 網路:粉絲、活躍度、互動、Zap。越高 = 越可信。有助於過濾機器人和垃圾資訊。檢視任意個人資料即可看到他們的分數。🛡️", + whatRelay: "SkateSpots 使用:🛹 goskatespots.nostr1.com(主 Relay,為保證品質而加入白名單)+ relay.ditto.pub(全球)+ purplepag.es(個人資料聚合器)。你的資料會複製到所有這些 Relay 以實現冗餘。", + tripPlanner: "告訴我一個城市,我會為你規劃逐日的滑板之旅 🗺️——Spot、活動、教練和本地 Crew,並考慮天氣(雨天 = 推薦有遮蔽 Spot 的 Crew)。試試“幫我規劃里斯本 3 天”。我可以把它全部儲存到合集,並把你引導到真實網站上的航班/住宿(無 KYC,無中間商)。🛹", + planATrip: "只要說“幫我規劃巴塞羅那 3 天”(或任何城市),我就會為每天規劃 Spot、場次、教練和本地 Crew。儲存為合集就去滑吧。🗺️🛹", + sasquatchPro: "**Sasquatch Pro** 🦧⚡ 是一張 Lightning 支持者通行證,解鎖我的個人功能:\n\n• 🧠 **個人助理**——我讀取你自己的 Stash、Crew、Spot 和商品\n• ✨ **操作草稿**——列出裝備、發布你的滑板狀態、規劃旅行(任何內容發布前你都會確認)\n• 💬 **個人背景**——我的回答會使用你自己的資料,而不只是公開結果\n• ⚡ **支援專案**——你讓 SkateSpots 保持免費且無廣告\n\n免費版 Sasquatch 始終免費:公開的 Spot/活動/教練/Crew 搜尋、詞彙表和旅行規劃都無需 Pro。Pro 只是增加*個人*功能。點選頂部的 **⚡ 升級 Pro**。檔位:7 天約 2k sats,1 個月約 5k,3 個月約 12k,1 年約 36k。", + proPerks: "Pro 特權 🦧⚡:個人助理(讀取你的 Stash/Crew/Spot/商品)、操作草稿(列出裝備、發布狀態、規劃旅行——由你確認),以及使用你自己個人背景的回答。此外你還在直接支援 SkateSpots,讓它保持免費且無廣告。免費版保持免費——Pro 增加個人層。點選頂部的 **⚡ 升級 Pro**。", + proVersion: "我的 Pro 版本 🦧⚡ 增加了一位**個人助理**:我可以讀取你自己的 Stash、Crew、Spot 和商品,為你起草操作(列出裝備、發布狀態、規劃旅行——你始終先確認),並在回答中使用你的個人背景。它還直接支援這個專案。免費版 Sasquatch(Spot/活動/教練/Crew 搜尋、詞彙表、旅行規劃器)保持免費。點選頂部的 **⚡ 升級 Pro**。", + perks: "Pro 特權 🦧⚡:個人助理(你的 Stash/Crew/Spot/商品)、由你確認的操作草稿,以及使用你自己背景的回答——此外你還讓App保持免費且無廣告。點選頂部的 **⚡ 升級 Pro**。", + goPro: "點選頂部的 **⚡ 升級 Pro** 按鈕開啟升級面板。Pro 解鎖我的個人助理(Stash/Crew/Spot/商品)和操作草稿,並直接支援這個專案。用 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,8 折),**1 年**約 36,000 sats(約 $21,最超值)。點選頂部的 **⚡ 升級 Pro**。", + howMuchIsPro: "Pro 檔位:7 天約 2,000 sats,1 個月約 5,000 sats,3 個月約 12,000 sats(8 折),1 年約 36,000 sats(最超值)。用 Lightning 支付 ⚡。點選頂部的 **⚡ 升級 Pro**。", + upgrade: "要升級到 Sasquatch Pro,請點選頂部的 **⚡ 升級 Pro** 按鈕。用 Lightning 支付(7 天約 2k sats 到 1 年約 36k)。Pro 解鎖我的個人助理和操作草稿,並直接支援這個專案。🦧⚡", + }, + statsTitle: "📊 **SkateSpots 資料一覽**", + weatherTemp: "• {{temp}}°C(體感 {{feels}}°C)", + weatherSkateability: "• 適滑度:**{{label}}**({{score}}/100)", + weatherError: "暫時無法讀取天氣。請稍後重試。🌧️", + labelSpots: "Spot", + labelEvents: "活動", + labelLabPros: "The Lab 專業人士", + labelCrews: "Crew", + labelShops: "滑板商店", + labelTours: "Tour", + labelGear: "裝備商品", + 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: "我看不到你的位置——任何資訊都不會離開你的裝置;我只在你詢問時於本地讀取,而瀏覽器剛剛拒絕了。點選地圖上的 🎯 **附近**,或告訴我一個城市:“曼谷的 Spot”。🛹", + noNearbySpots: "你附近還沒有標記的 Spot 🦧——[成為第一個新增的人](https://skate-spots.org/create-spot)。🛹", + closestTitle: "此刻離你最近:", + closestFooter: "_在你的裝置上計算——你的位置從未離開它。_", + proNudge: "那是 **Sasquatch Pro** 的功能 🦧⚡——有了 Pro,我可以讀取你的 Stash、Crew、Spot 和商品,起草裝備商品、求購和滑板狀態,並規劃你的旅行。它是一張 Lightning 支持者通行證,讓 SkateSpots 保持免費且無廣告。點選頂部的 **⚡ 升級 Pro** 按鈕解鎖。🛹", + draftingProPerk: "起草操作(發布狀態、列出裝備)是 **Sasquatch Pro** 的特權 🦧⚡——點選頂部的 **⚡ 升級 Pro** 解鎖。", + draftIntro: "這是一份草稿——請稽核並點選發布。你確認之前不會上線任何內容。🛹", + draftFailed: "我沒能完全生成那份草稿——請試著再告訴我詳細資訊(例如“把我的 Spitfire Wheels 以 8000 sats 列出”)。", + tripAskCity: "去哪裡?告訴我一個城市(例如“幫我規劃里斯本 3 天”),我就為你規劃行程。🗺️", + tripEmptyMap: "**{{destination}}** 的地圖上還沒有內容 🦧——成為第一個在 [skate-spots.org](https://skate-spots.org) 新增 Spot 的人。一旦本地人新增了 Spot、Crew 和活動,我就為你規劃完整行程。", + tripLocked: "為你鎖定了一次 **{{destination}}** 行動 🛹——下面是 Spot、場次和本地人。調整它或儲存它。", + tripFailed: "暫時無法連線即時資料來規劃。請稍後重試!🛹", + tripEmptyMapLocal: "**{{destination}}** 的地圖上還沒有內容 🦧——在 [skate-spots.org](https://skate-spots.org) 成為第一個。", + tripMissionLocal: "這是一次 **{{destination}}** 行動 🛹——下面是 Spot、場次和本地人。", + relayFailed: "Relay 暫時沒有及時回應 🛰️——通常是網路較慢,而不是缺少 Spot。請稍後再試一次。🛹", + couldNotProcess: "唔,無法處理。換個說法試試!", + freeTierFallback: "這個需要 AI 推理——是 **Sasquatch Pro** 功能 ⚡🦧\n\n我仍然可以直接從 Relay 找到 **Spot、活動、教練、Crew、商店、Tour 和裝備**——比如問我“巴塞羅那的 Spot”——而[詞彙表](/glossary)涵蓋 150 多個招式和術語。點選頂部的 **⚡ 升級 Pro** 解鎖 AI 回答。", + aiDownFallback: "我的 AI 大腦此刻在騰空 🦧——但我依然能幫你:\n\n• 🗺️ [地圖](/) ——你附近的 Spot、商店、活動\n• 🧪 [The Lab](/lab) ——教練、攝像師、剪輯師\n• 📖 [詞彙表](/glossary) ——150 多個招式和術語\n• 👥 [Crew](/crews) ——找到你的人\n\n或者直接告訴我一個**城市**(“巴塞羅那的 Spot”)或一個**招式**(“什麼是 nollie”),我會直接回答。🛹", + wentWrong: "我這邊出了點狀況。請稍後重試!🦧", + publishError: "無法發布:{{error}}。請稍後重試。", + unknownError: "未知錯誤", + }, +}; export default zhTWBatch2; diff --git a/src/i18n/zh-TW/batch3.ts b/src/i18n/zh-TW/batch3.ts index 60b3253..f0fa2f7 100644 --- a/src/i18n/zh-TW/batch3.ts +++ b/src/i18n/zh-TW/batch3.ts @@ -1,4 +1,1294 @@ -/** zh-TW — batch 3. Filled by the translation pass; empty until then. */ -const zhTWBatch3 = {}; +/** zh-TW — batch 3: settingsUi namespace. */ +const zhTWBatch3 = { + settingsUi: { + proSupport: { + title: "Pro 與支援", + subtitle: "讓 SkateSpots 保持免費的選用附加功能", + prepaidTitle: "預付,而非訂閱", + prepaidBody: "每次購買都是一次性的 Bitcoin/Lightning 付款——無需帳戶、無經常性扣款、無託管。再次付款即可延長你的時間。", + sasquatchTitle: "Sasquatch Pro", + sasquatchBenefit: "解鎖個人 AI 助理——它可以讀取你自己的 Stash、Crew 和刊登資訊——同時協助資助這個專案。", + active: "已啟用", + activeUntil: "有效期限至 {{date}}", + daysLeft: "剩下 {{count}} 天", + notActive: "未啟用", + goPro: "升級 Pro", + extend: "延長 Pro", + day: "天", + featuredTitle: "精選刊登", + featuredBenefit: "用 Pro 徽章將刊登資訊推到頂端——適用於 The Lab 檔案、活動、Shop 和巡迴。", + featuredHow: "時長級距適用於所有類型;承諾時長越長,每日費用越低。你在建立或編輯刊登資訊時為它設定精選。", + featuredUntil: "至 {{date}}", + yourFeatured: "你的精選刊登", + noneFeatured: "沒有進行中的精選刊登。", + freeTitle: "免費途徑", + freeBody: "AI 常見問題和本地搜尋一律免費,你也可以用免費的工作量證明代替 sats 費用來刊登市場資訊。" + }, + notFound: { + seoTitle: "404 - 找不到頁面", + seoDescription: "找不到你正在尋找的頁面。返回首頁繼續瀏覽。", + message: "哎呀!找不到頁面", + returnHome: "返回首頁" + }, + loginArea: { + signUp: "註冊", + logIn: "登入" + }, + accountSwitcher: { + switchAccount: "切換帳戶", + walletSettings: "錢包設定", + addAccount: "新增另一個帳戶", + logout: "登出" + }, + amberHint: { + defaultAction: "傳送", + multiBefore: "你的簽署器會要求你核准", + multiTimes: "{{approvals}} 次", + multiAfter: "以{{action}}——這對加密訊息來說是正常的(每位收件者核准一次)。請逐一核准。", + single: "你的簽署器會要求你核准以{{action}}。" + }, + amberCallback: { + processing: "正在處理 Amber 登入…", + gotResult: "收到結果:{{result}}", + noResultDebug: "Amber 未回傳結果", + noResultToast: "未收到 Amber 回傳的結果。操作可能已被取消。", + validPubkey: "公鑰有效!正在登入…", + loginSuccessful: "登入成功!", + loginErrorDebug: "登入錯誤:{{error}}", + invalidResultDebug: "結果格式無效:{{result}}", + loggedInTitle: "已登入", + amberLoginDesc: "已成功使用 Amber 登入!", + loginFailedTitle: "登入失敗", + loginFailedDesc: "無法完成 Amber 登入。請再試一次。", + invalidPubkeyDesc: "從 Amber 收到的公鑰無效。", + sessionLostToast: "工作階段資料遺失。請再試一次。", + eventSignedTitle: "事件已簽署", + eventSignedDesc: "你的事件已由 Amber 簽署。", + signingFailedTitle: "簽署失敗", + signingFailedDesc: "無法處理來自 Amber 的已簽署事件。", + operationCompleteTitle: "操作完成", + operationCompleteDesc: "{{op}} 已完成。" + }, + loginDialog: { + loginWithAmber: "使用 Amber 登入(Android)", + welcomeTitle: "歡迎來到 SkateSpots", + welcomeSubtitle: "註冊或登入以繼續", + newHere: "第一次來?", + createFree: "建立免費帳戶。無需電子郵件。", + createAccount: "建立帳戶", + orLogIn: "或登入", + loggedInTitle: "🛹 已登入!", + loggedIn: "已登入!", + connectedAmber: "已透過 Amber 連線!", + amberLoginFailed: "Amber 登入失敗", + amberCancelled: "登入已取消。點選「開啟 Amber」再試一次。", + amberNotFound: "找不到 Amber。請確認已從 ZapStore 安裝 Amber。", + loginFailed: "登入失敗", + pubkeyError: "貼上你來自 Amber 的十六進位公鑰(64 個字元)或 npub", + pairedSigner: "已與你的簽署器配對。", + connectFailed: "無法連線到你的簽署器。", + openedEncrypted: "已開啟你的加密金鑰。", + openKeyFailed: "無法開啟該金鑰。", + bunkerPrefix: "必須以 bunker:// 開頭", + connectedBunker: "已透過 bunker 連線!", + bunkerFailed: "失敗:{{error}}", + checkBunkerUri: "檢查你的 bunker URI", + nsecPrefix: "必須以 nsec1 開頭", + invalidNsec: "nsec 無效:{{error}}", + checkKey: "檢查你的金鑰", + noExtensionTitle: "找不到擴充功能", + noExtensionDesc: "安裝 Alby 或其他 NIP-07 擴充功能。", + amberIdleDesc: "你的金鑰留在 Amber 中。輕輕一點——在 Amber 中核准,然後你就回到這裡並已登入。無需複製任何內容。", + continueWithAmber: "繼續使用 Amber", + noAmberGetIt: "沒有 Amber?取得它 →", + waitingAmberTitle: "正在等待 Amber…", + waitingAmberDesc: "在 Amber 中核准該請求。你一返回就會自動登入。", + openAmberAgain: "再次開啟 Amber", + havingTrouble: "遇到問題?手動輸入你的金鑰", + enterPublicKey: "輸入你的公鑰", + enterPublicKeyDescBefore: "僅在自動流程沒有成功時。在 Amber 中:點選你的個人檔案 →", + copyPublicKey: "複製公鑰", + enterPublicKeyDescAfter: "然後貼到這裡。", + connect: "連線", + back: "← 返回", + signInWithPhone: "用手機登入", + signInWithPhoneDesc: "用簽署器應用程式(Amber、nsec.app)掃描。你的金鑰永遠不會離開你的手機。", + showPairingCode: "顯示配對碼", + waitingSigner: "正在等待你的簽署器…", + copyLink: "複製連結", + orPasteBunker: "或貼上 bunker URL", + bunkerTitle: "Bunker(NIP-46)", + bunkerPasteBefore: "貼上你的", + bunkerPasteAfter: "URI。", + amberInstructions: "設定 → NIP-46 Bunker → 建立 → 複製", + nsecAppInstructions: "連接應用程式 → 複製 bunker URI", + secretKeyTitle: "私鑰", + secretKeyRawDesc: "直接貼上你的 Nostr 私鑰。", + secretKeyEncDesc: "開啟受密碼保護的金鑰備份。", + rawNsec: "原始 nsec", + encryptedNip49: "加密(NIP-49)", + nsecWarning: "⚠️ 僅在受信任的裝置上使用。切勿分享你的 nsec。", + login: "登入", + encSaferDesc: "更安全:金鑰在你輸入密碼前會保持加密,因此該備份可安全地保存在雲端儲存或密碼管理工具中。", + password: "密碼", + openEncryptedKey: "開啟加密金鑰", + browserExtensionTitle: "瀏覽器擴充功能(NIP-07)", + browserExtensionDesc: "最適合桌面端。可與 Alby、nos2x、Flamingo 搭配使用。", + loginWithExtension: "使用擴充功能登入" + }, + signupDialog: { + download: "下載", + stepChoose: "選擇", + stepProfile: "個人檔案", + stepSaveKey: "儲存金鑰", + somethingWrong: "發生了一點問題", + createFailed: "無法建立你的帳戶。請再試一次。", + keySavedTitle: "私鑰已儲存!", + keySavedDesc: "你的金鑰已被安全儲存。", + downloadFailedTitle: "下載失敗", + downloadFailedDesc: "無法下載金鑰檔案。請手動複製。", + encSavedTitle: "加密備份已儲存 🔐", + encSavedDesc: "請同時保留檔案和密碼——重新登入時兩者都需要。", + encFailed: "無法加密該金鑰。", + invalidFileTitle: "檔案類型無效", + invalidFileDesc: "請為你的頭像選擇圖片檔案。", + fileTooLargeTitle: "檔案過大", + fileTooLargeDesc: "頭像圖片必須小於 5MB。", + avatarUploadedTitle: "頭像已上傳!", + avatarUploadedDesc: "你的頭像已成功上傳。", + uploadFailedTitle: "上傳失敗", + uploadFailedDesc: "上傳頭像失敗。請再試一次。", + nameRequiredTitle: "需要顯示名稱", + nameRequiredDesc: "選一個顯示名稱,讓其他滑手知道你是誰。你可以隨時變更。", + reserveFailedTitle: "無法保留該名稱", + reserveFailedDesc: "{{error}} 你可以稍後在設定中認領一個。", + profileCreatedTitle: "個人檔案已建立!", + profileCreatedDesc: "你的個人檔案已設定完成。", + profileFailedTitle: "個人檔案設定失敗", + profileFailedDesc: "你的帳戶已建立,但個人檔案設定失敗。你可以稍後更新。", + welcomeToastTitle: "歡迎!", + welcomeToastDesc: "你的帳戶已就緒。", + titleWelcome: "加入 SkateSpots", + titleProfile: "設定你的個人檔案", + titleDone: "歡迎!", + createFreeAccount: "建立你的免費帳戶", + createFreeAccountDesc: "無需電子郵件、無需手機、無需密碼。你的帳戶就是一組 Nostr 金鑰——選擇它存放的位置。", + recommended: "推薦", + signUpWithAmber: "使用 Amber 註冊", + signUpWithAmberDesc: "你的金鑰在 Amber 應用程式內建立並儲存——SkateSpots 從不接觸它。最安全。一點即可核准。", + continueWithAmber: "繼續使用 Amber", + orQuickWay: "或者快速方式", + quickAccount: "在此裝置上的快速帳戶", + quickAccountDesc: "我們產生一組存放在此裝置上的金鑰。最快開始——隨後我們會幫你儲存備份。", + createQuickAccount: "建立快速帳戶", + quickReassurance: "只需 5 秒 · 存放在此裝置上 · 接下來我們會幫你備份", + preferAnotherSigner: "更想用其他簽署器?", + iosDesktopNudge: "在 iOS 或桌面端?簽署器應用程式或瀏覽器擴充功能是最安全的選擇——", + seeAllOptions: "查看所有選項", + youreInPickName: "你已加入!🛹 選一個顯示名稱,讓滑手們知道你是誰", + changeAnytime: "你可以稍後隨時變更。簡介和頭像為選填。", + publishingProfile: "正在發佈你的個人檔案…", + displayName: "顯示名稱", + displayNamePlaceholder: "例如 Tony、gnarlyGrind 或你的 Crew 名稱", + displayNameHint: "必填——你在 SkateSpots 各處的顯示方式。可隨時變更。", + skateName: "你的 SkateSpots 名稱", + skateNameHint: "免費且選填——一個經過驗證的使用者名稱,會在你的個人檔案上顯示 ✓。", + bio: "簡介", + bioPlaceholder: "向大家介紹你自己…", + avatar: "頭像", + uploadAvatar: "上傳頭像圖片", + saving: "儲存中…", + saveAndStart: "儲存並開始滑板", + addNameToContinue: "新增一個顯示名稱以繼續。", + savingPublishesNote: "儲存會將你的個人檔案發佈到 Nostr——你的簽署器可能會要求你核准一次。", + youreIn: "你已加入!🛹", + oneQuickThing: "在你加入前還有一件小事…", + saveLoginKey: "儲存你的登入金鑰", + saveLoginKeyBefore: "這是", + only: "唯一", + saveLoginKeyAfter: "能回到你帳戶的方式——沒有電子郵件,也沒有密碼重設。現在就儲存它,你就能在任何裝置、任何滑板的地方登入。", + revealSaveKey: "顯示並儲存我的金鑰", + recoveryCopied: "復原碼已複製。請妥善保管。", + saved: "已儲存", + treatLikeBoardKeys: "像對待你滑板的鑰匙一樣對待它——任何擁有此代碼的人都能控制你的帳戶。切勿分享。", + hideEncBackup: "隱藏加密備份", + saveEncBackup: "儲存加密備份", + encBackupBefore: "一份受密碼保護的副本——可安全地保存在雲端儲存或密碼管理工具中。你需要該檔案", + and: "和", + encBackupAfter: "密碼。", + choosePassword: "選擇一個密碼", + saveEncBackupCta: "儲存加密備份", + savedCodeAria: "我已儲存我的復原碼", + savedCodeLabel: "我已將復原碼保存在安全之處——密碼管理工具,或離線寫下。", + letsSkate: "開始滑板", + saveLater: "稍後從設定中儲存", + advancedSigner: "進階:改用簽署器應用程式" + }, + mnemonic: { + generatedTitle: "助記詞已產生!🎉", + generatedDesc: "按順序寫下這 12 個單詞。它們是你帳戶的鑰匙!", + savedTitle: "助記詞已儲存!", + savedDesc: "將此檔案保存在安全的地方。", + downloadFailedTitle: "下載失敗", + downloadFailedDesc: "無法下載檔案。請手動複製。", + copiedTitle: "已複製到剪貼簿!", + copiedDesc: "你的助記詞已複製。", + qrWindowTitle: "助記詞 QR Code", + qrHeading: "你的助記詞 QR Code", + qrAlt: "助記詞 QR Code", + qrWarning: "請將此 QR Code 保密並妥善保管!", + qrPrint: "列印 QR Code", + qrFailedTitle: "QR Code 失敗", + qrFailedDesc: "無法產生 QR Code。", + accountCreatedTitle: "帳戶已建立!🎉", + accountCreatedDesc: "一切都準備好了!你的助記詞已安全保存。", + loginFailedTitle: "登入失敗", + loginFailedDesc: "建立帳戶失敗。請再試一次。", + verifyFailedTitle: "驗證失敗", + verifyFailedDesc: "單詞不相符。請檢查後再試一次。", + titlePrefix: "使用", + titleSuffix: "助記詞建立帳戶", + twelveWordTitle: "12 字助記詞", + twelveWordDesc: "你的助記詞就像主密碼。把它寫在紙上並妥善保管。當你從其他裝置存取帳戶,或清除瀏覽器資料後,都會需要它。", + generate: "產生助記詞", + useNsecInstead: "改用進階 nsec 金鑰", + yourPhrase: "你的助記詞", + copy: "複製", + download: "下載", + qrCode: "QR Code", + criticalWarning: "重要安全警告", + warnWriteStrong: "把它寫下來", + warnWrite: "寫在紙上並安全存放", + warnNeverShareStrong: "切勿分享", + warnNeverShare: "你的助記詞給任何人", + warnBackupsStrong: "保留多份備份", + warnBackups: "存放在不同的安全地點", + warnAnyoneStrong: "任何擁有此助記詞的人", + warnAnyone: "將永久控制你的帳戶", + warnLoseStrong: "如果你弄丟了它", + warnLose: "你將永久失去你的帳戶", + savedSecurely: "我已安全儲存", + verifyTitle: "驗證你的助記詞", + verifyDesc: "為確保你已正確儲存,請輸入以下單詞:", + wordLabel: "第 {{n}} 個單詞", + wordPlaceholder: "輸入第 {{n}} 個單詞", + goBack: "返回", + verifyCreate: "驗證並建立帳戶", + completeTitle: "帳戶已建立!", + completeDesc: "你的 Nostr 帳戶已準備就緒!", + signerTitle: "推薦:設定簽署器應用程式", + signerSubtitle: "讓你的金鑰更加安全", + signerDesc: "為了更好的安全性,請使用專用的簽署器應用程式,而不是到處貼上你的助記詞。簽署器應用程式在讓你使用任何 Nostr 應用程式的同時,確保你的金鑰安全。", + signerCta: "了解簽署器應用程式", + skip: "暫時跳過" + }, + signupMethod: { + titlePrefix: "選擇你的", + titleSuffix: "註冊方式", + subtitle: "兩種方式都安全。選擇最適合你的!", + recommended: "推薦", + mnemonicTitle: "助記詞", + mnemonicDesc: "12 個易於記憶的單詞。Bitcoin、Ethereum 和大多數加密錢包採用的業界標準。", + mnemonicF1: "易於寫在紙上", + mnemonicF2: "可與其他 Nostr 應用程式搭配使用(NIP-06)", + mnemonicF3: "可產生多個帳戶", + mnemonicF4: "加密貨幣使用者熟悉", + useMnemonic: "使用助記詞", + advanced: "進階", + nsecTitle: "私鑰(nsec)", + nsecDesc: "原始加密金鑰。更技術性,但讓你直接存取你的 Nostr 身分。", + nsecF1: "直接的加密控制", + nsecF2: "相容於所有 Nostr 應用程式", + nsecF3: "單一字串即可備份", + nsecF4: "無衍生層", + useNsec: "使用私鑰", + footer: "🔒 兩種方式同樣安全。依照你的偏好選擇!" + }, + skateNip05: { + placeholder: "你的名字", + claimedSuffix: "歸你所有——儲存你的個人檔案即可發佈它。", + checking: "正在檢查可用性…", + available: "{{name}}@{{domain}} 可以使用", + claim: "認領它", + hint: "字母、數字、連字號。免費,並在你的個人檔案上顯示為 ✓ 徽章。" + }, + nip05Required: { + getFree: "取得免費 / 便宜的 NIP-05", + paid: "付費", + requiredTitle: "需要 NIP-05 驗證", + bannerReason: "為防止垃圾訊息並建立信任,{{role}} 需要一個經過驗證的 Nostr 位址(NIP-05)。", + gateReason: "為防止垃圾訊息並建立信任,{{role}} 必須通過 NIP-05 驗證。", + addInSettings: "在設定中新增 NIP-05", + explainer: "NIP-05 透過將你的 Nostr 個人檔案連結到一個網域來證明你的身分——就像", + updateProfile: "更新你的個人檔案" + }, + editProfile: { + uploadSuccessTitle: "成功", + uploadSuccessDesc: "{{field}} 上傳成功", + uploadErrorDesc: "上傳 {{field}} 失敗。請再試一次。", + mustBeLoggedIn: "你必須登入才能更新個人檔案", + invalidClinkTitle: "CLINK 代碼無效", + invalidClinkDesc: "這看起來不像有效的 noffer1… 代碼。清除它或貼上有效的代碼。", + invalidLightningTitle: "Lightning 位址無效", + invalidLightningDesc: "請使用類似電子郵件的位址,例如 you@walletofsatoshi.com。", + invalidSpTitle: "Silent Payment 位址無效", + invalidSpDesc: "Silent Payment 位址以「sp1」開頭且相當長。清除它或貼上有效的位址。", + invalidCordnTitle: "Cordn 連結無效", + invalidCordnDesc: "貼上完整的 https://… Cordn 聯絡連結。", + updateSuccessTitle: "成功", + updateSuccessDesc: "你的個人檔案已更新", + updateErrorDesc: "發佈個人檔案失敗。請在 設定 > Relay 中檢查你的 Relay 連線", + identityTitle: "身分", + identityDesc: "你在 SkateSpots 各處的呈現方式。", + displayName: "顯示名稱", + displayNamePlaceholder: "你的名字", + bio: "簡介", + bioPlaceholder: "用幾句話介紹你和你的滑板…", + profilePicture: "個人頭像", + pictureDesc: "上傳或貼上一張方形圖片。", + bannerImage: "橫幅圖片", + bannerDesc: "一張用於個人檔案頂端的寬圖。", + website: "網站", + bitcoinTitle: "Bitcoin 與付款", + bitcoinDesc: "讓人們直接向你 Zap、打賞和付款——無需中間人。", + lightningAddress: "Lightning 位址", + lud16Invalid: "請使用類似電子郵件的位址,例如 you@yourdomain.com。", + lud16Ok: "為你個人檔案上的「Zap」按鈕提供支援。", + lud16Hint: "即時 Bitcoin 打賞。為你個人檔案上的「Zap」按鈕提供支援。", + silentPaymentAddress: "Silent Payment 位址", + spInvalid: "應以「sp1」開頭且相當長。", + spOk: "有效——一個可重複使用、私密的鏈上位址。", + spHint: "可重複使用的靜態鏈上位址(BIP-352)。分享一次;每筆付款都無法被關聯。", + clinkTipCode: "CLINK 打賞代碼", + nofferInvalid: "這看起來不像有效的 noffer1… 代碼。", + nofferOk: "有效——你的個人檔案上會顯示「用 Bitcoin 打賞」按鈕。", + nofferHint: "自託管的 CLINK 代碼,讓任何人都能透過 Nostr 向你打賞——無需中間人。", + skateProfileTitle: "滑板檔案", + skateProfileDesc: "展示你的贊助商,以及 Crew 聯絡你的方式。", + badges: "徽章", + badgesHint: "(標籤 + 選填連結)", + badgeExample: "例如 Independent Trucks", + badgeLabelPlaceholder: "徽章標籤…", + badgeUrlPlaceholder: "https://…(選填)", + removeBadge: "移除徽章", + addBadge: "新增徽章", + badgesDescBefore: "贊助你滑板的贊助商、Shop 或人們——以及任何你想展示的東西。每一個都會成為你個人檔案上可點選的標籤。你的", + badgesDescAfter: "會員徽章會自動新增。", + coordinator: "協調者", + cordnInvalid: "這看起來不像一個協調者。貼上一個 nprofile、一個 cordn.net 連結,或一個 https:// URL。", + cordnOk: "顯示在你的個人檔案上——其他人可一鍵新增。", + cordnHint: "其他人用來傳訊息給你的 Cordn 協調者。私密、加密、歸你所有。", + useMyCoordinator: "使用我的協調者", + accountTitle: "帳戶", + accountDesc: "額外的帳戶設定。", + botAccount: "機器人帳戶", + botAccountDesc: "將此帳戶標記為自動化或機器人。", + saving: "儲存中…", + saveProfile: "儲存個人檔案", + nip05VerifiedHandle: "NIP-05 已驗證使用者名稱", + nip05How: "怎麼做?", + extraHandles: "額外使用者名稱", + extraHandlesHint: "選填——最多新增 5 個", + nip05HintEmpty: "一個經過驗證的使用者名稱,如 you@yourdomain.com——Nostr 版的藍色認證標記。會在你的個人檔案上顯示 ✓ 徽章,並解鎖滑手目錄中的「已驗證」篩選。", + nip05Invalid: "請使用類似電子郵件的使用者名稱,例如 you@yourdomain.com——沒有「https://」或空格。", + nip05Checking: "正在檢查你的網域…", + nip05Verified: "已驗證——你的網域確認此使用者名稱屬於你。✓", + nip05Mismatch: "你的網域將此使用者名稱對應到不同的金鑰。請修正你的 .well-known/nostr.json,使其指向此帳戶。", + nip05Unreachable: "暫時無法存取你網域的 /.well-known/nostr.json。一旦你的網域設定正確,已儲存的使用者名稱仍會生效。", + nip05Enter: "輸入你的 NIP-05 使用者名稱。", + freeHandleBefore: "你沒有自己的網域?從 SkateSpots 認領一個免費的", + freeHandleAfter: "使用者名稱。", + uploadLabel: "上傳{{label}}", + previewLabel: "{{label}} 預覽" + }, + security: { + recoveryCopied: "復原碼已複製。請妥善保管。", + savedTitle: "已儲存!", + recoveryDownloaded: "復原碼已下載。請妥善保管。", + downloadFailedTitle: "下載失敗", + downloadFailedDesc: "請改為手動複製。", + loginRequired: "需要登入", + loginRequiredDesc: "登入以存取安全設定。", + backupConfirmedTitle: "備份已確認!✅", + backupConfirmedDesc: "很好!你的金鑰安全了。", + yourRecoveryCode: "你的復原碼", + recoveryCodeDesc: "註冊時沒有儲存?你隨時可以在這裡取得。", + recoveryCodeBefore: "此代碼是", + only: "唯一", + recoveryCodeAfter: "在新裝置或瀏覽器上重新登入的方式。請將它保存在安全之處(密碼管理工具,或寫在紙上)。任何擁有它的人都能控制你的帳戶——切勿分享。", + revealRecovery: "顯示我的復原碼", + qrHint: "用另一個 Nostr 應用程式掃描以登入。請將此畫面保密。", + neverShareHide: "⚠️ 切勿分享。用完後請隱藏。", + hide: "隱藏", + amberNoteBefore: "你正在使用", + amberNoteAfter: "登入。你的復原碼存放在 Amber 內——開啟 Amber 應用程式進行備份。SkateSpots 從不會看到你的金鑰。", + bunkerNoteBefore: "你正在使用", + remoteSigner: "遠端簽署器(bunker)", + bunkerNoteAfter: "登入。你的復原碼由你的簽署器服務持有,而非 SkateSpots。請在那裡備份。", + extensionNoteBefore: "你正在使用", + browserExtension: "瀏覽器擴充功能", + extensionNoteAfter: "登入。你的復原碼存放在擴充功能中——請使用它自帶的備份/匯出功能。SkateSpots 從不會看到你的金鑰。", + otherNote: "你的復原碼由你的簽署器應用程式管理,而非 SkateSpots。請在那裡備份。", + backupWarningTitle: "⚠️ 你備份好助記詞或私鑰了嗎?", + backupWarningBody: "你的金鑰是存取帳戶的唯一方式。如果你弄丟了它們,你就失去了一切——沒有密碼重設!", + iveBackedUp: "我已備份我的金鑰", + backupConfirmed: "✅ 備份已確認", + backupNotConfirmed: "⚠️ 備份未確認", + backupConfirmedStatusDesc: "你已確認你的金鑰已安全備份。", + backupNotConfirmedDesc: "請務必備份你的助記詞或私鑰!", + notSavedYetBefore: "還沒儲存你的復原碼?沒問題——從", + notSavedYetAfter: "上方區塊取得它,妥善保存,然後在下方確認。", + yesBackedUp: "是的,我已備份我的金鑰", + bestPracticesTitle: "金鑰安全最佳實務", + bestPracticesDesc: "如何確保你的 Nostr 帳戶安全", + bp1Title: "把它寫在紙上", + bp1Desc: "實體備份最安全。存放在保險箱等安全的地方。", + bp2Title: "多份備份", + bp2Desc: "將副本保存在不同的安全地點(家中保險箱、銀行保險箱等)", + bp3Title: "切勿分享你的金鑰", + bp3Desc: "真正的 Nostr 應用程式在初次登入後絕不會索取你的 nsec 或助記詞", + bp4Title: "不要以未加密形式儲存在雲端", + bp4Desc: "避免使用 Google Docs、郵件草稿或純文字雲端儲存", + bp5Title: "考慮使用瀏覽器擴充功能", + bp5Desc: "Alby、nos2x 或 Flamingo 會確保你的金鑰安全,絕不將其暴露給網站", + importantReminders: "⚠️ 重要提醒", + rem1: "如果你弄丟金鑰,你將永久失去你的帳戶", + rem2: "任何公司或個人都無法重設你的密碼——連我們也不行", + rem3: "任何擁有你金鑰的人都能完全控制你的帳戶", + rem4: "你的金鑰控制著你在所有應用程式中的全部 Nostr 資料", + recommendedSigners: "🔌 推薦的 Nostr 簽署器", + recommendedSignersDesc: "使用 Nostr 簽署器以獲得更好的安全性和便利性", + recommended: "推薦", + amberDesc: "適用於 Android 的安全 Nostr 簽署器。將你的金鑰安全保存在手機上,簽署事件時不會暴露它們。", + albyDesc: "功能完整的擴充功能,支援 Lightning 錢包、WebLN 和 NWC。", + flamingoDesc: "簡潔乾淨的介面。專注於 Nostr 簽署,無錢包功能。", + nos2xDesc: "為進階使用者打造的極簡輕量擴充功能。", + nostrConnectTitle: "☁️ Nostr Connect(遠端簽署器)", + nostrConnectDesc: "使用遠端簽署器從任何裝置存取你的帳戶", + nostrConnectBody: "Nostr Connect(也稱為「bunker」)讓你將金鑰儲存在安全的伺服器上,並從任何裝置登入。你的金鑰永遠不會離開伺服器,但你可以在任何地方使用你的帳戶!", + nsecAppDesc: "免費、安全的遠端簽署器。建立 bunker:// URI 並在登入時貼上。", + nostrumDesc: "另一個支援行動裝置的遠端簽署器選項。", + howToUse: "💡 使用方法:", + howToUseDesc: "在其中一個服務上建立帳戶,取得你的 bunker:// 連線字串,然後在登入時將它貼到「Nostr Connect」分頁中。" + }, + relayList: { + connected: "已連線", + connecting: "連線中…", + offline: "離線", + removeUrl: "移除 {{url}}", + add: "新增", + publishedTitle: "Relay 清單已發佈", + publishedDesc: "已同步到 Nostr(kind 10002)。", + publishFailedTitle: "發佈 Relay 清單失敗", + invalidUrlTitle: "Relay URL 無效", + invalidUrlDesc: "試試類似 wss://relay.example.com 的位址", + alreadyInList: "Relay 已在你的清單中", + keepReadWriteTitle: "保留讀取或寫入", + keepReadWriteDesc: "一個 Relay 至少需要讀取/寫入中的一項。", + alreadyInThisList: "Relay 已在此清單中", + dmPublishedTitle: "DM Relay 已發佈", + dmPublishedDesc: "NIP-17 收件匣已更新。", + dmPublishFailedTitle: "發佈 DM Relay 失敗", + nip65Title: "Relays(NIP-65)", + nip65DescUser: "點選「讀取 / 寫入」切換。作為你的 kind 10002 清單發佈到 Nostr。", + nip65DescLoggedOut: "點選「讀取 / 寫入」切換。登入以將你的清單發佈到 Nostr。", + noRelays: "還沒有 Relay——在下方新增一個。", + local: "本機", + read: "讀取", + readHint: "從此 Relay 取得內容", + write: "寫入", + writeHint: "將你的事件發佈到此 Relay", + dmTitle: "DM 收件匣 Relay", + dmDesc: "你接收 NIP-17 私訊的地方(kind 10050)。為空時會退回你的寫入 Relay。", + localTitle: "本機 Relay", + localDesc: "僅應用程式內(例如區域網路節點)。用於讀取和寫入;永不發佈。", + blockedTitle: "已封鎖的 Relay", + blockedDesc: "永不連線這些——從每次讀取和寫入中排除。" + }, + relatr: { + searchingTitle: "正在搜尋 Relatr 服務…", + searchingDesc: "正在向 Nostr 查詢 Relatr 個人檔案", + foundTitle: "找到 Relatr 服務!", + foundDesc: "服務:{{name}}", + unknown: "未知", + notFoundTitle: "找不到 Relatr 服務", + notFoundDesc: "嘗試手動輸入公鑰,或查看 https://www.relatr.xyz/", + searchFailedTitle: "搜尋失敗", + searchFailedDesc: "無法向 Nostr 查詢 Relatr 個人檔案", + invalidPubkeyTitle: "公鑰無效", + invalidPubkeyDesc: "請輸入有效的 64 字元十六進位公鑰", + enabledTitle: "Relatr 已啟用!", + enabledDesc: "全域信任分數現已啟用。", + disabledTitle: "Relatr 已停用", + disabledDesc: "不再擷取信任分數。", + title: "Relatr 信任分數", + desc: "全域信任分數有助於識別可靠使用者並減少垃圾訊息", + status: "狀態", + active: "已啟用", + disabled: "已停用", + activeStrong: "Relatr 已啟用。", + activeDesc: "來自 ContextVM 全域網路分析的信任分數有助於識別可靠的滑手並減少垃圾訊息。", + disabledStrong: "Relatr 已停用。", + disabledHint: "啟用它可以從全球 Nostr 網路取得信任分數。", + disable: "停用 Relatr", + enable: "啟用 Relatr", + advancedSettings: "進階設定", + servicePubkey: "Relatr 服務公鑰", + pubkeyPlaceholder: "輸入 64 字元十六進位公鑰…", + searching: "搜尋中…", + autoDiscover: "自動探索", + pubkeyDefault: "預設:ContextVM 官方的 Relatr 服務(npub1dvmc…)", + relayLabel: "Relay(Relatr 發佈分數的地方)", + relayDefault: "預設:wss://relay.contextvm.org(ContextVM 官方 Relay)", + applyChanges: "套用變更", + learnMore: "了解更多:", + website: "Relatr 網站", + github: "Relatr GitHub", + nip85Spec: "NIP-85 規範" + }, + followList: { + unfollow: "取消追蹤", + title: "你的 Nostr 網路", + desc: "管理你追蹤的人。追蹤使用者有助於建立你的信任網路,並決定哪些 Spot 顯示信任徽章。", + following: "追蹤中({{count}})", + followers: "追蹤者({{count}})", + follow: "追蹤", + followHint: "💡 貼上一個 Nostr 公鑰(npub1…)、NIP-05 位址(user@domain.com)或十六進位公鑰", + notFollowing: "你還沒有追蹤任何人", + notFollowingHint: "追蹤滑手以查看他們的 Spot 並顯示 ✅ 已驗證徽章", + trustActiveStrong: "✅ 信任徽章已啟用:", + trustActive: "你追蹤的人建立的 Spot 現在會顯示已驗證徽章。他們朋友建立的 Spot 會顯示受信任徽章。", + noFollowers: "還沒有追蹤者", + noFollowersHint: "分享你的 Nostr 個人檔案以吸引追蹤者!", + howTitle: "💡 追蹤如何影響信任徽章", + verifiedStrong: "✅ 已驗證(綠色):", + verifiedDesc: "你直接追蹤的人建立的 Spot", + trustedStrong: "🟡 受信任(黃色):", + trustedDesc: "你朋友追蹤的人建立的 Spot(兩跳)", + unverifiedStrong: "⚪ 未驗證:", + unverifiedDesc: "與你網路無關的使用者建立的 Spot", + tip: "💡 提示:追蹤活躍的滑板者,以查看更多經過驗證的 Spot 並建立你的信任網路!" + }, + notify: { + enableTitle: "啟用通知", + enableDesc: "有事情需要你處理時讓此裝置震動提醒。", + checkingPermission: "正在檢查權限…", + unsupported: "此裝置在此處不支援通知。重新建置 Android 應用程式以在你的手機上啟用通知。", + denied: "此網站的通知已被封鎖。請在瀏覽器/作業系統設定中允許,然後再試一次。", + backgroundTitle: "背景通知", + backgroundDesc: "即使 SkateSpots 已關閉,也能收到訊息和交易提醒。", + pushUnsupported: "此瀏覽器不支援背景推送。在行動裝置上,將 SkateSpots 新增到主畫面。", + pushPrivacy: "為了在關閉時聯絡到你,當有發給你的金鑰的內容到達時,一個 SkateSpots 通知伺服器會從你的 Relay 收到一個 ping,並將它傳遞到你手機的推送服務。它只能看到你的金鑰有新內容——永遠不知道是誰傳送的或說了什麼,也無法解密你的訊息。依裝置選擇加入。", + bgDeliveryTitle: "背景傳遞(Android)", + bgDeliveryDesc: "在應用程式關閉時檢查新訊息、出價和交易——無需 Google 服務。", + off: "關閉", + standard: "標準(約 15 分鐘)", + fast: "快速(約 5 分鐘)", + bgDeliveryNote: "標準為盡力而為——Android 可能在 Doze 模式下延後它。快速會顯示常駐通知並消耗更多電量。我們的伺服器不會解密任何內容。", + notifyMeAbout: "通知我關於", + couldNotEnable: "無法啟用", + sendTest: "傳送測試通知", + testTitle: "SkateSpots 通知已開啟 🛹", + testBody: "私訊、Zap 或 Crew 邀請就會是這個樣子。", + footerBefore: "提醒是根據你裝置上已有的資料在本機建構,私訊提醒從不解密你的訊息——因此永遠不會要求 Amber 開啟訊息。當", + footerAfter: "關閉時,完全關閉的應用程式無法被觸及,因此提醒會在你下次開啟 SkateSpots 時送達。", + cat_dms_label: "私訊", + cat_dms_hint: "有人傳送私訊給你", + cat_crew_label: "Crew", + cat_crew_hint: "邀請、加入申請和成員確認", + cat_social_label: "Zap、回覆與提及", + cat_social_hint: "回應、轉發、Zap、回覆和活動更新", + cat_newsletter_label: "電子報", + cat_newsletter_hint: "SkateSpots 新動態(僅限訂閱者)", + cat_trades_label: "出價與交易", + cat_trades_hint: "出價、還價和交易確認", + cat_reminders_label: "活動提醒", + cat_reminders_hint: "在你將要參加的活動前一小時提醒(Android 應用程式)" + }, + regionBackfill: { + taggedTitle: "已標記 {{count}} 個位置{{s}}", + taggedSkipped: "{{count}} 個已跳過(無座標或地理編碼無相符)。", + taggedOk: "區域標籤已寫入社群 Relay。", + nothingTitle: "沒有可標記的內容", + nothingDesc: "沒有標記可以進行地理編碼。請稍後再試。", + failedTitle: "回填失敗", + title: "回填區域標籤", + admin: "管理員", + descBefore: "在地理編碼功能存在之前建立的標記有座標但沒有城市/國家標籤,因此地圖會繪製它們,而社群統計只能說「未分類」。這會從每個標記重新推導標籤,並重新發佈", + descStrong: "你自己的", + descAfter: "未標記的 Spot 和 Shop。", + scanning: "正在掃描你的 Spot…", + allTagged: "你擁有的每個 Spot 和 Shop 都已有區域標籤。🎉 任何剩餘的「未分類」標記屬於其他繪圖者——只有他們自己的金鑰才能標記它們。", + countLine: "你有 {{count}} 個 Spot{{s}}/Shop 沒有區域標籤。你的簽署器可能要求逐一核准。", + tagging: "正在標記 {{done}}/{{total}}…", + run: "回填區域標籤", + summary: "{{updated}} 個已更新 · {{skipped}} 個已跳過 · {{failed}} 個失敗" + }, + adminReview: { + title: "審核佇列", + flagged: "{{count}} 個 Spot{{s}} 觸發了垃圾訊號——隱藏或略過。", + clean: "看起來像測試項目或離題標記的 Spot。" + }, + grantPro: { + invalidNpub: "輸入有效的 npub(或十六進位公鑰)", + invalidDays: "天數必須為正數", + grantedTitle: "Pro 已授予 ⚡", + grantedDesc: "{{npub}} 至 {{date}}", + failedTitle: "授予失敗", + title: "授予 Sasquatch Pro", + owner: "擁有者", + desc: "當 Zap 收據遺漏了經過驗證的付款時的手動備援方案。發佈一份擁有者簽署的授予;使用者無法偽造。", + targetPlaceholder: "npub1…(或十六進位)", + grant: "授予" + }, + myData: { + reactionTitle: "{{emoji}} 回應", + deleting: "刪除中…", + requestDeletion: "請求刪除", + selectContentTitle: "選擇要刪除的內容", + selectContentDesc: "選擇你要請求刪除的具體項目。", + all: "全部", + spots: "Spot", + events: "活動", + shops: "Shop", + listings: "刊登資訊", + collections: "收藏集", + lab: "Lab", + posts: "貼文", + reactions: "回應", + selectAll: "全選", + selectAllVisible: "全選可見項目", + selectedCount: "已選 {{count}} 項", + noItemsCategory: "此類別中沒有項目", + decentralizedStrong: "重要:", + decentralizedNote: "Nostr 是去中心化的。Relay 應當遵守刪除請求,但有些可能不會。這並非保證永久刪除。", + deleteCount: "刪除 {{count}} 個項目{{s}}", + noDataTitle: "沒有可匯出的資料", + noDataDesc: "你還沒有發佈任何事件。", + exportedTitle: "資料已匯出!", + exportedDesc: "已下載 {{count}} 個事件為 JSON。", + deletionRequestedTitle: "已請求刪除", + deletionRequestedDesc: "刪除請求已發佈到 Relay。", + deletionRequestedMany: "已請求刪除 {{count}} 個項目。注意:有些 Relay 可能不遵守此請求。", + deletionFailedTitle: "刪除失敗", + deletionFailedDesc: "無法發佈刪除請求。請再試一次。", + loginRequired: "需要登入", + loginRequiredDesc: "登入以查看和管理你的資料。", + title: "我的資料", + desc: "你在 Nostr 網路上的內容。你擁有這些資料——隨時匯出,或請求刪除。", + coachFilmer: "教練/攝影師", + zaps: "Zap", + received: "已收到", + exportAll: "匯出全部資料", + recentActivity: "最近活動", + viewAll: "查看全部({{count}})", + noDataPublished: "還沒有發佈資料", + startBy: "從", + addingASpot: "新增一個 Spot", + aboutYourData: "關於你的資料", + ownDataStrong: "你擁有你的資料。", + ownData: "所有內容都用你的金鑰簽署並儲存在 Nostr Relay 上。沒有任何公司控制它。", + exportAnytimeStrong: "隨時匯出", + exportAnytime: "- 將所有事件下載為 JSON", + portableStrong: "可攜", + portable: "- 在任何 Nostr 應用程式中使用你的金鑰", + selectiveStrong: "選擇性刪除", + selective: "- 精確選擇要刪除的內容", + caveatStrong: "去中心化的注意事項", + caveat: "- 儘管有刪除請求,有些 Relay 可能仍保留資料" + }, + settingsPage: { + seoTitle: "設定 - SkateSpots", + seoDescription: "管理你的 SkateSpots 帳戶設定。", + heading: "設定", + subtitle: "帳戶與應用程式偏好", + editProfile: "編輯個人檔案", + profileRefreshed: "個人檔案已重新整理!", + found: "已找到:{{name}}", + unnamed: "未命名", + profileNotFound: "找不到個人檔案", + notFoundOnRelay: "在任何 Relay 上都找不到。", + refreshFailed: "重新整理失敗", + refreshFailedDesc: "無法連線到 Relay。", + loginToEdit: "登入以編輯你的個人檔案", + noProfileRelays: "我們在 Relay 上找不到個人檔案。如果你之前設定過,請嘗試重新整理。", + checkDisplayName: "一個顯示名稱", + checkPhoto: "一張個人頭像", + checkBio: "一段簡短簡介", + checkLightning: "一個 Lightning 位址,讓人們可以向你 Zap", + checkHandle: "一個免費的 @skate-spots.org 使用者名稱", + finishProfile: "完善你的個人檔案", + addItem: "新增{{item}}", + nip05Title: "NIP-05 驗證", + nip05Desc: "取得一個經過驗證的 Nostr 位址(如 name@domain.com)以建立信任。建立活動、教練檔案和 Shop 時需要。", + freeFromSkateSpots: "SkateSpots 免費提供", + claimHandleBefore: "認領一個類似", + claimHandleAfter: "的使用者名稱——無需註冊、無需費用、無需自己運行網域。在「個人檔案」分頁中認領,然後儲存。", + claimInProfile: "在個人檔案中認領", + nip05Footer: "取得 NIP-05 後,將它填入個人檔案欄位並儲存。", + localRelayOn: "本機 Relay 已開啟", + localRelayOff: "本機 Relay 已關閉", + lookingForCitrine: "正在此裝置上尋找 Citrine…", + noLongerUsing: "不再使用裝置上的 Relay。", + localRelay: "本機 Relay", + citrineOff: "此裝置上更快的讀取與離線備份", + citrineSearching: "正在此裝置上搜尋 Citrine…", + citrineLive: "已連線——正在本機讀取與備份", + citrineWaiting: "已啟用——啟動 Citrine 以連線", + toggleCitrine: "切換本機 Citrine Relay", + citrineDetected: "偵測到 Citrine Relay", + citrineLooking: "正在尋找 Citrine…", + citrineNotDetected: "未偵測到 Citrine", + recheckCitrine: "重新檢查 Citrine Relay", + checking: "檢查中", + recheck: "重新檢查", + chipInstantReads: "即時讀取", + chipWorksOffline: "離線可用", + chipOnDeviceBackup: "裝置上備份", + cantReachStrong: "無法連線到 Citrine。", + cantReachBefore: "請確認已安裝免費的 Citrine 應用程式,並且它的 Relay 已", + started: "啟動", + cantReachAfter: ",然後點選「重新檢查」。它會在你的手機上運行一個私密的 Nostr Relay,用於即時讀取和離線備份。", + citrineStep1Before: "開啟 Citrine → 點選", + start: "啟動", + citrineStep2Before: "回到這裡 → 點選", + getCitrine: "取得 Citrine", + citrinePrivacy: "你的 Stash 和訊息在此處保持端對端加密,就像在其他任何地方一樣。本機 Relay 只是加速並保留一份你裝置上的副本——它永遠不會取代加密。", + communityRelayDisabled: "社群 Relay 已停用", + communityRelayEnabled: "社群 Relay 已啟用", + usingOnlyPersonal: "僅使用你設定的 Relay。", + skateRelayIncluded: "已包含 SkateSpots Relay。", + relays: "Relays", + relayPrivacyBefore: "當你連線時,Relay 可以看到你的", + ipAddress: "IP 位址", + relayPrivacyAfter: "。Tor 可以隱藏它——並且把「免費」VPN 當作警示訊號;它們通常會從你的流量中獲利。", + communityRelay: "社群 Relay", + syncingGlobal: "正在與全球滑板社群同步", + usingOnlyPersonalShort: "僅使用個人 Relay", + appearance: "外觀", + language: "語言", + darkModeOnly: "僅深色模式", + darkModeDesc: "SkateSpots 採用受滑板文化啟發的深色霓虹美學。黑色背景,霓虹粉、青檸和橘色。", + navigation: "導覽", + sasquatchExpanded: "Sasquatch 已展開!🦧 重新整理頁面即可看到他。", + advanced: "進階", + sasquatchGuide: "🦧 Sasquatch 指南", + sasquatchResetDesc: "將新手引導重設為展開檢視", + expandSasquatch: "展開 The Sasquatch", + wallet: "錢包", + loginToWallet: "登入以管理你的錢包", + openWallet: "開啟錢包", + balanceSendReceive: "餘額、傳送、接收", + connectNwc: "連接 NWC 錢包", + account: "帳戶", + security: "安全", + securitySub: "金鑰、簽署、Amber", + nip05Sub: "取得一個經過驗證的 Nostr 位址", + app: "應用程式", + myStash: "我的 Stash", + myStashSub: "私密裝備清單", + relaysSub: "Nostr Relay 連線", + appearanceSub: "語言與主題", + assistant: "助理", + showSasquatch: "顯示 Sasquatch 助理", + showSasquatchDesc: "在地圖和其他畫面上顯示浮動的 Sasquatch 按鈕。", + showMapFooter: "顯示地圖連結列", + showMapFooterDesc: "在地圖底部顯示細長的連結條。", + notifications: "通知", + notificationsSub: "私訊、Crew 和 Zap 的提醒", + coordinator: "協調者", + coordinatorSub: "你的 Cordn 群組伺服器", + data: "資料", + myData: "我的資料", + myDataSub: "匯出、匯入、管理", + advancedSub: "Relatr、Sasquatch、工具", + notLoaded: "未載入", + notLoggedIn: "未登入" + }, + onboarding: { + seoTitle: "開始使用 — SkateSpots", + seoDescription: "加入去中心化的滑板社群。發現 Spot、聯絡教練、傳送 Zap。永久免費。", + homeSetTitle: "首頁已設定 🛹", + homeSetDesc: "地圖現在會在你所在的地區開啟。", + locationFailedTitle: "無法取得你的位置", + locationFailedDesc: "檢查定位權限,或從地圖上選擇你的地區。", + niceTitle: "🎉 很好!", + niceDesc: "你現在了解 Nostr 是如何運作的了。去滑板吧!", + npubCopied: "npub 已複製到剪貼簿。", + saveLoginNow: "儲存你的登入資訊——現在就做", + saveLoginNowDesc: "你的復原碼是回到你帳戶的唯一方式。沒有電子郵件,沒有密碼重設。", + betaBadge: "Beta — 向全世界的滑手開放", + headline1: "滑出", + headline2: "你的世界", + heroBefore: "一個", + decentralized: "去中心化的", + heroAfter: "滑板社群。沒有公司擁有它。沒有演算法埋沒你的 Spot。沒有封禁大錘。只有滑手。", + pillMap: "Spot 地圖", + pillCoaches: "教練與攝影師", + pillEvents: "活動", + pillGear: "買賣 Gear", + pillZaps: "Bitcoin Zap", + pillStash: "Gear Stash", + pillCrews: "Crew", + createFreeAccount: "建立你的免費帳戶", + noEmailNoPassword: "無需電子郵件。無需密碼。永久擁有你的身分。", + findSpots: "尋找附近的 Spot", + addFirstSpot: "新增你的第一個 Spot", + accountCreated: "你已加入!帳戶已建立 ✓", + identityYours: "你的身分歸你所有——儲存在你的金鑰中,而非我們的伺服器上。", + whereSkate: "你在哪裡滑板?", + whereSkateDesc: "設定一次你的首頁地區,地圖每次都會在你的 Spot 處開啟。你的 GPS 永遠不會離開你的裝置。", + useMyLocation: "使用我的位置", + pickOnMap: "在地圖上選擇", + loginSaved: "登入資訊已儲存——你的帳戶可以安全復原了。", + whyBother: "為什麼要這樣做?", + why1Title: "每個 Spot,一張地圖", + why1Body: "階梯、欄杆、DIY、公園——由真正在上面滑的滑手繪製。出發前查看狀態,以免把一次滑板浪費在被驅趕上。", + why2Title: "由滑手打造,而非西裝革履者", + why2Body: "沒有廣告,沒有把垃圾塞到你面前的演算法,沒有資料收集。開源。地圖屬於社群——包括你。", + why3Title: "上鏡就有回報", + why3Body: "標出一個寶地,拍出一段精彩片段,組織一次活動——然後直接在你的錢包收到真實的 Bitcoin Zap。沒有平台抽成,沒有中間人。", + why4Title: "你的帳戶真正屬於你", + why4Body: "一組金鑰就能登入每個 Nostr 應用程式。沒有公司能隨意把你鎖在外面或刪除你的帳戶。把你的身分帶到任何地方。", + everythingFree: "你能做的一切——免費", + featSpots: "探索 Spot", + featSpotsDesc: "包含全球數千個 Spot 的互動地圖", + featLab: "The Lab", + featLabDesc: "尋找附近的教練、攝影師和影片剪輯師", + featEvents: "活動", + featEventsDesc: "比賽、活動、聚會", + featGear: "買 / 賣 Gear", + featGearDesc: "二手滑板 Gear 的點對點市場", + featStash: "我的 Stash", + featStashDesc: "你所擁有的一切的私密加密清單", + featCrews: "Crew", + featCrewsDesc: "與你的 Crew 一起滑——共享 Spot、聊天和活動", + whatIsNostr: "什麼是 Nostr?", + whatIsNostrSub: "為 SkateSpots 提供支援的協定", + nostrBefore: "Nostr 是一個開放協定——像電子郵件,但用於社交應用程式。你的帳戶是一組", + cryptoKeyPair: "加密金鑰對", + nostrAfter: ",歸你所有。沒有任何一家公司控制你的帳戶或資料——你選擇哪些 Relay 儲存它,甚至可以運行自己的。你的身分可在每個 Nostr 應用程式中使用。", + nostrPoint1: "你擁有你的資料和金鑰", + nostrPoint2: "沒有公司能封禁你", + nostrPoint3: "身分處處可用", + nostrPoint4: "直接 Bitcoin 打賞", + deepDive: "深入了解:Nostr 如何運作", + privacyTip: "隱私提示:你的 GPS 永遠不會離開你的裝置。你連線的伺服器(如地圖圖磚)仍能看到你的 IP——如果你想連這個也隱藏,VPN 或 Tor 可以做到。完全選用。", + readPrivacy: "閱讀我們的隱私頁面", + zapsWallet: "⚡ Zap 與錢包", + optional: "選填", + walletDesc: "Zap 是你直接傳送給發佈了精彩 Spot、拍攝了精彩片段或組織了精彩活動的滑手的 Bitcoin 打賞。沒有平台費。沒有中間人。100% 歸他們。", + builtInWallet: "內建 Cashu 錢包", + builtInWalletDesc: "直接在應用程式內接收 Lightning 付款。無需設定。", + balance: "餘額", + connectExternal: "連接外部錢包", + connectExternalDesc: "有 Alby、Mutiny 或其他錢包?透過 NWC 連接它。", + connectViaNwc: "透過 NWC 連接", + loginToConnect: "登入以連接你自己的錢包。", + fiveDollars: "💡 5 美元的 Bitcoin = 數百次 Zap,可撒向整個社群", + commonQuestions: "常見問題", + faq1Q: "SkateSpots 免費嗎?", + faq1A: "100% 免費。瀏覽 Spot、新增位置、尋找教練、建立活動、加入活動——全部免費,永久。如果你想打賞創作者,Bitcoin(Zap)是選用的。", + faq2Q: "什麼是 Nostr,SkateSpots 為什麼使用它?", + faq2Before: "Nostr 是一個用於去中心化應用程式的開放協定——可以把它想像成網際網路本身,不歸任何公司所有。你的 SkateSpots 帳戶是一組加密金鑰對,", + faq2Strong: "歸你所有", + faq2After: "。沒有任何一家公司能封禁你的帳戶或扣押你的資料——你選擇哪些 Relay 儲存你的資料,甚至可以運行自己的。你的身分也能在 Primal、Damus 或 Amethyst 等其他 Nostr 應用程式上使用。", + faq3Q: "nsec 是什麼,為什麼它很重要?", + faq3Before: "你的", + faq3Mid: "是你的私鑰——它是你擁有帳戶的唯一證明。與密碼不同,", + faq3Strong: "沒有「忘記密碼」", + faq3After: "。如果你弄丟了 nsec,你的帳戶就永遠消失了。建立帳戶時,立即下載你的備份並妥善保存(密碼管理工具,或離線寫下)。", + faq4Q: "哪些簽署器/應用程式可與 SkateSpots 搭配使用?", + faq4Desktop: "在桌面端:", + faq4Extensions: "瀏覽器擴充功能。", + faq4Android: "在 Android 上:", + faq4AndroidAfter: "(搭配原生應用程式體驗最佳)。", + faq4Ios: "在 iOS 上:", + faq4IosAfter: "或直接貼上你的 nsec(安全性較低)。", + faq4Note: "你也可以直接貼上 nsec 登入——但使用簽署器擴充功能更安全。", + faq5Q: "我可以在手機上使用 SkateSpots 嗎?", + faq5Before: "可以!SkateSpots 是一個 PWA(漸進式 Web 應用程式)。在手機瀏覽器中造訪", + faq5Mid: ",然後點選", + faq5Em: "「加入主畫面」", + faq5After: "以獲得完整的應用程式體驗。或者從", + faq5End: "下載——一個去中心化應用程式商店。", + faq6Q: "什麼是 Zap?", + faq6A: "Zap 是透過 Lightning Network 傳送的即時 Bitcoin 打賞。當你為一位滑手 Zap 時,sats 會在幾秒內到達他們的錢包——沒有 PayPal,沒有 Venmo,不抽成。拍攝那個四級台階的人直接由粉絲付款。", + faq7Q: "如果 SkateSpots 關停,我的 Spot 會被刪除嗎?", + faq7A: "不會。你的 Spot 會發佈到 Nostr Relay——任何人都可以運行的分散式伺服器。即使 SkateSpots 這個產品明天消失,你的資料仍會存在於 Relay 上,任何 Nostr 客戶端都能顯示它。", + faq8Q: "我可以新增位於私人土地上的 Spot 嗎?", + faq8A: "可以,但要用常識判斷。位於私人土地上的 Spot 應相應標註,讓滑手知道情況。SkateSpots 對擅自闖入不承擔責任——始終尊重地主和當地人。", + faq9Q: "我如何回報 bug 或提供回饋?", + faq9Before: "在 Nostr 上直接私訊 SkateSpots 團隊,或聯絡我們的 Beta 協調者:", + faq9Link: "Beta 回饋 → cordn.net", + readyToShred: "準備好開滑了嗎?", + stopScrolling: "別再滑了。下載應用程式。找個 Spot。開滑。", + exploreSpots: "探索 Spot", + betaFeedbackTitle: "Beta — 我們想要你的回饋", + betaFeedbackDesc: "SkateSpots 正在積極開發中。你可能會遇到粗糙的邊緣——那是我們的問題,不是你的。回報 bug、提出功能建議、告訴我們哪裡不好。", + betaCoordinator: "Beta 協調者", + betaCoordinatorDesc: "cordn.net → 傳訊息給我們", + dmOnNostr: "在 Nostr 上私訊", + fixSameDay: "發現 bug?我們當天修復。你的回報讓應用程式對每位滑手都更好。", + relaySetup: "Relay 設定" + }, + relayEdu: { + understandingNostr: "了解 Nostr", + stepOf: "第 {{current}} 步,共 {{total}} 步", + step1Title: "了解 Relay", + step1Desc: "把 Relay 想像成分享 Spot 消息的滑板店", + you: "你", + relays: "Relays", + skaters: "滑手", + s1Good1: "沒有公司擁有你的帳戶", + s1Good1Desc: "你的身分存在於多個 Relay 伺服器上", + s1Good2: "你掌控資料儲存在哪裡", + s1Good2Desc: "你的貼文會在你選擇的 Relay 間同步——選擇你自己的,或自己運行一個", + s1Warn: "Relay 營運者可以看到公開貼文", + s1WarnDesc: "把它想像成在佈告欄上發文", + step2Title: "公開 vs 私密", + step2Desc: "了解什麼可見、什麼已加密", + publicTitle: "公開(任何人都能看到)", + pub1: "你新增到地圖的 Spot", + pub2: "評價和留言", + pub3: "你的個人檔案資訊(名稱、圖片)", + pub4: "你追蹤的人", + privateTitle: "私密(已加密)", + priv1: "私訊", + priv2: "錢包通訊", + noteStrong: "注意:", + note: "貼文可能會永久儲存在 Relay 上。發文前想一想——就像現實生活一樣!", + step3Title: "你的金鑰 = 你的帳戶", + step3Desc: "這是最重要的一點", + secretKeyTitle: "你的私鑰(nsec)", + secretKeyDesc: "把它想像成你的滑板——絕不借給任何人。它證明你擁有你的帳戶。", + s3Bad1: "如果遺失,你的帳戶無法復原", + s3Bad2: "沒有「忘記密碼」——沒人能重設它", + s3Good: "備份並安全保存", + publicKeyTitle: "你的公鑰(npub)", + publicKeyDesc: "這就像你的使用者名稱——隨意分享,讓別人找到你!", + inControl: "🔐 掌控權在你——沒有公司能把你鎖在外面!", + skip: "跳過", + gotIt: "明白了!" + }, + about: { + seoTitle: "關於 - SkateSpots", + seoDescription: "了解 SkateSpots 以及我們建立去中心化滑板社群的使命。", + npubCopied: "npub 已複製到剪貼簿。貼到你喜歡的 Nostr 客戶端以傳送私訊。", + bugReport: "🐛 Bug 回報", + bugWhatHappened: "發生了什麼:", + bugExpected: "我期望的是:", + bugSteps: "重現步驟:", + aboutWord: "關於", + heroBefore: "與世界各地的本地滑板圈建立聯繫。", + skaterOwned: "滑手擁有的資料", + heroAfter: ",社群營運的 Relay。", + viewStats: "查看社群統計", + missionTitle: "我們的使命", + mission1: "SkateSpots 幫助滑板者發現 Spot、在 The Lab 與專業人士聯繫、組織活動——這一切都不受公司控制。真正的滑板發生在離線,這個工具只是把你與之連接起來。", + mission2: "滑板知識應當與社群同在,而不是鎖在公司應用程式裡。這就是為什麼 SkateSpots 運行在 Nostr 上——一個基於 Relay 的系統,滑手掌控自己的資料,選擇哪些 Relay 儲存它,甚至可以運行自己的。沒有任何一家公司擁有這張地圖。", + whyNostr: "為什麼是 Nostr?", + why1Title: "社群掌控", + why1Desc: "你的 Spot 存在於社群 Relay 上。滑手運行伺服器,而不是公司。", + why2Title: "你擁有你的資料", + why2Desc: "你的 Nostr 身分歸你所有。把它帶到任何 Nostr 應用程式——沒有鎖定。", + why3Title: "Bitcoin 整合", + why3Desc: "用 Bitcoin 直接為創作者 Zap。沒有平台抽走 30%。", + why4Title: "開源", + why4Desc: "公開建構。任何人都可以貢獻或 fork 程式碼。", + getInvolved: "參與其中", + getInvolvedDesc: "SkateSpots 是開源且由社群驅動的。貢獻程式碼、分享 Spot,或幫助他人開始。", + betaTitle: "Beta 測試", + betaDesc: "親愛的使用者!感謝你參與 SkateSpots 的 Beta 測試。請注意,應用程式仍處於 Beta 階段,可能存在 bug 或安全問題。如果你遇到任何問題,或想回報 bug/問題,請聯絡我們!", + giveFeedback: "給我們回饋:", + copyNpub: "複製 npub", + reportBug: "回報 Bug", + viewProfile: "查看個人檔案", + downloadApp: "下載應用程式", + downloadAppDesc: "透過 Zapstore 在 Android 上安裝 SkateSpots——開源、Bitcoin 原生的應用程式商店。", + getOnZapstore: "在 Zapstore 取得", + credits: "致謝", + creditPoweredBy: "技術支援:", + creditNostr: "去中心化協定", + creditCrewChat: "Crew 聊天由", + creditCordn: "端對端加密群聊", + creditEcash: "Ecash 由", + creditCashu: "用於 Lightning 的 Chaumian ecash", + creditWalletConnect: "錢包連接由", + creditNwc: "Nostr Wallet Connect(NIP-47)", + creditSigning: "在 Android 上簽署使用", + creditAmber: "適用於 Android 的 Nostr 簽署器", + creditMapData: "Bitcoin 地圖資料來自", + creditBtcmap: "接受 Bitcoin 的場所", + creditCrowdfunding: "群眾募資", + creditAngor: "去中心化 Bitcoin 群眾募資", + creditDistributed: "發佈於", + creditZapstore: "開源應用程式商店", + creditTrust: "信任與 Crew 聊天由", + creditContextvm: "Relatr 信任分數與加密 Crew 聊天協調", + stillQuestions: "還有問題?", + stillQuestionsDesc: "Sasquatch 是我們的 AI 嚮導——由即時 SkateSpots 資料驅動。向他詢問 Spot、活動、教練、Gear,或任何東西如何運作。", + askSasquatch: "詢問 The Sasquatch", + poweredBy: "技術支援:", + decentralized: "去中心化", + communityOwned: "社群擁有" + }, + faq: { + seoTitle: "常見問題 - SkateSpots", + seoDescription: "向 The Sasquatch 詢問關於 SkateSpots 的任何問題。", + greeting: "嘿!我是 The Sasquatch 🦧——關於 SkateSpots 的任何問題都可以問我。Spot、活動、Gear、錢包、隱私、Nostr——我都能幫你。你想知道什麼?", + gotQuestions: "有問題?", + heroDesc: "詢問 The Sasquatch——他對 SkateSpots、Nostr、Bitcoin 和滑板無所不知。", + askTitle: "詢問 The Sasquatch", + askDesc: "The Sasquatch 已在畫面左下角開啟——只需點選它並輸入你的問題。他可以即時存取 Spot、活動、教練和天氣。", + askQuestion: "在 SkateSpots 上你能幫我什麼?", + openSasquatch: "開啟 The Sasquatch", + commonQuestions: "常見問題——點選提問", + quickAnswers: "快速解答", + footerHint: "The Sasquatch 使用來自 SkateSpots Relay 的即時 Nostr 資料 + AI 來回答你的問題。🛹", + chip1Label: "什麼是 SkateSpots?", + chip1Q: "什麼是 SkateSpots,它是如何運作的?", + chip2Label: "我如何新增一個 Spot?", + chip2Q: "我如何向地圖新增一個滑板 Spot?", + chip3Label: "什麼是 Zap?", + chip3Q: "什麼是 Zap?", + chip4Label: "它免費嗎?", + chip4Q: "SkateSpots 使用免費嗎?", + chip5Label: "什麼是 My Stash?", + chip5Q: "什麼是 My Stash?", + chip6Label: "我如何登入?", + chip6Q: "我如何登入或建立帳戶?", + chip7Label: "什麼是 Nostr?", + chip7Q: "什麼是 Nostr?", + chip8Label: "隱私與資料", + chip8Q: "在 SkateSpots 上哪些資料是公開的,哪些是私密的?", + chip9Label: "如何出售 Gear?", + chip9Q: "我如何在 SkateSpots 上出售 Gear?", + chip10Label: "什麼是 The Lab?", + chip10Q: "什麼是 The Lab?", + fact1Label: "世界各地的滑板 Spot", + fact1Value: "發現並新增", + fact2Label: "Bitcoin Lightning Zap", + fact2Value: "100% 免費", + fact3Label: "基於 Nostr 去中心化", + fact3Value: "你擁有你的資料", + fact4Label: "私密 Gear 清單", + fact4Value: "加密 Stash", + s1Q: "什麼是 SkateSpots?", + s1A: "一個基於 Nostr 建構的去中心化滑板地圖和社群。發現 Spot、尋找教練和攝影師、加入 Crew、發佈活動、買賣 Gear——中間沒有公司。", + s2Q: "我如何新增一個 Spot?", + s2A: "點選地圖,或使用 + / 「新增 Spot」按鈕,然後放置標記並填寫詳情。你需要一個免費的 Nostr 帳戶(點選 登入 → 建立帳戶——無需電子郵件)。", + s3Q: "什麼是 Zap?", + s3A: "Zap 是 Bitcoin Lightning 打賞。你可以為你欣賞的 Spot、活動、Crew 和人 Zap。它們透過 Lightning 直接到達收件人——SkateSpots 從不持有你的資金。", + s4Q: "它免費嗎?", + s4A: "是的。建立帳戶、新增 Spot 和瀏覽都是免費的。選用付費附加項(如精選刊登)和打賞(Zap)由人與人之間直接支付。", + s5Q: "哪些資料是公開的?", + s5A: "你發佈的任何內容——Spot、活動、你的個人檔案——都在 Nostr Relay 上公開。你的私訊和你的 Stash 是端對端加密的。詳情請參閱隱私頁面。", + s6Q: "什麼是 The Lab?", + s6A: "The Lab 是你尋找可以僱用或學習的人的地方:教練、訓練師、攝影師、影片剪輯師、平面攝影師、建造者、藝術家等等。" + }, + privacy: { + seoTitle: "隱私 — SkateSpots", + seoDescription: "SkateSpots 如何處理你的資料:你的 GPS 留在你的裝置上,你發佈的 Spot 是公開的,以及如果你願意,如何用 VPN 或 Tor 隱藏你的 IP。", + heroBefore: "你的", + heroHighlight: "隱私", + heroDesc: "沒有追蹤,沒有廣告,沒有資料販賣。以下確切說明什麼留在你的裝置上、什麼是公開的,以及如果你想,如何進一步鎖定一切。", + locationTitle: "你的位置留在你的裝置上", + locationBefore: "當你點選", + nearMe: "「我附近」,", + locationAfter: "你的 GPS 位置在裝置上讀取,僅用於將地圖置中並排序附近的 Spot。", + locationGood1: "它永遠不會發佈到 Nostr。", + locationGood2: "它永遠不會傳送給 SkateSpots——沒有任何 SkateSpots 伺服器收集它。", + locationGood3: "它永遠不會與任何第三方分享。", + locationGood4: "在原生應用程式上,我們直接使用你手機自己的定位系統並跳過 Google Play 服務——因此它在去 Google 化的手機(GrapheneOS、/e/OS)上也能運作,Google 永遠看不到它。", + weatherBefore: "天氣預設關閉。當你開啟時,它會查詢", + weatherEm: "Spot 的", + weatherAfter: "公開位置——而不是你的。", + publicTitle: "設計上公開的內容", + publicDesc: "SkateSpots 是一張共享地圖,因此有些東西本就供所有人查看。當你選擇發佈它們時,這些內容在 Nostr 網路上是公開的:", + public1Strong: "你新增的 Spot", + public1: "——包括它們的座標。如果你在精確位置新增一個 Spot,該位置就會公開。在自己家車道上放置標記前請三思。", + public2Strong: "評價、留言和你的公開個人檔案", + public2: "(名稱、圖片)。", + public3: "你追蹤的人,以及公開回應。", + public4Strong: "Zap", + public4: "預設公開:一次 Zap 會將你的帳戶——通常是你的 Lightning 位址——與你付費的貼文以及打賞本身關聯起來。如果你不想這樣,你的錢包可以匿名傳送。", + publicNoteBefore: "VPN 或 Tor", + notWord: "不會", + publicNoteAfter: "隱藏你發佈內容的內容——Spot 的座標無論如何都是公開的。隱私工具隱藏的是你的網路身分(你的 IP),而不是你選擇發佈的東西。", + encryptedTitle: "私密且加密的內容", + enc1Strong: "私訊", + enc1Mid: "和", + enc1Strong2: "Crew 聊天", + enc1: "是端對端加密的(NIP-17)。只有參與者才能讀取它們。", + enc2Strong: "My Stash", + enc2: "——你的私密 Gear 清單——加密到你自己的金鑰。", + enc3Strong: "僅限 Crew 成員", + enc3: "可以選擇僅對自己的 Crew 同伴可見。", + ipTitle: "離開你裝置的東西:你的 IP", + ipBefore: "像每個網站一樣,SkateSpots 通訊的伺服器能看到你的", + ipAddress: "IP 位址", + ipAfter: "(你所在區域的大致指示)。這對任何網頁或地圖應用程式都是正常的,並非我們獨有。這些伺服器是:", + ipTileStrong: "地圖圖磚", + ipTile: "(OpenStreetMap)——看到你的 IP 以及你查看地圖的哪個區域。", + ipGeoStrong: "Spot/Shop 地理編碼", + ipGeo: "——當你建立或編輯一個 Spot 或 Shop 時,其座標會傳送到 OpenStreetMap Nominatim 以填寫城市/國家標籤。當你開啟社群統計時,沒有位置標籤的標記座標會傳送到 BigDataCloud,以便按區域分組(快取在你的裝置上——每個標記至多一次)。兩者都會看到你的 IP。這些是你放置的標記/公開標記座標,從來不是你裝置的即時 GPS。", + ipPushStrong: "背景通知", + ipPush: "(選用)——如果你啟用它們,一個 SkateSpots 推送伺服器會看到你的金鑰收到了某些內容以及何時收到(永遠不知道是誰傳送的或說了什麼——訊息保持加密),並由你的作業系統推送服務(Google/Mozilla/Apple)遞送提醒。", + ipBtcStrong: "Bitcoin 場所", + ipBtc: "(BTCMap,當你開啟該圖層時)——看到你的 IP 和你正在查看的區域。", + ipRelayStrong: "Nostr Relay", + ipRelay: "——當應用程式讀取或發佈時看到你的 IP。", + ipMintStrong: "Cashu 薄荷", + ipMint: "——當你的錢包傳送、接收或熔化時看到你的 IP。", + ipRouteStrong: "路線", + ipRoute: "(OSRM,以及用於大眾運輸的 Transitous)——接收你請求的任何路線的起點和終點,而不只是你的 IP。路線規劃保留在應用程式內:你的起點和目的地永遠不會交給 Google 或 Apple 地圖。", + ipWeatherStrong: "天氣", + ipWeatherMid: "(Open-Meteo,選用)以及", + ipUploadStrong: "圖片上傳", + ipWeather: "(Blossom),當你使用它們時。", + ipAiStrong: "Sasquatch AI", + ipAi: "——你的訊息會傳送到我們自己的伺服器,然後再傳送到模型供應商。", + ipLink1: "由於你在同一連線上傳送公鑰(npub),Relay 可以將你的 IP 與你關聯——不只是「有人連線了」,而是「這個人,來自這個位址」。", + ipShieldBefore: "我們確實屏蔽了一樣東西:", + ipMintsStrong: "薄荷目錄", + ipShieldAfter: "透過我們的伺服器取得,因此 MintRadar 永遠看不到你的 IP。", + vpnTitle: "想要更多隱私?VPN 或 Tor(選填)", + vpnDesc: "對大多數滑手來說這並非必要——但如果你想對上述伺服器隱藏你的 IP 和大概位置,有兩個免費選項:", + vpnReputable: "🛡️ 一個信譽良好的 VPN", + vpnReputableDesc: "將你的 IP 隱藏在 VPN 的伺服器後面。簡單又快速。使用你付費且信任的;免費 VPN 通常會從你的流量中獲利,所以把「免費」當作警示訊號。", + torBrowser: "🧅 Tor 瀏覽器", + torDesc: "免費、最大程度的 IP 隱私,透過多個 Relay 路由。較慢——地圖和某些 Nostr Relay 可能延遲或封鎖 Tor 出口節點。非常適合格外謹慎的人。", + readThis: "讀一讀,以免受騙", + caveat1Before: "VPN/Tor 隱藏你的", + ipWord: "IP", + caveat1: "——而不是你發佈的 Spot。無論你是否使用 VPN,你家的標記都是公開的。", + caveat2Before: "如果你的目標是保持匿名,", + nearMeGps: "「我附近」 / 瀏覽器 GPS", + caveat2: "就不要啟用——精確 GPS 會覆蓋任何 IP 隱藏。", + caveat3: "沒有工具能讓你完全「匿名」。這些只是減少伺服器能推斷出的關於你網路位置的資訊——僅此而已。", + keysTitle: "你的金鑰,你的帳戶", + keysBefore: "你的帳戶是一個歸你所有的加密金鑰對。最安全的登入方式是使用", + signer: "簽署器", + keysAfter: "(Alby、nos2x,或 Android 上的 Amber),這樣你的私鑰永遠不會被貼進應用程式。", + keysCaveatBefore: "如果你直接貼上", + keysCaveatAfter: ",它會儲存在瀏覽器中。盡可能改用簽署器擴充功能,並將你的 nsec 備份安全地離線保存。", + footerBefore: "有疑問?在應用程式內詢問", + sasquatchName: "The Sasquatch", + footerMid: ",或閱讀", + gettingStarted: "入門指南", + about: "關於" + }, + license: { + seoTitle: "授權條款 - SkateSpots", + seoDescription: "SkateSpots 授權條款。你可以自由地滑板。", + tagline: "滑板、賺錢、玩得開心,無論你在哪裡都花掉 Sats。", + copyright: "SkateSpots 貢獻者與社群", + licenseLabel: "授權條款", + freeLine1: "你可以自由地", + freeLine2: "滑板", + body: "這個專案是開放的。分享它、fork 它、在它之上建構、滑它。街道屬於每個人。這段程式碼也是。繼續滑板,玩得開心,學習招式,支持建構者,然後再滑一次。", + builtBefore: "用 ❤️ 建構於", + builtMid: "· 技術支援:", + lightning: "Bitcoin Lightning ⚡", + viewSource: "查看原始碼", + aboutSkateSpots: "關於 SkateSpots", + supporters: "支持者" + }, + glossary: { + seoTitle: "招式詞彙表 · SkateSpots", + seoDescription: "完整的滑板詞彙表——{{count}} 個條目,涵蓋翻板、研磨、滑行、抓板、騰空、邊緣招式、手撐、自由式、U 池術語、站位與硬體,並附別名。", + heading: "招式詞彙表", + subheading: "{{count}} 個條目 · 招式、U 池、自由式、站位與硬體", + searchPlaceholder: "搜尋招式或別名——tre flip、crooks、method…", + clearSearch: "清除搜尋", + all: "全部", + results: "{{count}} 個結果{{s}},關於", + noMatch: "沒有相符的招式。試試「tre flip」、「crooks」或「melon」這樣的別名。", + tricksCount: "{{count}} 個招式", + footerBefore: "知道我們遺漏的招式或別名?每個圈子對招式的叫法都不同——聯絡", + sasquatch: "The Sasquatch 🦧", + footerAfter: "告訴我們。" + }, + signers: { + seoTitle: "簽署器應用程式 - 保護你的 Nostr 金鑰 | SkateSpots", + seoDescription: "了解可確保你 Nostr 金鑰安全的簽署器應用程式。為 Android、iOS 或桌面瀏覽器找到最佳選擇。", + securityGuide: "安全指南", + protect: "保護你的", + nostrKeys: "Nostr 金鑰", + heroDesc: "簽署器應用程式透過在不暴露私鑰的情況下簽署事件來確保其安全。與其把金鑰貼進每個應用程式,不如讓簽署器安全地處理。", + whySignerStrong: "為什麼要使用簽署器?", + whySigner: "你的 Nostr 私鑰就像一個永遠無法變更的密碼。簽署器應用程式確保它的安全,同時讓你使用任何 Nostr 應用程式。", + androidTitle: "Android 簽署器", + androidDesc: "適用於 Android 裝置(包括 GrapheneOS)的原生簽署器應用程式。", + iosTitle: "iOS 簽署器", + iosDesc: "適用於 iPhone 和 iPad 使用者的簽署器選項。", + browserTitle: "瀏覽器擴充功能", + browserDesc: "用於在網頁應用程式上簽署的桌面瀏覽器擴充功能。", + recommended: "推薦", + yourPlatform: "你的平台", + get: "取得 {{name}}", + protocolsTitle: "了解協定", + nip07Desc: "瀏覽器擴充功能標準。擴充功能將簽署能力注入網頁應用程式。Alby、nos2x、Flamingo 及類似擴充功能使用它。", + nip46Desc: "遠端簽署協定(「bunker」)。你的簽署器應用程式在不分享金鑰的情況下核准其他應用程式的請求。Nsec.app、Nostria 和 Nowser 使用它。", + nip55Desc: "Android 專用的簽署器協定。原生應用程式可以在不暴露金鑰的情況下向 Amber 請求簽署。最無縫的 Android 體驗。", + whichChoose: "該選哪個?", + chooseAndroid: "Android:", + chooseAndroidDesc: "原生應用程式用 Amber(NIP-55)", + chooseIos: "iOS:", + chooseIosDesc: "為最佳相容性用 Nsec.app(NIP-46)", + chooseDesktop: "桌面端:", + chooseDesktopDesc: "Alby、nos2x 或 Flamingo(NIP-07)", + amberDesc: "專注於安全和易用性的原生 Android 簽署器。Android 使用者的最佳選擇。", + nsecAppDesc: "跨平台遠端簽署器,充當你金鑰的安全保險庫。", + nostriaDesc: "將金鑰儲存在裝置安全儲存區中的遠端簽署器應用程式。", + nowserDesc: "支援瀏覽器擴充功能和遠端簽署協定的多重驗證簽署器。", + nsecAppIosDesc: "iOS 的最佳選擇。將它作為遠端簽署器與任何 Nostr 客戶端搭配使用。", + nowserTfDesc: "透過 TestFlight 提供的 iOS 簽署器,簽署能力與 Android 類似。", + nostriaIosDesc: "在你裝置上安全儲存金鑰的遠端簽署器。", + nos2xDesc: "用於簽署 Nostr 事件的簡單可靠的瀏覽器擴充功能。", + albyDesc: "內建 Nostr 金鑰管理和 WebLN 的 Bitcoin Lightning 錢包。", + flamingoDesc: "專注於 Nostr、介面簡潔的瀏覽器擴充功能。", + kiwiDesc: "在 Android/GrapheneOS 上,使用 Kiwi 瀏覽器載入 nos2x 或 Alby 擴充功能。", + fNativeApp: "原生應用程式", + fMultiKey: "多金鑰支援", + fEventSigning: "事件簽署", + fSecureStorage: "安全金鑰儲存", + fRemoteSigning: "遠端簽署", + fAnyClient: "適用於任何客戶端", + fCrossDevice: "跨裝置同步", + fMultiKeySupport: "多金鑰支援", + fNip07: "支援 NIP-07", + fNip46: "支援 NIP-46", + fFlexibleSigning: "彈性簽署", + fNativeIos: "原生 iOS 應用程式", + fLightweight: "輕量", + fEasyToUse: "易於使用", + fChromeSupport: "支援 Chrome/Brave/Edge", + fLightningPayments: "Lightning 付款", + fNostrSigning: "Nostr 簽署", + fWebln: "支援 WebLN", + fNwc: "支援 NWC", + fCleanUi: "簡潔介面", + fPrivacyFocused: "注重隱私", + fExtensionMobile: "行動裝置支援擴充功能", + fFullBrowser: "完整瀏覽器體驗", + fGraphene: "可在 GrapheneOS 上運行" + }, + betaDisclaimer: { + title: "注意——這是 Beta 版", + subtitle: "在你加入前,先說幾句。", + ossTitle: "開源且實驗性", + ossBody: "由社群公開建構。隨意探索、fork 它、把它弄壞。", + betaTitle: "Beta 階段——未經稽核", + betaBody: "程式碼尚未經過正式的安全稽核。Bug 在所難免。", + moneyTitle: "處理真實的 Bitcoin 與 Lightning", + moneyBody: "使用它的資金風險自負。只存入你能承受損失的部分。", + finePrint: "不提供任何形式的擔保。你對自己的資金和金鑰負全部責任。", + viewCode: "查看程式碼", + accept: "明白了,讓我進去" + } + } +}; export default zhTWBatch3; diff --git a/src/i18n/zh-TW/batch4.ts b/src/i18n/zh-TW/batch4.ts index 56570b9..339cced 100644 --- a/src/i18n/zh-TW/batch4.ts +++ b/src/i18n/zh-TW/batch4.ts @@ -1,4 +1,1120 @@ -/** zh-TW — batch 4. Filled by the translation pass; empty until then. */ -const zhTWBatch4 = {}; +/** + * 繁體中文(Traditional Chinese)— batch 4:`walletUi` + * (wallet、Cashu、escrow、privacy、mints、zaps、collections、app shop、 + * newsletter、stats、leaderboards、supporters、moderation、profile、Stash)。 + * 滑板硬體、招式名稱與品牌名詞保留英文。 + */ +const zhTWBatch4 = { + walletUi: { + page: { + title: "錢包", + subtitle: "Bitcoin Lightning + Cashu", + manage: "管理", + getAWallet: "獲取錢包", + learnPlanB: "在 Plan B Academy 瞭解更多", + walletMinibits: "移動端 Cashu · NWC", + walletAlby: "瀏覽器擴充套件 · WebLN + NWC", + walletZeus: "自託管 Lightning", + walletCoinos: "網頁版 · 隨處可用", + whatAreZaps: "什麼是 Zaps?", + whatAreZapsShort: "什麼是 zaps?", + zapsDesc: "即時的 Bitcoin Lightning 支付。向任何滑手、場地建立者或教練傳送 sats —— 沒有中間商,平臺不抽成。", + instant: "即時", + instantDesc: "數秒內結算", + flexible: "靈活", + flexibleDesc: "你的錢包,你的金鑰", + private: "私密", + privateDesc: "Cashu 隱藏付款人身份", + direct: "直接", + directDesc: "價值直達創作者", + loginRequired: "需要登入", + loginRequiredDesc: "使用你的 Nostr 帳戶登入,連線 Lightning 錢包並開始 Zap。", + browseMints: "瀏覽 Cashu mints" + }, + modal: { + walletName: "錢包名稱(可選)", + walletNamePlaceholder: "我的 Lightning 錢包", + connectionUri: "連線 URI", + spendLimitTitle: "請先設定消費限額", + spendLimitBody1: "此字串允許 SkateSpots 從你的錢包支付 Lightning 帳單。在你的錢包應用中,為此連線設定一個小額", + dailyBudget: "每日預算", + spendLimitBody2: "(例如幾千 sats),並僅啟用", + spendLimitBody3: "切勿貼上無預算上限的連線。你可以隨時在錢包中撤銷它。", + addWallet: "新增錢包", + nwcConnection: "NWC 連線", + lightningWallet: "Lightning 錢包", + pasteNwc: "貼上你的 NWC 連線字串以傳送 zaps", + connectWallet: "連線錢包", + browserExtension: "瀏覽器擴充套件(WebLN)", + autoDetected: "已安裝則自動檢測", + ready: "就緒", + notFound: "未找到", + getNwcFrom: "獲取 NWC 來源:", + connectionRequired: "需要連線 URI", + connectionRequiredDesc: "請輸入有效的 NWC 連線 URI。", + activeChanged: "已切換當前錢包", + activeChangedDesc: "所選錢包現在用於傳送 zaps。", + connectNwc: "連線 NWC 錢包", + connectNwcDesc: "輸入來自相容錢包的連線字串。", + connect: "連線", + connecting: "連線中……", + walletSettings: "錢包設定", + connectDesc: "連線你的 Lightning 錢包,立即傳送 zaps。" + }, + cashu: { + title: "Cashu 錢包", + desc: "內建 ecash 錢包 —— 無需外部設定", + initializing: "正在初始化錢包……", + walletError: "錢包錯誤", + balance: "餘額", + balanceAria: "錢包餘額 {{amount}} sats", + activeMint: "當前 mint", + selectMint: "選擇 mint", + receive: "接收", + send: "傳送", + receiveViaLightning: "⚡ 透過 Lightning 接收", + amountSats: "金額(sats)", + generateInvoice: "生成帳單", + generating: "生成中……", + or: "或", + receiveCashu: "🥜 接收 Cashu 代幣", + scanQr: "掃描二維碼", + pasteCashu: "貼上 Cashu 代幣(cashu...)", + receiveToken: "接收代幣", + receiving: "接收中……", + createCashu: "🥜 建立 Cashu 代幣", + createToken: "建立代幣", + creating: "建立中……", + payInvoice: "⚡ 支付 Lightning 帳單", + pasteInvoice: "貼上 Lightning 帳單(lnbc...)", + payInvoiceBtn: "支付帳單", + processing: "處理中……", + payAddress: "📧 支付 Lightning Address", + sendToAddress: "傳送到地址", + sending: "傳送中……", + recentActivity: "近期活動", + receivedLightning: "已接收 ⚡ Lightning", + sentLightning: "已傳送 ⚡ Lightning", + sentToken: "已傳送 🥜 代幣", + receivedToken: "已接收 🥜 代幣", + whatIsCashu: "什麼是 Cashu?", + whatIsCashuDesc: "Cashu 是由 Bitcoin Lightning 支援的電子現金。把它看作瀏覽器中持有的 Bitcoin 代幣。", + benefitOffline: "在滑板場地離線也能用", + benefitInstant: "即時點對點支付", + benefitPrivacy: "注重隱私(mints 無法追蹤你)", + benefitRedeemable: "始終可兌換為 Lightning sats", + findMints: "在 mintradar.pedani.eu 查詢 mints", + backupTitle: "備份你的錢包", + backupDesc: "你的錢包由 12 個單詞的恢復短語保護。請妥善儲存 —— 如果你清除瀏覽器資料,將需要它來恢復餘額。", + viewRecovery: "檢視恢復短語", + backupNote: "這就像你的 Nostr nsec —— 請保密並做好備份!", + tokenReceived: "已接收代幣", + tokenReceivedDesc: "Cashu 代幣兌換成功!", + receiveFailed: "接收失敗", + unknownError: "未知錯誤", + requestUnsupported: "尚不支援 Cashu 請求", + requestUnsupportedDesc: "此錢包尚無法支付 Cashu(creq)請求 —— 請改要 Lightning 帳單或地址。", + onchainUnsupported: "此處不支援鏈上", + onchainUnsupportedDesc: "這是 Bitcoin 地址。此錢包僅傳送 Cashu 代幣和 Lightning 支付。", + nostrProfile: "這是 Nostr 個人資料", + nostrProfileDesc: "掃描 Cashu 代幣、Lightning 帳單或 Lightning Address以支付。", + clinkUnsupported: "尚不支援此支付碼", + clinkUnsupportedDesc: "此錢包尚無法支付 CLINK 碼。請改用 Lightning 帳單或地址。", + unrecognizedQr: "無法識別的二維碼", + unrecognizedQrDesc: "掃描 Cashu 代幣、Lightning 帳單或 Lightning Address。", + invalidAmount: "金額無效", + invalidAmountDesc: "請輸入有效金額", + paymentSent: "支付已傳送", + paymentSentDesc: "已向 {{address}} 傳送 {{amount}} sats", + paymentFailed: "支付失敗", + copied: "已複製", + copiedDesc: "{{label}} 已複製到剪貼簿", + receiveSats: "接收 {{amount}} sats", + payInvoiceHint: "從任意 Lightning 錢包支付此帳單", + invoiceQrAlt: "帳單二維碼", + lightningInvoice: "Lightning 帳單", + invoiceLabel: "帳單", + waiting: "⏳ 等待支付……", + tokenReady: "代幣已就緒待傳送", + shareToken: "將此代幣分享給收款人", + tokenQrAlt: "代幣二維碼", + cashuToken: "Cashu 代幣", + tokenLabel: "代幣", + copyToken: "複製代幣", + tokenWarning: "任何持有此代幣的人都能領取 —— 請像對待現金一樣!", + browser: { + title: "內建 Ecash 錢包", + appOnly: "僅限應用", + desc: "自託管 Cashu ecash,由 Bitcoin Lightning 驅動", + unlockTitle: "在 SkateSpots 應用中解鎖完整錢包", + unlockDesc: "內建 ecash 錢包讓你可以在場地直接鑄造、傳送和兌換 Cashu 代幣。它內建於原生應用中,可直接與 mints 通訊 —— 出於安全考慮,瀏覽器會限制這些連線。", + zapTipTitle: "Zap 與打賞 —— 現在可在瀏覽器中使用", + zapTipDesc: "在此處即可向場地、活動、教練和團隊傳送 sats。只需在下方連線 Lightning 錢包 —— Nostr Wallet Connect 或 Alby 之類的瀏覽器擴充套件。無需 Cashu mint。" + } + }, + escrow: { + title: "託管", + desc: "安全出售:開啟託管後,買家可在交易中將其 sats 鎖定給你。你交付後釋放 —— 若未交付,買家可在約定時間後取回。", + active: "託管已開啟", + publish: "開啟託管", + published: "託管已開啟", + publishedDesc: "買家現在可以在交易中向你鎖定資金。", + failed: "無法開啟託管" + }, + escrowSettings: { + title: "託管設定", + desc: "Cashu 託管交易的預設設定。僅儲存於本裝置。", + lockWindow: "預設鎖定期", + lockWindowHint: "資金在被買家取回前保持鎖定的時長。對賣家而言越長越安全。", + days: "天", + preferredMint: "用於託管的 mint", + activeMint: "當前 mint", + preferredMintHint: "由哪個 mint 提供託管資金。請使用可信的 mint。", + requireListings: "新發布商品強制要求託管", + requireListingsHint: "釋出商品時預設勾選“要求託管”。" + }, + privacy: { + title: "隱私提示", + subtitle: "瞭解如何保護你的財務隱私", + cashuRecommended: "CASHU(推薦)", + anon: "匿名交易", + blind: "盲簽名隱藏活動", + noIp: "不暴露 IP", + trustMint: "需信任 mint 保管資金", + lightningAddress: "LIGHTNING ADDRESS", + linked: "可能與身份關聯", + traceable: "支付歷史可追蹤", + ipVisible: "開具帳單時 IP 可見", + selfCustody: "可自託管", + bestPractices: "最佳實踐", + tip1Title: "使用 Cashu 接收打賞", + tip1Desc: "內建 Cashu 錢包是接收 zaps 最私密的方式", + tip2Title: "為 SkateSpots 使用單獨的錢包", + tip2Desc: "不要使用你的主要儲蓄錢包 —— 將應用資金分開保管", + tip3Title: "考慮使用 VPN 或 Tor", + tip3Desc: "交易時隱藏你的 IP 地址", + tip4Title: "避免使用與身份關聯的 Lightning Address", + tip4Desc: "使用與真實姓名無關的化名地址", + proTip: "專業提示:", + proTipDesc: "先接收支付到你的 Cashu 錢包,然後定期使用 VPN 將較大金額轉入個人錢包。", + warnTitle: "隱私說明", + warnDesc: "Lightning Address有可能將你的 SkateSpots 活動與真實身份關聯。", + betterPrivacy: "為獲得更好的隱私:", + bullet1: "為此應用使用專用錢包", + bullet2: "考慮改用 Cashu 錢包", + bullet3: "交易時使用 VPN/Tor", + useCashu: "改用 Cashu", + understand: "我明白了" + }, + mintPrivacy: { + title: "Mint 隱私", + desc: "使用多個 mints 可提升隱私,防止任何單一 mint 看到你全部的交易", + distribution: "資金分佈", + singleWarning: "只使用一個 mint 意味著該 mint 能看到你所有交易的時間和金額。考慮新增更多 mints 以提升隱私。", + yourMints: "你的 Mints({{count}})", + default: "預設", + addMint: "新增 Mint", + addMintDesc: "向你的錢包新增新的 Cashu mint", + mintUrl: "Mint URL", + add: "新增", + adding: "新增中……", + orChoose: "或從列表中選擇", + recommended: "推薦 Mints", + allMints: "所有 mints(目錄)", + searchMints: "搜尋 mints……", + noDirectoryMints: "沒有匹配的 mints。", + directoryHint: "來自社群 MintRadar 目錄 —— 非官方,可能已過時。", + added: "已新增", + soon: "即將推出", + autoDistribute: "自動分散資金", + autoDesc: "將收到的資金分散到多個 mints", + autoAria: "自動分散資金(即將推出)", + tip1: "至少使用 2-3 個不同的 mints 以提升隱私", + tip2: "不要把所有資金放在一個 mint —— 分散存放", + tip3: "考慮 mint 的司法管轄區(不同國家 = 不同的法律訪問許可權)", + tip4: "Mints 能看到交易時間,但看不到你付給誰(盲簽名)", + future: "未來功能:Mint 輪換和隱私評分 —— 敬請期待!", + findMore: "在 mintradar.pedani.eu 查詢更多 mints", + trustWarning: "信任警告:", + trustWarningDesc: "Mints 是託管式的 —— 它們保管你的資金。只使用你信任的 mints。如果 mint 消失,你的資金可能丟失。將資金分散到多個 mints 可降低風險。", + removeTitle: "移除 Mint?", + removeDesc: "確定要移除 {{name}} 嗎?", + removeMint: "移除 Mint", + warning: "警告:", + withdrawWarning: "此 mint 含有 {{amount}} sats。移除前請先取出資金!", + invalidUrl: "無效 URL", + invalidUrlDesc: "Mint URL 必須以 https:// 開頭", + mintAdded: "Mint 已新增", + mintAddedDesc: "新 mint 新增成功", + mintAddedNamed: "{{name}} 新增成功", + failedAdd: "新增 mint 失敗", + failed: "失敗", + noMints: "沒有 Mints", + singleMint: "單個 Mint", + concentrated: "集中", + moderate: "適中", + wellDistributed: "分佈良好", + mintCoinosWebDesc: "適合 Web 的 mint(推薦用於瀏覽器)", + mintMinibitsWebDesc: "⚠ 僅限原生應用 —— 無法從網頁瀏覽器訪問", + mintMinibitsNativeDesc: "SkateSpots mint —— 推薦", + mintCoinosDesc: "適合 Web 的 mint", + mintLnbitsDesc: "基於 LNbits 的社群 mint" + }, + nwc: { + title: "Lightning 錢包", + noConnection: "NWC 錢包", + refresh: "重新整理餘額", + createInvoice: "建立帳單", + copyInvoice: "複製帳單", + pasteInvoice: "貼上 Lightning 帳單(lnbc…)", + amount: "金額:{{amount}} sats", + pasteToSee: "貼上帳單以檢視金額", + pay: "支付", + invoiceQrAlt: "Lightning 帳單二維碼", + enterAmount: "輸入金額(sats)", + readBalanceFailed: "無法讀取餘額", + readBalanceFailedDesc: "你的錢包沒有響應。", + createInvoiceFailed: "無法建立帳單", + createInvoiceFailedDesc: "請稍後重試。", + paymentSent: "支付已傳送", + paidAmount: "已支付 {{amount}} sats。", + paid: "已支付。", + paymentRejected: "錢包拒絕了此次支付。" + }, + qr: { + title: "掃描二維碼", + desc: "將二維碼置於相機取景框內以掃描", + paste: "從剪貼簿貼上", + hint: "掃描 Cashu 代幣、Lightning 帳單或 Lightning Address", + clipboardEmpty: "剪貼簿為空", + clipboardEmptyDesc: "剪貼簿中未找到文字", + pasteFailed: "貼上失敗", + pasteFailedDesc: "無法從剪貼簿讀取" + }, + recovery: { + title: "恢復短語", + desc: "這 12 個單詞是恢復你 ecash 餘額的唯一方式。請按順序抄寫並離線儲存 —— 切勿與任何人分享。", + tapReveal: "點按以顯示", + noWatching: "請確保沒有人在看", + hide: "隱藏", + reveal: "顯示", + paperHint: "寫在紙上最安全 —— 複製到剪貼簿可能會洩露給其他應用。", + written: "我已抄寫下來", + revealFirst: "請先顯示這些單詞", + copiedDesc: "恢復短語已複製 —— 請貼上到安全的地方,然後清空剪貼簿。", + copyFailed: "複製失敗", + copyFailedDesc: "請改為手動抄寫這些單詞。" + }, + guide: { + quickGuide: "快速指南", + fullGuide: "錢包指南(滑手版)", + cashuSummary: "隱私 + 便捷", + mintHoldsFunds: "(mint 保管資金)", + lightningSummary: "掌控 + 安全", + youHoldKeys: "(你持有金鑰)", + useBoth: "兩者兼用:Cashu 用於打賞,Lightning 用於儲蓄", + cashuTitle: "CASHU 錢包", + cashuTagline: "就像滑板公園裡口袋中的現金", + cashuBullet1: "可快速取出打賞", + cashuBullet2: "不要在此存放你的全部積蓄", + cashuBullet3: "如果 mint 消失,資金可能丟失", + cashuBullet4: "沒人知道你有多少(隱私!)", + cashuPerfectFor: "滑板補給、Zap 影片片段、小額打賞", + lightningTitle: "LIGHTNING 錢包", + lightningTagline: "就像你的銀行帳戶 —— 由你掌控", + lightningBullet1: "安全,你掌控金鑰", + lightningBullet2: "設定需要一點時間", + lightningBullet3: "完整交易歷史", + lightningBullet4: "更適合較大金額", + lightningPerfectFor: "購買裝備、儲蓄、大額 zaps", + perfectFor: "適合:", + proTips: "專業提示", + tip1Title: "兩種錢包都用", + tip1Desc: "滑板零錢放 Cashu,儲蓄放 Lightning", + tip2Title: "嘗試不同的錢包", + tip2Desc: "多嘗試找到適合你的。每種都有不同的功能和取捨", + tip3Title: "更好的隱私", + tip3Desc: "使用多個錢包意味著沒有單一應用能看到你全部的活動", + tip4Title: "積累經驗", + tip4Desc: "你掌握的工具越多,選擇就越多。從小處開始,邊用邊學", + tldr: "簡而言之:", + tldrDesc: "沒有“最好”的錢包 —— 這取決於你的需求。兩種都試試,用順手的,不要把全部 sats 放在一處!" + }, + zap: { + count: "{{count}} 個 zaps", + connectFirst: "請先連線你的錢包", + connectFirstDesc: "要傳送 zaps(Bitcoin 打賞),你需要連線 Lightning 錢包。", + quickSetup: "快速設定(30 秒)", + quickSetupDesc: "使用 Nostr Wallet Connect(NWC)連線你現有的 Lightning 錢包。無需額外帳戶。", + connectNwc: "使用 NWC 連線錢包", + noWallet: "沒有錢包?瞭解方法", + skip: "暫時跳過(手動帳單)", + note: "ℹ️ 注意:", + noteDesc: "即使不連線錢包,你仍可建立帳單,但需要手動複製後支付。", + payWithWebln: "使用 WebLN 支付", + processing: "處理中……", + openInWallet: "在 Lightning 錢包中開啟", + scanHint: "掃描二維碼或複製帳單,用任意 Lightning 錢包支付。", + cashuInstant: "使用內建錢包即時支付", + satsAvailable: "sats 可用", + or: "或", + customAmount: "自定義金額", + addComment: "新增評論(可選)", + insufficientBanner: "⚠️ Cashu 餘額不足。你還需要 {{amount}} sats。請切換到 Lightning 或為 Cashu 錢包充值。", + creatingInvoice: "正在建立帳單……", + zapAmount: "Zap {{amount}} sats", + zapAmountCashu: "使用 Cashu Zap {{amount}} sats", + lightningInvoice: "Lightning 帳單", + qrAlt: "Lightning 帳單二維碼", + enterAmount: "輸入金額", + enterAmountDesc: "選擇一個預設值或輸入有效的 sats 數量。", + cashuUnavailable: "Cashu 錢包不可用", + cashuUnavailableDesc: "你的 Cashu 錢包尚未就緒。請切換到 Lightning 或先開啟錢包。", + insufficientCashu: "Cashu 餘額不足", + insufficientCashuDesc: "你還需要 {{amount}} sats。請切換到 Lightning 或充值。", + zapSentCashu: "Zap 已傳送!🥜", + zapSentCashuDesc: "已從你的 Cashu 錢包Zap {{amount}} sats。", + cashuFailed: "Cashu 支付失敗", + cashuFailedDesc: "使用 Cashu 錢包支付失敗。", + invoiceCopied: "帳單已複製", + invoiceCopiedDesc: "Lightning 帳單已複製到剪貼簿", + defaultComment: "在 SkateSpots 發送了 Zap!🛹", + titleConnect: "連線錢包", + titlePayment: "Lightning 支付", + titleZap: "傳送 Zap", + descConnect: "連線你的 Lightning 錢包以傳送 zaps", + descPayment: "使用 Bitcoin Lightning Network 支付", + descZap: "Zaps 是支援此內容創作者的小額 Bitcoin 支付。如果你喜歡,不妨發送一個 zap!", + descZapShort: "Zaps 是支援創作者的小額 Bitcoin 支付。不妨發送一個 zap!" + }, + zapCrew: { + title: "Zap 團隊", + desc: "將一筆 zap 平均分給 {{count}} 位擁有 Lightning Address的團隊成員。", + noMembers: "目前沒有其他可 Zap 的團隊成員。", + totalAmount: "總金額", + customTotal: "自定義總額", + each: "每人 sats", + rounded: "(已取整)", + noWallet: "未連線錢包 —— 你將收到每位成員各自的帳單以手動支付。連線錢包即可一鍵分發。", + zapAcross: "向 {{count}} 人共Zap {{amount}} sats", + sentTo: "⚡ 已傳送至 {{done}}/{{total}}", + none: "未完成任何自動支付", + copyPending: "複製待處理的帳單以手動完成支付。", + thanks: "感謝支援團隊!", + payingCrew: "正在支付團隊……", + defaultComment: "已 Zap {{crew}} 團隊!🤘", + sent: "已傳送", + paying: "支付中", + resolving: "解析中", + skipped: "已跳過", + failed: "失敗", + waiting: "等待中", + copyInvoice: "複製帳單", + invoiceCopied: "帳單已複製", + invoiceCopiedDesc: "將其貼上到任意 Lightning 錢包" + }, + zapBadges: { + title: "Zap 徽章", + zaps: "zaps", + satsSent: "已傳送 sats", + rank: "排名", + footnote: "基於過去 30 天的 zaps。", + first: "首次 Zap", + firstHint: "傳送你的第一個 zap", + regular: "常客", + regularHint: "傳送 10 個 zaps", + generous: "慷慨", + generousHint: "傳送 10,000 sats", + patron: "贊助人", + patronHint: "傳送 100,000 sats", + top10: "前 10", + top10Hint: "進入前 10 名支持者" + }, + trust: { + unavailable: "信任評分不可用", + yourContent: "這是你的內容", + following: "你關注了此使用者", + friendOfFriend: "朋友的朋友(2 度)", + nip05: "NIP-05 已驗證使用者", + unknown: "未知使用者", + help: "信任評分有助於識別滑板社群中可靠的貢獻者。" + }, + share: { + title: "分享個人資料", + desc: "用手機攝像頭對準二維碼即可開啟 {{name}} 的個人資料。", + qrAlt: "個人資料二維碼", + copyLink: "複製連結", + copyFailed: "複製失敗", + copyFailedDesc: "無法複製連結。", + shareEllipsis: "分享……" + }, + addToCollection: { + title: "儲存到合集", + desc: "將“{{spot}}”儲存到你的某個合集", + loginRequired: "請登入以將場地儲存到合集", + noCollections: "你還沒有任何合集", + createFirst: "在下方建立你的第一個吧!", + spotCount: "{{count}} 個場地", + alreadySavedTag: "已儲存", + alreadySaved: "已儲存", + alreadySavedDesc: "“{{spot}}”已在“{{collection}}”中", + saved: "場地已儲存!", + savedDesc: "已將“{{spot}}”新增到“{{collection}}”", + saveFailed: "儲存失敗", + somethingWrong: "出了點問題", + created: "合集已建立!", + createdDesc: "已將“{{spot}}”新增到你的新合集“{{collection}}”", + createFailed: "建立合集失敗", + name: "合集名稱", + descriptionOptional: "描述(可選)", + creating: "建立中……", + createAndSave: "建立並儲存", + createNew: "建立新合集" + }, + collection: { + back: "返回合集", + created: "建立於 {{date}}", + deleteTitle: "刪除合集?", + deleteDesc: "這將永久刪除“{{title}}”。場地本身不會受影響。", + deleting: "刪除中……", + deleteFailed: "刪除合集失敗", + deleted: "合集已刪除", + deletedDesc: "“{{title}}”已被移除", + empty: "此合集中沒有場地", + emptyOwner: "在任意場地點按“儲存到合集”,即可向你的合集新增場地", + emptyOther: "此合集為空", + browseSpots: "瀏覽場地", + linkCopied: "連結已複製!", + linkCopiedDesc: "合集連結已複製到剪貼簿", + map: "合集地圖", + removeFailed: "移除場地失敗", + shareText: "看看這個場地合集:{{title}}", + spotRemoved: "場地已移除", + spotRemovedDesc: "“{{title}}”已從此合集中移除" + }, + mints: { + title: "Mints", + subtitle: "瀏覽 Cashu mints 及其健康狀態。Cashu 錢包操作在 SkateSpots 應用中執行。", + searchPlaceholder: "按名稱或 URL 搜尋 mints……", + onlineOnly: "僅線上", + count: "{{filtered}} / {{total}} 個 mints", + directoryError: "無法載入 mint 目錄。", + directoryHint: "此目錄由社群維護且有速率限制 —— 可能會短暫不可用。", + goToWallet: "前往錢包", + appOnly: "新增 mint 需在 SkateSpots 應用中進行(Cashu 僅限應用)。", + noMatch: "沒有匹配“{{query}}”的 mints。", + footer: "健康資料來自社群 MintRadar 專案 —— 非官方,可能已過時。在將資金託付給某個 mint 前,請務必檢視其條款。", + archived: "已歸檔", + degraded: "效能下降", + offline: "離線", + online: "線上", + terms: "條款", + reliability: "可靠性", + add: "新增", + addToWallet: "新增到錢包", + copyUrl: "複製 URL", + openMint: "開啟 mint", + inWallet: "在你的錢包中", + addedBadge: "已新增", + urlCopied: "Mint URL 已複製", + added: "Mint 已新增", + addedDesc: "{{host}} 現在已在你的錢包中。", + couldNotAdd: "無法新增 mint", + communityRating: "社群評分", + reliabilityLabel: "可靠性", + uptime: "線上時長 24h / 7d", + location: "位置", + latency: "延遲", + nuts: "支援的 NUTs", + units: "單位", + version: "版本", + ratedBy: "在 MintRadar 上被 {{count}} 人評為 {{rating}}/5。", + noRating: "MintRadar 上尚無社群評分。", + reviewsNote1: "文字評論不屬於此目錄的一部分 ——", + openMintRadar: "開啟 MintRadar", + reviewsNote2: "以閱讀或留下評論。", + liveness: "存活審計:已測試 {{mints}} 個 mints 和 {{melts}} 個 melts", + livenessErrors: " · 近期錯誤 {{errors}}/{{total}}", + whatsAMint: "什麼是 mint?", + whatsAMintDesc: "Cashu mint 負責發行和兌換你錢包中的 ecash。它持有支撐你代幣的 Bitcoin —— 因此不是你自建的 mint,就是你必須信任的 mint。", + mintWarning: "Mints 可能下線、更改條款或帶著資金消失。除非你信任運營者,否則只保留小額餘額。", + healthDisclaimer: "健康資料由社群維護(MintRadar)—— 非官方,可能已過時。" + }, + appShop: { + title: "應用商店", + subtitle: "為讓這個圈子持續運轉的人們準備的 SkateSpots 周邊。", + comingSoon: "即將推出", + wearThe: "穿上", + scene: "圈子", + heroDesc1: "為讓這件事持續運轉的人們準備的周邊 —— 在", + locally: "本地按需", + heroDesc2: "出售。你給我發訊息,我們敲定細節,然後以", + heroDesc3: "—— Lightning 或 Cashu —— 在你取貨時付款。沒有銀行卡,沒有帳戶,沒有結帳機器人,沒有中間商抽成。", + requestItem: "索取商品", + dmHint: "開啟與我的私密加密私信。", + lightning: "Lightning", + cashu: "Cashu", + localHandover: "本地交付", + inTheWorks: "籌備中", + notForSale: "暫不出售", + soon: "即將", + tees: "T恤與連帽衫", + decks: "板面", + shopTools: "滑板店工具", + stickerPacks: "貼紙包", + stickerPacksDesc: "貼紙包即將推出。設計圖還沒有 —— 現在就能免費列印這兩種。", + sticker: "貼紙", + stickerTip: "黑色模切。列印在貼紙紙上,沿黑邊裁剪。", + poster: "海報", + posterTip: "以 A3 列印;縮至 A4(50%)仍可正常掃描。", + printableAlt: "SkateSpots {{title}} —— 可列印", + print: "列印", + printNote1: "以", + actualSize: "100% /“實際大小”", + printNote2: "列印,使尺寸精確、二維碼清晰 —— 它指向 skate-spots.org。向量檔案,縮放不會模糊。", + howBuying: "購買如何進行", + dmNotCart: "這是私信,不是購物車", + step1Title: "給我發訊息", + step1Desc: "傳送私信說明你想要什麼 —— 商品、尺碼、顏色,任何你想要的。", + step2Title: "我們來敲定", + step2Desc: "以 sats 計價,以及見面地點和時間。這是一次對話,不是結帳。", + step3Title: "用 sats 付款", + step3Desc: "交接時用 Lightning 或 Cashu 付款,然後它就歸你了。沒有運費,沒有等候室。" + }, + newsletter: { + newIssue: "新一期", + composerTitle: "釋出一期通訊", + composerDesc: "以 NIP-23 文章(kind 30023)釋出到社群 relay。訂閱者會在通知鈴鐺中收到。正文支援 Markdown。", + fieldTitle: "標題", + identifier: "識別符號(slug)", + leaveBlank: "留空則自動生成", + reusingSlug: "複用現有 slug 會編輯那一期,而不是建立新一期。", + summary: "摘要", + optional: "可選", + coverImage: "封面圖片 URL", + bodyMarkdown: "正文(Markdown)", + characters: "{{count}} 個字元", + publishIssue: "釋出本期", + issuePublished: "本期已釋出!🛹", + issuePublishedDesc: "訂閱者會在通知鈴鐺中看到。", + publishFailed: "釋出失敗", + couldNotReachRelay: "無法連線到任何 relay —— 請檢查連線後重試。", + tryAgain: "請重試。", + publishedToNostr: "已釋出到 Nostr", + publishedToast: "已釋出!", + postedToNostr: "第 {{number}} 期已釋出到 Nostr。", + postToNostr: "釋出到 Nostr", + previewLabel: "預覽", + editFirst: "先編輯", + previewNoteDesc: "這是該筆記在大多數 Nostr 客戶端中的顯示效果。格式因客戶端而異。", + editNoteDesc: "在下方編輯筆記文字。更改僅影響本次釋出 —— 原始檔保持不變。", + dropNumber: "第 {{number}} 期", + publish: "釋出", + publishing: "釋出中……", + dropIsOut: "第 {{number}} 期已釋出", + daysAgo: "{{count}} 天前", + dismiss: "忽略", + itsMonday: "今天是週一", + mondayDesc: "該釋出每週通訊了。一鍵操作,AI 會從 git 日誌中撰寫。", + writeDrop: "撰寫第 {{number}} 期", + dismissReminder: "忽略提醒", + loginPrompt: "使用 Nostr 登入,在收件箱中接收新一期。", + subscribedToast: "你已訂閱!🛹", + subscribedToastDesc: "新一期會出現在你通知鈴鐺的“新聞”下。", + unsubscribed: "已取消訂閱", + unsubscribedDesc: "你仍可隨時在此閱讀每一期。", + checking: "檢查中……", + subscribed: "已訂閱", + unsubscribe: "取消訂閱", + subscribeCta: "訂閱通訊", + archiveSynced: "存檔已同步到 Nostr", + missingCount: "還有 {{count}} 期存檔不在 Nostr 上", + backfillDesc: "將 {{list}} 釋出為 NIP-23 文章,讓訂閱者和長文讀者能看到完整存檔。無論如何,頁面都保留其豐富的版式。", + backfill: "回填 {{count}} 期到 Nostr", + publishing2: "釋出中……", + publishingLabel: "釋出中……", + backfilled: "已回填 {{count}} 期 🛹", + backfilledDesc: "存檔現已存在於 Nostr 上,供訂閱者和讀者檢視。", + partialBackfill: "已釋出 {{published}},{{failed}} 失敗", + retryFinish: "重試以完成:{{list}}。", + notLoggedIn: "未登入", + allIssues: "所有期", + brand: "SkateSpots 通訊", + digTheDrop: "喜歡這一期嗎?Zap 一下,永遠不錯過下一期。", + sectionStats: "社群資料一覽", + sectionWhatsNew: "最新動態", + sectionSpotOfWeek: "本週場地", + sectionCommunity: "社群", + sectionSupport: "支援專案", + sectionLatestDrops: "最新期 · 來自 Nostr 的實時內容", + mappedBy: "由…繪製", + viewOnMap: "在地圖上檢視", + noSpotPicked: "本週尚未選定場地。提交你的場地,它可能出現在下一期。", + browseMap: "瀏覽地圖", + spotMap: "場地地圖", + statsBadge: "統計", + supportDesc: "100% 開源,由社群資助,沒有廣告,沒有投資人。如果它有用,請 Zap 或在 Angor 上支援。", + readFull: "閱讀完整一期", + joinSkaters: "加入 {{count}} 位接收通訊的滑手", + weeklyDrops: "每週通訊", + tagline: "每週通訊 · 我們想發就發", + freeNote: "免費。由 Nostr 驅動 —— 你的訂閱存在於你的金鑰上,跨裝置跟隨你。新一期會出現在你的通知鈴鐺中。", + live: "實時", + builtOn: "構建於", + openSource: "開源", + supportUs: "支援我們", + freeToSkate: "滑板是自由的" + }, + stats: { + subtitle: "直接從 Nostr 網路獲取的實時指標。透明、去中心化,任何人都可驗證。", + dataSource: "資料來源:", + updated: "更新於 {{age}}", + refresh: "重新整理", + partial: "無法連線到所有 relay —— 這些數字可能不完整。", + error: "目前無法連線到 relay。連線恢復後統計將載入。", + atAGlance: "社群一覽", + skateSpots: "滑板場地", + listedShops: "已登記店鋪", + events: "活動", + mappers: "測繪者", + uniqueContributors: "獨立貢獻者", + labHeader: "The Lab · 創作者與服務", + total: "共 {{count}}", + coaches: "教練", + filmers: "拍攝者", + editors: "剪輯師", + photographers: "攝影師", + builders: "製作師", + artists: "藝術家", + graffiti: "塗鴉", + tattoo: "紋身", + trainers: "訓練師", + musicians: "音樂人", + judges: "裁判", + organizers: "組織者", + barbers: "理髮師", + showFewer: "收起", + showAllCrafts: "顯示全部 13 種手藝", + community: "社群", + tours: "巡迴", + crews: "團隊", + marketplace: "市場", + liveListings: "在售商品", + tradesRecorded: "已記錄交易", + satsTraded: "已交易 sats", + zapsToMappers: "給測繪者的 zaps", + tradesNote1: "筆互助交易,涉及", + tradesNote2: "人。sats 由交易者自行申報 —— 應用無法觀測應用外的支付 —— 因此標題數字只計算", + mutual: "互助", + tradesNote3: "筆設有每對上限的交易;原始申報為", + tradesNote4: "sats。“給測繪者的 zaps”只統計發給我們頂尖貢獻者的收據 —— 它", + not: "不是", + tradesNote5: "全球 zap 總量。", + byRegion: "按地區劃分的場地與店鋪", + resolving: "正在根據座標解析 {{count}} 個未標記的地點…… 僅一次,之後快取在此裝置上。", + topCountries: "國家排行", + topCities: "城市排行", + other: "其他", + otherCountriesTitle: "前 6 之外的國家", + otherCitiesTitle: "前 6 之外的城市", + uncategorised: "未分類", + uncategorisedTitle: "無城市/國家標記", + regionNote1: "統計的是", + spotsAndShops: "場地與店鋪", + regionNote2: ",而非滑手 —— 來自各自的城市/國家標記,或在沒有標記時根據其標記點的座標推導(快取在你的裝置上;存在時按 ISO 程式碼對國家分組),僅限社群 relay,且排除被稽核隱藏的內容。", + ofTotal: "{{count}} / {{total}}", + regionNote3: "個地點沒有位置標記,顯示為“未分類”。", + growth: "隨時間增長", + chartCumulativeTitle: "已測繪場地(累計)", + chartCumulativeDesc: "隨時間新增到地圖的場地總數", + chartMonthlyTitle: "每月活動", + chartMonthlyDesc: "每月釋出的新內容", + chartMappersTitle: "活躍測繪者 / 月", + chartMappersDesc: "每月釋出的獨立貢獻者", + chartMixTitle: "內容構成", + chartMixDesc: "按內容型別細分(全部時間)", + noData: "暫無資料", + topMappers: "測繪者排行", + mostSpots: "—— 新增場地最多", + noMapperData: "暫無測繪者資料", + topShops: "店鋪排行", + mostShops: "—— 新增店鋪最多", + shopCount: "{{count}} 家店鋪", + noShopData: "暫無店鋪資料", + supporters: "社群支持者", + fundedTitle: "由社群資助", + fundedDesc1: "透過 Angor 進行的去中心化 Bitcoin 眾籌。", + fundedDesc2: "沒有廣告,沒有投資人,不出售資料。", + backAngor: "在 Angor 上支援我們", + communityLink: "社群 →", + footer1: "所有資料實時來自", + footer2: "—— 一個公共 Nostr relay。", + footer3: "每個事件都由其建立者簽名,並可進行密碼學驗證。", + footer4: "任何數字都無法偽造。", + spots: "場地", + shops: "店鋪", + lab: "Lab", + thisMonth: "本月 +{{count}}", + fromActive: "{{count}} 位來自活躍帳戶", + viewAll: "檢視全部", + spotCount: "{{count}} 個場地" + }, + leaderboard: { + mapEarn: "測繪並賺取", + helpMap: "幫助測繪世界", + intro: "新增場地和店鋪,獲得感激滑手的 Zap。頂尖貢獻者可能獲得額外獎勵!", + howItWorks: "運作方式", + step1Title: "1. 測繪", + step1Desc: "新增帶照片和詳情的場地與店鋪", + step2Title: "2. 賺取 Zaps", + step2Desc: "覺得你的場地有用的滑手會給你打賞", + step3Title: "3. 額外獎勵", + step3Desc: "頂尖測繪者可能從我們的基金中獲得額外獎勵", + proTips: "💡 獲得更多 Zaps 的專業提示:", + tipPhotos: "新增 3 張以上照片", + tipDescriptions: "撰寫詳細描述", + tipLocation: "準確的位置", + mapShop: "測繪店鋪", + mapShopDesc: "滑板店、板店", + mapSpot: "測繪場地", + mapSpotDesc: "公園、街頭場地、DIY", + shops: "店鋪", + spotsLower: "場地", + shopsLower: "店鋪", + contributions: "貢獻", + yourRanking: "你的排名", + spotsShops: "{{spots}} 個場地 • {{shops}} 家店鋪", + totalLower: "總計", + overall: "總榜", + noContributions: "暫無貢獻。成為第一個吧!", + addFirstSpot: "新增第一個場地", + noShops: "尚未測繪任何店鋪", + addFirstShop: "新增第一家店鋪", + noSpots: "尚未測繪任何場地", + poweredBy: "由社群 Zaps 驅動", + poweredByDesc: "當你覺得某個場地有用時,給測繪者 Zap 一下!這是表達感謝和鼓勵更多貢獻的最佳方式。", + you: "你", + zapTitle: "Zap 排行榜", + zapSubtitle: "最受喜愛的場地 —— 以及慷慨 Zap 的滑手。", + thisWeek: "本週", + thisMonth: "本月", + allTime: "全部時間", + topZappedSpots: "Zap 最多的場地", + noZaps: "此期間尚無 zaps。成為第一個 —— 在喜愛的場地上點 ⚡。", + topSupporters: "支持者排行", + noZapsSent: "此期間尚未傳送任何 zaps。", + fromTop10: "⚡ 前 10 名貢獻 {{amount}} sats", + supporter: "支持者", + skateShop: "滑板店", + skateSpot: "滑板場地" + }, + supporters: { + our: "我們的", + community: "社群", + heroDesc: "SkateSpots 由社群構建,也服務於社群。支持者、協作者、合作伙伴和朋友讓它保持免費和去中心化。", + backAngor: "在 Angor 上支援我們", + backers: "支持者", + backersDesc: "支援 SkateSpots 的滑手 —— 透過 Angor 的鏈上資助,以及對專案的 Lightning zaps。", + sourceAngor: "Angor", + supportersTotals: "{{count}} 位支持者 · 透過 Angor 的 {{angor}} sats · Zap {{zap}} sats", + quietNote: "還要感謝所有默默支援的人 —— 謝謝你們。❤️", + silentTitle: "私密的鏈上(靜默支付)", + silentDesc: "一個名稱,每筆支付使用全新地址 —— 透過靜默支付走鏈上,或從同一記錄走 Lightning。無需複用,無從關聯。", + silentCopyName: "複製名稱", + silentCopied: "已複製", + silentWallets: "需要一個支援支付名稱/靜默支付的錢包:Sparrow、Cake、Dana、Phoenix、BlueWallet、Wasabi、Nunchuk 或 BitBox02。", + wayLightningTitle: "即時且公開", + wayLightningDesc: "Zap SkateSpots,或悄悄支付。退出登入也可用。", + waySilentTitle: "私密的鏈上", + waySilentDesc: "靜默支付名稱 —— 每筆支付一個新地址。", + wayAngorTitle: "資助開發", + wayAngorDesc: "Angor —— 分階段釋放,超過 100k sats 可退款。", + donateTitle: "支援 SkateSpots", + donateDesc: "三種渠道,三種理由 —— 選擇適合你的。每一個 sat 都讓地圖保持免費、無廣告且開源。", + donatePageLink: "開啟簡潔的捐贈頁面", + updatedAt: "更新於 {{when}}", + tiersNote: "等級:支持者 10 萬 sats 以下 · 贊助人 10 萬–100 萬 · 傳奇 100 萬以上", + tierEmpty: "還沒有人 —— 成為第一個。", + joinSupporters: "加入 {{count}} 位支持者", + showAll: "顯示全部 {{count}}", + showLess: "收起", + impactSeeStats: "檢視完整資料 →", + impactAsOf: "實時來自社群 relays", + anonymousBacker: "匿名支持者", + beFirstBacker: "暫無公開支持者 —— 成為第一個。", + backersTotal: "{{count}} 位支持者 · 已籌集 {{amount}} sats", + verifiedOnChain: "鏈上已驗證", + supportedBy: "由 {{count}} 人支援", + tierSupporter: "支持者", + tierPatron: "贊助人", + tierLegend: "傳奇", + topZappers: "Zap SkateSpots", + topZappersDesc: "直接向專案傳送公開 zap 的滑手。靜默支付不予列出。", + paysFor: "你的支援用於何處", + paysForDesc: "每一個 sat 的去向 —— 沒有薪水,沒有辦公室,沒有廣告。", + payRelay: "Relay 託管", + payDomain: "域名與 TLS", + payAi: "AI / ContextVM 節點", + payDev: "開發時間", + payOps: "運維", + payMarketing: "市場推廣", + payRelayDesc: "讓地圖保持線上且穩定。", + payDomainDesc: "域名、證書、安全連線。", + payAiDesc: "Sasquatch,社群嚮導。", + payDevDesc: "開發和修復 SkateSpots。", + payOpsDesc: "讓它持續運轉的不起眼工作。", + payMarketingDesc: "觸達新的本地圈子和滑板店。", + impact: "目前的影響", + impactDesc: "社群所構建的 —— 由滑手資助。", + impactSpots: "場地", + impactCrews: "團隊", + impactEvents: "活動", + impactLab: "Lab 專業人士", + impactShops: "店鋪", + impactMappers: "測繪者", + support: "支援", + supportDesc: "在 Angor 上資助 SkateSpots —— 去中心化的鏈上 Bitcoin 眾籌。沒有中間商,沒有 KYC。", + collaborators: "協作者", + collaboratorsDesc: "積極構建 SkateSpots 的人 —— 開發者、設計師、relay 運營者。", + partners: "合作伙伴", + partnersDesc: "與我們密切合作的組織和專案。", + friends: "朋友", + friendsDesc: "與我們志同道合的人。", + backTitle: "在 Angor 上支援該專案", + backDesc: "Angor 是構建在 Nostr 之上的去中心化鏈上 Bitcoin 資助 —— 你的資金始終由你掌控,分階段釋放,沒有託管方持有資金池。最高 100,000 sats 的貢獻類似捐贈(無需回收握手);更大金額屬於投資,其未使用資金可以回收。每一個 sat 都用於開發、relay 託管,以及讓 SkateSpots 對地球上的每位滑手保持免費。", + donateNote: "更喜歡直接捐贈?⚡ 在下方 Zap —— 無需退款,無需回收。", + openAngor: "開啟 Angor", + orZap: "或在應用中直接 ⚡ Zap 任意場地、團隊或創作者", + wantCollaborate: "想合作?", + wantCollaborateDesc: "開發者、設計師、有技能的滑手 —— 歡迎聯絡。", + viewNostrHub: "在 NostrHub 上檢視", + wantPartner: "想與 SkateSpots 合作?在 Nostr 上聯絡我們。", + comingSoon: "即將推出", + wantListed: "想被列在這裡?", + wantListedDesc: "透過 Nostr 私信傳送 logo(PNG/WebP,透明背景,最小 200×200px)和你的 URL,前提是你與我們氣場相投。", + whyTitle1: "我們為何需要", + whyTitle2: "支援", + whyDesc: "SkateSpots 100% 免費、開源,並構建在 Nostr 之上 —— 一個沒有可被關閉的中心化伺服器的去中心化協議。沒有廣告,不出售資料,沒有投資人。每一個 sat 都直接用於開發、relay 託管,以及讓這地球上每位滑手都能免費使用。", + why1Title: "Nostr 原生", + why1Desc: "沒有中心化伺服器。你的資料存在於你選擇的 relays 上。", + why2Title: "由 Bitcoin 驅動", + why2Desc: "測繪場地賺取 sats。在本地店鋪消費。", + why3Title: "永久免費", + why3Desc: "開源,沒有付費牆,沒有追蹤,沒有風險投資。", + thankYou: "謝謝。每一個 sat 都讓場地留在地圖上。🛹⚡", + license: "許可證", + faq: "常見問題" + }, + admin: { + confirmed: "已確認", + title: "稽核佇列", + subtitle: "觸發垃圾訊號的地點、店鋪、活動、巡迴和裝備。隱藏和確認是軟性、可逆的標籤;舉報優先排序。不會刪除任何內容。", + tabReports: "舉報", + tabSpots: "場地", + tabShops: "店鋪", + tabEvents: "活動", + tabTours: "巡迴", + tabGear: "裝備", + tabCrews: "團隊", + tabLab: "Lab", + tabClaims: "認領", + nothingToReview: "無需稽核 —— 此類內容沒有觸發垃圾訊號。", + hideActioned: "隱藏已處理項", + showActioned: "顯示已處理項({{count}})", + undoAll: "撤銷全部 {{count}}", + undoAllTitle: "撤銷此標籤頁中的所有裁定?", + undoAllDesc: "這會將每個專案重置為中性 —— 既不隱藏,也不擔保。它會為每個專案釋出一個公開標籤,因此使用 Amber 時你會看到 {{count}} 個批准介面。", + undoCount: "撤銷 {{count}}", + undo: "撤銷", + confirm: "確認", + hide: "隱藏", + hideIt: "隱藏它", + hideForEveryone: "為所有人隱藏此項?", + hideForEveryoneDesc: "這會為每位 SkateSpots 使用者從瀏覽和搜尋中移除此項。它是一個公開、可逆的標籤 —— 你可以從此佇列中撤銷。", + hidden: "已隱藏", + hiddenDesc: "已透過公開標籤從應用中移除。可逆。", + couldNotHide: "無法隱藏", + notASpot: "不是滑板場地", + lookAtIt: "檢視" + }, + profile: { + nip05Verified: "NIP-05 已驗證", + nip05NotVerified: "NIP-05 與此金鑰未透過驗證", + message: "私信", + zapsReceived: "收到的 zaps", + memberSince: "加入於", + badges: "徽章", + sponsorsSupport: "贊助與支援", + skater: "滑手", + stance: "站位", + skating: "滑板型別", + homeSpot: "主場", + basedIn: "所在地", + addSkateDetails: "新增你的滑板詳情", + addSkateDetailsDesc: "設定你的站位、風格和水平,即可出現在滑手目錄中。", + spotsAdded: "已新增場地", + shopsAdded: "已新增店鋪", + noSpots: "你還沒有新增任何場地", + noSpotsDesc: "把你在本地的場地標到地圖上 →", + stash: "Stash", + gear: "裝備", + crews: "團隊", + info: "資訊", + lightning: "Lightning", + silentPayment: "靜默支付", + coordinator: "協調器", + coordinatorAdded: "已新增協調器", + add: "新增", + messagePrivately: "私密私信", + founder: "創始人", + member: "成員", + supportSkater: "支援這位滑手", + supportSkaterDesc: "傳送打賞以感謝他們的貢獻" + }, + index: { + joinCommunity: "加入社群,新增場地、建立活動等", + topZapped: "Zap 最多", + topZappedDesc: "本月獲得最多支援的場地", + leaderboard: "排行榜", + newHere: "第一次來?", + newHereDesc: "建立免費帳戶,新增場地、參加活動、與其他滑手交流,成為社群的一員。無需郵箱。", + followFounder: "關注創始人", + followFounderDesc: "按住頭像 3 秒即可關注,隨時瞭解新功能和活動!", + createAccount: "建立帳戶", + accountWorks: "你的帳戶可在網路中的所有應用中使用", + footerTagline: "開源 • 社群所有 • 無廣告" + }, + stash: { + title: "我的 Stash", + loginDesc: "你的私密裝備清單。記錄你擁有的物品、設定價格,並有選擇地與交易者分享。", + encrypted: "已加密", + syncsEverywhere: "隨處同步", + p2pTrading: "點對點交易", + encryptionRequired: "需要加密", + encryptionRequiredDesc: "你的 Stash 已加密以保護隱私。請使用支援 NIP-44 加密的簽名器(如 Alby、nos2x 或 Amber)。", + learnSigners: "瞭解簽名器", + select: "選擇", + stash: "Stash", + wishlist: "心願單", + allCategories: "所有類別", + sortNewest: "最新", + sortValue: "價值", + sortCondition: "成色", + sortAz: "A–Z", + friendsOnly: "僅好友", + addToWishlist: "新增到心願單", + addItemToStash: "向 Stash 新增物品", + addItem: "新增物品", + editItem: "編輯物品", + publicStash: "公開 Stash", + listView: "列表檢視", + gridView: "網格檢視", + uploading: "上傳中……", + addPhotos: "新增照片", + wishlistReqPlaceholder: "任何具體要求……", + itemDescPlaceholder: "描述物品、任何損壞……", + itemsCount: "{{count}} 件物品", + wishlistEmpty: "心願單為空", + wishlistEmptyDesc: "新增你在尋找的裝備 —— 我們會將你與好友的 Stash 匹配。", + stashEmpty: "你的 Stash 為空", + stashEmptyDesc: "開始記錄你的裝備。板面、橋、鞋 —— 新增一次,透過 Nostr 隨處訪問。", + noMatch: "沒有匹配的物品", + noMatchDesc: "試試調整篩選條件。", + backupTransfer: "備份與轉移", + backupDesc: "你的 Stash 在 Nostr 上加密。保留一份你掌控的副本 —— 一個失效的 relay 或新帳戶都無法丟失你的裝備清單。", + exportTitle: "加密備份", + exportDialogDesc: "將 {{count}} 件物品儲存到檔案。加密它,這樣檔案洩露也不等於資訊洩露。", + modePassword: "密碼", + modeKey: "我的金鑰", + password: "密碼", + confirmPassword: "確認密碼", + passwordHint: "至少使用 8 個字元。沒有找回方式 —— 別忘了它。", + keyModeHint: "使用你的 Nostr 金鑰加密。只有該金鑰能開啟它 —— 無需記憶任何東西。", + exportPlaintext: "不加密匯出", + pwTooShort: "至少使用 8 個字元。", + pwMismatch: "密碼不一致。", + exportFailed: "無法建立備份。", + unlockTitle: "解鎖備份", + unlockDesc: "此備份受密碼保護。", + unlock: "解鎖", + unlockFailed: "無法解鎖備份。", + show: "顯示", + hide: "隱藏", + strength: "密碼強度", + strengthWeak: "弱", + strengthFair: "一般", + strengthGood: "良好", + strengthStrong: "強", + filenameWillSave: "將儲存為 {{name}}", + export: "匯出", + import: "匯入", + exported: "Stash 已匯出", + exportedDesc: "{{count}} 件物品已儲存到檔案。", + noItemsInFile: "該檔案中未找到物品。", + noValidItems: "該檔案中未找到有效物品。", + imported: "已匯入 {{count}} 件物品", + importSkipped: "已跳過 {{count}} 件(已在你的 Stash 中)。", + importAdded: "已新增到你的 Stash。", + importFailed: "匯入失敗", + couldNotRead: "無法讀取該檔案。", + updateFailed: "無法更新你的 Stash", + updatedCount: "已更新 {{count}} 件物品", + markedForSale: "已將 {{count}} 件標記為出售", + unmarkedCount: "已取消標記 {{count}} 件", + removedCount: "已移除 {{count}} 件物品", + selectedCount: "已選擇 {{count}} 件", + selectAll: "全選", + visibilityPublic: "公開", + visibilityPrivate: "私密", + forSale: "出售中", + remove: "移除", + bulkDeleteTitle: "移除 {{count}} 件物品?", + bulkDeleteDesc: "這會透過一次簽名重寫你的加密 Stash,且無法在此撤銷。如果不確定,請先匯出備份。", + deleteTitle: "從你的 Stash 中移除?", + deleteDesc: "“{{title}}”將從你的 Stash 中移除", + deleteDescPublic: ",並從你的公開展示中下架", + deleteUndone: "。此操作無法撤銷。", + deleteDescGeneric: "此物品將從你的 Stash 中移除。此操作無法撤銷。", + listOnMarketplace: "在市場釋出", + noPriceSet: "未設定價格", + categoryLabel: "類別", + photosLabel: "照片", + willingToSell: "願意出售", + willingToTrade: "願意交換", + whereIsThisItem: "此物品在哪裡?", + visibilityLabel: "可見性", + visibilityPrivateOnlyYou: "私密 - 僅你可見", + visibilityFriendsMutual: "好友 - 互相關注", + visibilityPublicAnyone: "公開 - 任何人", + visibilityFriends: "好友", + brandLabel: "品牌", + sizeLabel: "尺寸", + descriptionLabel: "描述", + conditionLabel: "成色", + itemName: "物品名稱", + saveChanges: "儲存更改", + listItemDialogTitle: "釋出“{{title}}”", + pickUpWhere: "買家在哪裡取貨?", + linkToSpot: "關聯滑板場地", + linkToSpotDesc: "最適合本地銷售 • 顯示在場地頁面和地圖上", + recommended: "推薦", + noSpecificSpot: "不關聯特定場地", + noSpecificSpotDesc: "僅顯示在市場頁面", + tipLinkedSpots: "💡 提示:關聯場地的商品更容易被本地滑手找到。", + anyoneCanSee: "任何人都能在你的個人資料上看到這些。", + seeWhatOthersSee: "檢視他人所見", + inventory: "庫存", + publicWantsNote: "公開的求購會作為“求購”廣告發布到市場,讓賣家能找到你。", + howItWorks: "運作方式", + tapToMarketplace: "點按前往市場 →", + viewWishlist: "檢視心願單", + tipEditItems: "使用鉛筆按鈕編輯物品", + tipListForSale: "使用商店按鈕釋出出售", + tipAddPhotos: "新增照片以獲得更好的交易報價", + tipKeySyncs: "Nostr 金鑰同步到所有裝置", + itemsReadyToSell: "{{count}} 件物品待售" + } + }, +}; export default zhTWBatch4; diff --git a/src/i18n/zh-TW/batch5.ts b/src/i18n/zh-TW/batch5.ts index 5f82a2e..1bb6308 100644 --- a/src/i18n/zh-TW/batch5.ts +++ b/src/i18n/zh-TW/batch5.ts @@ -1,4 +1,1604 @@ -/** zh-TW — batch 5. Filled by the translation pass; empty until then. */ -const zhTWBatch5 = {}; +/** + * zh-TW — batch 5: The Lab service directory (labUi) + social (socialUi): + * crew chat, DMs, collectives, coordinators and vouches. + * + * Brand/protocol names stay English (The Lab, Coach, Filmer, Photographer, + * Editor, Builder, Crew, Spot, Stash, Nostr, Lightning, Zap, sats, DM, NWC, + * NIP-05); trick names stay English. Placeholders ({{...}}) are preserved. + */ +const zhTWBatch5 = { + labUi: { + activeCount: '{{count}} 個進行中', + addMusicProfile: '新增音樂檔案', + all: '全部', + clearAll: '全部清除', + collective: '共同體', + filters: '篩選條件', + following: '追蹤中', + getRiderCard: '取得 Rider 卡', + judgeEvents: '評審活動', + justASkater: '只是個', + labForServices: 'The Lab 是提供服務的地方。瀏覽並加入整個滑手社群', + loginToOffer: '登入以提供服務', + newest: '最新', + noResults: '沒有結果', + offer: '提供', + offerBuilding: '提供 Building', + offerCoaching: '提供 Coaching', + offerCuts: '提供剪髮', + offerDesignArt: '提供 Design / Art', + offerEditing: '提供 Editing', + offerFilming: '提供 Filming', + offerGraffiti: '提供塗鴉', + offerPhotography: '提供 Photography', + offerServices: '提供服務', + yourProfiles: '你的 Lab 檔案', + preview: { + button: '預覽', + title: '即時預覽', + desc: '這就是你的{{noun}}檔案發佈後的樣子。', + untitled: '你的名字', + noBio: '還沒有簡介 — 寫一句你提供什麼。', + years: '{{count}} 年經驗', + portfolio: '作品集', + note: '僅供預覽 — 尚未發佈任何內容。', + }, + draft: { + title: '你有未儲存的草稿', + body: '從上次的地方繼續 — 在你按下發佈之前不會發佈任何內容。', + resume: '繼續草稿', + discard: '捨棄草稿', + }, + progress: { + title: '檔案完整度', + count: '已完成 {{done}} / {{total}}', + photo: '照片', + bio: '簡介', + skills: '技能', + rate: '價格', + location: '位置', + contact: '聯絡方式', + }, + wizard: { + identity: '身分', + offer: '你提供的服務', + rates: '價格', + contact: '聯絡方式', + media: '媒體', + }, + offerTattoo: '提供刺青', + offerTraining: '提供訓練 / 物理治療', + organizeEvents: '主辦活動', + resultsMany: '{{count}} 個結果', + resultsOne: '{{count}} 個結果', + searchCityPlaceholder: '城市…', + searchNamePlaceholder: '名字、簡介…', + showResults: '顯示結果', + showResultsActive: '顯示結果 · {{count}} 個進行中', + skaterWord: '滑手', + sortBy: '排序方式', + theCrew: 'The Crew', + topRated: '評價最高', + trusted: '值得信賴', + trustLevel: '信任等級', + yearsExp: '{{count}} 年經驗', + tabCoaches: 'Coaches', + tabFilmers: 'Filmers', + tabPhoto: '照片', + tabEditors: 'Editors', + tabBuilders: 'Builders', + tabArtists: '藝術家', + tabGraffiti: '塗鴉', + tabTattoo: '刺青', + tabTrainers: '訓練師', + tabMusic: '音樂', + tabJudges: '評審', + tabOrganizers: '主辦人', + tabBarbers: '理髮師', + filterSkillsToLearn: '想學的技能', + filterContentType: '內容類型', + filterEquipmentStyle: '裝備與風格', + filterServices: '服務', + filterCamera: '相機', + filterLenses: '鏡頭', + filterLighting: '燈光', + filterSupportRig: '支撐與裝備', + filterStyle: '風格', + filterWhatTheyBuild: '他們建造什麼', + filterMaterialsTrade: '材料與工種', + filterProjectScale: '專案規模', + filterWhatTheyMake: '他們製作什麼', + filterMedium: '媒介', + filterSoftwareTools: '軟體與工具', + filterWorkContext: '工作情境', + filterMethod: '方法', + filterFocus: '專長', + filterInjuriesTreated: '治療的傷病', + filterCredentialsSetting: '資歷與環境', + filterGenre: '曲風', + filterInstrumentsRole: '樂器與角色', + filterEventFormats: '活動形式', + filterSpecialty: '專長', + filterLevelCircuit: '級別 / 賽區', + filterEventTypes: '活動類型', + filterWhatYouHandle: '你負責什麼', + filterScale: '規模', + filterWhatTheyOffer: '他們提供什麼', + filterSignatureStyles: '招牌風格', + filterSetting: '環境', + filterEditType: '剪輯類型', + role: { + coach: 'Coach', + filmer: 'Filmer', + builder: 'Builder', + editor: 'Video Editor', + photographer: 'Photographer', + skater: '滑手', + }, + empty: { + footer: '有疑問?查看常見問題 →', + loginSuffix: '即可建立檔案。', + coachesTitle: '還沒有 Coaches', + coachesBody: '成為你所在地區第一個提供滑板 Coaching 的人。', + filmersTitle: '還沒有 Filmers', + filmersBody: '成為第一個提供滑板 Filming 的人 — 短片、完整片段、比賽紀錄等等。', + photographersTitle: '還沒有 Photographers', + photographersBody: '成為你所在地區第一個提供滑板 Photography 的人 — 動作照、連拍、雜誌拍攝等等。', + editorsTitle: '還沒有 Editors', + editorsBody: '成為第一個提供滑板影片 Editing 服務的人。', + buildersTitle: '還沒有 Builders', + buildersBody: '成為第一個列出你的坡道、滑板場或 DIY 建造的人 — 混凝土、木製、欄杆等等。', + artistsTitle: '還沒有藝術家', + artistsBody: '成為第一個為這個圈子提供板面圖案、標誌、海報和週邊的人。', + graffitiTitle: '還沒有塗鴉藝術家', + graffitiBody: '成為你所在地區第一個提供塗鴉作品、壁畫和滑板場藝術的人。', + tattooTitle: '還沒有刺青藝術家', + tattooBody: '成為第一個列出的滑板文化刺青藝術家 — flash、自訂、細線等等。', + trainersTitle: '還沒有訓練師', + trainersBody: '成為第一個幫助滑手變強壯、保持健康的訓練師或物理治療師。', + musiciansTitle: '還沒有音樂人', + musiciansBody: '既滑板又做音樂?新增你的樂團或個人專案 — 曲風、樂器和連結。', + judgesTitle: '還沒有評審', + judgesBody: '主辦公平的比賽?列出自己來評審 Game of S.K.A.T.E.、最佳招式活動、比賽和巡迴站點。', + organizersTitle: '還沒有主辦人', + organizersBody: '舉辦活動、比賽、聚會或表演?列出自己,讓滑手能找到並預約你。', + barbersTitle: '還沒有理髮師', + barbersBody: '為滑手剪髮?列出你的理髮椅或到府服務,讓這個圈子能剪個清爽的髮型。', + }, + become: { + addNip05: '在設定中新增 NIP-05', + backToLab: '返回 The Lab', + bioWorkLabel: '簡介 / 關於你的工作', + checkContact: '檢查你的聯絡方式', + cityArea: '城市 / 地區', + cityCountry: '城市,國家', + connectWallet: '連接錢包', + connectWalletNwc: '使用 NWC 連接錢包', + contactInfo: '聯絡資訊', + contactInfoDesc: '客戶如何聯絡你(全部選填,但建議填寫)', + coordinatesOptional: '座標(選填)', + email: '電子郵件', + failedToPublish: '發佈失敗', + fromNostrProfile: '來自你的 Nostr 檔案', + geolocationUnsupported: '不支援定位', + getting: '取得中…', + headline: '標題', + headlineHint: '顯示為你的 Lab 卡片上的標題 — 例如「{{example}}」。預設為你的名字。', + imageUploaded: '圖片已上傳', + instagram: 'Instagram', + invalidEmail: '請輸入有效的電子郵件地址。', + invalidPortfolio: '請輸入有效的作品集網址。', + invalidWebsite: '請輸入有效的網站網址。', + latitude: '緯度', + learnHow: '了解如何', + locationError: '定位錯誤', + locationFound: '已找到位置', + loginRequired: '需要登入', + loginRequiredDesc: '你需要登入才能建立 {{role}} 檔案。', + loginRequiredDescCraft: '你需要登入才能建立 {{noun}} 檔案。', + longitude: '經度', + nip05Recommended: '建議進行 NIP-05 驗證', + nip05RecommendedDesc: '驗證你的身分,與客戶建立信任。', + noWallet: '未連接錢包', + otherSocial: '其他社群', + paymentSetup: '⚡ 需要設定付款', + phoneNumber: '電話號碼', + profilePhoto: '檔案照片', + profilePublished: '你的檔案已發佈。', + publishing: '發佈中...', + socialMedia: '社群媒體', + tip: '💡 提示:大多數 Lightning 錢包都支援 NWC(Alby、Minibits、Zeus、Coinos)。', + tipWithTime: '💡 提示:大多數 Lightning 錢包都支援 NWC(Alby、Minibits、Zeus、Coinos)。設定只需 30 秒。', + upload: '上傳', + uploadFailed: '上傳失敗', + uploadImage: '上傳圖片', + uploading: '上傳中…', + useCurrentLocation: '使用目前位置', + useMyLocation: '使用我的位置', + usingNwc: '正在使用 Nostr Wallet Connect', + usingWebln: '正在使用 WebLN 瀏覽器擴充功能', + walletConnected: '錢包已連接 — 可以接收付款了!', + website: '網站', + yearsExperience: '經驗年數', + }, + coachForm: { + anonymous: '匿名 Coach', + bioLabel: '簡介 / Coaching 理念', + bioPlaceholder: '你的背景、教學風格...', + create: '建立 COACH 檔案', + created: 'Coach 檔案已建立!', + createPro: '建立 PRO COACH 檔案', + dmNote: '💬 學生可以透過 SkateSpots 的加密訊息直接聯絡你', + heading: '成為 Coach', + headlineExample: 'Skate Coach Berlin', + hourlyRate: '每小時價格', + identity: '你的 Coach 身分', + nip05Reason: '新增 NIP-05 識別碼以驗證你的身分、與學生建立信任 — 它會向他們表明你是正規的 Coach。', + paymentDesc: '要接收學生的課程付款,你需要連接一個 Lightning 錢包。學生將直接向你 Zap 教學課程的費用。', + profileDesc: '向學生介紹你的經驗', + profileTitle: 'Coach 檔案', + ratePlaceholder: '5000 sats/小時', + selectSkill: '請至少選擇一項技能。', + skillsLabel: '我教的技能 *(至少選擇一項)', + skillsRequired: '技能為必填', + formatsLabel: '課程形式', + formatsHint: '你如何進行教學。', + levelsLabel: '教授級別', + agesLabel: '年齡層', + credentialsLabel: '資歷與安全', + credentialsHint: '自我聲明 — SkateSpots 不驗證這些內容。', + languagesLabel: '授課語言', + languagesHint: '新增你能用於教學的語言。', + languagePlaceholder: '例如 English、Español', + availabilityLabel: '可預約時間', + bookingLabel: '預約連結', + bookingHint: '選填 — 一個學生可以預約並付款的頁面。', + galleryLabel: '作品集照片', + galleryHint: '展示真實課程、學生和 Spot(最多 12 張)。', + galleryAdd: '新增作品集照片', + galleryUploaded: '已上傳 {{count}} 張照片', + videoLabel: '精彩集錦', + videoHint: '選填 — 你教學的 YouTube 或 Instagram 影片。', + formatOneOnOne: '一對一', + formatGroup: '小組', + formatCamp: '訓練營', + formatVideo: '影片分析', + formatContestPrep: '比賽備戰', + formatParkLesson: '場地課程', + formatAdaptive: '適應性課程', + formatGirls: '女生專場', + formatAfterSchool: '課後', + levelBeginner: '初級', + levelIntermediate: '中級', + levelAdvanced: '高級', + levelCompetition: '競賽級', + ageKids: '兒童', + ageTeens: '青少年', + ageAdults: '成人', + ageSeniors: '長者', + certFirstAid: '急救', + certCpr: 'CPR', + certSafeguarding: '未成年人保護', + certBackgroundCheck: '背景審查', + certInsured: '已投保', + certFederation: '國家協會認證 Coach', + certQualification: '教學資格', + certJudge: '比賽評審', + certNoteLabel: '其他資歷(選填)', + certNotePlaceholder: '例如 Skateboard GB Level 2,8 年教學經驗…', + availWeekdays: '平日', + availWeekends: '週末', + availEvenings: '晚間', + availAfterSchool: '課後', + availHolidays: '學校假期', + availSeasonal: '季節性', + sectionWhatYouCoach: '你教什麼', + sectionCredentials: '資歷與安全', + sectionAvailability: '可預約時間與預約', + sectionWhereYouCoach: '你在哪裡教學', + sectionPortfolio: '作品集', + rateAmountLabel: '價格', + rateCurrencySats: 'sats', + rateCurrencyUsd: 'USD', + rateCurrencyEur: 'EUR', + rateCurrencyGbp: 'GBP', + perHour: '每小時', + perSession: '每次課程', + perHalfDay: '每半天', + perDay: '每天', + perCamp: '每期訓練營', + perProject: '每個專案', + perEvent: '每場活動', + perGig: '每場演出', + perShoot: '每次拍攝', + perPiece: '每件作品', + perCut: '每次剪髮', + perMonth: '每月', + availByAppointment: '需預約', + rateNotesLabel: '價格備註(選填)', + rateNotesPlaceholder: '浮動價格、首次課程免費、含交通…', + sectionPayments: '付款', + paymentMethodsHint: '客戶如何向你付款。這只是聲明 — SkateSpots 從不保管資金。', + payMethodCash: '現場現金', + payMethodLightning: 'Lightning', + payMethodCashu: 'Cashu', + payMethodBank: '銀行轉帳', + payMethodOther: '其他', + payWhatYouCanLabel: '浮動價格 / 隨喜付費', + bookingFeeLabel: '預約費(選填)', + bookingFeeHint: '為確認預約而直接支付給你的小額費用。SkateSpots 不保管也不退款。', + paymentNoteLabel: '付款備註(選填)', + paymentNotePlaceholder: '首次課程免費、含交通、課程後付款…', + spotsDesc: '選擇你提供教學課程的 Spot', + spotsLabel: '你教學的 Spots', + tagline: '分享你的滑板知識', + update: '更新 COACH 檔案', + updated: 'Coach 檔案已更新!', + }, + filmerForm: { + anonymous: '匿名 Filmer', + bioPlaceholder: '你的背景、風格、設備...', + camerasLabel: '相機與設備 *(至少選擇一項)', + create: '建立 Filming 檔案', + created: 'Filming 檔案已建立!', + createPro: '建立 PRO Filming 檔案', + dmNote: '💬 客戶可以透過 SkateSpots 的加密訊息直接聯絡你', + gearHelper: '列出你確切的相機、鏡頭和裝備 — 滑手很在意配置。', + gearLabel: '包包裡有什麼(選填)', + gearPlaceholder: '例如 Sony VX1000 + MK1 魚眼、Panasonic HVX200、DJI RS3 穩定器、GoPro Hero 12、Sennheiser 麥克風...', + heading: '成為 Filmer', + headlineExample: 'Skate Filmer Berlin', + identity: '你的 Filmer 身分', + nip05Reason: '新增 NIP-05 識別碼以驗證你的身分、與客戶建立信任 — 它會向他們表明你是正規的 Filmer。', + paymentDesc: '要接收客戶的 Filming 服務付款,你需要連接一個 Lightning 錢包。客戶會直接為你的作品 Zap 你。', + profileDesc: '向客戶介紹你的 Filming 專長', + profileTitle: 'Filming 檔案', + rate: '價格', + ratePlaceholder: '10000 sats/影片', + reelLabel: '作品集 / 集錦', + selectService: '請至少選擇一項服務。', + selectSkill: '請至少選擇一項 Filming 技能。', + servicesLabel: '提供的服務 *(至少選擇一項)', + servicesRequired: '服務為必填', + skillsRequired: '技能為必填', + spotsDesc: '選擇你提供 Filming 服務的 Spot', + spotsLabel: '你拍攝的 Spots', + tagline: '提供你的滑板影片 Filming — 短片、線、完整片段和比賽紀錄', + update: '更新 Filming 檔案', + updated: 'Filming 檔案已更新!', + }, + editorForm: { + anonymous: '匿名 Editor', + bioPlaceholder: '你的剪輯風格、背景、知名專案…', + contactPortfolio: '聯絡方式與作品集', + create: '發佈 Editor 檔案', + created: 'Editor 檔案已建立!', + createPro: '發佈 Pro Editor 檔案', + editTypes: '提供的剪輯類型 *(至少選擇一項)', + hardware: '硬體', + hardwarePlaceholder: '例如 MacBook Pro M3、Sony FX3', + heading: '成為 Video Editor', + headlineExample: 'Skate Video Editor', + identity: '你的身分', + locationOptional: '位置(選填)', + loginDesc: '登入以建立你的影片剪輯檔案。', + phoneTelegram: '電話 / Telegram', + portfolioPlaceholder: '作品集(Vimeo、YouTube…)', + profileDesc: '向社群介紹你的剪輯風格和技能', + profileTitle: 'Editor 檔案', + published: '你的檔案已發佈到 SkateSpots。', + rate: '價格 / 報價', + ratePlaceholder: '例如 50k sats/分鐘,DM 詢價', + selectService: '請至少選擇一種剪輯類型。', + servicesRequired: '服務為必填', + socialPlaceholder: 'Instagram / 社群帳號', + software: '軟體', + softwareHardware: '軟體與硬體技能', + softwarePlaceholder: '例如 DaVinci Resolve、Premiere', + tagline: '向滑板社群提供你的影片剪輯服務', + thumbnail: '檔案 / 作品集縮圖', + update: '更新 Editor 檔案', + updated: 'Editor 檔案已更新!', + walletConnected: '錢包已連接 ✓', + walletDesc: '直接接收客戶為你的剪輯工作支付的 Bitcoin ⚡ 款項。', + walletTitle: '⚡ 用於收款的 Lightning 錢包', + yearsExperience: '經驗年數', + yearsPlaceholder: '例如 5 年', + }, + photoForm: { + anonymous: '匿名 Photographer', + bioPlaceholder: '你的背景、風格、你喜歡拍什麼...', + cameraLabel: '相機機身 *(至少選擇一項)', + cameraRequired: '相機為必填', + contactDesc: '滑手如何看到你的作品並聯絡你(全部選填,但建議填寫)', + create: '建立 Photography 檔案', + created: 'Photography 檔案已建立!', + createPro: '建立 PRO Photography 檔案', + dmNote: '💬 滑手可以透過 SkateSpots 的加密訊息直接聯絡你', + gearHelper: '列出確切的機身、鏡頭和燈光 — 滑手很喜歡了解配置。', + gearPlaceholder: '例如 Canon R6 II、8-15mm 魚眼、70-200mm f/2.8、2× Godox AD200、無線引閃、Manfrotto 三腳架...', + heading: '成為 Photographer', + headlineExample: 'Skate Photography', + identity: '你的 Photographer 身分', + lensesLabel: '鏡頭', + lightingLabel: '燈光設備', + nip05Reason: '新增 NIP-05 識別碼以驗證你的身分、與客戶建立信任。', + paymentDesc: '要獲得拍攝報酬,請連接一個 Lightning 錢包。客戶會直接為你的作品 Zap 你。', + portfolioLabel: '作品集 / Instagram', + profileDesc: '向滑手介紹你的眼光、裝備和服務', + profileTitle: 'Photography 檔案', + ratePlaceholder: '20000 sats/拍攝', + selectCamera: '請至少選擇一種你使用的相機類型。', + selectService: '請至少選擇一項你提供的服務。', + servicesLabel: '提供的服務 *(至少選擇一項)', + servicesRequired: '服務為必填', + spotsDesc: '選擇你提供 Photography 的 Spot', + spotsLabel: '你拍攝的 Spots', + styleLabel: '拍攝風格', + supportLabel: '支撐與裝備', + tagline: '拍攝滑板現場 — 提供你的滑板 Photography', + update: '更新 Photography 檔案', + updated: 'Photography 檔案已更新!', + }, + builderForm: { + anonymous: '匿名 Builder', + bioLabel: '簡介 / 關於你的建造', + bioPlaceholder: '你的 Crew、知名建造、你如何處理專案...', + buildTypesLabel: '你建造什麼 *(至少選擇一項)', + buildTypesRequired: '建造類型為必填', + cityBase: '城市 / 基地', + contactPortfolio: '聯絡方式與作品集', + contactPortfolioDesc: '這個圈子如何看到你的建造並聯絡你(全部選填,但建議填寫)', + create: '建立 BUILDER 檔案', + created: 'Builder 檔案已建立!', + createPro: '建立 PRO BUILDER 檔案', + dmNote: '💬 客戶可以透過 SkateSpots 的加密訊息直接聯絡你', + gearHelper: 'Crew 和客戶都很喜歡了解你的工具和流程。', + gearLabel: '你的工作方式 / 設備(選填)', + gearPlaceholder: '例如 完整的混凝土班組、自有攪拌機 + 噴射混凝土設備、移動焊接,我們負責許可和排水...', + heading: '成為 Builder', + headlineExample: 'Ramp & Park Builder', + identity: '你的 Builder 身分', + insured: '持證 / 已投保', + insuredHelper: '與公共滑板場及市政工程相關', + logoPhoto: '標誌 / 照片', + materialsLabel: '材料與工種技能', + nip05Reason: '新增 NIP-05 識別碼以驗證你的身分、與客戶建立信任。', + pastBuilds: '過往建造 / Instagram', + paymentDesc: '要獲得建造報酬,請連接一個 Lightning 錢包。客戶會直接為你的作品 Zap 你。', + profileDesc: '告訴這個圈子你建造什麼以及如何工作', + profileTitle: 'Builder 檔案', + rateLabel: '價格 / 報價依據', + ratePlaceholder: '每平方公尺 / 依專案', + scaleLabel: '專案規模', + selectBuild: '請至少選擇一項你建造的內容。', + serviceArea: '服務區域', + serviceAreaPlaceholder: '例如 加泰隆尼亞,可在歐盟範圍內出行', + spotsDesc: '關聯你建造的 Spot 和公園,讓人們能在地圖上看到你的作品', + spotsLabel: '你建造的 Spots', + tagline: '澆築、焊接、建造 — 列出你的坡道和公園建造', + update: '更新 BUILDER 檔案', + updated: 'Builder 檔案已更新!', + yearsBuilding: '建造年數', + }, + skaterForm: { + backToSkaters: '返回滑手', + bioHelperPulled: '已從你的檔案提取 — 為你的滑手卡片調整一下,或保持原樣。', + bioHelperShort: '為你的滑手卡片寫一段簡短介紹。', + bioPlaceholder: '你滑了多久、喜歡什麼、在練什麼…', + browseSpots: '瀏覽 Spot', + changePhoto: '更換檔案照片', + chipBio: '簡介', + chipPhoto: '照片', + cityArea: '城市 / 地區', + created: '你已出現在地圖上!🛹', + custom: '自訂', + customHelper: '你自己的標籤 — 顯示在你的滑手卡片上,取代預設選項。', + customPlaceholder: '例如 OG、週末戰士、退役…', + discoverable: '其他滑手現在可以發現你了。', + editFullProfile: '編輯你的完整檔案', + fromProfile: '來自你的檔案', + heroEditPrefix: '編輯你的', + heroJoinPrefix: '加入', + heroSuffix: '名錄', + homeHelper: '自由輸入,或從地圖關聯一個真實 Spot,這樣人們可以去那裡。', + homePlaceholder: '本地公園 / 廣場 — 或點選「瀏覽 Spot」', + homeSpot: '常去的 Spot', + layerEnd: '即可在所有地方更改它們。', + layerIntro: '這是你的', + layerMid: ',建立在你的 Nostr 檔案之上。你的名字、照片、簡介、Lightning 和驗證都來自那裡 —', + layerWord: '滑板層', + level: '等級', + linked: '已關聯地圖上的一個 Spot', + loadingProfile: '正在載入你的檔案…', + loadingSpots: '正在載入 Spot…', + locationHelper: '幫助他人找到附近的滑手。只共享大致區域。', + loginToJoin: '登入以加入', + loginToJoinDesc: '建立你的滑手檔案,讓社群能找到你。', + mappedSpot: '已標記的 Spot', + noSpots: '還沒有找到 Spot。', + noSpotsMatch: '沒有符合你搜尋的 Spot。', + openMap: '打開地圖', + pickEverything: '選擇所有符合你風格的項目。', + pickHomeSpot: '選擇你常去的 Spot', + pickStyles: '選擇你的風格', + pickStylesDesc: '至少選擇一項你玩的項目。', + profilePic: '檔案照片', + profilePicHelper: '你的滑手卡片使用你的 Nostr 檔案照片 — 到處都一樣。', + publishingAs: '發佈身分', + putOnMap: '把我放到地圖上', + searchSpots: '按名稱或城市搜尋 Spot…', + skateStory: '你的滑板故事', + stance: '站位', + unlinkSpot: '取消關聯 Spot', + updateButton: '更新我的檔案', + updated: '檔案已更新!', + whatYouSkate: '你玩什麼 *', + yearsPlaceholder: '例如 8', + yearsSkating: '滑板年數', + yourProfilePic: '你的檔案照片', + zapsOn: '已開啟 Zap', + }, + skaters: { + clearSearch: '清除搜尋', + community: '社群', + countMany: '滑手', + countOne: '滑手', + editProfile: '編輯我的滑手檔案', + heroDesc: '找到你的夥伴。瀏覽代表 SkateSpots 的滑手陣容 — 按風格、站位、等級和城市。', + nip05Verified: 'NIP-05 已驗證', + noMatches: '沒有符合', + noneDesc: '成為第一個加入名錄的人,把 SkateSpots 放上地圖。', + noneTitle: '還沒有滑手', + noVerifiedMatch: '沒有符合的已驗證滑手', + searchPlaceholder: '按名字、城市或 npub 搜尋…', + tryDifferentSearch: '試試其他搜尋詞,或清除篩選。', + tryTurnOffVerified: '試試關閉「已驗證」篩選以查看所有人。', + verifiedFilterTitle: '僅顯示擁有已驗證 NIP-05 身分的滑手', + }, + skaterCard: { + inDirectory: '你已進入滑手名錄', + joinDesc: '新增你的站位、風格和等級,讓滑手能找到你。', + joinTitle: '加入滑手名錄', + }, + crewsStrip: { + allCrews: '所有 Crew', + memberMany: '{{count}} 名成員', + memberOne: '{{count}} 名成員', + title: '這個圈子裡的 Crew', + }, + labLink: { + coach: 'Coach', + filmer: 'Filmer', + editor: 'Editor', + photographer: 'Photographer', + builder: 'Builder', + artist: '藝術家', + graffiti: '塗鴉', + tattoo: '刺青', + trainer: '訓練師', + musician: '音樂人', + judge: '評審', + barber: '理髮師', + organizer: '主辦人', + lab: 'Lab', + linkedProfiles: '已關聯的 Lab 檔案', + desc: '你也經營工作室、教學或建造服務?關聯你的 Lab 列表,讓人們可以雇用你的 Crew。選填。當 Lab 檔案也反向連結到這個 Crew 時,雙方都會顯示一個綠色', + descEnd: '徽章。', + empty: '你還沒有任何 Lab 檔案。在 The Lab 建立一個即可在這裡關聯。', + }, + proUpgrade: { + goPro: '升級 Pro', + optional: '· 選填', + freeTo: '免費發佈。Pro 增加一個', + proBadge: 'Pro 徽章', + featuredPlacement: '精選展示', + atTop: '位於 The Lab 頂部。', + active: '已啟用', + benefit1: '你的檔案和卡片上顯示金色「Pro」徽章', + benefit2: '滑手瀏覽 The Lab 時優先展示', + benefit3: '支持 SkateSpots — 沒有廣告,沒有中間商', + platformOwner: '平台擁有者 — Pro 永遠開啟。', + proActiveOne: 'Pro 已啟用 · 剩餘 {{count}} 天。你的檔案將獲得精選展示。', + proActiveMany: 'Pro 已啟用 · 剩餘 {{count}} 天。你的檔案將獲得精選展示。', + context: 'Pro 到期後你的檔案仍免費展示 — 只是失去徽章和推廣。', + }, + profilePreview: { + viewPublic: '查看公開頁面', + unnamed: '未命名滑手', + noHandle: '還沒有使用者名稱', + }, + pyramid: { + pyramidWord: 'PYRAMID', + rankingsWord: 'RANKINGS', + subtitle: '你所在城市的頂級貢獻者', + yourRank: '你的排名', + keepContributing: '繼續貢獻,向更高處攀登!', + topContributors: '頂級貢獻者', + noContributors: '還沒有貢獻者。成為第一個新增 Spot 或建立活動的人!', + spots: 'Spots', + events: '活動', + total: '總計', + trust: '信任', + }, + detail: { + joined: '加入於', + about: '關於', + howWeWork: '我們的工作方式', + inTheBag: '包包裡有什麼', + hardware: '硬體', + software: '軟體', + eventsJudged: '評審的活動', + eventsOrganized: '主辦的活動', + spots: 'Spots', + viewSpot: '查看 Spot', + credentialsTitle: '資歷與安全', + selfAttested: '由 Coach 自我聲明 — SkateSpots 未驗證。', + formats: '形式', + levels: '級別', + ages: '年齡', + languages: '語言', + availability: '可預約時間', + bookSession: '預約課程', + portfolio: '作品集', + watchReel: '在 {{platform}} 觀看', + paymentsTitle: '付款', + payWhatYouCan: '隨喜付費', + bookingFee: '預約費', + payBookingFee: '支付預約費', + bookingFeeNote: '直接支付給 Coach。SkateSpots 不保管也不退款。', + bookingFeeNoRail: '這位 Coach 沒有設定 Lightning 地址,因此無法在應用程式內付款 — 請聯絡他們安排付款。', + serviceArea: '服務區域', + licensedInsured: '持證 / 已投保', + studio: '工作室', + shopStudio: '店舖 / 工作室', + booksOpen: '開放預約', + credentials: '資歷', + remoteOnline: '可遠端 / 線上', + graffitiCrew: '塗鴉 Crew', + act: '演出', + listen: '收聽', + upcomingGigs: '即將到來的演出', + past: '過往', + experience: '經驗', + yearsCount: '{{count}} 年', + rate: '價格', + contact: '聯絡方式', + sendMessage: '傳送訊息', + bookGig: '預約演出', + portfolioDomain: '作品集 · {{domain}}', + manage: '管理', + admin: '管理員', + editProfile: '編輯檔案', + publishedTitle: '你已上線', + publishedBody: '你的檔案已發佈到 The Lab。分享它,讓滑手能找到你。', + manageRemove: '從 The Lab 移除你的{{noun}}檔案。', + adminTakeDown: '下架這個{{noun}}檔案。它將在整個 SkateSpots 中被隱藏。', + entityLabel: '{{noun}}檔案', + deleteProfile: '刪除檔案', + location: '位置', + servicesSkills: '服務與技能', + noun: { + coach: 'Coach', + filmer: 'Filmer', + editor: 'Editor', + photographer: 'Photographer', + builder: 'Builder', + artist: '藝術家', + graffiti: '塗鴉藝術家', + tattoo: '刺青藝術家', + trainer: '訓練師', + musician: '音樂人', + judge: '活動評審', + organizer: '活動主辦人', + barber: '理髮師', + profile: '檔案', + }, + skillsTitle: { + skills: '技能', + servicesGear: '服務與裝備', + whatWeBuild: '我們建造什麼', + whatTheyMake: '他們製作什麼', + stylesWork: '風格與作品', + styles: '風格', + focusSpecialties: '專長與特色', + genresInstruments: '曲風與樂器', + formatsSpecialties: '形式與特色', + servicesStyles: '服務與風格', + eventTypesServices: '活動類型與服務', + }, + }, + rider: { + heroDesc: '你可驗證的滑手身分。Nostr 簽名、可列印、無法偽造。', + heroDesc2: '從其他滑手那裡獲得見證技能徽章。取得滑板場通行證。隨時隨地分享你的卡片。', + headerTagline: 'Nostr 簽名 · 可列印 · 二維碼驗證', + tabCard: '我的卡片', + tabBadges: '徽章', + tabAward: '授予', + rendering: '渲染中…', + shareCard: '分享卡片', + savePng: '儲存 PNG', + print: '列印', + copyId: '複製 ID', + cardType: '卡片類型', + licenseLabel: '滑手執照', + licenseSub: '你的個人滑手身分', + parkLabel: '滑板場通行', + parkSub: '作為滑板場主發放通行證', + theme: '主題', + holoTitle: '全息閃光', + holoDesc: '動態箔片效果', + cardDetails: '卡片詳情', + skateStyle: '滑板風格', + ridesFor: '效力於', + ridesForPlaceholder: '本地店舖…', + sponsors: '贊助商', + sponsorsPlaceholder: '品牌…', + showOnCard: '在卡片上顯示', + zaps: 'Zaps ⚡', + skills: '技能', + selected: '已選 {{count}}/6', + goldBadgesHint1: '你卡片上的金色徽章來自其他滑手對你的見證 — 見', + goldBadgesHint2: '。', + parkOwnersOnly: '僅限滑板場主。', + parkOwnersDesc: '使用發佈你滑板場列表的同一個 Nostr 金鑰來簽發。任何人都可以掃描二維碼並在鏈上驗證簽名 — 無需中央機構。', + parkDetails: '滑板場詳情', + parkName: '滑板場名稱', + parkNamePlaceholder: 'The Berrics…', + riderName: '滑手姓名', + riderNamePlaceholder: '卡片上的名字', + riderNpub: '滑手的 Nostr ID(npub)', + accessLevel: '通行級別', + validThru: '有效期至', + publishToNostr: '發佈到 Nostr', + badgesIntro: '這些徽章由其他滑手在 Nostr 上見證並簽名。它們會作為金色 ⭐ 標記顯示在你的卡片上。', + earnMore: '想獲得更多?在別人面前滑板,請他們見證你的招式。', + awardSomeone: '給他人授予徽章', + youSawIt: '你親眼所見', + youSawItDesc: '在 Nostr 上簽署證明。它將成為他們永久紀錄的一部分 — 加密綁定到你的金鑰。', + skillsWitnessed: '你見證的技能', + whereSeen: '你在哪裡看到的?', + optional: '(選填)', + signingOnNostr: '正在 Nostr 上簽名…', + awardBadge: '授予徽章', + addRiderSkill: '新增滑手 npub + 至少一項技能', + invalidNpub: '無效的 npub', + badgeAwarded: '🏅 徽章已授予!', + badgeSent: '已傳送 {{skills}}。', + failed: '失敗', + couldNotRender: '無法渲染卡片', + popupBlocked: '彈出視窗被阻擋', + popupBlockedDesc: '請允許此網站使用彈出視窗。', + linkCopied: '🔗 連結已複製!', + enterRiderNpub: '輸入滑手的 npub', + parkPublished: '✅ 滑板場通行卡已發佈!', + publishFailed: '發佈失敗', + noBadges: '還沒有徽章。在別人面前滑板,請他們見證你的招式!', + showMore: '再顯示 {{count}} 個', + witnessedBy: '見證人', + at: '在', + previewLicense: '滑手執照', + previewSince: '自 {{year}}', + previewEvts: '活動', + previewScan: '掃描驗證', + previewSkatepark: '滑板場', + previewAccessPass: '通行證', + previewMemberName: '成員姓名', + previewIssuedBy: '由滑板場主簽發 · Nostr 簽名', + previewValidThru: '有效期至', + previewNostrVerified: 'Nostr 已驗證', + }, + craftFields: { + detailsTitle: '其他詳情', + deliverables: '交付內容', + turnaround: '交付週期', + surfaces: '表面 / 牆面', + maxSize: '最大尺寸', + setLength: '演出時長', + techRider: '技術需求單', + travel: '出行', + certifications: '認證', + insurance: '保險', + permits: '許可', + deposit: '訂金', + minimum: '最低', + modalities: '方式', + duration: '預約時長', + drone: '無人機', + leadTime: '前置期', + warranty: '保固', + }, + craftForm: { + profileImage: '檔案圖片', + nameHeadline: '名字 / 標題', + about: '關於', + aboutPlaceholder: '向滑手介紹你的{{noun}}工作…', + required: '必填', + nip05Title: '新增 NIP-05 以建立信任', + nip05Desc: 'NIP-05 識別碼能幫助滑手確認你是真材實料。強烈建議在發佈前設定。', + editingNote: '正在編輯你現有的{{noun}}檔案 — 發佈會取代它。', + location: '位置', + pinned: '📍 已固定到地圖({{lat}}, {{lng}})', + experienceYears: '經驗(年)', + expPlaceholder: '例如 5', + ratePlaceholder: '例如 20k sats / 依專案', + contactLinks: '聯絡方式與連結', + phoneOptional: '電話(選填)', + emailOptional: '電子郵件(選填)', + socialPlaceholder: '社群(Instagram 等)', + gettingPaid: '收款', + updateProfile: '更新檔案', + publishProfile: '發佈檔案', + rateLeftBlankNote: '選填 — 如果上面的價格已足夠,可留空。', + sectionRequired: '{{section}}為必填', + sectionRequiredDesc: '請在「{{section}}」下至少選擇一項。', + updated: '檔案已更新!', + created: '檔案已建立!', + headlineExample: 'Skate Coach Berlin', + }, + }, + socialUi: { + agentPanel: { + spot: 'Spot', + event: '活動', + labPro: 'Lab pro', + gear: '裝備', + crew: 'Crew', + description: '了解這個 Crew — 它的活動、成員名單和招募 — 以及擁有即時資料的更廣泛圈子。', + greeting: '嗨!我是 Sasquatch,{{crew}} 的嚮導。問我關於這個 Crew 的事 — 我們下一場活動、誰在運營、我們在找什麼 — 或者更廣泛的圈子。', + suggestion1: '我們的下一場活動是什麼?', + suggestion2: '誰在運營這個 Crew?', + suggestion3: '我們在找什麼?', + suggestion4: '我們附近最好的 Spot?', + suggestion5: '滑板的天氣怎麼樣?', + thinking: 'Sasquatch 正在思考…', + placeholder: '詢問你當地的圈子…', + disclaimer: 'AI 可能會出錯 — 連結指向真實的列表。', + }, + badge: { + upcomingOne: '{{count}} 場即將到來的活動', + upcomingMany: '{{count}} 場即將到來的活動', + comingOne: '{{count}} 場活動即將開始', + comingMany: '{{count}} 場活動即將開始', + }, + bell: { + youAreIn: '你已加入 {{crew}}!🛹', + membershipConfirmed: '成員身分已確認。', + couldNotConfirm: '無法確認', + addedYouTo: '把你加入到了', + confirmToAppear: '確認後即可顯示為成員。', + notifications: '通知', + notificationsNew: '通知({{count}} 則新)', + unreadCount: '{{count}} 則未讀通知', + markRead: '標記為已讀', + allClear: '全部清空', + tabAll: '全部', + tabTrades: '交易', + tabSocial: '社交', + tabNews: '新聞', + tabCrews: 'Crew', + checkingUpdates: '正在檢查更新…', + checkingTrades: '正在檢查報價和交易…', + loadingDrops: '正在載入最新內容…', + emptyAll: '報價、交易、Zap、回覆、電子報推送和 Crew 活動都會顯示在這裡。', + emptyTrades: '報價、還價和交易確認都匯集在這裡 — 無論你是出售、購買還是交換。', + emptySocial: 'Zap、回應、轉發、提及、回覆、活動報名和主辦方更新都匯集在這裡。', + emptyNews: 'SkateSpots 電子報推送會顯示在這裡。在電子報頁面訂閱。', + emptyCrews: 'Crew 邀請、共同體請求和成員申請都會顯示在這裡。', + subscribeBanner: '訂閱即可讓新內容出現在你的通知裡', + read: '閱讀', + allCaughtUp: '你已全部看完', + }, + chat: { + hidden: '已隱藏', + hideMessageAria: '隱藏這則訊息', + hideMessageTitle: '隱藏訊息(管理員)', + messageHidden: '訊息已隱藏', + messageHiddenDesc: '已對所有人從 Crew 聊天中隱藏。', + messageHideFailed: '隱藏訊息失敗', + encryptionUnavailable: '加密不可用', + encryptionUnavailableDesc: '你的簽名器不支援 NIP-44 加密。請升級你的擴充功能。', + messageFailed: '訊息失敗', + couldNotSend: '無法傳送訊息。', + noOneToMessage: '還沒有人可以傳訊息', + noOneToMessageDesc: '這個 Crew 沒有其他成員可以聊天。', + subject: '{{crew}} Crew 聊天', + title: 'Crew 聊天', + cordnBadgeTitle: '透過 ContextVM 經由這個 Crew 的 Cordn 協調器路由。端到端加密。', + private: '私密', + privateBadgeTitle: '端到端加密 — 只有 Crew 成員能讀取這些訊息。', + encryptedCordn: '已加密並經 Crew 協調器(Cordn)路由 — 訊息不會到達公共 relay。', + encryptedNip17: '為創始人及所有列出的 Crew 成員提供的加密群聊。', + moderatorNote: ' 作為版主,你可以對 Crew 隱藏訊息。', + loginToSee: '登入以查看你是否能加入 Crew 聊天。', + membersOnly: '此聊天僅限 Crew 成員。請創始人把你加入 Crew 即可參與對話。', + noMessages: '還沒有訊息。開啟 Crew 聊天 — 計劃一次活動、分享一個 Spot、為片段助威。', + newMessages: '新訊息', + new: '新', + placeholder: '給你的 Crew 傳訊息…', + sendAria: '傳送訊息', + }, + collectiveJoinRequest: { + addedTitle: '已將 {{name}} 加入 {{collective}} 🛹', + addedDesc: '他們將從自己那邊確認,以顯示為已驗證成員。', + couldNotAdd: '無法新增成員', + couldNotDismiss: '無法忽略', + addedDone: '已新增', + addedTo: '到', + dismissedDone: '已忽略來自 {{name}} 的請求', + wantsToJoin: '想加入', + alreadyOnRoster: '已在名單中', + openCollective: '打開共同體', + dismiss: '忽略', + addToCollective: '加入共同體', + }, + collectiveMembers: { + confirmed: '已確認', + pending: '待處理', + pendingTooltip: '由共同體列出 — 等待該成員確認。', + crewOnly: '僅 Crew 可見', + crewOnlyTooltip: '該成員選擇僅對 Crew 夥伴可見。你能看到他們是因為你在 Crew 中。', + hiddenMember: '隱藏成員', + title: '成員', + verifiedOf: '{{total}} 人中 {{confirmed}} 人已驗證 — 每位已確認成員都用自己的 Nostr 金鑰簽名。', + verifiedPerMember: '成員身分按成員逐一驗證。每位成員用自己的 Nostr 金鑰確認。', + adminsOne: '{{count}} 名管理員協助運營這個 Crew。', + adminsMany: '{{count}} 名管理員協助運營這個 Crew。', + }, + confirmMembership: { + public: '公開', + crewOnly: '僅 Crew 可見', + confirmedTitle: '成員身分已確認!', + confirmedCrew: '你已在 {{name}} 中驗證 — 僅對 Crew 夥伴可見。', + confirmedPublic: '你現在顯示為 {{name}} 的已驗證成員。', + failed: '確認失敗', + addedTo: '你已被加入 {{name}}', + addedDesc: '確認你的成員身分,讓它在你的和他們的檔案上顯示為已驗證。', + yourVisibility: '你的可見性', + confirming: '確認中…', + confirmButton: '確認成員身分', + }, + contacts: { + message: '傳訊息', + removePrivate: '從私密聯絡人中移除', + savePrivate: '儲存到私密聯絡人', + seoTitle: '聯絡人 - SkateSpots', + seoDescription: '你的圈子 — Crew 夥伴、你追蹤的人和近期對話,以及私密加密聯絡人。', + encryptionUnavailableDesc: '你的簽名器不支援 NIP-44 加密。', + removed: '已從私密聯絡人中移除', + saved: '已儲存到私密聯絡人', + savedDesc: '只有你能看到這個列表。', + updateFailed: '無法更新聯絡人', + loginTitle: '你的圈子,盡在一處', + loginDesc: '登入以查看你的 Crew 夥伴、你追蹤的人和近期對話 — 並保留一份私密加密的聯絡人列表。', + title: '聯絡人', + subtitle: '你的圈子 — Crew 夥伴、追蹤和對話', + filterPlaceholder: '按 npub 篩選…', + tabCrew: 'Crew', + tabFollows: '追蹤', + tabDms: 'DM', + tabSaved: '已儲存', + emptyCrewmates: '還沒有 Crew 夥伴。加入或建立一個 Crew,建立你的圈子網路。', + emptyFollowing: '你還沒有追蹤任何人。', + emptyDms: '還沒有對話。給滑手傳訊息即可開始。', + savedHint: '此列表用你的金鑰加密 — 只有你能讀取。點選任何人的星號即可新增。', + emptySaved: '還沒有儲存的聯絡人。從任意標籤頁給人們加星,建立你的私密通訊錄。', + }, + conversation: { + unknown: '未知', + seoTitle: '與 {{name}} 聊天 - SkateSpots', + seoDescription: '私密加密對話', + sendFailed: '訊息傳送失敗', + sendFailedDesc: '請稍後重試。', + tradeConfirmed: '交易已確認', + tradeConfirmedDesc: '你們雙方的聲譽已更新。', + tradeConfirmFailed: '無法確認交易', + somethingWrong: '出了點問題。', + soldNote: '已售給 {{name}}。', + saleConfirmed: '銷售已確認', + saleConfirmedDesc: '{{name}} 現在可以確認他們那邊。', + saleConfirmFailed: '無法確認銷售', + escrowRedeemed: '託管已贖回', + escrowRedeemedDesc: '資金現在在你的 Cashu 錢包中。', + escrowRedeemFailed: '無法贖回託管', + loginTitle: '登入以查看訊息', + secureLoginTitle: '需要安全登入', + secureLoginDesc: '訊息需要安全的簽名器應用程式。', + encrypted: '已加密', + refresh: '重新整理', + didCompleteTrade: '你完成了這筆交易嗎?', + recordedSale: '{{name}} 記錄了這筆銷售。確認後即可更新你們雙方的聲譽。', + confirm: '確認', + confirmSale: '確認這筆銷售?', + askedToRecord: '{{name}} 請你記錄它。確認可為你們雙方累積聲譽。', + confirmSaleButton: '確認銷售', + redeemEscrow: '贖回託管', + escrowAppOnly: 'Cashu 託管僅限應用程式內 — 請在手機上打開 SkateSpots 進行贖回。', + startThread: '傳送訊息以開始對話', + placeholder: '輸入訊息...', + e2eeNote: '訊息使用 NIP-17 端到端加密', + }, + coordinator: { + secondsAgo: '{{count}} 秒前', + minutesAgo: '{{count}} 分鐘前', + hoursAgo: '{{count}} 小時前', + daysAgo: '{{count}} 天前', + statusIdle: '尚未檢查', + statusChecking: '檢查中…', + statusOnline: '已連接', + statusStale: '沉寂', + statusOffline: '未見過', + statusError: '無法連線', + notACoordinator: '那不是協調器', + notACoordinatorDesc: '貼上 nprofile、npub 或 cordn.net 連結。', + added: '已新增協調器', + relayOne: '{{count}} 個 relay', + relayMany: '{{count}} 個 relay', + lastSeen: '最後出現 {{time}}', + onlineDesc: '正在公告。使用它的群組現在可以傳遞訊息。', + staleDesc: '找到了,但它最近沒有公告 — 可能正在休眠。', + offlineDesc: '沒有看到公告。它可能是私密的(那沒問題),或者只是離線。', + errorDesc: '無法連線到 relay。', + idleDesc: '檢查中…', + checkingDesc: '正在尋找它的公告…', + eventFoundOne: '找到 {{count}} 個事件。', + eventFoundMany: '找到 {{count}} 個事件。', + check: '檢查', + addLinkCopied: '新增連結已複製', + copyFailed: '複製失敗', + copyManually: '請手動複製。', + addLink: '新增連結', + removeConfirm: '要從這個裝置移除這個協調器嗎?', + scanToJoin: '在 Cordn 中掃描以加入這個協調器。', + noCoordinator: '還沒有協調器', + noCoordinatorDescA: '協調器會按順序傳遞你 Crew 的', + encryptedWord: '加密', + noCoordinatorDescB: '群組訊息。它會看到誰、何時以及哪個群組 — 永遠不會看到內容。選一個,或自己運行一個。', + change: '更換協調器', + addTitle: '新增協調器', + add: '新增', + scanQR: '掃描協調器二維碼', + inputPlaceholder: 'nprofile… 或 cordn.net 連結', + runOwn: '自己運行一個', + runOwnDesc: '它可以放在舊手機、Raspberry Pi 或任何你讓它開著的小盒子裡。你的群組在它運行時會持續運作 — 而且你可以隨時搬遷群組。', + onPhone: '在手機上', + onPhoneDesc: '使用 Cordn Coordinator 應用程式,然後在這裡掃描它的二維碼來新增。', + openCordn: '打開 Cordn', + scanItsQR: '掃描它的二維碼', + onServer: '在伺服器上', + commandCopied: '指令已複製', + copyCommand: '複製指令', + androidSleep: 'Android 可能會讓手機協調器休眠。預期偶爾需要搬遷群組。', + privacyNote: '🔒 協調器只會看到密文和中繼資料 — 永遠不會看到訊息內容。自己運行一個,連中繼資料也歸你所有。', + customTitle: '自訂聊天協調器', + customBadge: '· 實驗性 · 你自己的 relay', + customDescShort: '選填 — 你的 Crew 已經內建端到端加密聊天,所以你不需要這個。只有在你運行自己的', + remove: '移除', + pointerNote: '目前僅為指標:wss:// 端點會用作 Crew 的聊天 relay;https:// 端點則透過共享的 ContextVM relay。真正的 Cordn MLS 尚未接通。', + cordnCoordinator: 'Cordn 協調器', + invalid: '那看起來不像協調器。請貼上 nprofile、cordn.net 連結或 https/wss URL。', + useMine: '使用我的協調器', + }, + createCrew: { + seoTitle: '建立 Crew - SkateSpots', + seoDescription: '建立你的滑板 Crew — 主場、成員和 Spot。', + loginRequired: '需要登入', + loginRequiredDesc: '你需要登入才能建立 Crew。', + backToCrews: '返回 Crews', + title: '建立 Crew', + intro: '你的滑板家庭 — 和你一起滑板的人。只要一個名字就能開始;其他全部選填。', + }, + crew: { + seoTitleNamed: '{{name}} - SkateSpots Crew', + seoTitle: 'Crew - SkateSpots', + seoDescription: 'SkateSpots 上的一個滑板 Crew。', + postHidden: '貼文已隱藏', + postHiddenDesc: '已對所有人從 Crew 動態中移除。', + postHideFailed: '隱藏貼文失敗', + backToCrews: '返回 Crews', + disband: '解散', + youAreCaptain: '你是隊長', + member: '成員', + askSasquatch: '詢問 Sasquatch', + agent: 'Crew 助理', + agentDesc: '你 Crew 的 AI 嚮導 — 附近的 Spot、活動、Coaches 和裝備,附即時資料。', + eventsTab: '活動', + chatTab: '聊天', + newMessages: '新訊息', + hostJam: '主辦活動', + noEvents: '還沒有 Crew 活動。以 Crew 身分主辦一場活動、比賽或聚會 — 它會把你的 Crew 連到活動日曆,並讓人們可以 Zap 它。', + support: '支持', + zapCrew: 'Zap 這個 Crew', + bandTitle: 'Crew 樂團', + bandTagline: '現場音樂 · 滑板與聲音', + listenTitle: '收聽:{{domain}}', + listen: '聆聽音樂', + setUpGig: '安排演出', + bookGigMessage: '嗨 {{crew}} — 有興趣邀請 {{band}} 演出。你方便談日期嗎?', + messageAboutGig: '傳訊談演出', + gigHintA: '會在這個 Crew 主辦的日曆中新增一個音樂活動。', + messageShort: '傳訊息', + gigHintB: '會開啟一個給 Crew 的加密 DM,用來敲定日期和細節。', + homeSpots: '主場 Spots', + viewSpot: '查看 Spot', + seeOnMap: '在地圖上查看 →', + founderLinks: '創始人與連結', + startedBy: '由 {{name}} 創立', + opens: '開啟:{{domain}}', + }, + crews: { + seoTitle: 'Crews - SkateSpots', + seoDescription: '找到你的夥伴。探索你附近的滑板 Crew、共同體和社群。', + videoPartTooltip: '這個 Crew 有一支影片作品', + part: '作品', + bandTooltip: 'Crew 樂團:{{name}}', + band: '樂團', + focusAll: '全部', + focusAllShort: '全部', + focusDiy: 'DIY', + focusPhoto: '照片', + focusCoaching: 'Coaching', + focusArt: '藝術', + focusMusic: '音樂', + focusPhysio: '物理治療', + focusMixed: '混合', + title: 'Crews', + heroLine: '你以地圖為錨的滑板家庭 — 和你一起滑板', + heroWith: '的人', + heroRest: ',而不是你雇用的人(那是 The Lab)。', + crewCountOne: '{{count}} 個 Crew', + crewCountMany: '{{count}} 個 Crew', + cityCountOne: '{{count}} 個城市', + cityCountMany: '{{count}} 個城市', + createCrew: '建立 Crew', + create: '建立', + searchPlaceholder: '按名字或城市搜尋 Crew…', + filterTitle: '篩選 Crew', + filterDesc: '這個 Crew 熱衷什麼。', + nearMe: '我附近', + emptySearchTitle: '沒有符合你搜尋的 Crew', + emptySearchHint: '找不到「{{query}}」的結果。試試其他名字或城市。', + clearSearch: '清除搜尋', + emptyFocusTitle: '還沒有 {{label}} Crew', + emptyFocusHint: '這裡還沒有人舉起「{{label}}」的旗幟。顯示所有 Crew,或自己創一個。', + showAll: '顯示所有 Crew', + claimTitle: '認領你的本地圈子', + claimHint: '這裡還沒有 Crew 進駐。成為第一個 — 建立你的 Crew、關聯你的主場 Spots,把你的圈子放上地圖讓大家找到。', + }, + crewCoordinator: { + privateChat: '私密 Crew 聊天', + on: '開啟', + defaultA: '「', + chatWord: '聊天', + defaultB: '」標籤是', + e2ee: '端到端加密', + defaultC: '的,適用於創始人和所有列出的成員 — 無需設定。訊息會密封到每位成員的金鑰(NIP-17),所以只有你的 Crew 能讀取。', + advancedA: '進階:自己運行一個', + cordnCoordinator: 'Cordn 協調器', + routeThrough: '讓聊天經由它路由', + coordinator: '協調器', + deliveredOver: '透過', + sharedRelay: '— 共享的 ContextVM relay 傳遞。', + ownRelay: '— 你 Crew 自己的 relay 傳遞。', + chatLive: '私密聊天已上線', + routesA: '「', + routesB: '」標籤會經由這個協調器路由:訊息是端到端加密的(NIP-44,密封到每位成員),所以它只會處理密封的流量。', + publicWarning: '提醒:它是透過共享的 ContextVM relay 定址的,所以密文及其中繼資料(哪個 Crew、何時)是公開可見的 — 只是無法讀取。把 Crew 指向私密的 wss:// relay,連這些也能保持私密。', + ownRelaySafe: '沒有任何 Crew 專屬的內容會離開你 Crew 自己的 relay。', + manage: '管理協調器', + open: '打開 {{domain}}', + runBy: '協調器運行者', + }, + dms: { + securityReminder: '安全提醒', + phishingStrong: 'SkateSpots 永遠不會主動 DM 你', + phishingRest: '要求你驗證帳號、分享金鑰或付款。如果有人透過 DM 自稱是 SkateSpots 客服 — 那是詐騙。', + dismissReminder: '關閉安全提醒', + peopleCount: '{{count}} 人', + youPrefix: '你:', + unreadMessages: '未讀訊息', + seoTitle: '訊息 - SkateSpots', + seoDescription: '與滑板社群的私密加密訊息', + loginTitle: '登入以查看訊息', + loginDesc: '與社群中滑手的私密加密訊息', + secureLoginTitle: '需要安全登入', + secureLoginDesc: '私密訊息需要安全的簽名器應用程式來加密你的對話。', + onAndroid: '在 Android 上:', + useAmber: '使用 Amber 應用程式', + getAmber: '取得 Amber →', + onIOS: '在 iOS 上:', + iosHint: '試著從設定使用 bunker 連線(nsec.app)登入', + browserHint: '試著使用支援加密的瀏覽器擴充功能(如 Alby 或 nos2x)登入。', + title: '訊息', + subtitleFull: '使用 NIP-17 端到端加密', + subtitleShort: '已加密', + newMessage: '新訊息', + groups: '群組', + loadFailed: '載入訊息失敗', + emptyTitle: '還沒有訊息', + emptyDesc: '與社群中的某個人開始對話', + startConversation: '開始對話', + undecryptableOne: '{{count}} 則加密訊息無法被你的簽名器開啟。', + undecryptableMany: '{{count}} 則加密訊息無法被你的簽名器開啟。', + }, + editCrew: { + seoTitleNamed: '編輯 {{name}} - SkateSpots', + seoTitle: '編輯 Crew - SkateSpots', + seoDescription: '編輯你的滑板 Crew。', + loginRequired: '需要登入', + notYours: '不是你的 Crew', + notYoursDesc: '只有 Crew 創始人可以編輯這個 Crew。', + backToCrew: '返回 Crew', + title: '編輯 Crew', + }, + form: { + add: '新增', + added: '已新增', + addNameInBasicsA: '請回到', + addNameInBasicsB: '新增一個 Crew 名稱以完成。', + adminsDescA: '讓值得信賴的成員成為', + adminsWord: '管理員', + adminsDescB: '— 他們可以用自己的金鑰邀請成員並管理 Crew 動態與聊天。你(創始人)始終是 Crew 身分的擁有者。', + agentDescA: '新增', + agentDescB: ',一個真正了解你 Crew 的 AI 嚮導。成員可以詢問', + agentDescC: '— 以及來自即時 SkateSpots 資料的附近 Spot、活動、Coaches 和裝備。直接在瀏覽器中運作;無需金鑰或設定。它還很早(免費方案 AI,所以偶爾會慢)。', + agentDescStrong: '你們下一場活動、誰在運營 Crew、你們在找什麼和你們的氛圍', + agentEnabledNote: '儲存後 Sasquatch 會出現在你的 Crew 頁面上。', + bandDesc: '有樂團嗎?滑板圈和本地音樂密不可分 — 留下你的樂團名稱和音樂連結。', + bandFooterA: '若要完整的樂團檔案(曲風、樂器、演出),請在', + musicianWord: '音樂人', + bandFooterB: '建立,然後在上方', + linkedLabWord: '已關聯的 Lab 檔案', + bandFooterC: '區塊中關聯。', + bandMusicWord: '樂團與音樂', + bandName: '樂團名稱', + bandNamePlaceholder: '例如 The Bail Outs', + bandNudgeA: '你有樂團 — 點一下設定你的', + crewTypeWord: 'Crew 類型', + bandNudgeB: '為', + bandNudgeC: ',這樣你也會出現在 The Lab 的音樂圈中。', + beta: 'Beta', + bioLabel: '關於 / 宣言', + bioPlaceholder: '你是誰、你玩什麼、你的故事...', + continue: '繼續', + crewCreated: 'Crew 已建立!', + crewUpdated: 'Crew 已更新!', + crewName: 'Crew 名稱', + crewOnlyWord: '僅 Crew 可見', + crewType: 'Crew 類型', + crewTypeDescA: '你的 Crew 是否專注於某種技藝?選一個,也會出現在', + theLab: 'The Lab', + crewTypeDescB: '的該圈子中。一般滑板 Crew 保持', + mixedWord: '混合', + crewTypeDescC: '。', + customVibeHint: '用 # 新增你自己的氛圍或焦點', + customVibePlaceholder: '例如 downhill、night-sessions、no-comply', + editDesc: '你 Crew 的身分、主場和成員', + enableAgent: '啟用 Crew 助理', + enableTreasury: '啟用 Crew 資金庫', + failed: '失敗', + founded: '創立(年份)', + geolocationUnsupported: '不支援定位', + gettingLocation: '取得中...', + goalHint: '請確認你的 Nostr 檔案有 Lightning 地址(lud16),這樣捐款才能到手。', + goalPlaceholder: '例如 為 DIY Spot 鋪混凝土', + goalTarget: '目標(sats)', + goalWhat: '目標是什麼?', + homeSpots: '主場 Spots', + homeSpotsDesc: '關聯你 Crew 常去的 Spot — 它們會在地圖上連到你的 Crew', + homeTurf: '主場(城市 / 地區)', + homeTurfPlaceholder: 'Bristol, UK', + instagramDetected: '偵測到 Instagram 短片', + invalidMember: '請輸入有效的 npub、nprofile 或十六進位公鑰。', + latitude: '緯度', + leaveBlankLocation: '留空以保留目前的主場位置。', + links: '連結', + locationError: '定位錯誤', + locationFound: '已找到位置', + logoAlt: 'Crew', + logoHint: '標誌能讓你的 Crew 在地圖和動態中一眼被認出。正方形效果最好。', + logoLabel: 'Crew 標誌 / 照片', + logoUploaded: '標誌已上傳', + longitude: '經度', + looksGood: '看起來不錯', + makeAdmin: '設為管理員', + mapPin: '地圖標記', + mapPinHint: '把你的 Crew 放上地圖,讓本地人能找你。點一下按鈕 — 無需輸入。', + memberAlreadyAdded: '該成員已經新增過了。', + members: '成員', + membersDesc: '新增你 Crew 的 Nostr 帳號。每位成員用自己的金鑰確認 — 在那之前他們會顯示為「待處理」。', + musicLink: '音樂連結', + nameCrew: '為你的 Crew 命名', + nameCrewDesc: '繼續之前,Crew 需要一個名稱。', + nameCrewFirst: '請先為你的 Crew 命名', + nameHint: '唯一真正必要的東西。你之後可以更改。', + namePlaceholder: '例如 Backyard Bandits', + nameRequired: '需要名稱', + nameRequiredDesc: '給你的 Crew 一個名稱。', + nip05DescA: '一個你可在任何網域控制的可驗證帳號,例如', + nip05DescB: '。它會對照這個 Crew 的創始人金鑰驗證,你可以新增幾個 — 每個在其網域確認時都會顯示綠色勾選。', + nip05Label: 'Crew NIP-05', + nip05Placeholder: 'crew@yourdomain.com', + nip05Add: '新增', + nip05Invalid: '請輸入像 crew@yourdomain.com 的帳號', + nip05TooMany: '你最多可以新增 {{count}} 個帳號。', + nip05Unverified: '尚未檢查', + nip05Remove: '移除 {{handle}}', + notAKeyA: '那看起來還不像 Nostr 金鑰 — 請貼上', + notAKeyB: '、', + notAKeyC: '或十六進位公鑰。', + onlyYouTubeInstagram: '僅支援 YouTube 和 Instagram 連結。', + openCall: '公開招募', + openCallDescA: '在找 Filmer、Editor 或新血?發出招募 — 它會顯示在你的 Crew 頁面上,讓', + openCallDescB: '中符合的人可以聯繫你。', + optional: '· 選填', + optionalParen: '(選填)', + otherSocials: '其他社群', + otherSocialsDesc: '想加多少就加多少 — YouTube、TikTok、Discord、Telegram 等等。', + ownVisibility: '自己的可見性', + progress: '進度', + publicWord: '公開', + publishedToScene: '已發佈到圈子。', + publishFailed: '發佈失敗', + publishing: '發佈中...', + ready: '就緒', + readyToRollA: '準備好了 — 盡情按', + readyToRollB: '吧。', + removeAdminRole: '移除管理員角色', + removeMember: '移除成員', + removeSocial: '移除社群連結', + removeVibe: '移除 {{vibe}}', + roles: '角色:', + sasquatch: 'Sasquatch', + saveCrew: '儲存 Crew', + skipToEnd: '跳到最後', + socialPlaceholder: '@使用者名稱 或連結', + sponsorDesc: '如果有本地店舖支持你的 Crew,在這裡選擇它們,即可顯示連到它們店舖的「贊助單位」橫幅。', + stepAria: '第 {{step}} 步:{{title}}', + stepBasics: '基本資料', + stepBasicsShort: '基本', + stepBasicsHint: '只要必要的 — 只填這一步就能建立 Crew。', + stepVibe: '身分與氛圍', + stepVibeShort: '氛圍', + stepVibeHint: '你的 Crew 在應用程式中的呈現方式。全部選填。', + stepSquad: '隊伍與 Spot', + stepSquadShort: '隊伍', + stepSquadHint: '新增你的人和主場。你隨時可以之後再做。', + stepExtras: '額外項目', + stepExtrasShort: '額外', + stepExtrasHint: '之後再用的強化功能 — 不確定的就跳過。', + extrasAllOptional: '這一步的所有內容都是選填。', + groupIdentity: '身分', + groupIdentityHint: '帳號、連結', + groupAi: 'Sasquatch AI', + groupShowcase: '展示', + groupPayments: '付款與資金庫', + groupIntegrations: '整合', + groupAdvanced: '進階', + groupAdvancedHint: '實驗性', + pro: 'Pro', + agentProNote: '由 Sasquatch 提供。Pro 使用最好的模型;沒有 Pro 則使用免費備援。', + stepOf: '第 {{step}} 步,共 {{total}} 步', + treasuryDescA: '為共同目標募 sats — 修繕本地 DIY Spot、一趟 Crew 旅行、比賽獎金池。這是一個透明的 Lightning 目標;Zap 會', + treasuryDescStrong: '直接進入你的錢包', + treasuryDescB: '(透過你檔案的 Lightning 地址)。SkateSpots 從不保管資金。', + upload: '上傳', + uploadFailed: '上傳失敗', + useCurrentLocation: '使用目前位置', + vibeLabel: '氛圍 / 焦點', + videoDescA: '你 Crew 的完整作品、蒙太奇或最新片段。貼上', + videoDescB: '連結 — 它會直接在你的 Crew 頁面上播放。', + visibilityDescA: '每位成員控制自己的', + visibilityDescB: '— 當他們用自己的金鑰確認時,可以選擇', + visibilityDescC: '— 對外隱藏)。你不能替他們設定;那是他們的決定。', + website: '網站', + yourRoles: '你的角色(隊長)', + youtubeDetected: '偵測到 YouTube 影片', + invalidUrl: '請輸入有效的連結(例如 https://example.com)。', + }, + groupConversation: { + seoTitle: '群組聊天 - SkateSpots', + invalidLink: '這個群組聊天連結無效。', + loginTitle: '登入以查看這個群組', + secureSignerTitle: '需要安全簽名器', + secureSignerDesc: '群組訊息需要支援 NIP-44 的簽名器。', + encryptedGroup: '端到端加密群組', + empty: '還沒有訊息 — 向群組打聲招呼吧。', + placeholder: '傳訊息給群組...', + }, + hero: { + established: '成立於 {{year}}', + teamLeader: '隊長:{{name}}', + ledBy: '帶領者', + }, + inviteCard: { + acceptedTitle: '邀請已接受 🛹', + acceptedDesc: 'Crew 創始人會在 {{crew}} 確認成員。他們批准後你就會出現在名單上。', + couldNotAccept: '無法接受', + couldNotDecline: '無法拒絕', + acceptedDone: '已接受 —', + confirmsMembers: '確認成員', + declinedDone: '已拒絕加入 {{crew}} 的邀請', + invitedYou: '邀請你加入', + admin: '管理員', + accept: '接受', + decline: '拒絕', + }, + inviteDialog: { + messageIntro: '嗨 — 加入 SkateSpots 上的 {{crew}} Crew 🛹', + messageBody: '用你的 Nostr 金鑰登入,然後從 Crew 頁面申請加入。', + copyFailed: '複製失敗', + shareTitle: '加入 {{crew}}', + sentTitle: '邀請已送出!🛹', + sentDesc: '他們會收到通知來接受或拒絕。', + couldNotSend: '無法送出邀請', + trigger: '邀請', + title: '邀請加入 {{crew}}', + description: '傳送邀請到某人的 Nostr 金鑰,或分享連結。', + sendTab: '傳送邀請', + shareTab: '分享連結', + npubLabel: '滑手的 npub', + invalidNpub: '那看起來不像有效的 npub。', + noteLabel: '備註', + optional: '(選填)', + notePlaceholder: '來和我們一起滑板…', + inviteAsAdmin: '以管理員身分邀請', + inviteAsAdminDesc: '可以管理 Crew 並邀請他人。', + sendButton: '傳送邀請', + sendFooter: '他們會收到通知來接受或拒絕。只有他們接受後才算成員。', + inviteLink: '邀請連結', + messageLabel: '訊息', + copyMessage: '複製訊息', + founderHint: '作為創始人,你也可以直接新增成員的金鑰,然後由他們確認。', + addMemberSettings: '在 Crew 設定中新增成員', + }, + joinRequest: { + moreCount: '+{{count}} 人', + addedTitle: '已將 {{name}} 加入 {{crew}} 🛹', + addedDesc: '他們將從自己那邊確認以顯示為成員。', + vouchedTitle: '你為 {{name}} 背書了 🤝', + vouchedDesc: '{{crew}} 的創始人會看到你的推薦,並可以新增他們。', + couldNotEndorse: '無法推薦', + endorsedDoneA: '你為', + endorsedDoneB: '背書了 — 創始人將確認', + vouchedBy: '背書人', + approveAndAdd: '批准並新增', + addToCrew: '加入 Crew', + vouchedWaiting: '已背書 — 等待創始人', + vouchForThem: '為他們背書', + leadershipOnly: '僅限 Crew 領導層。', + adminHelp: '管理員無法直接新增成員 — 背書是告訴創始人你支持這位滑手。', + }, + leadership: { + teamLeader: '隊長', + captain: '副隊長', + verifiedMember: '已驗證成員', + messageName: '傳訊息給 {{name}}', + title: '領導層', + captainsOne: '{{count}} 位副隊長', + captainsMany: '{{count}} 位副隊長', + footer: '隊長負責名單;副隊長協助邀請、主辦活動並保持 Crew 整潔。', + }, + linkField: { + title: '已關聯的 Crew', + description: '你也經營 Crew?關聯它,讓人們可以在你的工作室和 Crew 之間跳轉。選填。在 Crew 編輯器中把這個 Crew 反鏈到檔案,雙方都會顯示一個綠色', + descriptionRest: '徽章。', + none: '你還沒有任何 Crew。在 Crews 頁面建立一個即可在這裡關聯。', + linkedCrew: '已關聯的 Crew({{id}})', + }, + lookingFor: { + title: '公開招募', + subtitle: '這個 Crew 正在尋找:', + }, + memberVisibility: { + updatedTitle: '可見性已更新', + updatedCrew: '你現在只對 Crew 夥伴顯示。', + updatedPublic: '你現在會在這個 Crew 中公開顯示。', + couldNotUpdate: '無法更新', + title: '你在這個 Crew 中的可見性', + save: '儲存可見性', + }, + newMessage: { + inCrew: '在你的 Crew 中:{{crews}}', + crewmate: 'Crew 夥伴', + following: '追蹤中', + invalidKey: '那看起來不像有效的 npub 或公鑰。', + description: '按名字搜尋你的人,或貼上 npub 傳訊息給任何人。選擇兩個或更多即可開始群組。', + searchPlaceholder: '搜尋名字或貼上 npub1...', + messageThisKey: '傳訊息給這個金鑰', + loadingPeople: '正在載入你的人...', + noPeople: '還沒有 Crew 夥伴或追蹤對象。', + noPeopleHint: '在上面貼上某人的 npub 即可開始對話。', + yourCrews: '你的 Crews', + selected: '已選 {{count}} 個', + startGroup: '開始群組({{count}})', + message: '傳訊息', + }, + nip05: { + mismatch: '這個網域把該帳號指向與 Crew 創始人不同的 Nostr 金鑰。未驗證。', + verified: '已驗證 — 該網域確認這個帳號屬於 Crew 的創始人金鑰。', + }, + requestCollective: { + sentTitle: '請求已送出 🤝', + sentDesc: '{{name}} 會在通知中看到,並可以新增你。', + couldNotSend: '無法送出請求', + title: '加入這個共同體', + waiting: '請求已送出 — 等待 {{name}}。', + askA: '詢問', + askB: '背後的 Crew 把你加入名單。他們會收到通知,一鍵即可新增你。', + placeholder: '選填:說說你為什麼適合…', + sendButton: '送出請求', + }, + requestToJoin: { + sentTitle: '請求已送出!🛹', + sentDesc: '{{crew}} 的領導層會在通知中看到。', + couldNotSend: '無法送出請求', + trigger: '申請加入', + title: '加入 {{crew}}', + description: '通知 Crew 的創始人和管理員,讓他們可以新增你。', + placeholder: '打聲招呼 — 你在哪裡滑板、認識誰、為什麼想加入…', + sending: '傳送中…', + sendButton: '送出加入請求', + }, + sponsorBanner: { + loading: '正在載入贊助商…', + sponsoredBy: '贊助單位', + }, + sponsorPicker: { + selected: '已選擇贊助商', + setLoading: '已設定贊助商(店舖載入中…)', + set: '已設定贊助商', + clearAria: '清除贊助商', + searchPlaceholder: '按名字或城市搜尋滑板店…', + loading: '正在載入店舖…', + noMatch: '沒有符合的店舖 — 試試其他搜尋。', + none: '還沒有找到店舖。', + }, + treasury: { + title: 'Crew 資金庫', + ofGoal: '/ {{target}} 目標', + goalReached: '已達成目標!', + funded: '已募得 {{percent}}%', + contributionOne: '{{count}} 筆捐款', + contributionMany: '{{count}} 筆捐款', + daysLeft: '剩餘 {{days}} 天', + closed: '已結束', + nonCustodial: '非託管 · Zap 直接進入 Crew 的 Lightning 錢包', + }, + userStatus: { + atSpot: '📍 在某個 Spot', + autoClears: '⏱️ {{min}} 分鐘後自動清除', + }, + video: { + title: '作品', + fullVideo: '完整影片 · 蒙太奇', + latestClip: '最新片段', + watch: '觀看', + iframeTitle: '{{crew}} — 影片', + playAria: '播放 {{crew}} 影片', + thumbAlt: '{{crew}} 影片縮圖', + instagramTitle: 'Instagram 短片', + }, + vouch: { + removedTitle: '已移除背書', + vouchedTitle: '已背書!', + removedDesc: '你不再為 {{name}} 背書。', + vouchedDesc: '你為 {{name}} 背書了。圈子信任自己人。', + couldNotVouch: '無法背書', + title: '圈子背書', + sceneVerified: '圈子已驗證', + vouched: '已背書', + newUnvouched: '新 · 未背書', + checking: '正在檢查圈子…', + empty: '還沒有背書。來自你圈子中滑手的背書是某人貨真價實的最佳信號 — 而不是隨機闖入的人。', + countOne: '{{count}} 個背書', + countMany: '{{count}} 個背書', + trusted: '{{count}} 個來自你信任網絡中的滑手', + remove: '移除背書', + vouchFor: '為 {{name}} 背書', + ownerNote: '認識你作品的滑手可以在這裡為你背書。', + }, + }, +}; export default zhTWBatch5; diff --git a/src/i18n/zh-TW/batch6.ts b/src/i18n/zh-TW/batch6.ts index 731ee3b..9649fa2 100644 --- a/src/i18n/zh-TW/batch6.ts +++ b/src/i18n/zh-TW/batch6.ts @@ -1,4 +1,1950 @@ -/** zh-TW — batch 6. Filled by the translation pass; empty until then. */ -const zhTWBatch6 = {}; +/** + * zh-TW — batch 6: placesUi, marketUi, labOptions. + */ +const zhTWBatch6 = { + placesUi: { + addToCalendar: { + add: "加入行事曆", + appleOutlook: "Apple / Outlook (.ics)", + google: "Google 行事曆", + }, + attendees: { + goingCount: "參加", + goingTab: "參加 ({{count}})", + interestedTab: "感興趣 ({{count}})", + nobodyGoing: "還沒有人確認。", + nobodyInterested: "還沒有人標記感興趣。", + noRsvps: "還沒有 RSVP — 搶先告訴大家你會去。", + trusted: "已信任", + trustedTitle: "你追蹤的人或受信任的標點者", + youTrust: "你信任的", + }, + bounty: { + addressCoords: "地址與座標", + basic: "基本", + contactInfo: "聯絡資訊", + description: "描述", + earningPotential: "潛在收益", + excellent: "太棒了!", + gettingStarted: "開始上手", + good: "不錯", + onePhoto: "至少 1 張照片", + openingHours: "營業時間", + shopName: "Shop 名稱", + threePhotos: "3 張以上照片", + tip: "💡 品質越高 = 社群給的 Zap 越多!", + }, + calendar: { + allDay: "全天", + eventDay: "Event 日", + eventsOnDay: "{{count}} 個 Event", + eventsThisMonth: "本月 Event", + going: "人參加", + months: { + january: "1 月", + february: "2 月", + march: "3 月", + april: "4 月", + may: "5 月", + june: "6 月", + july: "7 月", + august: "8 月", + september: "9 月", + october: "10 月", + november: "11 月", + december: "12 月", + }, + nextMonth: "下個月", + nothingOnDay: "這天沒有活動。", + prevMonth: "上個月", + tapHighlighted: "點選反白的日子看看有什麼活動。", + today: "今天", + tourDay: "Tour 日", + toursOnDay: "{{count}} 個 Tour", + toursThisMonth: "本月 Tour", + weekdays: { + sun: "日", + mon: "一", + tue: "二", + wed: "三", + thu: "四", + fri: "五", + sat: "六", + }, + weekdaysShort: { + sun: "日", + mon: "一", + tue: "二", + wed: "三", + thu: "四", + fri: "五", + sat: "六", + }, + }, + countdown: { + ended: "已結束", + happeningNow: "正在進行", + inDays: "還有 {{count}} 天", + inHoursMins: "還有 {{hours}} 小時 {{mins}} 分", + inMins: "還有 {{count}} 分鐘", + startingNow: "即將開始", + tomorrow: "明天", + }, + createEvent: { + add: "新增", + addNewSpot: "新增 Spot →", + changeSpot: "變更 Spot", + created: "Event 已建立!", + createdDesc: "你的 Event 已發布到網路。", + entryFee: "入場費", + entryFeeHint: "(選填 — 例如「500 sats」或「£10」)", + entryFeePlaceholder: "免費 Event 請留空", + featuring: "特邀 {{name}}", + featuringDesc: "這個演出會標記為現場音樂,並顯示在他們的演出清單中。", + fundingGoal: "募資目標", + fundingGoalHint: "(選填 — 透過 Zap 募集的 sats)", + fundingGoalPlaceholder: "例如 50000", + geoNotSupported: "不支援定位", + geoNotSupportedDesc: "你的瀏覽器不支援定位。", + hideSpots: "隱藏 Spot", + hostingAs: "以 {{name}} 身分主辦", + hostingAsDesc: "這個 Event 會顯示在你的 Crew 頁面,並標記為 Crew 主辦。", + imageUploaded: "圖片已上傳", + imageUploadedDesc: "你的圖片已成功上傳。", + invalidDate: "日期無效", + invalidDateDesc: "請輸入有效的開始日期與時間。", + invalidEnd: "結束時間無效", + invalidEndDesc: "結束時間必須晚於開始時間。", + linkedTo: "已連結至:{{title}}", + linkToSpot: "連結至 Skate Spot", + linkToShop: "連結至 Shop", + selectedShop: "已連結至 {{name}}", + selectShopHint: "選填 — 由滑板 Shop 舉辦或主辦。", + selectShop: "選擇 Shop", + changeShop: "變更 Shop", + hideShops: "隱藏 Shop", + searchShops: "搜尋 Shop…", + noShopsMatch: "沒有符合搜尋的 Shop。", + noShopsAvailable: "目前沒有可用的 Shop。", + linkToTour: "連結至 Tour(選填)", + linkTourDesc: "將這個 Event 連結至 Tour,顯示它屬於更大的系列。很適合全國 Tour、國際冒險或 World Destruction Tour 挑戰日。", + loadingSpots: "正在載入 Spot...", + loadingTours: "正在載入 Tour...", + locationError: "定位錯誤", + locationFound: "已找到位置", + locationFoundDesc: "已設定你的目前位置。", + logoUrl: "Logo URL(選填)", + noSpotsAvailable: "沒有可用的 Spot", + noSpotsMatch: "沒有符合搜尋的 Spot", + noTourLinked: "未連結 Tour", + optional: "(選填)", + pastDesc: "選擇未來的日期與時間,讓滑板人能 RSVP 並到場。", + pastTitle: "該開始時間已過", + publishFailed: "發布失敗", + publishFeatured: "發布精選 Event", + removeSponsor: "移除贊助商", + searchSpots: "依名稱、位置或類別搜尋 Spot...", + selectedSpot: "已選擇:{{name}}", + selectSpot: "選擇 Spot", + selectSpotHint: "從地圖選擇這個 Event 舉辦的 Spot", + selectTour: "選擇 Tour", + somethingWrong: "出了點問題", + sponsorName: "贊助商名稱", + sponsors: "贊助商", + sponsorsHint: "有 Shop 或品牌支持嗎?加入他們的 Logo — 會以「Presented by」橫幅顯示在 Event 上。", + startRequired: "需要開始時間", + startRequiredDesc: "請輸入 Event 開始的時間。", + titleRequired: "需要標題", + titleRequiredDesc: "請輸入這個 Event 的名稱。", + uploadFailed: "上傳失敗", + uploadFailedDesc: "圖片上傳失敗", + websiteUrl: "網站 URL(選填)", + }, + createShop: { + address: "Shop 地址", + addressPlaceholder: "例如:411 N Fairfax Ave, Los Angeles, CA 90036", + addressRequired: "需要地址", + addressRequiredDesc: "請輸入你的 Shop 地址。", + contactHint: "讓顧客能聯絡你(建議至少提供一種聯絡方式)", + contactInfo: "聯絡資訊", + created: "🎉 Shop 已新增!", + createdDesc: "你的滑板 Shop 已經在地圖上了。滑板人可以 Zap 你表達感謝!", + descriptionPlaceholder: "介紹你的 Shop、你賣什麼、你的特色...", + detailsDesc: "向社群介紹你的 Shop。標有 * 的欄位皆為必填。", + email: "電子郵件", + hoursOfOperation: "營業時間", + hoursPlaceholder: "例如:週一至週六 10:00-20:00,週日 12:00-18:00", + instagram: "Instagram", + invalidCoords: "座標無效", + invalidCoordsDesc: "請輸入有效的緯度(-90 到 90)與經度(-180 到 180)。", + latPlaceholder: "緯度(例如 34.0737)", + lngPlaceholder: "經度(例如 -118.3614)", + locationRequired: "需要位置", + locationRequiredDesc: "請輸入座標或使用你的目前位置。", + loginToAdd: "你需要登入才能新增滑板 Shop。", + namePlaceholder: "例如:Supreme Los Angeles", + nameRequired: "需要 Shop 名稱", + nameRequiredDesc: "請輸入你的 Shop 名稱。", + phoneNumber: "電話號碼", + publishFailedDesc: "出了點問題。請檢查主控台以了解詳情。", + shopPhotoAlt: "Shop", + shopPhotos: "Shop 照片", + subtitle: "在地圖上列出你的 Shop,與社群連結", + upload: "上傳", + }, + createTour: { + acceptedClipSources: "接受的影片來源", + acceptedClipSourcesDesc: "你接受哪些格式的影片投稿?", + accommodationInfo: "住宿資訊", + accommodationPlaceholder: "住宿建議或安排,例如「沿途的平價青年旅館」、「需自備露營裝備」、「已含 Airbnb」", + addChallenge: "新增挑戰", + addCity: "新增城市...", + addCountry: "新增國家...", + addShopFirst: "請先新增 Shop", + alsoSelected: "也選了:", + availabilityPlaceholder: "例如:週末、僅上午、需預約", + availabilityQuestion: "你通常什麼時候有空?", + availableShops: "可用的滑板 Shop({{count}})", + challengeDescPlaceholder: "選填描述...", + challenges: "挑戰", + challengesRequired: "需要挑戰", + challengesRequiredDesc: "請至少新增一個讓隊伍完成的挑戰。", + challengesSecret: "所有挑戰在比賽開始日前都是機密的。在那之前隊伍看不到!", + challengeTitlePlaceholder: "挑戰標題,例如「Kickflip 十階」", + citiesLabel: "城市", + citiesOnTour: "Tour 造訪的城市", + cityPlaceholder: "例如:Berlin, Germany", + cityRegion: "城市 / 地區", + cityRequired: "需要城市/地區", + cityRequiredDesc: "請輸入你的城市或地區。", + clipAnyUrl: "🔗 任何 URL", + clipBlossom: "📦 Blossom 上傳", + clipInstagram: "📸 Instagram", + clipYouTube: "▶️ YouTube", + competitionDates: "比賽日期", + competitionDatesWarning: "⚠️ 所有挑戰在開始日前都是機密的!比賽開始前隊伍看不到挑戰。", + competitionLocations: "比賽地點", + competitionLocationsDesc: "隊伍會在哪裡比賽?新增所有相關城市與國家。", + coordsHint: "座標為選填。加入後可將集合點釘在地圖上。", + countriesLabel: "國家", + countriesRequired: "需要國家", + countriesRequiredDesc: "請為你的國際 Tour 至少新增一個國家。", + createdDestruction: "💀 WORLD DESTRUCTION TOUR 已建立!", + createdDestructionDesc: "隊伍可以報名了。挑戰會在開始日揭曉!", + createDestructionTour: "建立 World Destruction Tour", + createdInternational: "✈️ 國際 Tour 已建立!", + createdInternationalDesc: "你的全球冒險已列出!與全世界的滑板人連結。", + createdLocal: "🏠 本地 Tour 已建立!", + createdLocalDesc: "你的 Tour 現在可見了。滑板人可以透過私訊預訂!", + createdNational: "🚐 全國 Tour 已建立!", + createdNationalDesc: "你的公路之旅上線了!開始與有興趣的滑板人協調。", + departure: "出發 *", + departureRequired: "需要出發日期", + departureRequiredDesc: "設定旅程出發時間,讓滑板人規劃與預訂。", + descriptionPlaceholder: "描述滑板人會體驗到什麼:會造訪的 Spot、氛圍、你的 Tour 有何獨特...", + destructionDesc: "設定你的全球 KOTR 風格比賽 — 一切由你定義!", + discountHint: "Tour 參加者可在 Shop 出示預訂確認以獲得此折扣", + discountPercentage: "折扣百分比", + dropTour: "發布 Tour", + duration: "時長", + durationHintDestruction: "比賽為期多久?(1-12 個月)", + durationHintInternational: "這趟冒險有幾週?(最多 2 個月)", + durationHintLocal: "你通常的 Tour 有多長?", + durationHintNational: "公路之旅有幾天?", + durationWeeksMonths: "{{weeks}} 週(約 {{months}} 個月)", + editTour: "編輯 Tour", + enable: "啟用", + enabled: "已啟用", + endBeforeStart: "結束早於開始", + endBeforeStartDesc: "比賽結束日期必須等於或晚於開始日期。", + endDate: "結束日期", + entryFeeHint: "你保留 95% • 平台收取 5% • 免費入場請留空", + entryFeePerTeam: "每隊入場費(sats)", + entryFeePlaceholder: "例如 100000", + entryPrizes: "入場與獎品", + filmPremieres: "隊伍影片首映", + filmPremieresDesc: "比賽結束後,每隊的影片會成為一部完整作品,可在世界各地的滑板 Shop 首映。", + filmPremieresInfo: "🎥 隊伍將挑戰影片剪輯成最終作品。Shop 可以舉辦首映活動,把全球比賽連結到在地社群。", + filmReleaseDate: "影片發布日期(選填)", + filmReleaseDateHint: "影片何時上線。留空表示比賽結束後立即發布。", + fixedSession: "固定場次", + fixedSessionDesc: "指定的日期與時間", + flexible: "彈性", + flexibleDesc: "隨時透過私訊預訂", + hide: "隱藏", + howDestruction1: "• 全球隊伍競賽 — 最長 12 個月", + howDestruction2: "• 挑戰、積分、獎品由你定義 — 我們只提供平台", + howDestruction3: "• 所有挑戰在比賽開始日前都是機密的", + howDestruction4: "• 影片可透過 Blossom 上傳或外部連結(YouTube、Instagram、任何 URL)", + howDestruction5: "• 僅限進階程度 — 自動包含所有 Spot 類型", + howDestruction6: "• 平台只收取入場費的 5%(不是獎金池)", + howDestructionTitle: "💀 WORLD DESTRUCTION TOUR - KOTR 風格", + howInternational1: "• 跨越多國的跨境冒險", + howInternational2: "• 價格由你決定 — 平台只收 5%", + howInternational3: "• 設定出發與回程日期,讓 Crew 能訂機票", + howInternational4: "• 連結來自世界各地的滑板人", + howInternational5: "• 創造難忘的全球體驗!", + howInternationalTitle: "國際 Tour 如何運作", + howItWorks: "運作方式:", + howLocal1: "• 價格由你決定 — 平台收取 10%", + howLocal2: "• 隱藏 Spot 保持隱藏 — 由你親自帶領", + howLocal3: "• 舉辦預定場次,或保持彈性/預約制", + howLocal4: "• 滑板人透過私訊預訂、以 Lightning 付款,並可加入行事曆", + howLocal5: "• 透過評論與 Zap 建立你的聲譽", + howLocalTitle: "本地 Tour 如何運作", + howNational1: "• 跨越全國的多城市公路之旅", + howNational2: "• 價格由你決定 — 平台只收 7%", + howNational3: "• 設定旅程日期,讓滑板人能排假與安排交通", + howNational4: "• 為 Crew 附上交通/住宿資訊", + howNational5: "• 打造傳奇滑板冒險!", + howNationalTitle: "全國 Tour 如何運作", + imageUploadedDesc: "你的 Tour 圖片已上傳。", + incompleteCoords: "座標不完整", + incompleteCoordsDesc: "請同時輸入緯度與經度,或兩者都留空。", + internationalDetails: "國際冒險詳情", + languagesSelected: "已選 {{count}} 項", + languagesSpoken: "使用語言", + latOptional: "緯度(選填)", + lngOptional: "經度(選填)", + loadingProfile: "正在載入個人檔案...", + loadingProfileDesc: "正在檢查你的 NIP-05 驗證狀態。", + loadingShops: "正在載入 Shop...", + localShopPremieres: "在地 Shop 首映", + localShopPremieresDesc: "世界各地的滑板 Shop 可以舉辦影片之夜", + loginToCreate: "你需要登入才能建立 Tour。", + maxGroupSize: "最大團體人數", + maxTeams: "最大隊伍數", + maxTeamSize: "最大隊伍人數", + meetingLocationSet: "已將你的目前位置設為集合點。", + meetingPointDesc: "你會在哪裡與 Tour 參加者會合?請選擇公開且知名的地點。", + meetingPointLabel: "集合點", + meetingPointPlaceholder: "例如:Warschauer Straße Station", + meetingPointRequired: "需要集合點", + meetingPointRequiredDesc: "請輸入你與 Tour 參加者會合的地點。", + minTeamSize: "最小隊伍人數", + noChallenges: "還沒有挑戰", + noChallengesDesc: "新增讓隊伍完成的挑戰", + noPartnerShop: "沒有合作 Shop", + noShopsFound: "網路上還沒有找到滑板 Shop。", + noShopsRegistered: "還沒有滑板 Shop 註冊", + onlineRelease: "線上發布", + onlineReleaseDesc: "同時在 YouTube/Nostr 發布影片", + organizerContact: "主辦方聯絡資訊", + organizerContactHint: "已報名的隊伍會看到這項資訊", + organizerContactPlaceholder: "隊伍要如何聯絡你?例如 Nostr npub、電子郵件、Telegram 等。", + partnerDiscountDesc: "在在地滑板 Shop 為 Tour 參加者提供折扣", + partnerStep1: "1. 與你信任的在地滑板 Shop 合作", + partnerStep2: "2. 為 Tour 參加者設定折扣百分比", + partnerStep3: "3. Tour 結束後,給參加者一份可在 Shop 出示的確認", + partnerStep4: "4. Shop 兌現折扣 — 建立社群並帶來人潮!", + percentOff: "{{percent}}% 折扣", + photoHint: "加入一張你滑板的照片,或 Tour 中很酷的 Spot。", + pickRide: "選擇你的交通方式", + place1: "🥇 第 1 名", + place2: "🥈 第 2 名", + place3: "🥉 第 3 名", + platformFee: "價格由你決定 • 平台收取 {{percent}}", + points: "積分:", + pricePerPerson: "每人價格(sats)", + pricePlaceholder: "例如 25000", + prizeDistribution: "獎金分配", + prizePoolHint: "選填 — 可提供的獎品總額", + prizePoolPlaceholder: "例如 2000000", + proTipDesc: "在列出合作折扣前,請先透過私訊聯絡 Shop 老闆並談好折扣百分比。這樣能確保他們知情並會為你的 Tour 參加者兌現折扣。", + proTipTitle: "💡 小訣竅:先與 Shop 協調!", + return: "回程", + returnBeforeDeparture: "回程早於出發", + returnBeforeDepartureDesc: "回程日期必須等於或晚於出發日期。", + roadTripDetails: "公路之旅詳情", + schedule: "行程", + scheduleDesc: "以一次性預定場次舉辦,或保持彈性讓滑板人透過私訊預約時間。", + secretUntilStart: "開始前保密", + selectPartnerShop: "選擇合作 Shop", + sessionDateRequired: "需要場次日期", + sessionDateRequiredDesc: "選擇預定場次的日期與時間,或切換為彈性行程。", + sessionDateTime: "場次日期與時間", + sessionDateTimeHint: "滑板人會看到這個時間,並可從 Tour 頁面加入行事曆。", + shopPremieresContact: "直接聯絡這些 Shop 安排影片首映之夜。所有安排都是私下的。", + shopPremieresHow: "💡 Shop 首映如何運作:直接聯絡 Shop 安排首映之夜。所有安排都是你與 Shop 之間的私事。", + shopsCanRegister: "Shop 可在 /create-shop 註冊", + show: "顯示", + showAllLanguages: "顯示全部 {{count}} 種語言", + somethingWrong: "出了點問題。", + spotTypes: "Spot 類型", + spotTypesRequired: "需要 Spot 類型", + spotTypesRequiredDesc: "請至少選擇一種你會帶看的 Spot 類型。", + startDate: "開始日期", + startDateRequired: "需要開始日期", + startDateRequiredDesc: "請設定比賽開始時間(挑戰會在此日揭曉)。", + startingCity: "起始城市", + startingCityPlaceholder: "例如:Los Angeles, USA", + teamSettings: "隊伍設定", + teamsCount: "{{count}} 隊", + titlePlaceholder: "例如:Berlin Kreuzberg - Underground Spots Tour", + titleRequired: "需要 Tour 標題", + titleRequiredDesc: "請輸入你的 Tour 名稱。", + totalPercent: "總計:{{percent}}%", + totalPrizePool: "獎金池總額(sats)", + tourDesc: "告訴滑板人你的 Tour 會有什麼", + tourDetails: "Tour 詳情", + tourPhoto: "Tour 照片", + tourTitle: "Tour 標題", + transportDestructionPlaceholder: "隊伍會如何在各地點之間移動?有提供或建議的交通方式嗎?", + transportInfo: "交通資訊", + transportPlaceholder: "參加者會如何移動?例如「提供廂型車」、「飛到 Barcelona,我們租廂型車」、「城市間搭火車」", + tripDatesDesc: "確定日期,讓滑板人能請假、訂機票並規劃旅程。", + tripDatesTitle: "旅程日期", + updated: "Tour 已更新!", + updatedDesc: "你的變更已發布。", + upload: "上傳", + view: "查看 →", + worldDestruction: "World Destruction Tour", + youReceive: "你可獲得:每人 {{amount}} sats", + }, + editEvent: { + accessDenied: "存取遭拒", + accessDeniedDesc: "你只能編輯自己建立的 Event。", + backToEvent: "返回 Event", + detailsDesc: "更新這個 Event 的資訊。標有 * 的欄位皆為必填。", + eventCover: "Event 封面", + locationUpdated: "位置已更新。", + loginToEdit: "你需要登入才能編輯這個 Event。", + newSpot: "新 Spot:{{location}}。", + newTime: "新時間:{{date}} {{time}}。", + saveChanges: "儲存變更", + saving: "正在儲存...", + title: "編輯 Event", + updated: "Event 已更新!", + updatedDesc: "你的變更已發布到網路。", + updateDetails: "更新 {{title}} 的詳情", + updatedNotified: "變更已發布 — 已通知 {{count}} 位參加者。", + updateFailed: "更新失敗", + updateMessage: "{{parts}} — 詳情請見 Event。", + }, + editShop: { + accessDeniedDesc: "你只能編輯自己建立的 Shop。", + backToShop: "返回 Shop", + detailsDesc: "更新你的 Shop 資訊。標有 * 的欄位皆為必填。", + loginToEdit: "你需要登入才能編輯這個 Shop。", + updated: "Shop 已更新!", + updateDetails: "更新 {{name}} 的詳情", + }, + editTour: { + accessDeniedDesc: "你只能編輯自己建立的 Tour。", + loginToEdit: "你需要登入才能編輯這個 Tour。", + }, + eventCard: { + report: "檢舉", + }, + eventDetail: { + aCrew: "一個 Crew", + addToCalendar: "加入行事曆", + backToEvents: "返回 Event", + cancelled: "這個 Event 已取消", + checkUpdate: "— 查看更新", + copyFailed: "複製失敗", + date: "日期", + editEvent: "編輯 Event", + eventFallback: "Event", + eventOrganizer: "Event 主辦方", + getDirections: "取得路線", + linkCopied: "已複製連結", + linkCopiedDesc: "Event 連結已複製到剪貼簿 — 可貼到任何地方。", + live: "現場:", + liveMusic: "現場音樂", + location: "位置", + newLocation: "新位置", + noRsvps: "沒有記錄到任何 RSVP。", + organizer: "主辦方", + rsvpsClosed: "RSVP 已關閉 — 這個 Event 已被主辦方取消。", + seeMap: "查看地圖", + shareEvent: "分享 Event", + shareText: "{{title}} — SkateSpots 上的滑板 Event", + shareTextFallback: "來看看 SkateSpots 上的這個滑板 Event", + time: "時間", + timeChanged: "時間已變更", + updatesFromHost: "來自主辦方的更新", + where: "地點", + whoCame: "誰來了", + whosGoing: "誰會去", + }, + events: { + calendar: "行事曆", + createTour: "建立 Tour", + events: "Event", + faqFooter: "有問題嗎?查看常見問題 →", + hosting: "主辦中", + hostingSubtitle: "你的 Event — RSVP、更新與快速編輯", + list: "清單", + noEventsMatchFilters: "沒有符合篩選條件的 Event。請嘗試調整或清除。", + noPast: "沒有過去的 Event", + noPastBody: "在目前的篩選條件下找不到過去的滑板 Event。", + noTours: "找不到 Tour", + noToursBody: "還沒有滑板 Tour。建立第一個,帶滑板人探索 Spot!", + noToursMatchFilters: "沒有符合篩選條件的 Tour。請嘗試調整或清除。", + noUpcoming: "沒有即將到來的 Event", + noUpcomingBody: "找不到即將到來的滑板 Event。搶先建立一個!", + past: "過去", + resultsCount: "{{count}} 個結果", + searchCity: "城市…", + searchEvent: "Event 名稱…", + searchTour: "Tour 名稱…", + tours: "Tour", + toursSubtitle: "在地嚮導、公路之旅與世界毀滅競賽", + upcoming: "即將到來", + }, + eventTypes: { + contest: "比賽", + demo: "Demo", + jam: "Jam", + meetup: "聚會", + premiere: "首映", + session: "Session", + workshop: "工作坊", + }, + featured: { + active: "啟用中", + bodyEvent: "免費發布。精選 Event 會獲得徽章,並置於 Event 頁面頂端。", + bodyTour: "免費發布。精選 Tour 會獲得徽章,並置於 Tour 清單頂端。", + contextEvent: "你的 Event 無論如何都會免費列出 — 精選只是加上徽章與曝光。", + contextTour: "你的 Tour 無論如何都會免費列出 — 精選只是加上徽章與曝光。", + daysRemaining: "精選啟用中 · 剩餘 {{count}} 天。", + headingEvent: "精選這個 Event", + headingTour: "精選這個 Tour", + optional: "選填", + platformOwner: "平台擁有者 — 精選永遠開啟。", + }, + filters: { + activeCount: "{{count}} 項啟用", + all: "全部", + allLevels: "所有程度", + eventType: "Event 類型", + following: "追蹤中", + newest: "最新", + popular: "熱門", + showResults: "顯示結果", + showResultsActive: "顯示結果 · {{count}} 項啟用", + skillLevel: "技巧程度", + sortBy: "排序方式", + topRated: "最高評價", + tourCategory: "Tour 類別", + trusted: "已信任", + trustLevel: "信任等級", + verified: "已驗證", + }, + food: { + bar: "酒吧", + cafe: "咖啡廳", + call: "致電", + chooseSpot: "選擇 Spot...", + directions: "路線", + fastFood: "速食", + foodCourt: "美食街", + locationLabel: "位置:", + noneFound: "找不到餐飲地點", + noneFoundDesc: "我們在這個 Spot 1 公里內找不到任何餐廳或咖啡廳。請嘗試選擇其他位置。", + placesFound: "在 {{spot}} 1 公里內找到 {{count}} 個地點", + pub: "Pub", + restaurant: "餐廳", + selectSpot: "選擇 Skate Spot", + selectSpotDesc: "從上方下拉選單選擇 Skate Spot,尋找附近的餐廳、咖啡廳和其他餐飲選擇。", + selectSpotTitle: "選擇 Skate Spot", + subtitle: "在你最愛的 Skate Spot 附近尋找用餐地點", + title: "Spot 附近的餐飲", + unknown: "未知", + website: "網站", + }, + rsvp: { + areYouGoing: "你會去嗎?", + cant: "無法", + cantMakeIt: "無法參加", + going: "我會去", + goingCount: "人參加", + goingShort: "參加", + hostNote: "你是這個活動的主辦方 — 但你仍可以設定自己的狀態。", + interested: "感興趣", + interestedCount: "人感興趣", + loginToRsvp: "登入以 RSVP。", + maybe: "也許", + toastError: "無法 RSVP", + toastGoing: "你會去!🛹", + toastInterested: "已標記為感興趣。", + toastNotGoing: "已標記為不參加。", + tryAgain: "請再試一次。", + }, + shop: { + addNip05Settings: "在設定中新增 NIP-05", + adminRemovedReason: "SkateSpots 管理員移除了 Shop「{{name}}」", + areYouOwner: "你是這個 Shop 的老闆嗎?", + backToMap: "返回地圖", + claimDesc: "如果你擁有或管理這個 Shop,你可以認領並透過 NIP-05 驗證所有權。", + claimNip05Intro: "若要認領這個 Shop,請新增一個與 Shop 網站網域相符的 NIP-05 識別碼。例如,如果 Shop 網站是", + claimNip05Your: "你的 NIP-05 應該是", + contactShop: "聯絡 Shop", + deleted: "Shop 已刪除", + deletedDesc: "刪除要求已送至 Relay。多數 Relay 會移除這項內容。", + deleteDialogDesc: "這會從所有 Relay 永久刪除「{{name}}」。此動作無法復原。", + deleteDialogTitle: "刪除 Shop?", + deletedReason: "已刪除的 Shop", + deleteFailed: "刪除失敗", + deleteShop: "刪除 Shop", + linkCopied: "已複製連結!", + linkCopiedDesc: "Shop 連結已複製到剪貼簿。", + nip05Required: "⚠️ 認領 Shop 需要 NIP-05 驗證", + opens: "開啟:{{domain}}", + removeAdmin: "移除(管理員)", + removed: "Shop 已移除", + removedDesc: "這個 Shop 已被下架,並會在 SkateSpots 各處隱藏。", + removeDialogDesc: "作為 SkateSpots 管理員,你正在下架「{{name}}」。它會對所有人在 App 各處隱藏,並對 Relay 送出刪除要求。", + removeDialogTitle: "移除這個 Shop?(管理員)", + removeShop: "移除 Shop", + tipMapper: "打賞標點者", + tipMapperDesc: "這個 Shop 由社群成員新增。Zap 他們表達感謝!", + updateNip05: "更新 NIP-05 以認領", + viewPhotoFull: "全螢幕檢視照片", + viewPhotoOf: "檢視第 {{index}} 張照片,共 {{total}} 張", + }, + sponsors: { + presentedBy: "Presented by", + }, + tourCard: { + active: "啟用中", + completed: "已完成", + contactForPrice: "聯絡詢問價格", + durationDays: "{{count}} 天", + durationHours: "{{count}} 小時", + durationMonths: "{{count}} 個月", + durationWeeks: "{{count}} 週", + entry: "入場:{{amount}} sats", + happeningNow: "正在進行", + inDays: "還有 {{count}} 天", + inHours: "還有 {{count}} 小時", + inMonths: "還有 {{count}} 個月", + inWeeks: "還有 {{count}} 週", + maxGroup: "最多 {{count}}", + price: "{{amount}} sats", + prizePool: "{{amount}} sats", + registrationOpen: "開放報名", + startingSoon: "即將開始", + teamsMax: "最多 {{count}} 隊", + tomorrow: "明天", + worldwide: "全球", + }, + tourDetail: { + about: "關於這個 Tour", + availability: "可預約時段", + competitionWindow: "比賽期間", + contactToBook: "聯絡嚮導預訂", + discountAt: "{{shop}} 享 {{percent}}% 折扣", + duration: "時長", + languages: "語言", + loginToBook: "登入以預訂", + loginToBookDesc: "登入以聯絡嚮導並預訂這個 Tour", + maxGroup: "最大團體人數", + meetingPoint: "集合點", + notFound: "找不到 Tour", + notFoundDesc: "這個 Tour 可能已被移除或不存在。", + organizer: "主辦方", + partnerDiscount: "合作 Shop 折扣", + partnerDiscountDesc: "預訂這個 Tour 即可在合作滑板 Shop 獲得折扣。向 Shop 人員出示你的預訂確認。", + people: "{{count}} 人", + perPerson: "每人", + price: "價格", + runsAbout: "約需 {{duration}}", + scheduledSession: "預定場次", + shareText: "來看看這個本地滑板 Tour:{{title}}", + skillLevel: "技巧程度", + spotTypes: "Spot 類型", + tourGuide: "Tour 嚮導", + tourSponsors: "Tour 贊助商", + tripDates: "旅程日期", + viewProfile: "檢視個人檔案", + }, + updates: { + admin: "管理員", + adminNote: "你正以 SkateSpots 管理員身分發布。這會清楚標示為管理員公告,而非來自主辦方。", + kindCancelled: "已取消", + kindNewSpot: "新 Spot", + kindNewTime: "新時間", + kindUpdate: "更新", + loading: "正在載入更新…", + notifiedCount: "已通知 {{count}} 人。", + notifiedEveryone: "所有人都會在 Event 上看到。", + notifiesRsvps: "通知 {{count}} 位 RSVP", + noUpdates: "主辦方還沒有更新。RSVP 後如有任何變更你就會收到通知。", + placeholder: "下雨 — 改到週日下午 2 點。在後方平台集合…", + post: "發布", + postAdminUpdate: "發布管理員更新", + posted: "更新已發布", + postError: "無法發布更新", + postUpdate: "發布更新", + tryAgain: "請再試一次。", + visibleToEveryone: "這個 Event 上的所有人都可見", + }, + destination: { + bitcoin: "Bitcoin", + closeSearch: "關閉搜尋", + nothingMatches: "沒有符合「{{query}}」的結果。", + placeholder: "搜尋 Spot、Shop、Bitcoin 商家…", + shop: "Shop", + spot: "Spot", + typeChars: "請輸入至少 2 個字元。會搜尋 Skate Spot、滑板 Shop 與 Bitcoin 商家。", + typeCharsNear: "請輸入至少 2 個字元。會搜尋附近的 Skate Spot、滑板 Shop 與 Bitcoin 商家。", + }, + dateWindow: { + any: "任何", + anytime: "隨時", + month: "本月", + monthShort: "月", + today: "今天", + todayShort: "今天", + week: "本週", + weekend: "週末", + weekendShort: "週末", + weekShort: "週", + }, + }, + marketUi: { + gearSwap: { + title: "Gear Swap", + subtitle: "與其他滑板人買賣二手滑板 Gear", + listGear: "刊登 Gear", + searchPlaceholder: "搜尋 Gear...", + allCategories: "所有類別", + forSale: "出售", + wtb: "WTB", + trust: "信任", + filterByTrust: "依信任篩選", + allSellers: "所有賣家", + verifiedOnly: "僅限已驗證", + trustedPlus: "已信任+", + followingOnly: "僅限追蹤中", + pickupOrShip: "面交或寄送", + localPickup: "本地面交", + ships: "寄送", + sortBy: "排序方式", + newest: "最新", + priceLowHigh: "價格:低 → 高", + priceHighLow: "價格:高 → 低", + trustScore: "信任分數", + nearest: "最近(本地)", + listingFound: "找到 {{count}} 件商品", + listingsFound: "找到 {{count}} 件商品", + loadFailed: "載入商品失敗", + tryLater: "請稍後再試。", + noneTitle: "找不到商品", + noneFiltered: "沒有 Gear 符合目前的篩選條件。請嘗試清除或改搜尋其他內容。", + noneFirst: "搶先刊登你的 Gear — Deck、Trucks、Wheels、鞋子,任何滑板用品!", + listYourGear: "刊登你的 Gear", + faqLink: "有問題嗎?查看常見問題 →", + }, + hub: { + browse: "瀏覽", + selling: "出售中", + myTrades: "我的交易", + reputation: "聲譽", + loginListings: "登入以管理你的商品。", + loginReputation: "登入以查看你的聲譽與評論。", + }, + marketplace: { + heroTitle: "Shop 與 Marketplace", + heroBefore: "我們的 Marketplace 由", + heroAfter: " 提供 — 一個建立在 Nostr 上的去中心化 Marketplace。滑板 Shop 可以列出商品,你也可以直接用 Bitcoin 買賣二手 Gear。", + whatIsTitle: "什麼是 Plebeian Market?", + whatIsBody: "Plebeian Market 是建立在 Nostr 上的去中心化 Marketplace。使用 Bitcoin 直接與其他滑板人買賣滑板 Gear。沒有中間人、沒有手續費,完全自由。", + noFeesTitle: "免手續費", + noFeesBody: "沒有平台抽 30%。直接的點對點交易。", + bitcoinTitle: "Bitcoin 付款", + bitcoinBody: "用 Bitcoin 付款。快速、安全、全球通用。", + decentralizedTitle: "去中心化", + decentralizedBody: "建立在 Nostr 上。沒有公司能控制。", + visit: "前往 Plebeian Market", + buySellTitle: "你可以買賣什麼", + catCompletes: "整組 Deck", + preBuilt: "預組完成品", + customSetups: "客製配置", + beginnerBoards: "初學者板", + catParts: "Deck 零件", + decks: "Deck", + trucks: "Trucks", + wheels: "Wheels", + bearings: "Bearings", + gripTape: "Griptape", + hardware: "五金", + catApparel: "服飾與護具", + skateShoes: "滑板鞋", + clothing: "衣物", + helmets: "安全帽", + pads: "護具", + backpacks: "背包", + catAccessories: "配件", + tools: "工具", + wax: "蠟", + rails: "Rails", + stickers: "貼紙", + videos: "影片", + magazines: "雜誌", + howItWorks: "運作方式", + step1Title: "瀏覽商品", + step1Body: "前往 Plebeian Market,瀏覽來自世界各地 Shop 與個人的滑板 Gear。", + step2Title: "聯絡賣家", + step2Body: "透過 Nostr 直接傳訊給賣家。議價、提問、安排寄送。", + step3Title: "用 Bitcoin 付款", + step3Body: "使用 Bitcoin Lightning 完成購買,即時、低手續費。", + step4Title: "留下評價", + step4Body: "為你的體驗評分,並在 Nostr 上建立賣家聲譽。你的評論能幫助社群。", + needBitcoinTitle: "需要 Bitcoin 嗎?", + needBitcoinBefore: "你需要一個有一些 sats 的 Lightning 錢包才能購買。請參考", + onboardingGuide: "新手引導", + needBitcoinAfter: "以獲得錢包推薦。", + ownShopTitle: "你是滑板 Shop 老闆嗎?", + ownShopBody: "在 SkateSpots 列出你的 Shop,並在 Plebeian Market 販售你的商品。零平台手續費,觸及全世界的顧客。", + addShop: "新增你的 Shop", + startSelling: "開始販售", + }, + listingDetail: { + notFound: "找不到商品", + notFoundBody: "它可能已被刪除,或連結有誤。", + backToGearSwap: "返回 Gear Swap", + gearSwap: "Gear Swap", + viewPhoto: "檢視照片 {{n}}", + photoAlt: "{{title}} — 照片 {{n}}", + wantToBuy: "WANT TO BUY", + sold: "已售出", + description: "描述", + usuallyHere: "通常在此 {{availability}}", + listed: "刊登於 {{date}}", + listingCountOne: "{{count}} 件商品 · {{age}} 天前", + listingCountMany: "{{count}} 件商品 · {{age}} 天前", + relistActive: "重新刊登為啟用", + markSold: "標記為已售出", + deleteListing: "刪除商品", + makeOffer: "出價", + shareListing: "分享商品", + unknown: "未知", + linkCopied: "已複製連結", + linkCopiedBody: "分享給滑板人。", + copyFailed: "無法複製連結", + relisted: "已重新刊登", + relistedBody: "你的商品已重新啟用。", + couldNotUpdate: "無法更新", + somethingWrong: "出了點問題", + }, + create: { + imageUploaded: "圖片已上傳", + uploadFailed: "上傳失敗", + failed: "失敗", + cooldownActive: "冷卻中", + cooldownWait: "請等待 {{time}} 後再建立另一件商品", + limitReached: "已達商品數量上限", + limitReachedBody: "你已達到每月 {{limit}} 件商品的上限", + feeRequired: "需要費用", + feeRequiredBody: "請支付防垃圾費用才能繼續", + titleRequired: "需要標題", + categoryRequired: "需要類別", + photoRequired: "需要照片", + photoRequiredBody: "販售 Gear 時至少需要一張照片", + nip05Required: "需要 NIP-05 驗證", + nip05RequiredBody: "你需要一個已驗證的 Nostr 地址才能刊登 Gear", + priceRequired: "固定價格商品需要價格", + sizeRequired: "需要尺寸", + sizeRequiredBody: "請為 {{category}} 選擇尺寸", + conditionRequired: "需要狀況", + conditionRequiredBody: "請選擇你的 {{category}} 狀況", + wtbPosted: "Want to Buy 已發布!", + wtbPostedBody: "賣家將能找到你的需求。", + listingCreated: "商品已建立!", + listingCreatedBody: "你的 Gear 已刊登。", + publishFailed: "發布失敗", + loginRequired: "需要登入", + loginRequiredBody: "你需要登入才能刊登 Gear。", + backToStash: "返回 Stash", + backToSpot: "返回 {{title}}", + backToMarketplace: "返回 Marketplace", + backToMap: "返回地圖", + wantToBuy: "Want to Buy", + listYourGear: "刊登你的 Gear", + wtbSubtitle: "告訴社群你在找什麼 Gear", + sellSubtitle: "向社群販售滑板 Gear", + fromStashTitle: "從你的 Stash 刊登", + fromStashBody: "已預先填入你的 Stash 物品詳情。請檢查並選擇面交 Spot!", + nip05Banner: "為了防止垃圾訊息並保護買家,你需要一個已驗證的 Nostr 地址(NIP-05)才能刊登 Gear。", + verifiedLabel: "已驗證:", + checkingTrust: "正在檢查你的信任等級...", + trustLevel: "信任等級:", + trusted: "已信任", + active: "活躍", + newcomer: "新手", + newUser: "新使用者", + remaining: "本月剩餘 {{remaining}}/{{limit}} 件商品", + cooldownBody: "新使用者刊登商品之間有 24 小時冷卻時間。", + timeRemaining: "剩餘時間:{{time}}", + monthlyLimitTitle: "已達每月上限", + monthlyLimitBody: "你已達到本月 {{limit}} 件商品的上限。透過建立 Spot 或完成交易來建立聲譽,以提高你的上限。", + powAccepted: "工作量證明已接受!", + feePaid: "費用已支付!", + canCreateNow: "你現在可以建立商品了。", + whatDoTitle: "你想做什麼?", + sellGear: "販售 GEAR", + categoryTitle: "類別 *", + categoryHint: "哪種類型的 Gear?", + detailsTitle: "Gear 詳情", + detailsWtbHint: "描述你在找什麼", + detailsSellHint: "向買家介紹你的物品", + titleLabel: "標題 *", + titlePlaceholderWtb: "尋找 8.0\" Deck", + titlePlaceholderSell: "近乎全新 Palace Deck 8.25\"", + summaryLabel: "簡短摘要", + summaryPlaceholderWtb: "任何品牌,偏好極簡圖案", + summaryPlaceholderSell: "狀況極佳,幾乎沒用過", + descriptionLabel: "描述", + descriptionPlaceholderWtb: "請確切描述你在找什麼 — 品牌偏好、狀況要求等。", + descriptionPlaceholderSell: "聖誕節收到這個 Deck,但我偏好更小的尺寸。很樂意讓你購買前先試試!", + fulfilmentLabel: "如何交付?", + pickup: "面交", + pickupHint: "本地會面", + ships: "寄送", + shipsHint: "郵寄", + both: "皆可", + bothHint: "兩者皆可", + addressNote: "我們絕不收集你的地址 — 若需寄送,請在交易聊天中私下分享。", + postageLabel: "誰付郵資?", + requireEscrow: "要求 escrow", + requireEscrowHint: "要求買家透過 Cashu escrow 結算。", + postageBuyer: "買家支付", + postageSeller: "我支付", + postageSplit: "平分", + sizeLabel: "尺寸", + selectSize: "選擇尺寸", + truckHeight: "Truck 高度", + selectHeight: "選擇高度", + wheelHardness: "Wheel 硬度", + selectHardness: "選擇硬度", + pricingTitle: "定價", + pricingWtbHint: "你想如何付款?", + pricingSellHint: "你想如何販售?", + priceLabel: "價格 *", + currencyLabel: "貨幣", + photosTitle: "照片", + photosSellHint: "至少需要一張照片", + photosWtbHint: "選填 — 加入參考圖片", + productPhoto: "商品 {{n}}", + upload: "上傳", + photosNote: "最多新增 5 張照片。第一張圖片會是主照片。", + pickupLocationTitle: "面交地點", + pickupLocationHint: "連結至 Skate Spot,方便面交", + searchSpots: "搜尋 Spot...", + noSpotsFound: "找不到 Spot。請嘗試其他搜尋。", + availabilityLabel: "你通常什麼時候有空?", + availabilityPlaceholder: "週末 10:00-14:00、週二/週四晚上", + availabilityHint: "協助買家與你協調面交", + durationTitle: "商品刊登時間", + durationHint: "這件商品應保持啟用多久?", + publishing: "正在發布...", + checkingEligibility: "正在檢查資格...", + cooldownButton: "冷卻中:{{time}}", + limitReachedButton: "已達上限", + payFeeButton: "支付費用以繼續", + postWtbButton: "發布 WANT TO BUY", + listForSaleButton: "刊登 GEAR 出售", + }, + trades: { + title: "我的交易", + loginBody: "登入以管理你的 Marketplace 交易與聲譽。", + subtitle: "確認、要求,以及它們建立的聲譽。付款由你與另一位滑板人自行安排 — App 只記錄交易。", + actionNeeded: "需要處理", + askedToConfirmSale: "請你確認一筆交易", + recordedSale: "記錄了一筆交易 — 請確認你這一側", + confirmSale: "確認交易", + confirm: "確認", + nothingWaiting: "目前沒有需要你處理的事。🛹", + yourRecords: "你的交易記錄", + noTrades: "還沒有交易。完成一筆交易並確認,開始建立聲譽。", + browseGearSwap: "瀏覽 Gear Swap", + roleSold: "售出", + roleBought: "購入", + roleTrade: "交換", + with: "與", + viewListing: "檢視商品", + revoke: "撤銷", + revokeTitle: "撤銷這筆交易記錄?", + revokeBody: "它將不再計入你的聲譽。對方會保留自己的證明。用於有爭議或誤記的交易。", + revokeNote: "作者已收回。", + revoked: "交易記錄已撤銷", + revokedBody: "它已不再計入聲譽。", + revokeFailed: "無法撤銷交易", + saleConfirmed: "交易已確認", + saleConfirmedBody: "對方現在可以確認自己這一側。", + saleConfirmFailed: "無法確認交易", + tradeConfirmed: "交易已確認", + tradeConfirmedBody: "你們雙方的聲譽都已更新。", + tradeConfirmFailed: "無法確認交易", + somethingWrong: "出了點問題。", + }, + card: { + listingDeleted: "商品已刪除", + listingRemoved: "商品已移除", + listingDeletedBody: "你的商品已被移除。遵循刪除的 Relay 將停止提供它。", + listingRemovedBody: "這件商品已被下架,並會在 SkateSpots 各處隱藏。", + removeFailed: "移除失敗", + somethingWrong: "出了點問題", + markedSold: "已標記為售出", + markedSoldBody: "你的商品現在顯示為已售出。", + couldNotUpdate: "無法更新", + relisted: "已重新刊登", + relistedBody: "你的商品已重新啟用。", + listingOptions: "商品選項", + report: "檢舉", + removeAdmin: "移除(管理員)", + postage: "郵資", + newSeller: "新賣家", + saleOne: "{{count}} 筆交易", + saleMany: "{{count}} 筆交易", + iHaveThis: "我有這個!", + deleteTitle: "刪除「{{title}}」?", + adminRemoveTitle: "移除這件商品?(管理員)", + deleteBody: "這會要求 Relay 移除你的商品「{{title}}」。此處無法復原 — 你必須建立新的商品。", + adminRemoveBody: "作為 SkateSpots 管理員,你正在下架「{{title}}」。它會對所有人在 App 各處隱藏,並對 Relay 送出刪除要求。", + deleting: "正在刪除…", + removing: "正在移除…", + deleteListing: "刪除商品", + removeListing: "移除商品", + reportCount: "{{count}} 件檢舉", + reports: "{{count}} 件檢舉", + viewTitle: "檢視 {{title}}", + reportListing: "檢舉商品", + manageListing: "管理商品", + trusted: "已信任", + daysOld: "{{n}} 天前", + monthsOld: "{{n}} 個月前", + yearsOld: "{{n}} 年前", + listingsCount: "{{count}} 件商品", + postageBuyer: "郵資:買家", + postageSeller: "郵資:賣家", + postageSplit: "郵資:平分", + powTitle: "NIP-13 工作量證明 — 免費防垃圾", + verifiedTradeOne: "{{count}} 筆已驗證交易", + verifiedTrades: "{{count}} 筆已驗證交易", + reportSubmitted: "檢舉已送出", + reportSubmittedBody: "感謝你協助維護 Marketplace 的安全。", + reportFailed: "送出檢舉失敗", + selectReason: "請選擇一個原因", + reportDialogBody: "檢舉不當或誤導的商品,協助維護 Marketplace 的安全。", + reasonLabel: "檢舉原因 *", + detailsLabel: "補充詳情(選填)", + detailsPlaceholder: "提供任何可能有幫助的補充說明...", + reportNote: "檢舉會發布到 Nostr,協助社群辨識有問題的商品。收到多筆檢舉的商品可能會自動隱藏。", + submitting: "正在送出...", + submitReport: "送出檢舉", + }, + tradeActions: { + tradeConfirmed: "交易已確認", + tradeConfirmedWithProof: "已附上可驗證的收據 — 這會計入已驗證交易。", + tradeConfirmedBody: "你們雙方的聲譽都已更新。", + tradeConfirmFailed: "無法確認交易", + somethingWrong: "出了點問題。", + requestNote: "請確認我們對「{{title}}」的交易。", + requestSent: "已要求確認", + requestSentBody: "賣家現在可以確認交易,並建立雙方的聲譽。", + requestFailed: "無法送出要求", + escrowRefunded: "Escrow 已退款", + escrowRefundedBody: "資金已回到你的 Cashu 錢包。", + escrowRefundFailed: "無法退還 escrow", + confirmThisTrade: "確認這筆交易", + escrowAndRequest: "Escrow 並要求確認", + shipsEscrowHint: "寄送交易 — 使用 escrow,讓雙方都不會寄入虛空。請在交易聊天中私下分享地址,絕不要在此。", + shipsHint: "寄送交易 — 若賣家提供 escrow 請優先使用,並僅在聊天中分享地址。", + askSeller: "請賣家確認", + waitingSeller: "已要求確認 — 等待賣家。", + refundEscrow: "退還 escrow", + buyWithSats: "用 sats 購買", + depositTitle: "誠意訂金(選填)", + payDeposit: "支付訂金", + depositBefore: "交換沒有發票,所以這能讓它有", + verifiableCost: "可驗證的成本", + depositAfter: "。交貨時退還(或使用 Cashu escrow 自動退款)。⚠️ 證明的是承諾,不是交貨。", + depositPaid: "訂金已支付", + depositPaidBody: "已儲存 — 會在確認交易時附上。", + paid: "已付款 ⚡", + paidWithProof: "已儲存可驗證的收據 — 確認交易以使其計入。", + paidBody: "請賣家確認交易,讓它對你們雙方都計入。", + }, + offers: { + accepted: "已接受", + declined: "已拒絕", + withdrawn: "已撤回", + open: "進行中", + noAmount: "無金額", + titleOwner: "出價({{count}})", + titleBuyer: "你的議價", + you: "你", + them: "對方", + paidAskConfirm: "已付款 — 請賣家確認交易。", + payWithSats: "用 sats 付款", + accept: "接受", + decline: "拒絕", + counter: "還價", + counterPlaceholder: "你的還價(sats)", + send: "送出", + counterItemPlaceholder: "…或以物品還價交換(選填)", + waitingOn: "等待", + waitingOnSuffix: "— 如果對方還價,就會輪回你。", + withdraw: "撤回", + dmAccepted: "✅ 你的出價被接受了!傳訊安排交付。", + dmDeclined: "❌ 你的出價被拒絕了。", + offerAccepted: "出價已接受", + offerDeclined: "出價已拒絕", + respondFailed: "無法回覆", + somethingWrong: "出了點問題。", + offerWithdrawn: "出價已撤回", + withdrawFailed: "無法撤回", + enterAmountOrItem: "輸入金額或要交換的物品", + counterDm: "還價", + counterSent: "還價已送出", + counterSentBody: "現在輪到對方了。", + counterFailed: "無法送出還價", + }, + offer: { + validAmount: "輸入有效金額", + describeOffer: "描述你的出價", + describeOfferBody: "加入金額、要交換的物品或訊息。", + dmAmount: ",{{amount}} sats", + dmItem: "(提供:{{item}})", + dmBody: "🛹 你的商品「{{title}}」有新出價{{amount}}{{item}}。{{note}}", + sent: "出價已送出", + sentBody: "{{sellerName}} 可以接受或拒絕。", + sendFailed: "無法送出出價", + somethingWrong: "出了點問題。", + title: "出價", + description: "提供 sats,或交換物品 — {{sellerName}} 可以接受、拒絕或還價。交付方式由你們雙方自行安排。", + amountLabel: "金額(sats,選填)", + amountPlaceholder: "例如 45000", + itemLabel: "或交換物品(選填)", + itemPlaceholder: "例如我的 8.25 Deck + 備用 Wheels", + itemHint: "要交換嗎?把你提供的東西寫在這裡 — 可以搭配 sats。", + messageLabel: "訊息(選填)", + messagePlaceholder: "任何賣家應該知道的事…", + send: "送出出價", + }, + markSold: { + enterBuyer: "輸入買家的 npub", + dealClosed: "交易完成 🎉", + dealClosedBody: "商品已標記為售出,交易已發布以建立聲譽。", + closeFailed: "無法完成交易", + somethingWrong: "出了點問題。", + title: "完成交易", + description: "將這件商品標記為售出,並為你與買家記錄一筆簽名的交易證明。", + buyerLabel: "買家的 npub", + methodLabel: "如何付款?(自行申報)", + amountLabel: "金額(sats,選填)", + submit: "標記為售出", + }, + handoff: { + title: "安排交付", + suggest: "建議時間與地點", + suggestDm: "嗨!我想買「{{title}}」。請建議會面的時間與地點 — 我很樂意在公開的 Skate Spot 碰面。", + orMeetAt: "或在附近的公開 Spot 碰面:", + spotDm: "嗨!我想買「{{title}}」。要在 {{spot}} 碰面嗎?{{url}}", + shareDelivery: "分享配送詳情", + deliveryDm: "嗨!我想買「{{title}}」。這是我的配送詳情:\n\n姓名:\n地址:\n\n(只分享快遞需要的資訊。)", + useLocker: "使用置物櫃/包裹點", + lockerDm: "嗨!我想買「{{title}}」。我們可以改用包裹置物櫃/包裹店,而不是住家地址嗎?", + noteBefore: "這些詳情只留在私人聊天中 — SkateSpots 絕不會看到。寄送交易請優先使用", + escrow: "escrow", + noteMiddle: ",並", + neverPay: "絕不要在 App 的付款管道之外付款", + noteAfter: "。在公開場合碰面。", + }, + shipping: { + noCounterparty: "還沒有交易對象", + noCounterpartyBody: "賣家應先記錄交易(指名買家)。", + markedShipped: "已標記為寄出", + markedReceived: "已標記為收到", + issueReported: "已回報問題", + receivedBody: "謝謝 — 這不會釋放 escrow;請直接與賣家結算。", + notifiedBody: "已通知對方。", + updateFailed: "無法更新", + somethingWrong: "出了點問題。", + title: "寄送", + shipped: "已寄出", + received: "已收到", + issue: "問題", + trackingPlaceholder: "追蹤號碼(選填)", + iShipped: "我已寄出", + iReceived: "我已收到", + reportIssue: "回報問題", + noteBefore: "自行申報 — 這只是物流備註,", + notProof: "並非證明", + noteAfter: "。標記「已收到」不會釋放 escrow。⚠️ 請勿拍攝能看到地址的包裹,且只有在你能接受追蹤號碼公開時才分享。", + }, + pay: { + sent: "付款已送出 ⚡", + sentWithProof: "已儲存可驗證的付款收據 — 會計入付款已驗證。", + sentBody: "通知賣家 — 他們可以確認交易,讓它對你們雙方都計入。", + failed: "付款失敗", + title: "用 sats 付款", + descSendPrefix: "傳送", + descSendSuffix: "給 {{sellerName}} 以結算這筆交易。", + descSettle: "直接與 {{sellerName}} 結算這筆交易。", + paid: "已付款!", + paidBody: "請賣家確認交易 — 雙方確認能建立彼此的聲譽。", + noMethod: "{{sellerName}} 尚未設定付款方式(沒有 Lightning 發票或地址)。請傳訊給他們安排付款。", + ownListing: "這是你自己的商品。", + paying: "正在付款…", + pay: "付款", + payAmount: "支付 {{amount}} sats", + footnote: "從你連接的錢包(NWC、WebLN 或 Cashu)直接支付給 {{sellerName}} — SkateSpots 絕不保管資金。", + }, + spamFee: { + invoiceComment: "SkateSpots 商品刊登費", + generateFailed: "產生發票失敗", + paymentSuccess: "付款成功!", + satsSent: "已傳送 {{amount}} sats 給 {{name}}", + autoPayFailed: "自動付款失敗", + autoPayFailedBody: "請使用 QR 碼或發票手動付款", + invoiceCopied: "已複製發票!", + copyFailed: "複製失敗", + received: "已收到付款!", + receivedBody: "你的 {{amount}} sat 費用已支付。你現在可以建立商品了。", + title: "一次性商品刊登費", + subtitle: "作為新成員,首次刊登商品需要支付小額費用。", + whyTitle: "為什麼我需要付費?", + spamLabel: "防止垃圾訊息:", + spamBody: "這筆費用能阻止機器人與詐騙者用假商品淹沒 Marketplace。", + trustLabel: "建立信任:", + trustBody: "新帳號在刊登前需要證明投入程度。成功刊登幾次後,這筆費用就會免除。", + supportsLabel: "支持社群:", + supportsPrefix: "費用的去向是", + supportsSpotOwner: " — 建立這個 Spot 的人!", + supportsPlatform: " — 協助維持 SkateSpots 運作。", + oneTimeFee: "約 ${{usd}} USD • 一次性費用", + payToContinue: "支付 {{amount}} sats 以繼續", + proveWork: "改用工作量證明 — 免費", + proveWorkBody: "花幾秒鐘的 CPU 取代 {{amount}} sats。不用錢、不用錢包 — 這是防垃圾稅,不是付款。", + generating: "正在產生發票...", + processing: "正在處理付款...", + qrAlt: "付款 QR 碼", + copyInvoice: "複製發票", + openWallet: "開啟錢包", + payWithWallet: "用已連接的錢包付款", + scanHint: "用 Lightning 錢包掃描 QR 碼,或使用上方的按鈕", + skipTitle: "未來如何免除這筆費用:", + skip1: "在地圖上新增 Skate Spot", + skip2: "完成 2-3 次成功的刊登", + skip3: "建立你的社群聲譽", + skipNote: "受信任的成員可享無限次免費刊登!", + }, + reputation: { + highlyTrusted: "高度受信任的交易者", + building: "建立聲譽中", + newTrader: "新交易者", + title: "交易", + verified: "已驗證", + sales: "售出", + purchases: "購入", + tradeConfirmedOne: "雙方確認的交易", + tradeConfirmedMany: "雙方確認的交易", + with: "與", + personOne: "人", + personMany: "人", + awaiting: "等待雙方確認", + withPaymentProof: "附有付款證明", + selfReported: "(自行申報 — 未經驗證)", + paymentVerified: "付款已驗證", + zapReceipt: "(Zap 收據)", + singlePartnerWarning: "每一筆確認都來自同一個帳號。雙方確認是自行申報的,請謹慎看待這筆記錄。", + lowDiversityWarning: "多數確認都來自極少數帳號。一群小圈子互相背書可能看起來很活躍 — 請謹慎看待這筆記錄。", + ringWarning: "這些帳號大多只彼此交易 — 一個封閉的小圈圈。圈內互相確認是很弱的證據。", + weighted: "已依信任與活躍度加權", + footnote: "自行申報且雙方簽名 — 這是訊號,不是付款證明。", + }, + reputationPanel: { + reviewOfYou: "對你的評價", + yourRecord: "你的記錄", + listing: "商品", + averageOne: "{{count}} 個評分的平均", + averageMany: "{{count}} 個評分的平均", + reviewsTitle: "評論與交易記錄", + fromOthers: "{{count}} 則來自他人", + emptyBefore: "還沒有交易記錄。完成一筆交易並在此確認", + emptyAfter: "— 每次確認都會成為雙方個人檔案上的評論。", + }, + recommendations: { + published: "推薦已發布", + publishedBody: "感謝你的背書。", + failed: "無法推薦", + somethingWrong: "出了點問題。", + title: "受信任的交易者", + recommendedBy: "推薦者", + skaterOne: "滑板人", + skaterMany: "滑板人", + none: "還沒有推薦。", + youRecommend: "你推薦這位交易者 ✓", + recommend: "推薦為受信任的交易者", + }, + notification: { + newOffer: "新出價", + counterOffer: "還價", + offerAccepted: "出價已接受", + offerDeclined: "出價已拒絕", + offerWithdrawn: "出價已撤回", + confirmTrade: "確認交易", + tradeConfirmed: "交易已確認", + reviewOffer: "查看出價", + openListing: "開啟商品", + }, + confirmRow: { + rateTrade: "為交易評分:", + }, + deckRating: { + title: "{{value}}/10 Deck", + aria: "10 分之 {{n}}", + }, + clink: { + tip: "用 Bitcoin 打賞", + copiedBody: "CLINK 碼已複製到剪貼簿。", + copyFailed: "複製失敗", + copyFailedBody: "無法存取剪貼簿。", + whatIs: "什麼是 CLINK?", + tooltipTitle: "透過 Nostr 直接用 Bitcoin 付款", + tooltipBody: "CLINK 是自我保管的付款碼 — 不需要 App 帳號,沒有中間人。用相容的 Lightning 錢包掃描,打賞就會直接送到對方。", + descRecipient: "傳送一筆自我保管的 Bitcoin(Lightning)付款給 {{recipientName}} — 沒有中間人。", + descGeneric: "透過 Nostr 傳送一筆自我保管的 Bitcoin(Lightning)付款 — 沒有中間人。", + qrAlt: "CLINK Offer QR 碼", + copyCode: "複製 CLINK 碼", + openWallet: "在 CLINK 錢包中開啟", + copyToWallet: "複製碼到你的錢包", + priceFixed: "固定 — {{amount}} sats", + priceFixedShort: "固定價格", + priceVariable: "變動價格", + priceVariableCurrency: "以 {{currency}} 計價", + priceSpontaneous: "金額由你決定", + footnote: "用相容 CLINK 的錢包(例如 ShockWallet)掃描。如果沒有開啟任何東西,請複製上方的碼 — 你可能沒有安裝相容 CLINK 的錢包。沒有保管人、沒有網頁伺服器:發票是直接透過 Nostr 請求的。", + }, + paymentReadiness: { + ready: "你可以收款", + notReady: "設定付款以收款", + readyBefore: "你的 Lightning 地址", + readyAfter: " 已在你的個人檔案上 — 人們可以直接 Zap 與付款給你。", + silentSet: " 也已設定 Bitcoin 靜默付款(Silent Payment)地址。", + notReadyBefore: "新增 Lightning 地址(以及選填的 Bitcoin 靜默付款地址)到你的", + nostrProfile: "Nostr 個人檔案", + notReadyAfter: ",讓滑板人能付款給你。只需設定一次,就能套用到你在這裡的每個個人檔案。", + }, + seller: { + trade: "交換", + active: "啟用中", + markSold: "標記為售出", + yourListings: "你的商品", + activeCount: "{{count}} 項啟用", + listItem: "刊登物品", + loading: "正在載入你的商品…", + empty: "你還沒有任何商品。", + listFirst: "刊登你的第一件物品", + }, + noffer: { + label: "CLINK Offer 碼", + optional: "(選填,進階)", + offerId: "Offer:{{id}}", + relay: "Relay:{{relay}}", + invalidBefore: "這看起來不像有效的", + invalidAfter: "碼。", + valid: "有效的 CLINK 碼 — 「Pay via CLINK」按鈕會顯示在你的個人檔案上。", + help: "貼上自我保管的 CLINK 付款碼(例如來自 ShockWallet / Lightning.Pub)以接受 Nostr 原生的 Lightning 付款 — 沒有網頁伺服器或保管人。", + learnSpecs: "了解規格", + }, + escrowPanel: { + escrowed: "已將 {{amount}} sats 存入 escrow", + mint: "Mint", + refundSinceBefore: "買家可自以下時間起退款", + redeemBefore: "賣家現在可兌換 · 買家在之後可退款", + noExpiry: "這個代幣沒有設定到期日。", + }, + escrowRequest: { + enterAmount: "輸入 escrow 金額", + minLock: "至少鎖定 {{days}} 天", + requestNote: "已為我們的交易將 {{amount}} sats 存入 escrow — 請確認交易。", + created: "Escrow 已建立 🎉", + createdBody: "已鎖定 {{amount}} sats 共 {{days}} 天。{{sellerName}} 可在交貨時兌換。", + createFailed: "無法建立 escrow", + somethingWrong: "出了點問題。", + title: "為這筆交易設定 escrow", + description: "資金會鎖定給 {{sellerName}},若交易在期限後未完成,你可以退款。需要連接 Lightning 錢包。", + amountLabel: "金額(sats)", + daysLabel: "買家可於幾天後退款(天)", + daysHint: "經過這麼多天後,如果賣家未交貨,你可以取回資金。", + nativeOnly: "Cashu escrow 僅在 SkateSpots App 中提供(網頁版沒有)。", + lockAndRequest: "鎖定並要求確認", + }, + }, + labOptions: { + coach: { + skill: { + basics: "基礎", + ollies: "Ollies", + kickflips: "Kickflips", + grinds: "Grinds 與 Slides", + manuals: "Manuals", + inverts: "Inverts", + vert: "Vert/Ramp", + bowl: "Bowl", + street: "Street", + freestyle: "Freestyle", + safety: "安全", + diy: "DIY 滑板模組", + }, + skillDesc: { + basics: "推板、站姿、平衡、轉向", + ollies: "Ollie 及其變化(nollie、fakie)", + kickflips: "Kickflip、heelflip 及其變化", + grinds: "50-50、5-0、boardslide 等更多", + manuals: "Manual、nose manual、組合技", + inverts: "Invert、handplant、eggplant、andrecht", + vert: "Half-pipe、quarter-pipe、drop-in", + bowl: "Bowl carving、pumping、lines", + street: "街頭障礙與創意", + freestyle: "平地花式與流暢度", + safety: "如何摔倒、防護裝備、傷害預防", + diy: "建造 Ramp、Rails、平台等滑板障礙", + }, + }, + filmer: { + service: { + miniclips: "迷你短片", + longparts: "長篇影片", + koth: "King of the Road 風格", + documentaries: "紀錄片", + contests: "比賽拍攝", + raw: "原始素材", + followlines: "跟拍/Line 拍攝", + lines: "Line 與 B-Roll 拍攝", + }, + serviceDesc: { + miniclips: "15-60 秒社群媒體短片", + longparts: "3-10 分鐘含音樂的完整影片", + koth: "冒險/挑戰風格的滑板影片", + documentaries: "滑板文化與故事導向內容", + contests: "專業比賽與競賽記錄", + raw: "未剪輯的多角度素材", + followlines: "用魚眼跟拍 Line", + lines: "長焦 Line 與電影感 B-roll", + }, + skill: { + vx1000: "VX1000", + hvx: "HVX / HPX", + cinema: "電影攝影機", + dslr: "DSLR/無反", + actioncam: "GoPro/運動攝影機", + phone: "手機拍攝", + drone: "空拍機/航拍", + gimbal: "Gimbal/穩定器", + fisheye: "魚眼鏡頭", + longlens: "長焦鏡頭", + "4k": "4K/高影格率", + editing: "影片剪輯", + color: "調色", + }, + skillDesc: { + vx1000: "經典 VX1000 滑板美學", + hvx: "Panasonic HVX/HPX 標準畫質/HD 風格", + cinema: "電影攝影機(FX3、C 系列、RED、BMPCC)", + dslr: "高品質 DSLR 或無反相機", + actioncam: "GoPro/運動攝影機 POV 與固定座", + phone: "用現代智慧手機拍攝", + drone: "航拍與空拍機素材", + gimbal: "穩定的 Gimbal 運鏡", + fisheye: "廣角魚眼鏡頭畫面", + longlens: "長焦鏡頭拍細節", + "4k": "4K 解析度與高影格率慢動作", + editing: "專業影片剪輯與後製", + color: "色彩校正與調色", + }, + }, + editor: { + service: { + parts: "影片", + montages: "蒙太奇", + reels: "Reels/短片", + documentaries: "紀錄片", + contest: "比賽剪輯", + brand: "品牌/宣傳影片", + motion: "動態圖像", + colorgrade: "僅調色", + }, + serviceDesc: { + parts: "含配樂的完整滑板影片", + montages: "從原始素材剪輯的合輯", + reels: "15–60 秒社群媒體短片與 Reels", + documentaries: "故事導向的滑板文化影片", + contest: "比賽與活動的回顧剪輯", + brand: "為品牌與 Shop 製作的宣傳內容", + motion: "字卡、轉場、特效與圖形", + colorgrade: "色彩校正與 LUT 調色", + }, + skill: { + premiere: "Adobe Premiere", + resolve: "DaVinci Resolve", + finalcut: "Final Cut Pro", + aftereffects: "After Effects", + luts: "自訂 LUT", + vhs: "VHS/復古美學", + "4k": "4K 與 RAW 工作流程", + sound: "音效設計/混音", + }, + skillDesc: { + premiere: "Adobe Premiere Pro 剪輯", + resolve: "DaVinci Resolve 剪輯與調色", + finalcut: "Final Cut Pro 剪輯", + aftereffects: "動態圖像與合成", + luts: "自訂色彩風格開發", + vhs: "VHS 故障、super-8、復古底片風格", + "4k": "高解析 RAW/LOG 攝影機工作流程", + sound: "音樂同步、音效、母帶處理", + }, + }, + photo: { + service: { + action: "動作/技巧照", + sequence: "連拍", + portraits: "人像", + editorial: "專題/雜誌", + product: "產品/Shop 攝影", + events: "Event 記錄", + lifestyle: "生活/紀錄", + prints: "沖印與 Zine", + }, + serviceDesc: { + action: "技巧與 Line 的動作巔峰照", + sequence: "多格技巧連拍", + portraits: "滑板人肖像與團隊照", + editorial: "可直接刊登雜誌的專題跨頁", + product: "Deck、Gear 與 Shop 產品攝影", + events: "比賽、Jam 與首映記錄", + lifestyle: "幕後與文化紀錄", + prints: "實體沖印、Zine 與攝影集", + }, + camera: { + dslr: "DSLR", + mirrorless: "無反", + medium: "中片幅", + film35: "35mm 底片", + filmmedium: "中片幅底片", + point: "傻瓜相機", + phone: "手機", + }, + lens: { + fisheye: "魚眼", + wide: "廣角", + standard: "標準/定焦", + telephoto: "長焦", + macro: "微距", + zoom: "變焦", + }, + lighting: { + strobes: "棚燈", + speedlights: "機頂閃燈/閃光燈", + profoto: "Profoto", + elinchrom: "Elinchrom", + godox: "Godox", + triggers: "無線觸發器", + continuous: "持續燈/LED", + reflectors: "反光板/柔光", + naturallight: "僅自然光", + }, + support: { + tripod: "三腳架", + monopod: "單腳架", + lightstands: "燈架", + gimbal: "Gimbal", + bag: "行動裝備/包", + laptop: "現場連線拍攝", + }, + style: { + flashfisheye: "閃燈魚眼", + natural: "自然光", + bw: "黑白", + film: "底片美學", + longlens: "長焦", + studio: "棚拍/打燈", + street: "街頭/紀錄", + }, + }, + builder: { + service: { + diy: "DIY Spot", + concrete: "水泥滑板場", + wood: "木製 Ramp", + bowls: "Bowl 與泳池", + transitions: "轉接與 Quarter", + rails: "Rails 與平台", + boxes: "Manny Pad 與箱", + minis: "Mini Ramp", + pumptrack: "Pump Track", + foam: "泡棉坑/室內", + repairs: "維修與重鋪面", + design: "設計與顧問", + }, + serviceDesc: { + diy: "社群 DIY Spot 與游擊建造", + concrete: "澆築水泥的滑板場與設施", + wood: "木製 Ramp、起跳箱與障礙", + bowls: "Bowl、泳池與深轉接", + transitions: "Quarterpipe、斜坡與轉接", + rails: "鋼製 Rails、平台與 Grind 設施", + boxes: "Manny Pad、Funbox 與街頭設施", + minis: "Mini Ramp 與後院配置", + pumptrack: "Pump Track 與流暢路線", + foam: "泡棉坑、Resi 與室內訓練設施", + repairs: "修補、填補與重鋪現有 Spot", + design: "計畫、圖面與建造顧問", + }, + skill: { + concretework: "水泥/噴漿", + welding: "焊接/鋼構", + carpentry: "木工", + formwork: "模板與鋼筋", + masonry: "砌磚", + coping: "池緣(泳池/鋼)", + surfacing: "Skatelite/鋪面", + earthworks: "土方/開挖", + }, + scale: { + backyard: "後院/小型", + diycommunity: "社群 DIY", + publicpark: "完整公共滑板場", + indoor: "室內場館", + event: "Event/比賽場地", + }, + }, + artist: { + service: { + boardart: "板面圖像", + logos: "Logo 與品牌", + posters: "海報與傳單", + merch: "周邊與服飾", + zines: "Zine 與印刷", + illustration: "插畫", + stickers: "貼紙與轉印", + webdesign: "網頁/數位", + typography: "字體/手寫字", + animation: "動畫/動態", + }, + serviceDesc: { + boardart: "Deck 圖像與 Griptape 藝術", + logos: "品牌識別、Logo 與標準字", + posters: "Event 海報、傳單與演出視覺", + merch: "T 恤、連帽外套與服飾圖像", + zines: "Zine、專題與印刷排版", + illustration: "客製插畫與角色設計", + stickers: "貼紙包、轉印與貼紙", + webdesign: "網站、數位與 UI", + typography: "手寫字與客製字體", + animation: "動態圖像與動畫", + }, + medium: { + digital: "數位/向量", + handdrawn: "手繪", + screenprint: "網版印刷", + paint: "顏料/壓克力", + collage: "拼貼/混合", + photo: "照片/Photoshop", + "3d": "3D/算圖", + }, + tool: { + illustrator: "Adobe Illustrator", + photoshop: "Adobe Photoshop", + procreate: "Procreate", + affinity: "Affinity", + figma: "Figma", + blender: "Blender", + aftereffects: "After Effects", + clipstudio: "Clip Studio", + }, + }, + graffiti: { + style: { + throwups: "Throw-ups", + pieces: "Pieces/Burners", + murals: "壁畫", + characters: "角色", + lettering: "字體/Wildstyle", + stencil: "模板", + handstyles: "Handstyle/Tag", + "3dstyle": "3D 風格", + abstract: "抽象", + }, + styleDesc: { + throwups: "快速的雙色填色", + pieces: "全彩 Pieces 與 Burners", + murals: "大型壁畫與製作", + characters: "角色與人物創作", + lettering: "Wildstyle 與字母結構", + stencil: "模板與街頭藝術", + handstyles: "Tag 與 Handstyle", + "3dstyle": "3D 與變形字體", + abstract: "抽象與自由風格", + }, + medium: { + spray: "噴漆罐", + rollers: "滾筒/乳膠漆", + markers: "麥克筆/墨水", + brush: "畫筆/顏料", + digital: "數位/Procreate", + }, + context: { + legalwalls: "合法牆面", + commissions: "委託", + liveart: "現場彩繪", + skateparks: "滑板場壁畫", + interiors: "室內/Shop", + workshops: "工作坊", + }, + }, + tattoo: { + style: { + traditional: "傳統/Old School", + neotraditional: "新傳統", + fineline: "細線", + blackwork: "Blackwork", + realism: "寫實", + lettering: "字體/手寫", + illustrative: "插畫風", + skateflash: "滑板 Flash", + ignorant: "Ignorant/手刺風格", + japanese: "日式/Irezumi", + }, + styleDesc: { + traditional: "粗線條、經典美式", + neotraditional: "帶現代細節的傳統", + fineline: "細緻的單針作品", + blackwork: "實黑與圖騰", + realism: "照片寫實與肖像", + lettering: "手寫、字體與文字", + illustrative: "插畫與圖像", + skateflash: "滑板文化 Flash 設計", + ignorant: "Ignorant/素人手刺風格", + japanese: "日本傳統/irezumi", + }, + method: { + machine: "機器", + handpoke: "手刺", + flash: "提供 Flash", + custom: "客製設計", + coverup: "覆蓋", + }, + }, + trainer: { + focus: { + strength: "肌力與體能", + mobility: "活動度與柔軟度", + injuryprevention: "傷害預防", + rehab: "復健/物理治療", + recovery: "恢復與身體調理", + balance: "平衡與穩定", + cardio: "心肺/耐力", + nutrition: "營養指導", + }, + focusDesc: { + strength: "為滑板建立肌力與爆發力", + mobility: "活動範圍與柔軟度", + injuryprevention: "預防性訓練與降低受傷風險", + rehab: "傷後物理治療與復健", + recovery: "按摩、身體調理與恢復", + balance: "本體感覺、平衡與穩定", + cardio: "體能與耐力", + nutrition: "補充能量與營養建議", + }, + injury: { + ankles: "腳踝", + knees: "膝蓋", + wrists: "手腕", + hips: "髖部", + back: "背部/脊椎", + shoulders: "肩膀", + heelbruise: "腳跟瘀傷", + concussion: "腦震盪處理", + }, + credential: { + physio: "持照物理治療師", + osteo: "整骨師", + certtrainer: "認證教練", + sportstherapist: "運動治療師", + massage: "按摩治療師", + inperson: "面對面", + remote: "遠距/線上", + }, + }, + musician: { + genre: { + punk: "Punk", + hardcore: "Hardcore", + metal: "Metal", + rock: "Rock", + indie: "Indie/Alt", + hiphop: "Hip-Hop/Rap", + electronic: "電子", + lofi: "Lo-Fi/Beats", + reggae: "Reggae/Dub", + ska: "Ska", + jazz: "Jazz", + funk: "Funk/Soul", + flamenco: "Flamenco", + folk: "Folk/Acoustic", + experimental: "實驗", + grunge: "Grunge", + }, + instrument: { + vocals: "主唱", + guitar: "吉他", + bass: "貝斯", + drums: "鼓", + keys: "鍵盤/合成器", + dj: "DJ/唱盤", + producer: "製作人/Beats", + sax: "薩克斯風/銅管", + strings: "弦樂", + other: "其他", + }, + act: { + solo: "個人演出者", + band: "樂團", + dj: "DJ", + producer: "製作人", + collective: "團體", + }, + }, + judge: { + format: { + game_of_skate: "Game of S.K.A.T.E.", + best_trick: "Best Trick", + jam: "Jam 形式", + contest: "比賽/競賽", + street_league: "Street League 風格", + bowl: "Bowl/Vert", + mini_ramp: "Mini Ramp", + park: "Park", + street: "Street", + freestyle: "Freestyle", + world_tour: "World Destruction Tour", + am_series: "Am 系列/資格賽", + local_jam: "本地 Jam/草根", + online: "線上/IG 比賽", + }, + specialty: { + head_judge: "主審", + scoring: "評分/計分", + mc: "MC/主持人", + format_design: "賽制設計", + rules: "規則/裁判", + brackets: "對戰表/預賽", + livestream: "直播評審", + am_scout: "Am 挖掘", + }, + level: { + local: "本地", + regional: "區域", + national: "全國", + international: "國際", + pro: "職業巡迴", + }, + }, + organizer: { + event: { + street_jam: "Street Jam", + best_trick: "Best Trick", + game_of_skate: "Game of S.K.A.T.E.", + contest: "比賽/競賽", + bowl: "Bowl/Vert", + mini_ramp: "Mini Ramp", + park: "Park Session", + demo: "職業 Demo", + clinic: "講習/工作坊", + meetup: "聚會/巡遊", + downhill: "下坡/競速", + slalom: "Slalom", + kids: "兒童/青少年", + charity: "公益/募款", + tour_stop: "Tour 站點", + premiere: "影片首映", + market: "市集/藝術展", + }, + service: { + organizing: "全程主辦", + hosting: "主持/MC", + permits: "許可與政府", + sponsorship: "贊助/品牌合作", + promotion: "宣傳與行銷", + livestream: "直播/記錄", + sound: "音響與音樂", + ramps: "Ramp 與障礙", + safety: "安全與急救", + vendors: "餐飲與攤商", + media: "攝影/錄影記錄", + registration: "報名與對戰表", + }, + scale: { + grassroots: "草根", + local: "本地", + regional: "區域", + national: "全國", + international: "國際", + pro: "職業巡迴", + }, + }, + barber: { + service: { + haircut: "剪髮", + fade: "Fade", + beard: "鬍鬚修剪", + lineup: "Line-up/輪廓", + colour: "染髮", + kids: "兒童剪髮", + }, + serviceDesc: { + haircut: "經典剪髮 — 電剪與剪刀。", + fade: "漸層 Fade — 低、中或高。", + beard: "鬍鬚修剪、塑形與整理。", + lineup: "髮際線與頸部周圍的乾淨輪廓。", + colour: "染色、漂髮、上色與調色。", + kids: "為年幼滑板人耐心剪髮。", + }, + style: { + skin_fade: "Skin Fade", + taper: "Taper", + buzz: "Buzz Cut", + mohawk: "Mohawk", + mullet: "Mullet", + curly: "捲髮/Afro", + long: "長髮/層次", + classic: "經典剪刀剪", + }, + setting: { + shop: "Shop/理髮店", + mobile: "到府/行動", + event: "滑板活動與比賽", + }, + }, + tour: { + skill: { + beginner: { + label: "初學者", + description: "剛接觸滑板或只會基本技巧", + }, + intermediate: { + label: "中階", + description: "熟悉大多數地形", + }, + advanced: { + label: "進階", + description: "經驗豐富的滑板人,挑戰高難度 Spot", + }, + all: { + label: "所有程度", + description: "適合所有人", + }, + }, + }, + }, +}; export default zhTWBatch6; diff --git a/src/i18n/zh-TW/batch7.ts b/src/i18n/zh-TW/batch7.ts index a85a08a..0097842 100644 --- a/src/i18n/zh-TW/batch7.ts +++ b/src/i18n/zh-TW/batch7.ts @@ -1,4 +1,908 @@ -/** zh-TW — batch 7. Filled by the translation pass; empty until then. */ -const zhTWBatch7 = {}; +/** zh-TW — batch 7. */ +export const zhTWBatch7 = { + events: { + title: '滑板活動', + createEvent: '建立活動', + editEvent: '編輯活動', + eventDetails: '活動詳情', + eventName: '活動名稱', + eventType: '活動類型', + date: '日期', + time: '時間', + startDate: '開始日期', + endDate: '結束日期', + venue: '場地', + organizer: '主辦者', + attendees: '參與者', + going: '參加', + interested: '感興趣', + rsvp: 'RSVP', + ticketPrice: '票價', + freeEntry: '免費入場', + register: '報名', + moreInfo: '更多資訊', + upcomingEvents: '即將開始', + pastEvents: '過往', + noEvents: '未找到活動', + findEvents: '發現比賽、示範、活動等', + searchPlaceholder: '搜尋活動...', + loginToCreate: '登入以建立活動', + noEventsMatch: '沒有符合篩選條件的即將開始的活動。', + noUpcoming: '未找到即將開始的活動。', + noPast: '未找到過往活動。', + types: { + contest: '比賽', + session: '活動', + meetup: '聚會', + premiere: '影片首映', + workshop: '工作坊', + demo: '示範', + jam: 'Jam' + } + }, + wallet: { + title: '錢包', + balance: '餘額', + send: '傳送', + receive: '接收', + transactions: '交易', + history: '歷史記錄', + noTransactions: '暫無交易', + sendSats: '傳送 Sats', + receiveSats: '接收 Sats', + amount: '金額', + recipient: '接收方', + lightning: 'Lightning', + onChain: '鏈上', + invoice: '帳單', + address: '地址', + scanQR: '掃描二維碼', + paste: '貼上', + payInvoice: '支付帳單', + createInvoice: '建立帳單', + copied: '已複製到剪貼簿!', + insufficientFunds: '餘額不足', + paymentSent: '付款已傳送!', + paymentReceived: '已收到付款!', + cashu: { + title: 'Cashu 錢包', + tokens: '代幣', + mint: 'Mint', + mints: 'Mints', + manageMints: '管理 Mints', + addMint: '新增 Mint', + removeMint: '移除 Mint', + defaultMint: '預設 Mint', + backup: '備份', + restore: '還原', + recoveryPhrase: '助記詞', + viewRecoveryPhrase: '檢視助記詞', + seedWarning: '這就像你的 Nostr nsec —— 請務必保密並備份!' + } + }, + spots: { + addSpot: '新增 Spot', + editSpot: '編輯 Spot', + spotDetails: 'Spot 詳情', + spotName: 'Spot 名稱', + spotType: 'Spot 類型', + description: '描述', + location: '位置', + address: '地址', + photos: '照片', + addPhotos: '新增照片', + obstacles: '障礙物', + features: '特色', + bustLevel: '驅趕風險', + bestTime: '最佳時間', + tips: '提示', + reviews: '評價', + addReview: '新增評價', + reportSpot: '舉報 Spot', + directions: '路線', + shareSpot: '分享 Spot', + createdBy: '建立者', + lastUpdated: '最後更新', + types: { + park: '滑板公園', + street: '街頭 Spot', + diy: 'DIY Spot', + plaza: '廣場', + indoor: '室內', + bowl: '碗池', + vert: 'Vert', + miniramp: '迷你坡道' + }, + bustLevels: { + chill: '輕鬆', + moderate: '中等', + sketchy: '有點危險', + heavy: '嚴格' + } + }, + settings: { + title: '設定', + profile: '個人資料', + editProfile: '編輯個人資料', + account: '帳戶', + security: '安全', + relays: 'Relays', + appearance: '外觀', + language: '語言', + notifications: '通知', + privacy: '隱私', + about: '關於', + help: '說明', + feedback: '意見回饋', + version: '版本', + displayName: '顯示名稱', + username: '使用者名稱', + bio: '簡介', + website: '網站', + lightningAddress: 'Lightning 地址', + profilePicture: '頭像', + banner: '橫幅', + saveProfile: '儲存個人資料', + backupKeys: '備份金鑰', + exportKeys: '匯出金鑰', + secretKey: '私鑰', + publicKey: '公鑰', + showSecretKey: '顯示私鑰', + hideSecretKey: '隱藏私鑰', + copyKey: '複製金鑰', + keysBackedUp: '你已確認金鑰已安全備份。', + keysNotBackedUp: '請務必備份你的助記詞或私鑰!', + selectLanguage: '選擇語言', + english: '英語', + spanish: '西班牙語' + }, + createSpot: { + title: '新增一個滑板 Spot', + subtitle: '與社群分享一個滑板 Spot', + backToMap: '返回地圖', + namePlaceholder: '例如:Hollywood High School', + descriptionPlaceholder: '描述這個 Spot、障礙物、最佳滑板時間、保全資訊等。', + addressPlaceholder: '例如:1521 N Highland Ave, Los Angeles, CA', + selectType: '選擇 Spot 類型', + selectBustLevel: '選擇驅趕風險', + uploadPhotos: '上傳', + dragDrop: '拖曳或點選上傳', + maxPhotos: '最多 5 張照片', + publishing: '發布中...', + success: 'Spot 發布成功!', + error: 'Spot 發布失敗', + locationRequired: '請在地圖上選擇一個位置', + useCurrentLocation: '使用我的目前位置', + pickOnMap: '在地圖上選擇位置', + loginToAdd: '你需要登入才能新增滑板 Spot。', + locationLabel: '位置', + tapToPlace: '點選地圖放置標記,或拖曳它進行微調。', + manualCoords: '手動輸入座標', + moreDetails: '更多詳情(可選)', + photoHint: '發布需要一張照片', + nameRequired: '請輸入這個 Spot 的名稱。', + descriptionRequired: '請描述這個 Spot。', + addressRequired: '請新增地址或區域名稱。', + photoRequired: '請至少新增一張照片。', + draftTitle: '你有一份未儲存的草稿', + draftBody: '從上次中斷的地方繼續,或捨棄它。', + draftResume: '繼續', + draftDiscard: '捨棄草稿', + requiredFields: '告訴我們這個 Spot 的資訊。所有帶 * 的欄位均為必填。', + coordinates: '座標', + latitudePlaceholder: '緯度(例如 34.1012)', + longitudePlaceholder: '經度(例如 -118.3389)', + gettingLocation: '正在取得位置...', + accessType: '進入類型', + publicTitle: '公共 - 對所有人開放', + publicDesc: '滑板公園、公共廣場、街頭 Spot', + privateTitle: '私人地產 - 需要許可', + privateDesc: '後院坡道、私人土地、門禁 Spot', + localsTitle: '先詢問當地滑手', + localsDesc: '尊重這個 Spot,別把它玩壞', + contactInfo: '聯絡資訊', + contactPlaceholder: '例如:電話號碼、Instagram、電子郵件...', + contactHintPrivate: '人們應該如何聯絡你取得許可?', + contactHintLocals: '人們應該如何聯絡你詢問這個 Spot?' + }, + marketplace: { + title: '市集', + subtitle: '買賣和交換滑板 Gear', + addListing: '新增商品', + condition: '成色', + conditions: { + new: '全新', + likeNew: '幾乎全新', + good: '良好', + fair: '一般', + poor: '較差' + }, + categories: { + all: '全部', + decks: '板面', + trucks: '支架', + wheels: '輪子', + bearings: '軸承', + shoes: '鞋子', + clothing: '服裝', + protection: '護具', + other: '其他' + }, + priceRange: '價格範圍', + location: '位置', + seller: '賣家', + contact: '聯絡賣家', + makeOffer: '出價', + sold: '已售出', + available: '可購買', + gear: 'Gear', + sellGear: '出售 Gear', + wantToBuy: '求購' + }, + auth: { + login: '登入', + logout: '登出', + signUp: '註冊', + signUpTitle: '初次使用 Nostr?', + signUpDesc: '建立一個新帳戶即可開始。免費且開放。', + orLogIn: '或登入', + loginWithExtension: '使用擴充功能登入', + loginWithAmber: '使用 Amber 登入(Android)', + loginWithKey: '私鑰(nsec)或助記詞', + loginWithBunker: '使用 Nostr Connect 登入', + bunkerUri: 'Bunker 連線字串', + openAmber: '開啟 Amber', + connectToBunker: '連線到 Bunker', + noExtension: '未偵測到擴充功能。', + extensionHelp: '嘗試使用上方的註冊按鈕建立新帳戶,或者如果你已有憑據,使用 Amber、金鑰或 Bunker 分頁。', + amberDesc: 'Amber 是一款適用於 Android 裝置的安全 Nostr 簽名器 App。點選下方按鈕開啟 Amber 並授權存取。', + bunkerDesc: '使用遠端簽名器(bunker)從任何裝置存取你的帳戶。你的金鑰安全地儲存在伺服器上,絕不會暴露給網站。', + keyPlaceholder: 'nsec1... 或你的 12 個單詞助記詞', + keyHint: '你可以貼上 nsec 金鑰或 12 個單詞的助記詞', + uploadKeyFile: '上傳你的金鑰檔案', + loggingIn: '登入中...', + connecting: '連線中...', + verifying: '驗證中...' + }, + createEvent: { + title: '建立活動', + subtitle: '為社群主辦一場滑板活動', + backToEvents: '返回活動', + namePlaceholder: '例如:夏日滑板活動', + descriptionPlaceholder: '描述活動、預期內容、規則、獎品等。', + selectType: '選擇活動類型', + venuePlaceholder: '例如:Venice Beach Skatepark, CA', + selectDate: '選擇日期', + selectTime: '選擇時間', + ticketPricePlaceholder: '免費活動請留空', + publishing: '發布中...', + success: '活動發布成功!', + error: '活動發布失敗', + loginToCreate: '你需要登入才能建立活動。', + requiredFields: '告訴我們這個活動的資訊。所有帶 * 的欄位均為必填。', + startDateTime: '開始日期和時間', + endDateTime: '結束日期和時間(可選)', + coordinatesOptional: '座標(可選)', + coverImage: '封面圖片', + uploadCover: '上傳封面圖片', + nip05Recommended: '建議進行 NIP-05 驗證', + nip05Desc: '在你的個人資料中新增 NIP-05 識別碼,以驗證你的身分並與參與者建立信任。', + addNip05: '在設定中新增 NIP-05' + }, + labPage: { + title: 'The Lab', + subtitle: '學習招式。捕捉瞬間。與其他滑手建立聯絡', + coachesTab: '教學', + filmersTab: '拍攝', + offerCoaching: '提供教學', + offerFilming: '提供拍攝', + loginToOffer: '登入以提供服務', + whatToLearn: '你想學什麼?', + whatContent: '你需要什麼類型的內容?', + selectSkillsDesc: '選擇技能,我們會為你匹配教練', + selectFilmingDesc: '選擇你需要的拍攝服務', + searchPlaceholder: '按姓名、位置或技能搜尋...', + noServicesYet: '暫無服務', + beFirstToOffer: '成為第一個向社群提供教學或拍攝服務的人!', + skills: '技能', + rate: '價格', + perHour: '/小時', + contact: '聯絡', + viewProfile: '檢視個人資料', + noProfilesYet: '暫無個人資料', + beFirstCoach: '成為第一個註冊的教練!', + beFirstFilmer: '成為第一個註冊的拍攝者!', + yearsExperience: '年經驗' + }, + skills: { + kickflip: 'Kickflip', + heelflip: 'Heelflip', + ollie: 'Ollie', + treflip: '360 Flip', + shuvit: 'Shuvit', + hardflip: 'Hardflip', + varial: 'Varial', + nollie: 'Nollie', + fakie: 'Fakie', + switch: 'Switch', + grind: 'Grind', + slide: 'Slide', + manual: 'Manual', + transition: 'Transition', + bowl: 'Bowl', + vert: 'Vert', + street: 'Street', + flatground: 'Flatground' + }, + lab: { + title: 'The Lab', + subtitle: '提升你的滑板水準', + coaches: '教練', + filmers: '拍攝者', + findCoach: '尋找教練', + becomeCoach: '成為教練', + findFilmer: '尋找拍攝者', + becomeFilmer: '成為拍攝者', + hourlyRate: '時薪', + experience: '經驗', + specialties: '專長', + availability: '可預約時間', + bookSession: '預約課程', + contactCoach: '聯絡教練', + noCoaches: '你所在區域未找到教練', + noFilmers: '你所在區域未找到拍攝者' + }, + shops: { + title: '滑板 Shop', + addShop: '新增 Shop', + editShop: '編輯 Shop', + shopDetails: 'Shop 詳情', + shopName: 'Shop 名稱', + hours: '營業時間', + phone: '電話', + website: '網站', + services: '服務', + brands: '品牌', + supportLocal: '支持在地', + nip05: 'Shop NIP-05', + nip05Hint: '一個你可控的、用於這家 Shop 的可選識別碼(例如 shop@yourdomain.com),會根據你的金鑰進行驗證。最多新增 5 個。' + }, + becomeFilmer: { + title: '成為拍攝者', + subtitle: '為社群拍攝最精彩的片段', + bioPlaceholder: '告訴我們你的拍攝經驗和裝置...', + specialtiesPlaceholder: '例如:魚眼、長焦、無人機、剪輯', + selectSpecialties: '選擇你的專長', + hourlyRate: '時薪(sats)', + ratePlaceholder: '例如:5000', + locationPlaceholder: '你的城市或區域', + portfolioUrl: '作品集 URL', + portfolioPlaceholder: '連結到你的作品(YouTube、Instagram 等)', + publishing: '發布個人資料中...', + success: '拍攝者資料已建立!', + error: '建立個人資料失敗' + }, + food: { + title: '美食 Spot', + subtitle: '在滑板前後補充能量', + addFood: '新增美食 Spot', + categories: { + all: '全部', + burgers: '漢堡', + pizza: '披薩', + tacos: '墨西哥捲餅', + coffee: '咖啡', + drinks: '飲品', + snacks: '小吃' + }, + skaterFriendly: '滑手友好', + nearSpots: '滑板 Spot 附近' + }, + profile: { + posts: '貼文', + spots: 'Spots', + events: '活動', + following: '關注中', + followers: '粉絲', + editProfile: '編輯個人資料', + follow: '關注', + unfollow: '取消關注', + noPostsYet: '暫無貼文', + noBio: '暫無簡介', + zapProfile: 'Zap 這位滑手' + }, + becomeCoach: { + title: '成為教練', + subtitle: '分享你的技能,幫助其他滑手進步', + bioPlaceholder: '告訴我們你的滑板背景和教學風格...', + skillsPlaceholder: '例如:kickflip、heelflip、grinds、bowls', + selectSkills: '選擇你能教授的招式', + hourlyRate: '時薪(sats)', + ratePlaceholder: '例如:5000', + locationPlaceholder: '你的城市或區域', + publishing: '發布個人資料中...', + success: '教練資料已建立!', + error: '建立個人資料失敗' + }, + weather: { + title: '天氣', + current: '目前狀況', + forecast: '預報', + humidity: '溼度', + wind: '風', + feelsLike: '體感溫度', + goodForSkating: '適合滑板!', + notIdeal: '條件不太理想', + allWeather: '所有天氣', + goodWeather: '天氣良好', + perfectWeather: '完美天氣' + }, + errors: { + somethingWentWrong: '出錯了', + tryAgainLater: '請稍後重試', + notFound: '未找到', + pageNotFound: '頁面未找到', + unauthorized: '未授權', + loginRequired: '請登入以繼續', + networkError: '網路錯誤', + checkConnection: '請檢查你的網路連線', + invalidInput: '輸入無效', + requiredField: '此欄位為必填' + }, + time: { + today: '今天', + yesterday: '昨天', + tomorrow: '明天', + thisWeek: '本週', + nextWeek: '下週', + thisMonth: '本月', + justNow: '剛剛', + minutesAgo: '{{count}} 分鐘前', + hoursAgo: '{{count}} 小時前', + daysAgo: '{{count}} 天前' + }, + spotDetail: { + postedBy: '發布者', + getDirections: '取得路線', + reviews: '評價', + noReviews: '暫無評價', + beFirstReview: '成為第一個評價這個 Spot 的人!', + writeReview: '撰寫評價', + submitReview: '提交評價', + rating: '評分', + reviewPlaceholder: '分享你在這個 Spot 的體驗...', + relatedSpots: '附近的 Spots' + }, + eventDetail: { + organizedBy: '主辦者', + eventInfo: '活動資訊', + location: '位置', + dateTime: '日期和時間', + price: '價格', + attendeeCount: '{{count}} 人參加', + interested: '感興趣', + going: '參加', + notGoing: '不參加', + share: '分享活動' + }, + venueAccess: { + title: '通行證', + desc: '向滑手簽發一張簽名通行證,以便他們在門口證明通行權限——他們出示卡片,任何人都可以掃描二維碼進行驗證。', + active: '{{count}} 張有效', + revoked: '{{count}} 張已撤銷', + issue: '簽發通行證', + verifyHint: '透過掃描驗證——無需 App 或帳戶即可查驗。', + publicTitle: '通行證', + publicDesc: '這個場地簽發通行證。在門口掃描滑手的卡片即可驗證。', + badge: '通行證', + sellerHint: '這個賣家的場地簽發通行證' + }, + zaps: { + zapButton: 'Zap', + sendZap: '傳送 Zap', + zapAmount: 'Zap 金額', + customAmount: '自訂金額', + addMessage: '新增留言(可選)', + sending: '傳送中...', + sent: 'Zap 已傳送!', + failed: 'Zap 失敗', + received: '你收到了一個 Zap!' + }, + rewards: { + title: '獎勵', + yourPoints: '你的點數', + earnPoints: '賺取點數', + redeemPoints: '兌換點數', + leaderboard: '排行榜', + achievements: '成就', + dailyTasks: '每日任務', + weeklyTasks: '每週任務' + }, + errorsUi: { + slammedTitle: '摔了', + slammedBody: '這個螢幕出了點問題。你的帳戶和資料是安全的——讓我們重新出發。', + tryAgain: '重試', + reloadApp: '重新載入 App', + pageSlammedTitle: '這個頁面摔了', + pageSlammedBody: '這個螢幕上的某個東西出了問題。你的帳戶和資料是安全的。通常快速重新載入就能解決。', + reload: '重新載入', + goBack: '返回' + }, + backup: { + title: '儲存你的登入', + subtitle: '只需 10 秒——做一次即可', + message: '你的恢復碼是重新進入帳戶的唯一方式。儲存它,你就可以在任何裝置上登入。', + warning: '遺失它就無法重設——沒有電子郵件,沒有密碼復原。', + backupNow: '立即儲存', + confirmed: '我已儲存', + remindLater: '稍後' + }, + bootUi: { + ariaLoading: '正在載入 SkateSpots', + ariaReady: 'SkateSpots 已就緒', + ready: '就緒', + statusWaking: '正在喚醒網路', + statusTuning: '正在調校 Relays', + statusPulling: '正在拉取 Spots', + statusDropping: '即將進入' + }, + footer: { + vibedWith: '靈感來自', + poweredBy: '技術支援', + openSource: '開源', + contribute: '貢獻', + decentralized: '去中心化', + communityOwned: '社群所有' + }, + role: { + owner: '所有者', + admin: '管理員', + organiser: '主辦者', + verifiedOwner: '已驗證所有者' + }, + nfc: { + write: '寫入 NFC 標籤', + written: '標籤已寫入', + writtenDesc: '將標籤靠近手機以開啟驗證頁面。', + failed: '無法寫入標籤' + }, + collectionUi: { + namePlaceholder: '巴塞隆納之旅 2024', + descriptionPlaceholder: '我巴塞隆納之旅中最喜歡的 Spots...' + }, + toastsUi: { + followingSuccess: '關注成功', + followingSuccessDesc: '該使用者現已加入你的網路', + followFailed: '關注失敗', + unfollowSuccess: '已取消關注', + unfollowSuccessDesc: '已從你的網路中移除', + unfollowFailed: '取消關注失敗', + reportThanks: '謝謝——已提交審核', + reportFailed: '無法傳送舉報', + savedOffline: '已離線儲存', + savedOfflineDesc: '當你重新連線時,我們會自動發布它。', + cacheCleaned: '快取已清理', + cacheCleanedDesc: '已從快取中移除 {{count}} 個舊 Spots', + cacheCleared: '快取已清除', + cacheClearedDesc: '所有快取的 Spots 已被移除', + backOnline: '已恢復連線', + backOnlineDesc: '已傳送 {{count}} 個儲存的操作。', + postQueued: '貼文已排隊', + postQueuedDesc: '你的貼文將在重新連線後發布', + invalidIdentifier: '識別碼無效。請使用 npub1...、user@domain.com 或十六進位公鑰', + notASpotThanks: '謝謝——已提交審核', + notASpotThanksDesc: '別介意:這會將標記標示為無關內容,讓人們自行判斷。', + notASpotFailed: '無法傳送舉報', + pleaseTryAgain: '請重試。', + relayUnreachable: '無法連線到任何 Relay —— 請檢查你的網路連線並重試。', + loginToReport: '登入以舉報 Spot。', + zapLoginRequired: '需要登入', + zapLoginRequiredDesc: '你必須登入才能傳送 Zap。', + zapEventNotFound: '未找到活動', + zapEventNotFoundDesc: '找不到要 Zap 的活動。', + zapAuthorNotFound: '未找到作者', + zapAuthorNotFoundDesc: '找不到此項的作者。', + zapSuccess: 'Zap 成功!', + zapSuccessNwcDesc: '你透過 NWC 向作者傳送了 {{amount}} sats。', + zapSuccessDesc: '你向作者傳送了 {{amount}} sats。', + zapStatusUnknown: '付款狀態未知', + zapStatusUnknownDesc: '你的錢包可能仍在結算這筆 Zap。重試前請檢查你的錢包——不要重複支付。', + zapNwcFailed: 'NWC 付款失敗', + zapWeblnFailed: 'WebLN 付款失敗', + zapFallingBack: '{{error}}。正在改用其他付款方式...', + zapFailed: 'Zap 失敗', + zapUnknownNwcError: '未知的 NWC 錯誤', + zapUnknownWeblnError: '未知的 WebLN 錯誤', + nwcInvalidUri: 'NWC URI 無效', + nwcInvalidUriDesc: '請檢查連線字串並重試。', + nwcExists: '連線已存在', + nwcExistsDesc: '該錢包已連線。', + nwcConnected: '錢包已連線', + nwcConnectedDesc: '已成功連線到 {{alias}}。', + nwcFailed: '連線失敗', + nwcFailedDesc: '無法連線到錢包:{{error}}', + nwcUnknownError: '發生未知錯誤', + nwcDisconnected: '錢包已斷開連線', + nwcDisconnectedDesc: '錢包連線已被移除。', + deleteApproveAmber: '在 Amber 中核准', + deleteApproveAmberDesc: 'Amber 將開啟——點選核准以確認刪除。', + deleteCancelled: '已取消', + deleteCancelledDesc: '你在 Amber 中拒絕了請求。', + deleteCouldntSign: '無法簽名', + deletePublishing: '第 2/2 步:發布中…', + deletePublishingDesc: '正在將刪除請求傳送到 Relays。', + deleteStuck: '卡在 PUBLISHING', + deleteStuckDesc: 'Relay 步驟失敗:{{error}}。簽名已成功;Relay 未確認。', + stashMerged: '已合並來自另一臺裝置的更改', + stashMergedDesc: '你的 Stash 在別處被編輯過——兩組更改都已保留。', + statusUpdated: '狀態已更新!', + statusUpdatedDesc: '你的滑板狀態現在對他人可見。', + statusFailed: '設定狀態失敗', + statusCleared: '狀態已清除', + statusClearedDesc: '你的狀態已被移除。', + statusClearFailed: '清除狀態失敗', + nutzapEnabled: '已啟用 Nutzap 接收', + nutzapEnabledDesc: '你現在可以接收 ecash Zaps!', + nutzapSetupFailed: '設定失敗', + nutzapUnavailable: 'Nutzap 傳送不可用', + tokenReceived: '已收到代幣', + tokenReceivedDesc: 'Cashu 代幣兌換成功!', + receiveFailed: '接收失敗', + invalidAmount: '金額無效', + invalidAmountDesc: '請輸入有效金額', + tokenCreated: '代幣已建立', + sendFailed: '傳送失敗', + mintAdded: '已新增 Mint', + mintAddedDesc: 'Mint 已新增並成功信任', + mintAddFailed: '新增 Mint 失敗', + mintRemoved: '已移除 Mint', + mintRemoveFailed: '移除 Mint 失敗', + paymentReceived: '已收到付款', + paymentReceivedDesc: '已成功收到 {{amount}} sats!', + paymentSent: '付款已傳送', + paymentSentDesc: 'Lightning 付款已成功完成', + loginRequired: '需要登入', + loginToFollowFounder: '請登入以關注創辦人', + alreadyFollowing: '已關注', + alreadyFollowingDesc: '你已經在關注 {{name}}!', + couldNotComplete: '無法完成該操作', + tryAgainLower: '重試。', + couldNotLoadProfile: '無法載入個人資料', + couldNotLoadProfileDesc: '請檢查你的網路連線並嘗試重新整理。', + undone: '已撤銷', + undoneDesc: '回到中立——未隱藏,也未背書。', + confirmed: '已確認', + confirmedDesc: '已背書——它會從該佇列中移除。', + hiddenToast: '已隱藏', + couldNotUndo: '無法撤銷', + couldNotConfirm: '無法確認', + deleteFailed: '刪除失敗', + somethingWentWrong: '出錯了' + }, + seoUi: { + becomeBuilderTitle: '成為建造者 - SkateSpots', + becomeBuilderDesc: '上架你的坡道、公園和 DIY 建造服務——你建造什麼、材料和規模。', + tradesTitle: '我的交易 — SkateSpots', + tradesDesc: '管理你的市集交易、確認和信譽。', + eventsTitle: '滑板活動與巡迴 - SkateSpots', + eventsDesc: '發現你附近的滑板活動、比賽、巡迴和活動。', + editShopDesc: '編輯你的滑板 Shop。', + createTourDesc: '主辦滑板巡迴——在地隱藏寶地之旅、全國公路旅行、國際探險,或 KOTR 風格的破壞性比賽。', + deckDesignerTitle: '板面設計師 — SkateSpots DIY', + deckDesignerDesc: '設計滑板或長板的輪廓,然後匯出可列印的 1:1 模板、SVG 或 DXF——包含腳窩、翹頭、軸距和橋孔。', + createEventTitle: '建立滑板活動 - SkateSpots', + createEventDesc: '為社群建立一個新的滑板活動。', + editTourDesc: '編輯你的滑板巡迴——更新站點、日期和詳情。', + walletTitle: '錢包 - SkateSpots', + walletDesc: '連線你的 Lightning 錢包,向滑手和 Spot 建立者傳送 Zaps。', + becomePhotographerTitle: '成為攝影師 - SkateSpots', + becomePhotographerDesc: '建立你的滑板攝影資料——相機、鏡頭、燈光和服務。', + newsletterTitle: '新聞通訊 - SkateSpots', + newsletterDesc: '來自 SkateSpots 社群的每週推送。App 更新、新 Spots、活動,以及那些讓滑板運動保持活力的人們。', + homeTitle: 'SkateSpots - 發現全球滑板地點', + zapLeaderboardTitle: 'Zap 排行榜 - SkateSpots', + zapLeaderboardDesc: '獲得最多 Zap 的滑板 Spots 以及支持它們的社群成員。', + adminReviewTitle: '審核佇列 — SkateSpots', + gearSwapTitle: 'Gear 交換 - SkateSpots', + gearSwapDesc: '與其他滑手買賣二手滑板 Gear。板面、支架、輪子、鞋子等。', + donateTitle: '捐贈 — SkateSpots', + donateDesc: '支持 SkateSpots——Lightning、隱私鏈上(靜默支付),或在 Angor 上資助開發。', + verifyCardTitle: '驗證 — SkateSpots', + verifyCardDesc: '驗證一張 SkateSpots 卡片或通行證。', + mapTitle: '滑板 Spot 地圖 - SkateSpots', + mapDesc: '在我們的互動式地圖上探索世界各地的滑板 Spot。', + diyTitle: 'DIY — 自製 | SkateSpots', + diyDesc: '製作你自己的滑板、坡道和混凝土 Spot 的指南、開放工具和圖紙——以及與之相關的人和地點。', + appShopTitle: 'App Shop — SkateSpots', + becomeSkaterTitle: '加入滑手目錄 - SkateSpots', + becomeSkaterDesc: '建立你的滑手資料,讓社群能找到你。', + marketplaceTitle: '市集 - SkateSpots', + marketplaceDesc: '在去中心化的 Plebeian Market 上買賣滑板 Gear。', + becomeEditorTitle: '成為影片剪輯師 - SkateSpots', + becomeEditorDesc: '在 SkateSpots 上建立你的滑板影片剪輯師資料。', + amberCallbackTitle: '正在使用 Amber 登入 - SkateSpots', + amberCallbackDesc: '正在完成你的 Amber(NIP-55)登入。', + supportersTitle: '支持者 - SkateSpots', + supportersDesc: '讓 SkateSpots 保持活力的社群——支持者、合作者、夥伴和朋友。', + becomeCoachTitle: '成為教練 - SkateSpots', + becomeCoachDesc: '建立你的滑板教練資料。', + riderCardTitle: '滑手卡 — SkateSpots', + riderCardDesc: '建立可列印的 SkateSpots 滑手執照或公園通行卡。', + editEventDesc: '編輯你的滑板活動。', + createShopTitle: '新增滑板 Shop - SkateSpots', + createShopDesc: '將你的滑板 Shop 新增到社群。', + deckCostTitle: '板面成本計算器 — SkateSpots DIY', + deckCostDesc: '算出製作一塊板面的成本——人工、裝置、材料、加工時間、包裝和利潤——以及合理的售價。', + pyramidTitle: '金字塔排名 - SkateSpots', + pyramidDesc: '頂級貢獻者和社群領袖。', + foodTitle: 'Spot 附近的美食 - SkateSpots', + foodDesc: '搜尋滑板 Spot 附近的餐廳、咖啡館和美食選擇。', + createListingTitle: '上架 Gear - SkateSpots', + createListingDesc: '上架滑板 Gear 出售,或尋找你想購買的 Gear。', + becomeFilmerTitle: '成為拍攝者 - SkateSpots', + becomeFilmerDesc: '建立你的滑板拍攝資料。', + skatersTitle: '滑手 - SkateSpots', + skatersDesc: '發現 SkateSpots 社群中的滑手。按風格、站位、水準和位置瀏覽。', + communityStatsTitle: '社群統計 — SkateSpots', + communityStatsDesc: 'SkateSpots 的即時社群指標——Spots、活動、教練、拍攝者、剪輯師、巡迴和隨時間增長。直接來自 Nostr 拉取。', + labTitle: 'The Lab - SkateSpots', + labDesc: '尋找滑板教練、拍攝者、攝影師和影片剪輯師。', + stashTitle: '我的 Stash - SkateSpots', + stashDesc: '管理你的私人 Gear 庫存。追蹤你擁有的、想出售或交換的東西。', + bountyLeaderboardTitle: '地圖與賺取 - SkateSpots', + bountyLeaderboardDesc: '在地圖上標註滑板 Spots 和 Shops,從社群賺取 Zaps。檢視頂級貢獻者。', + spotCollectionsTitle: '我的 Spot 收藏 - SkateSpots', + spotCollectionsDesc: '將你最喜歡的滑板 Spots 整理成個人化收藏', + mintsTitle: 'Cashu Mints — SkateSpots', + mintsDesc: '瀏覽 Cashu Mints,檢查它們的健康狀況,並將一個新增到你的錢包。' + }, + miscUi: { + openingCamera: '正在開啟相機…', + usePhoneCamera: '使用你的手機相機,然後返回此處', + startingCamera: '正在啟動相機...', + cameraAccessRequired: '需要相機權限', + cameraAccessHint: '在瀏覽器設定中允許相機存取,或使用下方的檔案選擇器。', + cameraErrorTitle: '相機錯誤', + cameraErrorDesc: '無法開啟相機。請在“設定”中檢查 App 權限。', + cameraDeniedTitle: '相機存取被拒絕', + cameraDeniedDesc: '請在瀏覽器設定中允許相機存取。', + uploadFromGallery: '從相簿上傳', + uploading: '上傳中...', + usePhoto: '使用照片', + earningPotential: '收益潛力', + qualityExcellent: '優秀!', + qualityGood: '良好', + qualityBasic: '基礎', + qualityGettingStarted: '剛剛開始', + qualityLocationAdded: '已新增位置', + qualityOnePhoto: '至少 1 張照片', + qualityThreePhotos: '3 張以上照片', + qualityMoreAngles: '更多角度 = 更好', + qualityDescription: '描述', + qualityDetailedDesc: '詳細描述(100 字以上)', + qualityContact: '聯絡資訊', + qualityPhoneOrWebsite: '電話或網站', + qualityHours: '營業時間', + qualitySpotType: '已選擇 Spot 類型', + failedToLoadComments: '載入評論失敗', + commentsTitle: '評論', + noCommentsYet: '暫無評論', + beFirstComment: '成為第一個分享想法的人!', + removeMember: '移除成員', + whoIsThisFor: '這個資料是給誰的?', + individual: '個人', + individualDesc: '單獨一個人', + collective: '集體', + collectiveDesc: 'Crew、工作室或公司', + membersLabel: '成員', + dismissReport: '忽略舉報', + reportedBy: '舉報者', + completingLoginAmber: '正在完成使用 Amber 的登入...', + entityMembersHint: '新增你 Crew 的 Nostr 帳戶。每位成員都用自己的金鑰確認自己的 Spot——在此之前他們顯示為“待確認”。', + entityVerifiedHint: '成員資格按成員逐一驗證——沒有人可以在未從自己帳戶確認的情況下被加入你的 Crew。', + entityInvalidPubkey: '請輸入有效的 npub、nprofile 或 64 位十六進位公鑰。', + entityAlreadyAdded: '該成員已被新增。', + offline: '離線', + connected: '已連線', + offlineMode: '離線模式', + allFeaturesAvailable: '所有功能可用', + browsingCachedSpots: '正在瀏覽快取的 Spots', + queuedActions: '{{count}} 個排隊的操作', + syncing: '同步中', + publishingWhenStable: '連線穩定後發布...', + willPublishOnline: '重新連線後將發布', + availableOffline: '離線可用:', + offlineBrowseSpots: '瀏覽之前檢視過的 Spots', + offlineViewDetails: '檢視快取的 Spot 詳情', + offlineKeepActing: '繼續操作——貼文、RSVP、商品和訊息會排隊,並在你重新連線時傳送' + }, + sasquatchGuide: { + homeTitle: '歡迎來到 SkateSpots!🦧', + homeMessage: '喲,我是 The Sasquatch。板面、路線和狂野滑行的守護者。歡迎來到 Nostr 上這片狂野的滑板世界——沒有西裝革履,沒有廣告,只有滑手們開創自己的道路。在這裡,你擁有自己的招式、自己的資料,甚至能透過留下印記賺取 Bitcoin。與你街區或全球的滑手連線。除了滑行沒有規則,除了你自己的腳印別無其他。', + homeQ1: '幫我規劃巴塞隆納的 3 天', + homeQ2: '尋找新手 Spot', + homeQ3: '有即將舉行的活動嗎?', + homeQ4: '社群統計', + homeQ5: '尋找我附近的教練', + homeQ6: '有 Gear 出售嗎?', + homeQ7: '什麼是 Nostr?', + homeQ8: '這是免費的嗎?', + homeLearnMore: '了解更多', + onboardingTitle: '開始使用 🚀', + onboardingMessage: '讓我幫你了解基礎知識!Nostr 是你的身分,Bitcoin Lightning 讓你能透過貢獻賺取 sats,Zaps 是即時打賞。關於入門,隨便問我!', + onboardingQ1: '如何登入?', + onboardingQ2: '什麼是 Nostr?', + onboardingQ3: 'Nostr 如何運作?', + onboardingQ4: '什麼是 Cashu?', + onboardingQ5: '如何使用 Cashu 錢包?', + onboardingQ6: '什麼是 Mints?', + onboardingQ7: '什麼是 Zaps?', + onboardingQ8: '什麼是 NWC?', + onboardingStart: '開始探索', + onboardingLogin: '登入以開始', + labTitle: '歡迎來到 The Lab!🎓', + labMessage: '這裡是奇蹟發生的地方!找到能教你從 kickflip 到 darkslide 任何東西的教練,或與拍攝者聯絡捕捉你最精彩的滑行。按技能篩選、檢視他們的經驗並預約課程。記住——每個人都是從某處開始的!', + labQ1: '尋找教練', + labQ2: '尋找拍攝者', + labQ3: '尋找攝影師', + labQ4: '尋找影片剪輯師', + labQ5: '尋找坡道建造者', + labQ6: '什麼是 The Lab?', + labQ7: '什麼是建造者?', + labQ8: '如何提供教學?', + labLogin: '登入以提供服務', + crewsTitle: 'Crews 🤘', + crewsMessage: 'Crews 是你以地圖為錨的滑板家人——是和你一起滑板的人,而不是你聘用的人。每個 Crew 在地圖上都有主場、常用 Spot、成員和宣言。成員用自己的金鑰確認,所以名單真實可靠。建立你自己的 Crew 或找到你的人!', + crewsQ1: '什麼是 Crews?', + crewsQ2: '如何建立 Crew?', + crewsQ3: 'Crew 與 The Lab 有何不同?', + crewsQ4: '成員如何確認?', + crewsQ5: '什麼是 Nostr?', + crewsQ6: 'Zaps 如何運作?', + crewsLogin: '登入以建立 Crew' + }, + supportUi: { + keepMapFree: '讓地圖保持免費', + keepMapFreeDesc: '沒有廣告,沒有追蹤,沒有創投。你的 sats 支付託管、AI 節點和 Relay 的費用。', + thankYou: '謝謝!⚡', + satsKeepMapFree: '你的 sats 讓地圖保持免費。', + keptFreeNext: '你剛剛讓 SkateSpots 為下一位滑手保持了免費。', + scanToPay: '掃碼支付', + zapSkateSpots: 'Zap SkateSpots', + payQuietly: '靜默支付', + pickAmount: '選擇金額', + enterAmount: '輸入你想傳送的 sats 數量。', + couldNotStartPayment: '無法發起付款。', + customAmountAria: '自訂金額(以 sats 計)', + commentPlaceholder: '說點什麼(可選——僅公開 Zaps)', + publicZapTitle: '帶留言的公開 Zap', + loginToZapTitle: '登入以傳送公開 Zap', + anonymousTitle: '匿名——無需登入,無記錄', + copyLightningTitle: '複製 Lightning 地址', + copiedSuffix: '{{label}} 已複製', + invoiceLabel: '帳單', + addressLabel: '地址', + notAPurchase: '這是支持,不是購買——它不換來任何東西,也不退款。周邊商品和 Sasquatch Pro 是分開的。你的位置和身分絕不會參與靜默支付。' + }, + statusUi: { + quickStatus: '快速狀態', + skating: '正在滑板', + skatingDesc: '目前正在滑板', + filming: '拍攝中', + filmingDesc: '正在拍攝招式', + lookingForSesh: '尋找滑伴', + lookingForSeshDesc: '想和別人一起滑板', + coaching: '教學中', + coachingDesc: '教學/指導', + chilling: '放鬆中', + chillingDesc: '在 Spot 閒逛', + onMyWay: '在路上了', + onMyWayDesc: '正前往一個 Spot', + takingABreak: '休息中', + takingABreakDesc: '休息/補水', + doneForToday: '今天結束了', + doneForTodayDesc: '完成滑板' + } +}; export default zhTWBatch7; diff --git a/src/i18n/zh-TW/batch8.ts b/src/i18n/zh-TW/batch8.ts index 7e0db86..e7b6157 100644 --- a/src/i18n/zh-TW/batch8.ts +++ b/src/i18n/zh-TW/batch8.ts @@ -1,4 +1,631 @@ -/** zh-TW — batch 8. Filled by the translation pass; empty until then. */ -const zhTWBatch8 = {}; +/** + * Traditional Chinese (繁體中文, Taiwan) — batch 8: hardcoded-string sweep + * namespaces (deckCostUi, becomeRolesUi, weatherUi, skaterLabelsUi, notifyUi, + * legacyMiscUi). + * + * Skate/protocol vocabulary deliberately stays English (Deck, Trucks, Wheels, + * Bearings, Griptape, Spot, Park, Bowl, Vert, Crew, Stash, The Lab, sats, + * Nostr, Lightning, plus brand and trick names); `{{placeholders}}` are kept + * verbatim. + */ +const zhTWBatch8 = { + deckCostUi: { + presetPrompt: '為此預設命名', + presetDefaultName: '預設 {{n}}', + summaryCopied: '已複製摘要', + couldNotCopy: '無法複製', + resetConfirm: '將所有內容重設為範例值?', + logoTooLarge: 'Logo 太大(最大 500 KB)', + loginToFill: '登入後從你的 Nostr 個人資料填入', + filledFromProfile: '已從你的 Nostr 個人資料填入', + warnRetailBelowOne: '零售加成低於 1× —— 你會虧本出售。', + warnWholesaleAboveRetail: '批發加成應低於零售加成。', + warnZeroBoards: '{{count}} 行使用 0 塊板 —— 該行的成本會被忽略。', + warnFixedNoBoards: '已設定固定月度成本,但每月板數為 0,因此營運成本會被忽略。', + warnNoMaterials: '沒有材料成本 —— 至少新增一種材料。', + warnEquipmentOverhead: '設備 + 管理費用超過成本的 60% —— 此模型假設高產量;請檢查你的板數。', + warnOneBoard: '部分設備成本分攤到單塊板上 —— 提高其板數以便攤銷。', + templateStarterName: '業餘入門', + templateStarterBlurb: '僅幾行,無固定成本', + templateShopName: '小型工坊', + templateShopBlurb: '包含租金與管理費用的完整表格', + currency: '貨幣', + noCurrencyMatches: '沒有符合的貨幣。', + ratesUnavailable: '即時匯率不可用 —— 切換僅更改標籤。', + liveRates: '即時 BTC 匯率 · 包含 sats', + chipCost: '成本', + chipSell: '售價', + chipTotal: '總計', + startFrom: '從以下開始', + advancedToggleHint: '顯示每道工序的費率與廢料、批次設定、稅金以及成本-數量曲線', + advanced: '高階', + simple: '簡單', + sectionLabor: '人力', + sectionEquipment: '設備', + sectionOperations: '營運費用', + sectionMaterials: '材料', + sectionProcesses: '工序成本', + sectionPackaging: '包裝', + sectionMargins: '利潤', + subtotalLoaded: '{{value}}/小時(含負擔)', + subtotalPerBoard: '{{value}}/板', + hourlyRate: '時薪({{unit}})', + labourBurden: '人力負擔率(×)', + loadedRate: '含負擔費率', + loadedRateHintBefore: '含負擔費率 = 薪資 × 負擔率(雇主為人力繳納的稅金和保險)。租金和帳單歸入 ', + loadedRateHintAfter: ' —— 不要在兩處重複計算。', + colEquipment: '設備', + colCostUnit: '成本({{unit}})', + colCost: '成本', + colSetupH: '設定(小時)', + colLifetimeBoards: '使用壽命板數', + colPerBoard: '每板', + colMaterial: '材料', + colOrderUnit: '訂購({{unit}})', + colShipUnit: '運費({{unit}})', + colBoardsOrder: '板 / 訂單', + colOrderM: '訂購(分)', + colUnloadM: '卸貨(分)', + colOrder: '訂購', + colShipping: '運費', + colOrderMin: '訂購(分鐘)', + colUnloadMin: '卸貨(分鐘)', + colProcess: '工序', + colTimeM: '時間(分)', + colBoardsRun: '板 / 批次', + colRateHr: '費率/小時(0 = 工坊)', + colRateHrShort: '費率/小時', + colScrapPct: '廢料 %', + colTimeMin: '時間(分鐘)', + colPackaging: '包裝', + colTimeBoardM: '時間/板(分)', + colTimeBoardMin: '時間/板(分鐘)', + colMaterialsBoardUnit: '材料/板({{unit}})', + colMaterialsBoard: '材料/板', + equipmentPerBoard: '每板設備:', + materialsPerBoard: '每板材料:', + processesPerBoard: '每板工序:', + packagingPerBoard: '每板包裝:', + perBoard: '每板:', + addEquipment: '新增設備', + addMaterial: '新增材料', + addProcess: '新增工序', + addPackagingStep: '新增包裝步驟', + duplicate: '複製', + remove: '移除', + boardsPerMonth: '板 / 月', + rentPerMonth: '租金 / 月', + utilitiesPerMonth: '水電費 / 月', + subscriptionsPerMonth: '訂閱費 / 月', + markup: '加成(×)', + wholesaleMarkup: '批發加成(×)', + scrapWaste: '廢料 / 損耗(%)', + quantityDecks: '數量(Deck)', + targetMonthlyProfit: '目標月利潤({{unit}})', + costNoPackaging: '成本 / 板(不含包裝)', + costWithPackaging: '成本 / 板(含包裝)', + batchSetupHours: '批次設定(小時 / 批次)', + batchSetupCost: '批次設定成本({{unit}} / 批次)', + taxVat: '稅 / 加值稅(%)', + quoteTax: '報價稅', + includedInPrice: '已含在價格中', + addedOnTop: '額外加收', + setupPerBoard: '設定 / 板', + marginNoteBefore: '加成 {{markup}}× ≈ ', + grossMargin: '{{pct}}% 毛利率', + marginNoteAfter: ' · 廢料 {{waste}}% 分攤到合格板上。', + sellingPriceNoPackaging: '售價 · 不含包裝', + sellingPriceWithPackaging: '售價 · 含包裝', + profitPerDeck: '利潤 / Deck', + wholesalePerDeck: '批發價 / Deck', + orderTotalQty: '訂單總額({{qty}})', + orderTotal: '訂單總額', + breakeven: '盈虧平衡', + breakevenPerMonth: '{{count}}/月', + targetDecksHint: '要在固定成本之上每月淨賺 {{amount}},需每月售出 {{decks}} 塊 Deck。', + priceIncludesTax: '價格含 {{pct}}% 稅:總計中的 {{amount}}。', + plusTax: '另加 {{pct}}% 稅:{{amount}} → 總計 {{total}}。', + costVsQuantity: '成本與數量的關係(設定攤銷)', + deckOne: 'Deck', + deckOther: 'Deck', + perDeckSuffix: '/ Deck', + orderSuffix: '訂單 {{amount}}', + shippingNotIncluded: '不包含運給買家的運費。', + clientQuoteDetails: '客戶報價詳情(用於 PDF)', + fillFromProfileTitle: '從你的 Nostr 個人資料填入名稱、網站、NIP-05、Lightning 和 npub', + fillFromProfile: '從個人資料填入', + businessName: '商家 / 店鋪名稱', + email: '電子郵件', + phone: '電話', + website: '網站', + address: '地址', + quoteNumber: '報價單號', + nextNumber: '下一個編號', + validDays: '有效期(天)', + nip05: 'NIP-05', + lightningAddress: 'Lightning 地址', + nostrNpub: 'Nostr(npub)', + depositPct: '預付訂金(%)', + deliveryTerms: '交貨條款(Incoterm,可選)', + paymentMethods: '付款方式', + paymentTerms: '付款條件', + paymentDetails: '付款詳情', + notesTerms: '備註 / 條款', + changeLogo: '更換 Logo', + addLogo: '新增 Logo', + incotermNone: '無', + incotermExw: 'EXW —— 從賣方處自取', + incotermFca: 'FCA —— 交給買方的貨運業者', + incotermDap: 'DAP —— 送達買方地址', + incotermDdp: 'DDP —— 送達並已付關稅', + payMethodCash: '現金', + payMethodLightning: 'Lightning', + payMethodCashu: 'Cashu', + payMethodBank: '銀行轉帳', + payMethodCard: '銀行卡', + payMethodOther: '其他', + listDeckAtPrice: '以此價格上架一塊 Deck', + getItMade: '找人制作 —— 尋找製作工', + savePreset: '儲存預設', + load: '載入', + export: '匯出', + import: '匯入', + reset: '重設', + deletePreset: '刪除預設', + exportPdfFull: 'PDF —— 完整表格', + exportPdfQuote: 'PDF —— 客戶報價', + exportPng: 'PNG 圖片', + exportXlsx: 'XLSX 工作簿', + exportCsv: 'CSV(電子表格)', + exportMarkdown: 'Markdown', + exportJson: 'JSON(備份)', + exportCopySummary: '複製摘要', + }, + becomeRolesUi: { + artist: { + seoTitle: '成為設計師 / 藝術家 - SkateSpots', + seoDescription: '上架你的滑板設計與藝術 —— 板面圖案、Logo、海報、周邊等。', + heading: '設計師 / 藝術家', + tagline: '板面圖案、Logo、海報、周邊 —— 把你的藝術帶進滑板圈', + noun: '藝術家', + rateLabel: '費率', + portfolioLabel: '作品集 / 店鋪連結', + sectionWhatYouMake: '你的作品', + sectionMedium: '媒介', + sectionSoftwareTools: '軟體與工具', + deliverablesPlaceholder: '例如:可印刷檔案、原始檔、板面圖案', + turnaroundPlaceholder: '例如:3–5 天', + }, + graffiti: { + seoTitle: '提供塗鴉 / 壁畫 - SkateSpots', + seoDescription: '上架你的塗鴉與壁畫作品 —— 塗鴉作品、壁畫、滑板公園藝術等。', + heading: '塗鴉 / 壁畫藝術家', + tagline: '作品、壁畫、滑板公園藝術 —— 為滑板圈上色', + noun: '塗鴉藝術家', + rateLabel: '費率', + portfolioLabel: '作品集連結(IG、網站)', + sectionStyle: '風格', + sectionMedium: '媒介', + sectionWorkContext: '工作場景', + crewLabel: 'Graffiti Crew', + crewPlaceholder: '你的寫手 Crew(可選)', + crewHelper: '與你的滑板 Crew 分開 —— 一起塗鴉的寫手。', + surfacesPlaceholder: '例如:混凝土、磚牆、獲准的牆面', + maxSizePlaceholder: '例如:最大 10 m', + }, + musician: { + seoTitle: '新增音樂人資料 - SkateSpots', + seoDescription: '既滑板又做音樂?上架你的樂團或個人專案 —— 曲風、樂器與連結。', + heading: '音樂人 / 樂團', + tagline: '既滑板又做音樂?為 demo、即興演出和餘興派對接受預訂', + noun: '音樂人', + rateLabel: '演出費率', + portfolioLabel: '網站 / EPK 連結', + sectionGenre: '曲風', + sectionInstruments: '樂器與角色', + actLabel: '演出型別', + actPlaceholder: '個人 / 樂團 / DJ / 製作人', + spotifyLabel: 'Spotify', + spotifyPlaceholder: 'https://open.spotify.com/…', + bandcampLabel: 'Bandcamp', + bandcampPlaceholder: 'https://…bandcamp.com', + soundcloudLabel: 'SoundCloud', + soundcloudPlaceholder: 'https://soundcloud.com/…', + youtubeLabel: 'YouTube', + youtubePlaceholder: 'https://youtube.com/…', + setLengthPlaceholder: '例如:30–45 分鐘', + techRiderPlaceholder: '例如:PA、麥克風、後備樂器', + }, + judge: { + seoTitle: '擔任滑板賽事評委 - SkateSpots', + seoDescription: '將你自己列為滑板賽事評委 —— Game of S.K.A.T.E.、最佳招數果醬賽、比賽、業餘系列賽和世界巡迴賽分站。接受預訂,舉辦公平、可信的賽事。', + heading: '滑板賽事評委', + tagline: '從平地 Game of S.K.A.T.E. 到 World Destruction Tour —— 公平、可信地執裁', + noun: '評委', + rateLabel: '日薪 / 費用', + portfolioLabel: '成績檔案 / 個人資料連結', + sectionEventFormats: '賽事形式', + sectionSpecialty: '專長', + sectionLevelCircuit: '級別 / 巡迴賽', + eventsJudgedLabel: '執裁過的賽事', + eventsJudgedPlaceholder: '例如:40+ 場比賽、3 個世界巡迴賽分站', + eventsJudgedHelper: '你曾執裁的重要賽事、比賽或巡迴賽。', + travelPlaceholder: '例如:地區 / 全國 / 國際', + certificationsPlaceholder: '例如:國家級裁判課程', + }, + organizer: { + seoTitle: '組織滑板賽事 - SkateSpots', + seoDescription: '將你自己列為滑板賽事組織者 —— 街頭果醬賽、最佳招數、比賽、聚會、表演和巡迴賽分站。被發現並接受預訂來舉辦活動。', + heading: '賽事組織者', + tagline: '果醬賽、比賽、聚會與表演 —— 舉辦活動,把滑板圈聚在一起', + noun: '組織者', + rateLabel: '活動費用 / 預算', + portfolioLabel: '往屆活動 / 成績連結', + sectionEventTypes: '活動型別', + sectionWhatYouHandle: '你負責的事項', + sectionScale: '規模', + eventsHostedLabel: '組織過的活動', + eventsHostedPlaceholder: '例如:25 場果醬賽、3 場城市比賽', + eventsHostedHelper: '你舉辦過的重要活動、比賽或聚會。', + insurancePlaceholder: '例如:含公眾責任險', + permitsPlaceholder: '例如:已辦好市政許可', + }, + tattoo: { + seoTitle: '成為刺青師 - SkateSpots', + seoDescription: '為滑板圈上架你的刺青作品 —— 風格、flash、客製等。', + heading: '刺青師', + tagline: '為滑板圈刺青 —— flash、客製、細線等', + noun: '刺青師', + rateLabel: '費率 / 小時', + portfolioLabel: '作品集連結(IG、網站)', + sectionStyles: '風格', + sectionMethod: '方式', + studioLabel: '工作室 / 店鋪', + studioPlaceholder: '工作室名稱(可選)', + booksOpenLabel: '接受預約', + booksOpenHelper: '你目前接受預約嗎?', + depositPlaceholder: '例如:50 EUR 不可退', + minimumPlaceholder: '例如:80 EUR', + }, + trainer: { + seoTitle: '成為教練 / 理療師 - SkateSpots', + seoDescription: '幫助滑手變強並保持健康 —— 肌力、活動度、傷害預防與恢復。', + heading: '教練 / 理療師', + tagline: '為滑手提供肌力、活動度、傷害預防與恢復', + noun: '教練', + rateLabel: '費率 / 單次', + portfolioLabel: '個人資料 / 預約連結', + sectionFocus: '重點', + sectionInjuries: '你處理的傷害', + sectionCredentialsSetting: '資質與場地', + credentialsPlaceholder: '例如:物理治療學士、CSCS…', + credentialsHelper: '列出真實資質 —— 滑手信任可驗證的資質。', + remoteLabel: '遠端 / 線上', + remoteHelper: '你提供線上指導或諮詢嗎?', + modalitiesPlaceholder: '例如:手法治療、體能訓練、幹針', + }, + barber: { + seoTitle: '成為理髮師 / 髮型師 - SkateSpots', + seoDescription: '為滑板圈上架你的理髮店或座位 —— 剪髮、漸變、修胡、染髮等。接受滑手預約。', + heading: '理髮師 / 髮型師', + tagline: '為滑板圈剪髮、漸變與修胡 —— 店裡座位或到府', + noun: '理髮師', + rateLabel: '價格 / 次', + portfolioLabel: '剪髮作品集 / IG 連結', + sectionWhatYouOffer: '你提供的服務', + sectionSignatureStyles: '招牌風格', + sectionSetting: '服務場地', + studioLabel: '店鋪 / 工作室', + studioPlaceholder: '店鋪或工作室名稱(可選)', + booksOpenLabel: '接受預約', + booksOpenHelper: '你目前接受預約嗎?', + durationPlaceholder: '例如:30–45 分鐘', + }, + }, + weatherUi: { + condition: { + clearSky: '晴空', + mainlyClear: '大致晴朗', + partlyCloudy: '區域性多雲', + overcast: '陰天', + foggy: '有霧', + depositingRimeFog: '沉積霧凇的霧', + lightDrizzle: '小毛毛雨', + moderateDrizzle: '中等毛毛雨', + denseDrizzle: '濃毛毛雨', + lightFreezingDrizzle: '輕度凍毛毛雨', + denseFreezingDrizzle: '濃凍毛毛雨', + slightRain: '小雨', + moderateRain: '中雨', + heavyRain: '大雨', + lightFreezingRain: '輕度凍雨', + heavyFreezingRain: '強凍雨', + slightSnow: '小雪', + moderateSnow: '中雪', + heavySnow: '大雪', + snowGrains: '雪粒', + slightRainShowers: '小陣雨', + moderateRainShowers: '中等陣雨', + violentRainShowers: '強陣雨', + slightSnowShowers: '小陣雪', + heavySnowShowers: '強陣雪', + thunderstorm: '雷暴', + thunderstormSlightHail: '伴有小冰雹的雷暴', + thunderstormHeavyHail: '伴有大冰雹的雷暴', + unknown: '未知', + }, + aqi: { + good: '良好', + moderate: '中等', + unhealthySensitive: '對敏感人群不健康', + unhealthy: '不健康', + veryUnhealthy: '非常不健康', + hazardous: '危險', + }, + skateability: { + perfect: '完美', + good: '良好', + okay: '一般', + poor: '較差', + bad: '差', + unrideable: '無法滑行', + }, + reason: { + currentlyRaining: '正在下雨', + raining: '下雨', + snowing: '下雪', + thunderstorm: '雷暴', + freezingTemperature: '冰點以下氣溫', + veryCold: '非常冷', + extremelyHot: '極熱', + veryHot: '非常熱', + veryStrongWind: '極強大風', + strongWind: '大風', + moderateWind: '中等風', + veryUnhealthyAir: '極不健康的空氣', + unhealthyAir: '不健康的空氣', + moderateAirQuality: '中等空氣品質', + veryHumid: '非常潮溼', + humid: '潮溼', + extremeUv: '極強紫外線 - 請塗抹防曬霜', + highUv: '強紫外線 - 建議防曬', + perfectConditions: '完美的滑板條件', + }, + }, + skaterLabelsUi: { + stance: { + regular: 'Regular', + goofy: 'Goofy', + }, + style: { + street: '街式', + park: 'Park', + vert: 'Vert', + transition: '過渡', + bowl: 'Bowl', + cruising: '巡航', + downhill: '速降', + freestyle: '自由式', + ledges: '臺邊', + stairs: '臺階', + diy: 'DIY', + }, + level: { + grom: '少年滑手', + intermediate: '中級', + advanced: '高階', + ripper: '滑板高手', + }, + sponsor: { + title: '冠名贊助商', + gold: '金級', + silver: '銀級', + partner: '合作伙伴', + }, + }, + notifyUi: { + activity: { + zappedWithAmount: '你收到了 {{sats}} sats 的打賞', + zapped: '你收到了打賞', + liked: '有人讚了你的貼文', + reposted: '有人轉貼了你的貼文', + mentioned: '有人提到了你', + replied: '有人回覆了你', + rsvp: '有人報名了你的活動', + eventUpdated: '你將參加的活動有更新', + newActivity: '新動態', + tapToOpen: '點選開啟 SkateSpots', + }, + crew: { + inviteTitle: 'Crew 邀請', + inviteBody: '你被邀請加入 {{crew}}', + addedTitle: '你已被加入一個 Crew', + addedBody: '{{crew}} —— 確認加入', + joinRequestTitle: '加入請求', + joinRequestBody: '有人想加入 {{name}}', + }, + dm: { + title: '新的私信', + body: '點選閱讀', + }, + trade: { + confirm: '確認交易', + confirmed: '交易已確認', + newOffer: '你的商品有新的報價', + counter: '還價', + accepted: '報價已被接受 🎉', + declined: '報價被拒絕', + withdrawn: '報價已撤回', + }, + newsletter: { + drop: '新 SkateSpots 釋出', + }, + summary: { + moreUpdates: '還有 {{count}} 條更新', + openToCatchUp: '開啟 SkateSpots 檢視', + }, + }, + legacyMiscUi: { + hostingGoing: '{{count}} 人參加', + hostingInterested: '{{count}} 人感興趣', + hostingPostUpdate: '釋出更新', + hostingEdit: '編輯', + hostingLoginToSee: '登入以檢視你主辦的活動。', + hostingEmptyTitle: '你還沒有主辦任何活動', + hostingEmptyBody: '舉辦一場果醬賽、比賽或活動。建立活動後,滑手可以報名、獲取更新並前來參加。', + hostingCreateEvent: '建立活動', + hostingUpcoming: '即將開始 · {{count}}', + hostingPast: '過去 · {{count}}', + sponsorPartners: '合作伙伴', + sponsorTitleSponsor: '冠名贊助商', + sponsorPlatformPartners: '平臺合作伙伴', + reportsUntitled: '(無標題)', + reportsResolveFailed: '無法解析被檢舉的事件(它可能已被刪除,或者檢舉針對的是個人資料而非貼文)。', + reportsLookAtIt: '檢視', + reportsNoReports: '還沒有檢舉。要麼一切正常,要麼還沒人找到那個按鈕。', + statusSetYourStatus: '設定你的狀態', + statusSetDesc: '讓別人知道你在做什麼。你的狀態會顯示在個人資料和關聯的 Spot 上。', + statusClear: '清除', + statusOrWriteOwn: '或自行輸入', + statusCustomPlaceholder: '你在做什麼?', + statusLinkToSpot: '關聯到 Spot(可選)', + statusSpotSelected: '已選擇 Spot', + statusSearchSpots: '搜尋 Spot...', + statusNoSpotsFound: '找不到 Spot。', + statusSelectSpot: '選擇一個 Spot', + statusAutoClearAfter: '{{time}} 後自動清除', + statusExpMin: '{{count}} 分鐘', + statusExpOneHour: '1 小時', + statusExpHours: '{{count}} 小時', + statusExpOneDay: '1 天', + statusExpDays: '{{count}} 天', + statusSlider15: '15 分鐘', + statusSlider1h: '1 小時', + statusSlider4h: '4 小時', + statusSlider24h: '24 小時', + statusSetting: '正在設定狀態...', + statusSet: '設定狀態', + statusSomethingWrong: '出了點問題', + seoProfileTitle: '個人資料 - SkateSpots', + seoViewProfile: '檢視個人資料。', + bannerAlt: '橫幅', + openInCordn: '在 Cordn 中開啟', + modHelp: '隱藏會發布 org.skatespots.moderation / hidden;確認會發布 … / verified;復原會發布 … / cleared(恢復中立)。三者都是公開、可逆的標籤 —— 中繼上的任何內容都不會被刪除。', + zapNoActiveMint: '找不到可用的 Cashu 鑄幣廠。', + altProfile: '個人資料', + altCardPreview: '卡片預覽', + altCard: '卡片', + altCaptured: '已擷取', + ariaPrevPhoto: '上一張照片', + ariaNextPhoto: '下一張照片', + ariaCommentOptions: '留言選項', + ariaMessageConversation: '訊息對話', + exportTitle: 'SkateSpots — Deck 成本計算機', + exportQuoteTitle: '報價單', + exportPngTitle: 'Deck 成本', + exportMarkdownTitle: 'Deck 成本計算機', + exportSectionLabor: '人力', + exportSectionEquipment: '設備', + exportSectionOperations: '營運費用', + exportSectionMaterials: '材料', + exportSectionProcesses: '工序成本', + exportSectionPackaging: '包裝', + exportSectionResult: '結果', + exportLabelOperations: '營運', + exportLabelProcesses: '工序', + exportKvHourlyRate: '時薪', + exportKvLabourBurden: '人力負擔率', + exportKvLoadedRate: '含負擔費率', + exportKvEquipmentPerBoard: '每板設備', + exportKvBoardsPerMonth: '板 / 月', + exportKvRentPerMonth: '租金 / 月', + exportKvUtilitiesPerMonth: '水電費 / 月', + exportKvSubscriptionsPerMonth: '訂閱費 / 月', + exportKvPerBoard: '每板', + exportKvMaterialsPerBoard: '每板材料', + exportKvProcessesPerBoard: '每板工序', + exportKvPackagingPerBoard: '每板包裝', + exportKvMarkup: '加成', + exportMarkupValue: '{{markup}}×(≈ {{pct}}% 毛利率)', + exportKvWasteEffective: '廢料(實際)', + exportKvCostNoPack: '成本 / 板(不含包裝)', + exportKvCostWithPack: '成本 / 板(含包裝)', + exportKvBatchSetupPerBoard: '批次設定 / 板', + exportKvTax: '稅({{pct}}%)', + exportKvTaxIncluded: '稅({{pct}}%,已含)', + exportKvSellingNoPack: '售價(不含包裝)', + exportKvSellingWithPack: '售價(含包裝)', + exportShippingNote: '不包含運給買家的運費。', + exportGeneratedBy: '由 SkateSpots 生成 · skate-spots.org', + exportGeneratedWith: '使用 SkateSpots 生成 · skate-spots.org', + exportDetailSetup: '+ {{hours}} 小時設定', + exportDetailBoards: '{{boards}} 塊板', + exportDetailShip: '+ 運費 {{amount}}', + exportDetailMinutes: '{{minutes}} 分鐘', + exportDetailPerBoards: '/ {{boards}} 塊板', + exportDetailScrap: '{{pct}}% 廢料', + exportDetailMaterials: '{{materials}} 種材料', + exportQuoteRef: '編號 {{ref}}', + exportQuoteLineItem: '客製滑板 Deck', + exportQuoteLineItemQty: '客製滑板 Deck × {{qty}}', + exportQuoteLineDesc: '手工製作、完工幷包裝。數量 1。', + exportQuoteLineDescQty: '手工製作、完工幷包裝。每塊 {{price}}。', + exportQuoteSubtotal: '小計', + exportQuoteSubtotalQty: '小計({{qty}} 塊 Deck)', + exportQuoteTax: '稅 / 加值稅({{pct}}%)', + exportQuoteTotal: '總計', + exportQuoteTotalQty: '總計({{qty}} 塊 Deck)', + exportQuoteIncludesTax: '含 {{pct}}% 稅({{amount}})', + exportQuoteDeposit: '現在應付定金({{pct}}%)', + exportQuoteBalance: '完工時付尾款', + exportQuotePayment: '付款:{{value}}', + exportQuoteLightning: 'Lightning:{{value}}', + exportQuoteDetails: '詳情:{{value}}', + exportQuoteTerms: '條款:{{value}}', + exportQuoteDelivery: '交貨:{{value}}', + exportQuoteValidUntil: '不包含運費。報價有效期至 {{date}}。', + exportPngSellingWith: '售價 · 含包裝', + exportPngSellingNo: '售價 · 不含包裝', + exportPngCostWith: '成本 / 板(含包裝)', + exportPngDeposit: '定金 {{pct}}%:{{amount}}', + exportXlsxSummary: '摘要', + exportXlsxCurrency: '貨幣', + exportXlsxDate: '日期', + exportXlsxOperationsPerBoard: '每板營運', + exportColCost: '成本', + exportColSetupH: '設定(小時)', + exportColBoards: '板', + exportColPerBoard: '每板', + exportColMaterial: '材料', + exportColOrderCost: '訂單成本', + exportColShipping: '運費', + exportColOrderMin: '訂購(分鐘)', + exportColUnloadMin: '卸貨(分鐘)', + exportColProcess: '工序', + exportColTimeMin: '時間(分鐘)', + exportColTimeBoardMin: '時間/板(分鐘)', + exportColMaterialsBoard: '材料/板', + exportCopyTitle: 'Deck 成本 — {{currency}}', + exportCopyCostWith: '成本 / 板(含包裝):{{amount}}', + exportCopySellingNo: '售價(不含包裝):{{amount}}', + exportCopySellingWith: '售價(含包裝):{{amount}}', + exportCopyBreakdown: '設備 {{equipment}} · 營運 {{operations}} · 材料 {{materials}} · 工序 {{processes}} · 包裝 {{packaging}}', + exportMdHourlyRate: '時薪:{{value}}', + exportMdLabourBurden: '人力負擔率:{{value}}', + exportMdLoadedRate: '含負擔費率:{{value}}', + exportMdBoardsPerMonth: '板/月:{{value}}', + exportMdRent: '租金:{{value}}', + exportMdUtilities: '水電費:{{value}}', + exportMdSubscriptions: '訂閱費:{{value}}', + exportMdPerBoard: '每板:{{value}}', + exportMdMarkupWaste: '加成:{{markup}}×(≈ {{pct}}% 毛利率)· 廢料:{{waste}}%', + exportMdCostNoPack: '成本/板(不含包裝):{{value}}', + exportMdCostWithPack: '成本/板(含包裝):{{value}}', + exportMdBatchSetup: '批次設定/板:{{value}}', + exportMdSellingNo: '售價(不含包裝):{{value}}', + exportMdSellingWith: '售價(含包裝):{{value}}', + exportMdDisclaimer: '不包含運給買家的運費。由 SkateSpots 生成。', + }, +}; export default zhTWBatch8; diff --git a/src/pages/CreateTourPage.tsx b/src/pages/CreateTourPage.tsx index a87c508..224213d 100644 --- a/src/pages/CreateTourPage.tsx +++ b/src/pages/CreateTourPage.tsx @@ -37,6 +37,7 @@ const COMMON_LANGUAGES = [ { code: 'it', label: 'Italian', flag: '🇮🇹' }, { code: 'ja', label: 'Japanese', flag: '🇯🇵' }, { code: 'zh-CN', label: 'Chinese (Simplified)', flag: '🇨🇳' }, + { code: 'zh-TW', label: 'Chinese (Traditional)', flag: '🇹🇼' }, { code: 'zh', label: 'Chinese', flag: '🇨🇳' }, ];