diff --git a/src/components/LanguageToggle.tsx b/src/components/LanguageToggle.tsx index c47456c..1825f74 100644 --- a/src/components/LanguageToggle.tsx +++ b/src/components/LanguageToggle.tsx @@ -30,6 +30,7 @@ const languages: LanguageOption[] = [ { code: 'ko-KP', name: 'Korean (North)', nativeName: '조선어', flag: '🇰🇵' }, { code: 'th', name: 'Thai', nativeName: 'ไทย', flag: '🇹🇭' }, { code: 'ja', name: 'Japanese', nativeName: '日本語', flag: '🇯🇵' }, + { code: 'zh-CN', name: 'Chinese (Simplified)', nativeName: '简体中文', flag: '🇨🇳' }, ]; interface LanguageToggleProps { diff --git a/src/i18n/zh-CN/batch1.ts b/src/i18n/zh-CN/batch1.ts index 53c01d3..96d50c0 100644 --- a/src/i18n/zh-CN/batch1.ts +++ b/src/i18n/zh-CN/batch1.ts @@ -1,4 +1,313 @@ -/** zh-CN — batch 1. Filled by the translation pass; empty until then. */ -const zhCNBatch1 = {}; +/** + * Simplified 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 Simplified Chinese. + * + * Keys MUST match the `en` namespaces exactly; missing keys fall back to English. + */ +const zhCNBatch1 = { + 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 zhCNBatch1; diff --git a/src/i18n/zh-CN/batch2.ts b/src/i18n/zh-CN/batch2.ts index d174e55..3544d4f 100644 --- a/src/i18n/zh-CN/batch2.ts +++ b/src/i18n/zh-CN/batch2.ts @@ -1,4 +1,1598 @@ -/** zh-CN — batch 2. Filled by the translation pass; empty until then. */ -const zhCNBatch2 = {}; +/** + * zh-CN — 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 zhCNBatch2 = { + 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: "在设备的“设置 → 应用 → SkateSpots → 权限”中允许 SkateSpots 使用位置,然后再次点击“附近”。", + locationTimedOut: "定位超时", + timeoutNativeDesc: "未能及时获取位置。如果你在室内,GPS 看不到卫星——请启用网络定位(设置 → 位置)或走到室外,然后重试。", + timeoutWebDesc: "未能及时获取你的位置。请检查信号后重试。", + noLocationProvider: "没有定位服务", + noProviderNativeDesc: "你的手机未提供位置。在注重隐私的 ROM(如 GrapheneOS)上,请在“设置 → 位置”中启用网络定位,或确保 GPS 已开启并到室外尝试。", + noProviderWebDesc: "没有可用的定位服务。请启用定位服务后重试。", + locationUnavailable: "位置不可用", + unavailableNativeDesc: "请在手机设置中开启位置/GPS,允许 SkateSpots 使用位置(设置 → 应用 → SkateSpots → 权限),然后重试。", + unavailableWebDesc: "无法确定你的位置。请确保已启用定位服务。", + locationBlocked: "位置被阻止", + locationBlockedDesc: "你的浏览器已阻止此网站访问位置。重新启用的方法如下:", + locationPlatformAndroid: "Android Chrome", + locationPlatformIos: "iOS Safari", + locationPlatformDesktop: "桌面版 Chrome", + locationPlatformFirefox: "Firefox", + locationStepsAndroid: "点击地址栏中的锁形图标 → 网站设置 → 位置 → 允许", + locationStepsIos: "“设置”应用 → 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}}”。它将在整个应用中对所有人隐藏,并向 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: "只有已确认的队友和创始人能在这里看到你。对其他人来说,你显示为匿名的“隐藏成员”。注意:这是应用层面的隐私——你的成员标签仍然公开存在于 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: "路线选项和应用内导航。", + 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、活动、教练、装备或应用怎么用,尽管问我。我有来自 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% 用于资助一个免费、无广告的社区应用。", + 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、活动、教练、装备——或应用的任何问题,都可以问我。你需要什么?", + hello: "嘿!🛹 我是 The Sasquatch。关于滑板 Spot、活动、教练,或应用怎么用,尽管问我。有什么想了解的?", + hey: "嘿,滑手!🤙 问我你附近的 Spot、即将举行的活动、教练,或任何 SkateSpots 相关的问题。", + whoAreYou: "我是 The Sasquatch 🦧——SkateSpots 的 AI 向导。我可以查找全球的滑板 Spot、查询活动、教练、摄像师和装备商品。全部由实时 Nostr 数据驱动。尽管问!", + whatCanYouDo: "我可以按城市或国家查找滑板 Spot、查询即将举行的活动、在 The Lab 中寻找教练和摄像师、搜索装备商品,并回答关于应用如何运作的问题。试试:“曼谷的 Spot”或“找教练”!🛹", + whatIsNostr: "Nostr 是一种简单、开放的去中心化社交网络协议。可以理解为 Twitter,但没有单一公司控制它——你用密码学密钥代替用户名,选择哪些 Relay 存储你的数据(也可以自建),一个账号可在所有 Nostr 应用间通用!🔑", + 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) [应用](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/商品)、由你确认的操作草稿,以及使用你自己背景的回答——此外你还让应用保持免费且无广告。点击顶部的 **⚡ 升级 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 zhCNBatch2; diff --git a/src/i18n/zh-CN/batch3.ts b/src/i18n/zh-CN/batch3.ts index 48b2da1..c4ba895 100644 --- a/src/i18n/zh-CN/batch3.ts +++ b/src/i18n/zh-CN/batch3.ts @@ -1,4 +1,1294 @@ -/** zh-CN — batch 3. Filled by the translation pass; empty until then. */ -const zhCNBatch3 = {}; +/** zh-CN — batch 3: settingsUi namespace. */ +export const zhCNBatch3 = { + 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: "恢复短语二维码", + qrHeading: "你的恢复短语二维码", + qrAlt: "恢复短语二维码", + qrWarning: "请将此二维码保密并妥善保管!", + qrPrint: "打印二维码", + qrFailedTitle: "二维码失败", + qrFailedDesc: "无法生成二维码。", + accountCreatedTitle: "账户已创建!🎉", + accountCreatedDesc: "一切都准备好了!你的恢复短语已安全保存。", + loginFailedTitle: "登录失败", + loginFailedDesc: "创建账户失败。请重试。", + verifyFailedTitle: "验证失败", + verifyFailedDesc: "单词不匹配。请检查后重试。", + titlePrefix: "使用", + titleSuffix: "恢复短语创建账户", + twelveWordTitle: "12 词恢复短语", + twelveWordDesc: "你的恢复短语就像主密码。把它写在纸上并妥善保管。当你从其他设备访问账户,或清除浏览器数据后,都会需要它。", + generate: "生成恢复短语", + useNsecInstead: "改用高级 nsec 密钥", + yourPhrase: "你的恢复短语", + copy: "复制", + download: "下载", + qrCode: "二维码", + 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 zhCNBatch3; diff --git a/src/i18n/zh-CN/batch4.ts b/src/i18n/zh-CN/batch4.ts index ae2e2f6..0c95f17 100644 --- a/src/i18n/zh-CN/batch4.ts +++ b/src/i18n/zh-CN/batch4.ts @@ -1,4 +1,1120 @@ -/** zh-CN — batch 4. Filled by the translation pass; empty until then. */ -const zhCNBatch4 = {}; +/** + * Simplified Chinese (简体中文) — batch 4: `walletUi` + * (wallet, Cashu, escrow, privacy, mints, zaps, collections, app shop, + * newsletter, stats, leaderboards, supporters, moderation, profile, Stash). + * Skate hardware, trick names and brand nouns stay English. + */ +const zhCNBatch4 = { + 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 钱包并开始打赏。", + 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 地址以支付。", + clinkUnsupported: "尚不支持此支付码", + clinkUnsupportedDesc: "此钱包尚无法支付 CLINK 码。请改用 Lightning 账单或地址。", + unrecognizedQr: "无法识别的二维码", + unrecognizedQrDesc: "扫描 Cashu 代币、Lightning 账单或 Lightning 地址。", + 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 地址", + tip4Desc: "使用与真实姓名无关的化名地址", + proTip: "专业提示:", + proTipDesc: "先接收支付到你的 Cashu 钱包,然后定期使用 VPN 将较大金额转入个人钱包。", + warnTitle: "隐私说明", + warnDesc: "Lightning 地址有可能将你的 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 地址", + 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: "滑板补给、打赏视频片段、小额打赏", + 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: "打赏 {{amount}} sats", + zapAmountCashu: "使用 Cashu 打赏 {{amount}} sats", + lightningInvoice: "Lightning 账单", + qrAlt: "Lightning 账单二维码", + enterAmount: "输入金额", + enterAmountDesc: "选择一个预设值或输入有效的 sats 数量。", + cashuUnavailable: "Cashu 钱包不可用", + cashuUnavailableDesc: "你的 Cashu 钱包尚未就绪。请切换到 Lightning 或先打开钱包。", + insufficientCashu: "Cashu 余额不足", + insufficientCashuDesc: "你还需要 {{amount}} sats。请切换到 Lightning 或充值。", + zapSentCashu: "Zap 已发送!🥜", + zapSentCashuDesc: "已从你的 Cashu 钱包打赏 {{amount}} sats。", + cashuFailed: "Cashu 支付失败", + cashuFailedDesc: "使用 Cashu 钱包支付失败。", + invoiceCopied: "账单已复制", + invoiceCopiedDesc: "Lightning 账单已复制到剪贴板", + defaultComment: "在 SkateSpots 打了赏!🛹", + titleConnect: "连接钱包", + titlePayment: "Lightning 支付", + titleZap: "发送 Zap", + descConnect: "连接你的 Lightning 钱包以发送 zaps", + descPayment: "使用 Bitcoin Lightning Network 支付", + descZap: "Zaps 是支持此内容创作者的小额 Bitcoin 支付。如果你喜欢,不妨打赏一个 zap!", + descZapShort: "Zaps 是支持创作者的小额 Bitcoin 支付。不妨打赏一个 zap!" + }, + zapCrew: { + title: "打赏团队", + desc: "将一笔 zap 平均分给 {{count}} 位拥有 Lightning 地址的团队成员。", + noMembers: "目前没有其他可打赏的团队成员。", + totalAmount: "总金额", + customTotal: "自定义总额", + each: "每人 sats", + rounded: "(已取整)", + noWallet: "未连接钱包 —— 你将收到每位成员各自的账单以手动支付。连接钱包即可一键分发。", + zapAcross: "向 {{count}} 人共打赏 {{amount}} sats", + sentTo: "⚡ 已发送至 {{done}}/{{total}}", + none: "未完成任何自动支付", + copyPending: "复制待处理的账单以手动完成支付。", + thanks: "感谢支持团队!", + payingCrew: "正在支付团队……", + defaultComment: "给 {{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: "喜欢这一期吗?打个赏,永远不错过下一期。", + sectionStats: "社区数据一览", + sectionWhatsNew: "最新动态", + sectionSpotOfWeek: "本周场地", + sectionCommunity: "社区", + sectionSupport: "支持项目", + sectionLatestDrops: "最新期 · 来自 Nostr 的实时内容", + mappedBy: "由…绘制", + viewOnMap: "在地图上查看", + noSpotPicked: "本周尚未选定场地。提交你的场地,它可能出现在下一期。", + browseMap: "浏览地图", + spotMap: "场地地图", + statsBadge: "统计", + supportDesc: "100% 开源,由社区资助,没有广告,没有投资人。如果它有用,请打赏或在 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: "添加场地和店铺,获得感激滑手的打赏。顶尖贡献者可能获得额外奖励!", + 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: "当你觉得某个场地有用时,给测绘者打个赏!这是表达感谢和鼓励更多贡献的最佳方式。", + you: "你", + zapTitle: "Zap 排行榜", + zapSubtitle: "最受喜爱的场地 —— 以及慷慨打赏的滑手。", + thisWeek: "本周", + thisMonth: "本月", + allTime: "全部时间", + topZappedSpots: "打赏最多的场地", + 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}} sats", + quietNote: "还要感谢所有默默支持的人 —— 谢谢你们。❤️", + silentTitle: "私密的链上(静默支付)", + silentDesc: "一个名称,每笔支付使用全新地址 —— 通过静默支付走链上,或从同一记录走 Lightning。无需复用,无从关联。", + silentCopyName: "复制名称", + silentCopied: "已复制", + silentWallets: "需要一个支持支付名称/静默支付的钱包:Sparrow、Cake、Dana、Phoenix、BlueWallet、Wasabi、Nunchuk 或 BitBox02。", + wayLightningTitle: "即时且公开", + wayLightningDesc: "打赏 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: "打赏 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: "更喜欢直接捐赠?⚡ 在下方打赏 —— 无需退款,无需回收。", + openAngor: "打开 Angor", + orZap: "或在应用中直接 ⚡ 打赏任意场地、团队或创作者", + 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: "打赏最多", + 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 zhCNBatch4; diff --git a/src/i18n/zh-CN/batch5.ts b/src/i18n/zh-CN/batch5.ts index e207b13..87ebc4c 100644 --- a/src/i18n/zh-CN/batch5.ts +++ b/src/i18n/zh-CN/batch5.ts @@ -1,4 +1,1604 @@ -/** zh-CN — batch 5. Filled by the translation pass; empty until then. */ -const zhCNBatch5 = {}; +/** + * zh-CN — 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 zhCNBatch5 = { + labUi: { + activeCount: '{{count}} 个活跃', + addMusicProfile: '添加音乐档案', + all: '全部', + clearAll: '清除全部', + collective: '集体', + filters: '筛选', + following: '关注中', + getRiderCard: '领取 Rider 卡', + judgeEvents: '评判活动', + justASkater: '只是一个', + labForServices: 'The Lab 是提供服务的地方。浏览并加入整个滑手社区', + loginToOffer: '登录以提供服务', + newest: '最新', + noResults: '没有结果', + offer: '提供', + offerBuilding: '提供建造', + offerCoaching: '提供教学', + offerCuts: '提供理发', + offerDesignArt: '提供设计 / 艺术', + offerEditing: '提供剪辑', + offerFilming: '提供拍摄', + offerGraffiti: '提供涂鸦', + offerPhotography: '提供摄影', + 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: 'Editor', + photographer: 'Photographer', + skater: '滑手', + }, + empty: { + footer: '有疑问?查看常见问题 →', + loginSuffix: '即可创建档案。', + coachesTitle: '还没有 Coaches', + coachesBody: '成为你所在地区第一个提供滑板教学的人。', + filmersTitle: '还没有 Filmers', + filmersBody: '成为第一个提供滑板拍摄的人 — 短片、完整片段、比赛记录等等。', + photographersTitle: '还没有 Photographers', + photographersBody: '成为你所在地区第一个提供滑板摄影的人 — 动作照、连拍、杂志拍摄等等。', + editorsTitle: '还没有 Editors', + editorsBody: '成为第一个提供滑板视频剪辑服务的人。', + 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: '简介 / 教学理念', + 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: '创建拍摄档案', + created: '拍摄档案已创建!', + createPro: '创建 PRO 拍摄档案', + 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: '要接收客户的拍摄服务付款,你需要连接一个 Lightning 钱包。客户会直接为你的作品 Zap 你。', + profileDesc: '向客户介绍你的拍摄专长', + profileTitle: '拍摄档案', + rate: '价格', + ratePlaceholder: '10000 sats/视频', + reelLabel: '作品集 / 集锦', + selectService: '请至少选择一项服务。', + selectSkill: '请至少选择一项拍摄技能。', + servicesLabel: '提供的服务 *(至少选择一项)', + servicesRequired: '服务为必填', + skillsRequired: '技能为必填', + spotsDesc: '选择你提供拍摄服务的 Spot', + spotsLabel: '你拍摄的 Spots', + tagline: '提供你的滑板视频拍摄 — 短片、线、完整片段和比赛记录', + update: '更新拍摄档案', + updated: '拍摄档案已更新!', + }, + 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/分钟,私信询价', + 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: '创建摄影档案', + created: '摄影档案已创建!', + createPro: '创建 PRO 摄影档案', + 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: '摄影档案', + ratePlaceholder: '20000 sats/拍摄', + selectCamera: '请至少选择一种你使用的相机类型。', + selectService: '请至少选择一项你提供的服务。', + servicesLabel: '提供的服务 *(至少选择一项)', + servicesRequired: '服务为必填', + spotsDesc: '选择你提供摄影的 Spot', + spotsLabel: '你拍摄的 Spots', + styleLabel: '拍摄风格', + supportLabel: '支撑与装备', + tagline: '拍摄滑板现场 — 提供你的滑板摄影', + update: '更新摄影档案', + updated: '摄影档案已更新!', + }, + 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: '它可以运行在一部旧手机、树莓派,或任何你一直开着的小设备上。它在线时你的群组持续运作 — 你可以随时迁移群组。', + 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: '返回 Crew', + title: '创建 Crew', + intro: '你的滑板家人 — 和你一起滑板的人。只需一个名字就能开始;其他都是可选的。', + }, + crew: { + seoTitleNamed: '{{name}} - SkateSpots Crew', + seoTitle: 'Crew - SkateSpots', + seoDescription: 'SkateSpots 上的一个滑板 Crew。', + postHidden: '帖子已隐藏', + postHiddenDesc: '已对所有人从 Crew 动态中移除。', + postHideFailed: '隐藏帖子失败', + backToCrews: '返回 Crew', + disband: '解散', + youAreCaptain: '你是队长', + member: '成员', + askSasquatch: '询问 Sasquatch', + agent: 'Crew 助手', + agentDesc: '你 Crew 的 AI 向导 — 附近的 Spot、活动、Coaches 和装备,附带实时数据。', + eventsTab: '活动', + chatTab: '聊天', + newMessages: '新消息', + hostJam: '举办活动', + noEvents: '还没有 Crew 活动。以 Crew 名义举办活动、比赛或聚会 — 它会把你的 Crew 连接到活动日历,并让人们为它 Zap。', + support: '支持', + zapCrew: '为 Crew Zap', + 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: '教学', + 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,关联你常去的 Spot,把你的圈子放上地图让大家找到。', + }, + 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: '要获得完整乐队档案(流派、乐器、演出),请在 The Lab 中创建一个', + musicianWord: 'Musician', + bandFooterB: ',然后在上面', + linkedLabWord: '已关联的 Lab 档案', + bandFooterC: '部分中关联它。', + bandMusicWord: '乐队与音乐', + bandName: '乐队名称', + bandNamePlaceholder: '例如 The Bail Outs', + bandNudgeA: '你有乐队 — 点击设置你的', + crewTypeWord: 'Crew 类型', + bandNudgeB: '为', + bandNudgeC: ',这样你也会出现在 The Lab 的音乐圈中。', + 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: '你的 Crew', + 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 zhCNBatch5; diff --git a/src/i18n/zh-CN/batch6.ts b/src/i18n/zh-CN/batch6.ts index 1d444d5..82fb5e1 100644 --- a/src/i18n/zh-CN/batch6.ts +++ b/src/i18n/zh-CN/batch6.ts @@ -1,4 +1,1950 @@ -/** zh-CN — batch 6. Filled by the translation pass; empty until then. */ -const zhCNBatch6 = {}; +/** + * zh-CN — batch 6 (placesUi, marketUi, labOptions). + */ +const zhCNBatch6 = { + 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: "店铺名称", + threePhotos: "3 张以上照片", + tip: "💡 质量越高 = 社区的 zap 越多!", + }, + calendar: { + allDay: "全天", + eventDay: "活动日", + eventsOnDay: "{{count}} 个活动", + eventsThisMonth: "本月活动", + going: "参加", + months: { + january: "一月", + february: "二月", + march: "三月", + april: "四月", + may: "五月", + june: "六月", + july: "七月", + august: "八月", + september: "九月", + october: "十月", + november: "十一月", + december: "十二月", + }, + nextMonth: "下个月", + nothingOnDay: "这一天没有安排。", + prevMonth: "上个月", + tapHighlighted: "点按高亮的日子看看有什么安排。", + today: "今天", + tourDay: "巡回日", + toursOnDay: "{{count}} 个巡回", + toursThisMonth: "本月巡回", + 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: "添加新场地 →", + changeSpot: "更换场地", + created: "活动已创建!", + createdDesc: "你的活动已发布到网络。", + entryFee: "报名费", + entryFeeHint: "(可选 —— 例如“500 sats”或“£10”)", + entryFeePlaceholder: "免费活动请留空", + featuring: "特邀 {{name}}", + featuringDesc: "该演出将标记为现场音乐,并显示在其演出列表中。", + fundingGoal: "众筹目标", + fundingGoalHint: "(可选 —— 通过 zap 众筹的 sats)", + fundingGoalPlaceholder: "例如 50000", + geoNotSupported: "不支持地理定位", + geoNotSupportedDesc: "你的浏览器不支持地理定位。", + hideSpots: "隐藏场地", + hostingAs: "以 {{name}} 身份主办", + hostingAsDesc: "该活动将显示在你的 crew 页面上,并标记为由 crew 主办。", + imageUploaded: "图片已上传", + imageUploadedDesc: "你的图片已成功上传。", + invalidDate: "无效日期", + invalidDateDesc: "请输入有效的开始日期和时间。", + invalidEnd: "无效的结束时间", + invalidEndDesc: "结束时间必须晚于开始时间。", + linkedTo: "已关联:{{title}}", + linkToSpot: "关联到一个 Skate Spot", + linkToShop: "关联到一家 Shop", + selectedShop: "已关联到 {{name}}", + selectShopHint: "可选 —— 由某家滑板店举办或主办。", + selectShop: "选择店铺", + changeShop: "更换店铺", + hideShops: "隐藏店铺", + searchShops: "搜索店铺…", + noShopsMatch: "没有匹配你搜索的店铺。", + noShopsAvailable: "还没有可用的店铺。", + linkToTour: "关联到巡回(可选)", + linkTourDesc: "将此活动关联到一次巡回,以表明它是更大系列的一部分。非常适合全国巡回、国际冒险或 World Destruction Tour 挑战日。", + loadingSpots: "正在加载场地...", + loadingTours: "正在加载巡回...", + locationError: "位置错误", + locationFound: "已找到位置", + locationFoundDesc: "你的当前位置已设置。", + logoUrl: "Logo URL(可选)", + noSpotsAvailable: "没有可用的场地", + noSpotsMatch: "没有匹配你搜索的场地", + noTourLinked: "未关联巡回", + optional: "(可选)", + pastDesc: "选择一个未来的日期和时间,这样滑手们才能 RSVP 并到场。", + pastTitle: "该开始时间已过去", + publishFailed: "发布失败", + publishFeatured: "发布精选活动", + removeSponsor: "移除赞助商", + searchSpots: "按名称、位置或类别搜索场地...", + selectedSpot: "已选择:{{name}}", + selectSpot: "选择场地", + selectSpotHint: "从地图上选择活动举办的地点", + selectTour: "选择巡回", + somethingWrong: "出了点问题", + sponsorName: "赞助商名称", + sponsors: "赞助商", + sponsorsHint: "有店铺或品牌支持?添加他们的 Logo —— 它会以“Presented by”条带显示在活动上。", + startRequired: "需要开始时间", + startRequiredDesc: "请输入活动开始的时间。", + titleRequired: "需要标题", + titleRequiredDesc: "请输入活动的名称。", + uploadFailed: "上传失败", + uploadFailedDesc: "图片上传失败", + websiteUrl: "网站 URL(可选)", + }, + createShop: { + address: "店铺地址", + addressPlaceholder: "例如,411 N Fairfax Ave, Los Angeles, CA 90036", + addressRequired: "需要地址", + addressRequiredDesc: "请输入你的店铺地址。", + contactHint: "方便顾客联系你(建议至少提供一种联系方式)", + contactInfo: "联系信息", + created: "🎉 店铺已添加!", + createdDesc: "你的滑板店现已出现在地图上。滑手们可以 zap 你表示感谢!", + descriptionPlaceholder: "向大家介绍你的店铺、你卖什么、你的特色……", + detailsDesc: "向社区介绍你的店铺。所有带 * 的字段均为必填。", + email: "邮箱", + hoursOfOperation: "营业时间", + hoursPlaceholder: "例如,周一至周六 10AM-8PM,周日 12PM-6PM", + instagram: "Instagram", + invalidCoords: "坐标无效", + invalidCoordsDesc: "请输入有效的纬度(-90 到 90)和经度(-180 到 180)。", + latPlaceholder: "纬度(例如 34.0737)", + lngPlaceholder: "经度(例如 -118.3614)", + locationRequired: "需要位置", + locationRequiredDesc: "请输入坐标或使用你的当前位置。", + loginToAdd: "你需要登录才能添加滑板店。", + namePlaceholder: "例如,Supreme Los Angeles", + nameRequired: "需要店铺名称", + nameRequiredDesc: "请输入你的店铺名称。", + phoneNumber: "电话号码", + publishFailedDesc: "出了点问题。请查看控制台了解详情。", + shopPhotoAlt: "Shop", + shopPhotos: "店铺照片", + subtitle: "把你的店铺列在地图上,与社区建立联系", + upload: "上传", + }, + createTour: { + acceptedClipSources: "接受的片段来源", + acceptedClipSourcesDesc: "你会接受哪些格式的片段投稿?", + accommodationInfo: "住宿信息", + accommodationPlaceholder: "住宿建议或安排,例如“沿途经济型青旅”“需要露营装备”“已包含 Airbnb”", + addChallenge: "添加挑战", + addCity: "添加城市...", + addCountry: "添加国家...", + addShopFirst: "请先添加店铺", + alsoSelected: "同时已选:", + availabilityPlaceholder: "例如,周末、仅上午、需预约", + availabilityQuestion: "你通常什么时候有空?", + availableShops: "可用的滑板店({{count}})", + challengeDescPlaceholder: "可选描述...", + challenges: "挑战", + challengesRequired: "需要挑战", + challengesRequiredDesc: "请至少添加一个挑战供队伍完成。", + challengesSecret: "所有挑战在比赛开始日期前都是保密的。队伍在此之前看不到它们!", + challengeTitlePlaceholder: "挑战标题,例如“Kickflip a 10 stair”", + citiesLabel: "城市", + citiesOnTour: "巡回中的城市", + cityPlaceholder: "例如,柏林,德国", + cityRegion: "城市 / 地区", + cityRequired: "需要城市/地区", + cityRequiredDesc: "请输入你的城市或地区。", + clipAnyUrl: "🔗 任意 URL", + clipBlossom: "📦 Blossom 上传", + clipInstagram: "📸 Instagram", + clipYouTube: "▶️ YouTube", + competitionDates: "比赛日期", + competitionDatesWarning: "⚠️ 所有挑战在开始日期前都是保密的!比赛开始前队伍看不到挑战。", + competitionLocations: "比赛地点", + competitionLocationsDesc: "队伍将在哪里比赛?添加所有涉及的城市和国家。", + coordsHint: "坐标是可选的。添加它们可将你的集合点固定在地图上。", + countriesLabel: "国家", + countriesRequired: "需要国家", + countriesRequiredDesc: "请为你的国际巡回至少添加一个国家。", + createdDestruction: "💀 WORLD DESTRUCTION TOUR 已创建!", + createdDestructionDesc: "队伍可以报名了。挑战将在开始日期揭晓!", + createDestructionTour: "创建 World Destruction Tour", + createdInternational: "✈️ 国际巡回已创建!", + createdInternationalDesc: "你的全球冒险已上线!与全世界的滑手建立联系。", + createdLocal: "🏠 本地巡回已创建!", + createdLocalDesc: "你的巡回现已可见。滑手们可以通过私信预订!", + createdNational: "🚐 全国巡回已创建!", + createdNationalDesc: "你的公路之旅上线了!开始与感兴趣的滑手协调吧。", + departure: "出发 *", + departureRequired: "需要出发日期", + departureRequiredDesc: "设置行程出发的时间,方便滑手规划和预订。", + descriptionPlaceholder: "描述滑手们将体验到的内容:将去的场地、氛围、你的巡回的独特之处……", + destructionDesc: "设置你的全球 KOTR 风格比赛 —— 一切都由你定义!", + discountHint: "巡回参与者可在店铺出示预订确认以享受此折扣", + discountPercentage: "折扣百分比", + dropTour: "发布巡回", + duration: "时长", + durationHintDestruction: "比赛持续多久?(1-12 个月)", + durationHintInternational: "冒险持续多少周?(最多 2 个月)", + durationHintLocal: "你通常的巡回持续多久?", + durationHintNational: "公路之旅有多少天?", + durationWeeksMonths: "{{weeks}} 周(约 {{months}} 个月)", + editTour: "编辑巡回", + enable: "启用", + enabled: "已启用", + endBeforeStart: "结束早于开始", + endBeforeStartDesc: "比赛结束日期必须不早于开始日期。", + endDate: "结束日期", + entryFeeHint: "你保留 95% • 平台收取 5% • 留空表示免费参加", + entryFeePerTeam: "每队报名费(sats)", + entryFeePlaceholder: "例如 100000", + entryPrizes: "报名与奖品", + filmPremieres: "队伍影片首映", + filmPremieresDesc: "比赛结束后,每支队伍的片段会变成一部完整影片,可在世界各地的本地滑板店首映。", + filmPremieresInfo: "🎥 队伍将他们的挑战片段剪辑成最终影片。店铺可以举办首映活动,把全球比赛与本地社区连接起来。", + filmReleaseDate: "影片发布日期(可选)", + filmReleaseDateHint: "影片何时可用。留空表示比赛结束后立即发布。", + fixedSession: "固定场次", + fixedSessionDesc: "确定的日期和时间", + flexible: "灵活", + flexibleDesc: "随时通过私信预订", + hide: "隐藏", + howDestruction1: "• 全球队伍比赛 —— 最长 12 个月", + howDestruction2: "• 你定义挑战、积分、奖品 —— 我们只提供平台", + howDestruction3: "• 所有挑战在比赛开始日期前都是保密的", + howDestruction4: "• 通过 Blossom 上传或外部链接(YouTube、Instagram、任意 URL)提交片段", + howDestruction5: "• 仅限高级水平 —— 自动包含所有场地类型", + howDestruction6: "• 平台只收取报名费的 5%(不是奖池)", + howDestructionTitle: "💀 WORLD DESTRUCTION TOUR - KOTR 风格", + howInternational1: "• 跨越多个国家的跨境冒险", + howInternational2: "• 价格由你定 —— 平台只收取 5%", + howInternational3: "• 设置出发和返程日期,方便 crew 订机票", + howInternational4: "• 连接来自世界各地的滑手", + howInternational5: "• 创造难忘的全球体验!", + howInternationalTitle: "国际巡回如何运作", + howItWorks: "如何运作:", + howLocal1: "• 价格由你定 —— 平台收取 10%", + howLocal2: "• 隐藏场地保持隐藏 —— 你亲自带他们去", + howLocal3: "• 安排固定场次,或保持灵活 / 预约制", + howLocal4: "• 滑手通过私信预订,用 Lightning 付款,并可添加到日历", + howLocal5: "• 通过评价和 zap 建立你的声誉", + howLocalTitle: "本地巡回如何运作", + howNational1: "• 跨越本国的多城市公路之旅", + howNational2: "• 价格由你定 —— 平台只收取 7%", + howNational3: "• 设置行程日期,方便滑手请假和出行", + howNational4: "• 为 crew 提供交通 / 住宿信息", + howNational5: "• 打造传奇的滑板冒险!", + howNationalTitle: "全国巡回如何运作", + imageUploadedDesc: "你的巡回图片已上传。", + incompleteCoords: "坐标不完整", + incompleteCoordsDesc: "请同时输入纬度和经度,或两者都留空。", + internationalDetails: "国际冒险详情", + languagesSelected: "已选 {{count}} 种", + languagesSpoken: "使用语言", + latOptional: "纬度(可选)", + lngOptional: "经度(可选)", + loadingProfile: "正在加载资料...", + loadingProfileDesc: "正在检查你的 NIP-05 验证状态。", + loadingShops: "正在加载店铺...", + localShopPremieres: "本地店铺首映", + localShopPremieresDesc: "世界各地的滑板店都可以举办放映之夜", + loginToCreate: "你需要登录才能创建巡回。", + maxGroupSize: "最大团队人数", + maxTeams: "最大队伍数", + maxTeamSize: "最大队伍规模", + meetingLocationSet: "你的当前位置已设为集合点。", + meetingPointDesc: "你在哪里与巡回参与者会合?选择一个公共、知名的地点。", + meetingPointLabel: "集合点", + meetingPointPlaceholder: "例如,Warschauer Straße 车站", + meetingPointRequired: "需要集合点", + meetingPointRequiredDesc: "请输入你与巡回参与者会合的地点。", + minTeamSize: "最小队伍规模", + noChallenges: "还没有挑战", + noChallengesDesc: "添加挑战供队伍完成", + noPartnerShop: "没有合作店铺", + noShopsFound: "网络上还没有找到滑板店。", + noShopsRegistered: "还没有注册滑板店", + onlineRelease: "线上发布", + onlineReleaseDesc: "也在 YouTube/Nostr 上发布影片", + organizerContact: "组织者联系方式", + organizerContactHint: "这将对已报名的队伍可见", + organizerContactPlaceholder: "队伍如何联系你?例如 Nostr npub、邮箱、Telegram 等。", + partnerDiscountDesc: "为巡回参与者在本地滑板店提供折扣", + partnerStep1: "1. 与你信任的本地滑板店合作", + partnerStep2: "2. 为巡回参与者设置折扣百分比", + partnerStep3: "3. 巡回结束后,给参与者一份确认函以便在店铺出示", + partnerStep4: "4. 店铺兑现折扣 —— 建立社区并带动到店客流!", + percentOff: "{{percent}}% OFF", + photoHint: "添加一张你滑板的照片或你巡回中一个很酷的场地。", + pickRide: "选择你的座驾", + place1: "🥇 第 1 名", + place2: "🥈 第 2 名", + place3: "🥉 第 3 名", + platformFee: "你设定价格 • 平台收取 {{percent}}", + points: "积分:", + pricePerPerson: "每人价格(sats)", + pricePlaceholder: "例如 25000", + prizeDistribution: "奖品分配", + prizePoolHint: "可选 —— 可用奖品总额", + prizePoolPlaceholder: "例如 2000000", + proTipDesc: "在列出合作折扣之前,先通过私信联系店主商定折扣百分比。这能确保他们认可并为你的巡回参与者兑现折扣。", + proTipTitle: "💡 专业提示:先与店铺协调!", + return: "返程", + returnBeforeDeparture: "返程早于出发", + returnBeforeDepartureDesc: "返程日期必须不早于出发日期。", + roadTripDetails: "公路之旅详情", + schedule: "日程", + scheduleDesc: "将其安排为一次性固定场次,或保持灵活,让滑手通过私信预订时间。", + secretUntilStart: "开始前保密", + selectPartnerShop: "选择合作店铺", + sessionDateRequired: "需要场次日期", + sessionDateRequiredDesc: "为你的固定场次选择日期和时间,或切换到灵活日程。", + sessionDateTime: "场次日期和时间", + sessionDateTimeHint: "滑手会看到这个时间,并可从巡回页面添加到他们的日历。", + shopPremieresContact: "直接联系这些店铺来安排影片首映之夜。所有安排都是私密的。", + shopPremieresHow: "💡 店铺首映如何运作:直接联系店铺安排首映之夜。所有安排都是你和店铺之间的私事。", + shopsCanRegister: "店铺可在 /create-shop 注册", + show: "显示", + showAllLanguages: "显示全部 {{count}} 种语言", + somethingWrong: "出了点问题。", + spotTypes: "场地类型", + spotTypesRequired: "需要场地类型", + spotTypesRequiredDesc: "请至少选择一种你将展示的场地类型。", + startDate: "开始日期", + startDateRequired: "需要开始日期", + startDateRequiredDesc: "请设置比赛开始的时间(挑战将在此日期揭晓)。", + startingCity: "起始城市", + startingCityPlaceholder: "例如,洛杉矶,美国", + teamSettings: "队伍设置", + teamsCount: "{{count}} 支队伍", + titlePlaceholder: "例如,柏林 Kreuzberg - 地下场地巡回", + titleRequired: "需要巡回标题", + titleRequiredDesc: "请输入你的巡回名称。", + totalPercent: "合计:{{percent}}%", + totalPrizePool: "总奖池(sats)", + tourDesc: "告诉滑手你的巡回有什么期待", + tourDetails: "巡回详情", + tourPhoto: "巡回照片", + tourTitle: "巡回标题", + transportDestructionPlaceholder: "队伍如何在各地之间出行?是否提供或推荐交通方式?", + transportInfo: "交通信息", + transportPlaceholder: "参与者如何出行?例如“提供面包车”“飞抵巴塞罗那,我们租面包车”“城市间乘火车”", + tripDatesDesc: "锁定日期,方便滑手请假、订机票并规划行程。", + tripDatesTitle: "行程日期", + updated: "巡回已更新!", + updatedDesc: "你的更改已发布。", + upload: "上传", + view: "查看 →", + worldDestruction: "World Destruction Tour", + youReceive: "你获得:每人 {{amount}} sats", + }, + editEvent: { + accessDenied: "访问被拒绝", + accessDeniedDesc: "你只能编辑你创建的活动。", + backToEvent: "返回活动", + detailsDesc: "更新此活动的信息。所有带 * 的字段均为必填。", + eventCover: "活动封面", + locationUpdated: "位置已更新。", + loginToEdit: "你需要登录才能编辑此活动。", + newSpot: "新场地:{{location}}。", + newTime: "新时间:{{date}} {{time}}。", + saveChanges: "保存更改", + saving: "保存中...", + title: "编辑活动", + updated: "活动已更新!", + updatedDesc: "你的更改已发布到网络。", + updateDetails: "更新 {{title}} 的详情", + updatedNotified: "更改已发布 —— 已通知 {{count}} 位参加者。", + updateFailed: "更新失败", + updateMessage: "{{parts}} —— 查看活动了解详情。", + }, + editShop: { + accessDeniedDesc: "你只能编辑你创建的店铺。", + backToShop: "返回店铺", + detailsDesc: "更新你的店铺信息。所有带 * 的字段均为必填。", + loginToEdit: "你需要登录才能编辑此店铺。", + updated: "店铺已更新!", + updateDetails: "更新 {{name}} 的详情", + }, + editTour: { + accessDeniedDesc: "你只能编辑你创建的巡回。", + loginToEdit: "你需要登录才能编辑此巡回。", + }, + eventCard: { + report: "举报", + }, + eventDetail: { + aCrew: "一个 crew", + addToCalendar: "添加到日历", + backToEvents: "返回活动", + cancelled: "此活动已取消", + checkUpdate: "—— 查看更新", + copyFailed: "复制失败", + date: "日期", + editEvent: "编辑活动", + eventFallback: "活动", + eventOrganizer: "活动组织者", + getDirections: "获取路线", + linkCopied: "链接已复制", + linkCopiedDesc: "活动链接已复制到剪贴板 —— 粘贴到任何地方。", + live: "现场:", + liveMusic: "现场音乐", + location: "位置", + newLocation: "新位置", + noRsvps: "没有记录到 RSVP。", + organizer: "组织者", + rsvpsClosed: "RSVP 已关闭 —— 此活动已被主办方取消。", + seeMap: "查看地图", + shareEvent: "分享活动", + shareText: "{{title}} —— SkateSpots 上的一个滑板活动", + shareTextFallback: "来看看 SkateSpots 上的这个滑板活动", + time: "时间", + timeChanged: "时间已更改", + updatesFromHost: "来自主办方的更新", + where: "地点", + whoCame: "谁来了", + whosGoing: "谁要参加", + }, + events: { + calendar: "日历", + createTour: "创建巡回", + events: "活动", + faqFooter: "有疑问?查看 FAQ →", + hosting: "主办", + hostingSubtitle: "你的活动 —— RSVP、更新和快速编辑", + list: "列表", + noEventsMatchFilters: "没有符合筛选条件的活动。试试调整或清除筛选。", + noPast: "没有过去的活动", + noPastBody: "当前筛选条件下没有找到过去的滑板活动。", + noTours: "没有找到巡回", + noToursBody: "还没有滑板巡回。创建第一个,带滑手们去发现场地!", + noToursMatchFilters: "没有符合筛选条件的巡回。试试调整或清除筛选。", + noUpcoming: "没有即将到来的活动", + noUpcomingBody: "没有找到即将到来的滑板活动。成为第一个创建的人!", + past: "过去", + resultsCount: "{{count}} 个结果", + searchCity: "城市…", + searchEvent: "活动名称…", + searchTour: "巡回名称…", + tours: "巡回", + toursSubtitle: "本地向导、公路之旅和世界毁灭比赛", + upcoming: "即将到来", + }, + eventTypes: { + contest: "比赛", + demo: "表演", + jam: "Jam", + meetup: "聚会", + premiere: "首映", + session: "场次", + workshop: "工作坊", + }, + featured: { + active: "生效中", + bodyEvent: "免费发布。精选活动会获得徽章并置顶在活动页面。", + bodyTour: "免费发布。精选巡回会获得徽章并置顶在巡回列表中。", + contextEvent: "无论如何你的活动都会免费展示 —— 精选只是增加徽章和曝光。", + contextTour: "无论如何你的巡回都会免费展示 —— 精选只是增加徽章和曝光。", + daysRemaining: "精选生效中 · 剩余 {{count}} 天。", + headingEvent: "精选此活动", + headingTour: "精选此巡回", + optional: "可选", + platformOwner: "平台所有者 —— 精选始终开启。", + }, + filters: { + activeCount: "{{count}} 项生效", + all: "全部", + allLevels: "所有水平", + eventType: "活动类型", + following: "关注中", + newest: "最新", + popular: "热门", + showResults: "显示结果", + showResultsActive: "显示结果 · {{count}} 项生效", + skillLevel: "技能水平", + sortBy: "排序方式", + topRated: "评价最高", + tourCategory: "巡回类别", + trusted: "已信任", + trustLevel: "信任级别", + verified: "已认证", + }, + food: { + bar: "酒吧", + cafe: "咖啡馆", + call: "打电话", + chooseSpot: "选择一个场地...", + directions: "路线", + fastFood: "快餐", + foodCourt: "美食广场", + locationLabel: "位置:", + noneFound: "没有找到美食场地", + noneFoundDesc: "我们在此场地 1 公里内没有找到任何餐厅或咖啡馆。试试选择其他位置。", + placesFound: "在 {{spot}} 1 公里内找到 {{count}} 个地点", + pub: "酒馆", + restaurant: "餐厅", + selectSpot: "选择一个滑板场地", + selectSpotDesc: "从上方下拉列表中选择一个滑板场地,以查找附近的餐厅、咖啡馆和其他美食。", + selectSpotTitle: "选择一个滑板场地", + subtitle: "在你最喜欢的滑板场地附近找吃的", + title: "场地附近的美食", + 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 管理员移除了店铺“{{name}}”", + areYouOwner: "你是店主吗?", + backToMap: "返回地图", + claimDesc: "如果你拥有或管理这家店铺,可以使用 NIP-05 认领它以验证所有权。", + claimNip05Intro: "要认领此店铺,请添加一个与店铺网站域名匹配的 NIP-05 标识符。例如,如果店铺网站是", + claimNip05Your: "你的 NIP-05 应该是", + contactShop: "联系店铺", + deleted: "店铺已删除", + deletedDesc: "删除请求已发送到 relay。大多数 relay 会移除此内容。", + deleteDialogDesc: "这将从所有 relay 永久删除“{{name}}”。此操作无法撤销。", + deleteDialogTitle: "删除店铺?", + deletedReason: "已删除的店铺", + deleteFailed: "删除失败", + deleteShop: "删除店铺", + linkCopied: "链接已复制!", + linkCopiedDesc: "店铺链接已复制到剪贴板。", + nip05Required: "⚠️ 认领店铺需要 NIP-05 验证", + opens: "打开:{{domain}}", + removeAdmin: "移除(管理员)", + removed: "店铺已移除", + removedDesc: "此店铺已被下架,将在 SkateSpots 中隐藏。", + removeDialogDesc: "作为 SkateSpots 管理员,你正在下架“{{name}}”。它将对所有人隐藏,并向 relay 发送删除请求。", + removeDialogTitle: "移除此店铺?(管理员)", + removeShop: "移除店铺", + tipMapper: "打赏标注者", + tipMapperDesc: "此店铺由社区成员添加。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: "关于此巡回", + availability: "可预约时间", + competitionWindow: "比赛窗口", + contactToBook: "联系向导预订", + discountAt: "{{shop}} 享 {{percent}}% OFF", + duration: "时长", + languages: "语言", + loginToBook: "登录以预订", + loginToBookDesc: "登录以联系向导并预订此巡回", + maxGroup: "最大团队人数", + meetingPoint: "集合点", + notFound: "未找到巡回", + notFoundDesc: "此巡回可能已被移除或不存在。", + organizer: "组织者", + partnerDiscount: "合作店铺折扣", + partnerDiscountDesc: "预订此巡回即可在合作滑板店享受折扣。向店铺员工出示你的预订确认。", + people: "{{count}} 人", + perPerson: "每人", + price: "价格", + runsAbout: "大约持续 {{duration}}", + scheduledSession: "固定场次", + shareText: "来看看这个本地滑板巡回:{{title}}", + skillLevel: "技能水平", + spotTypes: "场地类型", + tourGuide: "巡回向导", + tourSponsors: "巡回赞助商", + tripDates: "行程日期", + viewProfile: "查看资料", + }, + updates: { + admin: "管理员", + adminNote: "你正以 SkateSpots 管理员身份发布。它会明确标记为管理员通知,而非来自主办方。", + kindCancelled: "已取消", + kindNewSpot: "新场地", + kindNewTime: "新时间", + kindUpdate: "更新", + loading: "正在加载更新…", + notifiedCount: "已通知 {{count}} 人。", + notifiedEveryone: "所有人都会在活动上看到。", + notifiesRsvps: "通知 {{count}} 位 RSVP", + noUpdates: "主办方还没有更新。RSVP 后如有任何变化你会收到通知。", + placeholder: "下雨 —— 改到周日 2pm。在后边那个台阶集合…", + post: "发布", + postAdminUpdate: "发布管理员更新", + posted: "更新已发布", + postError: "无法发布更新", + postUpdate: "发布更新", + tryAgain: "请重试。", + visibleToEveryone: "此活动上所有人可见", + }, + destination: { + bitcoin: "Bitcoin", + closeSearch: "关闭搜索", + nothingMatches: "没有匹配“{{query}}”的内容。", + placeholder: "搜索场地、店铺、Bitcoin 商户…", + shop: "Shop", + spot: "Spot", + typeChars: "至少输入 2 个字符。搜索滑板场地、滑板店和 Bitcoin 商户。", + typeCharsNear: "至少输入 2 个字符。搜索附近的滑板场地、滑板店和 Bitcoin 商户。", + }, + dateWindow: { + any: "任意", + anytime: "随时", + month: "本月", + monthShort: "月", + today: "今天", + todayShort: "今天", + week: "本周", + weekend: "周末", + weekendShort: "周末", + weekShort: "周", + }, + }, + marketUi: { + gearSwap: { + title: "Gear Swap", + subtitle: "与其他滑手买卖二手滑板装备", + listGear: "发布装备", + searchPlaceholder: "搜索装备...", + 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: "没有装备符合你当前的筛选条件。试试清除筛选或搜索其他内容。", + noneFirst: "成为第一个发布装备的人 —— Deck、Trucks、Wheels、鞋子,任何滑板相关!", + listYourGear: "发布你的装备", + faqLink: "有疑问?查看 FAQ →", + }, + hub: { + browse: "浏览", + selling: "出售中", + myTrades: "我的交易", + reputation: "声誉", + loginListings: "登录以管理你的商品。", + loginReputation: "登录以查看你的声誉和评价。", + }, + marketplace: { + heroTitle: "店铺与 Marketplace", + heroBefore: "我们的 Marketplace 由", + heroAfter: " 提供支持 - Nostr 上的去中心化 Marketplace。滑板店可以上架商品,你可以直接用 Bitcoin 买卖二手装备。", + whatIsTitle: "什么是 Plebeian Market?", + whatIsBody: "Plebeian Market 是建立在 Nostr 上的去中心化 Marketplace。用 Bitcoin 直接与其他滑手买卖滑板装备。没有中间商,没有费用,完全自由。", + noFeesTitle: "无费用", + noFeesBody: "没有平台抽成 30%。直接的点对点交易。", + bitcoinTitle: "Bitcoin 支付", + bitcoinBody: "用 Bitcoin 支付。快速、安全、全球化。", + decentralizedTitle: "去中心化", + decentralizedBody: "建立在 Nostr 上。没有公司控制它。", + visit: "访问 Plebeian Market", + buySellTitle: "你可以买卖什么", + catCompletes: "整板", + preBuilt: "组装完成的整板", + customSetups: "自定义配置", + beginnerBoards: "新手板", + catParts: "板面配件", + decks: "Decks", + 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,浏览来自世界各地店铺和个人的滑板装备。", + step2Title: "联系卖家", + step2Body: "通过 Nostr 直接给卖家发消息。协商价格、咨询问题、安排发货。", + step3Title: "用 Bitcoin 支付", + step3Body: "使用 Bitcoin Lightning 完成购买,即时、低手续费。", + step4Title: "留下反馈", + step4Body: "评价你的体验,在 Nostr 上建立卖家声誉。你的评价会帮助社区。", + needBitcoinTitle: "需要 Bitcoin?", + needBitcoinBefore: "你需要一个带一些 sats 的 Lightning 钱包来购物。查看", + onboardingGuide: "入门指南", + needBitcoinAfter: "了解钱包推荐。", + ownShopTitle: "拥有滑板店?", + ownShopBody: "在 SkateSpots 上列出你的店铺,并在 Plebeian Market 上销售产品。以零平台费用触达全球顾客。", + addShop: "添加你的店铺", + startSelling: "开始出售", + }, + listingDetail: { + notFound: "未找到商品", + notFoundBody: "它可能已被删除,或链接有误。", + backToGearSwap: "返回 Gear Swap", + gearSwap: "Gear Swap", + viewPhoto: "查看照片 {{n}}", + photoAlt: "{{title}} —— 照片 {{n}}", + wantToBuy: "求购", + 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: "出售装备时至少需要一张照片", + nip05Required: "需要 NIP-05 验证", + nip05RequiredBody: "你需要一个经过验证的 Nostr 地址才能发布装备", + priceRequired: "固定价格商品需要价格", + sizeRequired: "需要尺寸", + sizeRequiredBody: "请为 {{category}} 选择一个尺寸", + conditionRequired: "需要成色", + conditionRequiredBody: "请选择你的 {{category}} 的成色", + wtbPosted: "求购已发布!", + wtbPostedBody: "卖家将能找到你的求购。", + listingCreated: "商品已创建!", + listingCreatedBody: "你的装备现已上架。", + publishFailed: "发布失败", + loginRequired: "需要登录", + loginRequiredBody: "你需要登录才能发布装备。", + backToStash: "返回 Stash", + backToSpot: "返回 {{title}}", + backToMarketplace: "返回 Marketplace", + backToMap: "返回地图", + wantToBuy: "求购", + listYourGear: "发布你的装备", + wtbSubtitle: "告诉社区你在找什么装备", + sellSubtitle: "向社区出售滑板装备", + fromStashTitle: "从你的 Stash 发布", + fromStashBody: "已预填你的 Stash 物品详情。检查并选择一个见面地点!", + nip05Banner: "为防止垃圾信息并保护买家,你需要一个经过验证的 Nostr 地址(NIP-05)才能发布装备。", + verifiedLabel: "已验证:", + checkingTrust: "正在检查你的信任级别...", + trustLevel: "信任级别:", + trusted: "已信任", + active: "活跃", + newcomer: "新成员", + newUser: "新用户", + remaining: "本月还可发布 {{remaining}} / {{limit}} 个商品", + cooldownBody: "新用户发布商品之间有 24 小时冷却时间。", + timeRemaining: "剩余时间:{{time}}", + monthlyLimitTitle: "已达每月上限", + monthlyLimitBody: "你本月已达到 {{limit}} 个商品的上限。通过创建场地或完成销售来建立声誉以提高上限。", + powAccepted: "工作量证明已接受!", + feePaid: "付费成功!", + canCreateNow: "你现在可以创建商品了。", + whatDoTitle: "你想做什么?", + sellGear: "出售装备", + categoryTitle: "类别 *", + categoryHint: "哪种类型的装备?", + detailsTitle: "装备详情", + 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: "关联到一个滑板场地,方便见面", + searchSpots: "搜索场地...", + noSpotsFound: "没有找到场地。试试其他搜索。", + availabilityLabel: "你通常什么时候有空?", + availabilityPlaceholder: "周末 10am-2pm,周二/周四晚上", + availabilityHint: "帮助买家与你协调见面", + durationTitle: "商品时长", + durationHint: "这个商品应该保持生效多久?", + publishing: "发布中...", + checkingEligibility: "正在检查资格...", + cooldownButton: "冷却中:{{time}}", + limitReachedButton: "已达上限", + payFeeButton: "付费以继续", + postWtbButton: "发布求购", + listForSaleButton: "发布装备出售", + }, + trades: { + title: "我的交易", + loginBody: "登录以管理你的 Marketplace 交易和声誉。", + subtitle: "确认、请求,以及它们建立的声誉。付款由另一位滑手协商 —— 应用只记录交易。", + 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}}”。它将对所有人隐藏,并向 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}}”。建议一个见面的时间和地点 —— 我很乐意在公共滑板场地见面。", + orMeetAt: "或在附近的公共场地见面:", + spotDm: "你好!我想买“{{title}}”。想在 {{spot}} 见面吗?{{url}}", + shareDelivery: "分享配送详情", + deliveryDm: "你好!我想买“{{title}}”。以下是我的配送详情:\n\n姓名:\n地址:\n\n(只分享快递员需要的信息。)", + useLocker: "使用自提柜 / 包裹点", + lockerDm: "你好!我想买“{{title}}”。我们可以使用包裹柜 / 包裹点而不是家庭住址吗?", + noteBefore: "这些详情只保留在私聊中 —— SkateSpots 永远看不到它们。对于邮寄交易,优先使用", + escrow: "escrow", + noteMiddle: ",并且", + neverPay: "绝不在应用的渠道之外付款", + 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: "请使用二维码或发票手动支付", + invoiceCopied: "发票已复制!", + copyFailed: "复制失败", + received: "已收到付款!", + receivedBody: "你的 {{amount}} sat 费用已支付。你现在可以创建商品了。", + title: "一次性商品发布费", + subtitle: "作为新成员,首次发布商品需要支付一小笔费用。", + whyTitle: "我为什么需要付费?", + spamLabel: "防垃圾:", + spamBody: "此费用阻止机器人和骗子用虚假商品淹没 Marketplace。", + trustLabel: "建立信任:", + trustBody: "新账号在发布前需要证明投入。几次成功发布后,此费用即被免除。", + supportsLabel: "支持社区:", + supportsPrefix: "费用归", + supportsSpotOwner: " —— 创建此场地的人!", + supportsPlatform: " —— 帮助维持 SkateSpots 运行。", + oneTimeFee: "约 ${{usd}} USD • 一次性费用", + payToContinue: "支付 {{amount}} sats 以继续", + proveWork: "改做工作量证明 —— 免费", + proveWorkBody: "花几秒钟的 CPU 而不是 {{amount}} sats。不花钱、不需要钱包 —— 是防垃圾税,不是付款。", + generating: "正在生成发票...", + processing: "正在处理付款...", + qrAlt: "付款二维码", + copyInvoice: "复制发票", + openWallet: "打开钱包", + payWithWallet: "用已连接的钱包支付", + scanHint: "用 Lightning 钱包扫描二维码,或使用上方按钮", + skipTitle: "以后如何免除此费用:", + skip1: "在地图上添加一个滑板场地", + 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 Decks", + aria: "10 分中的 {{n}} 分", + }, + clink: { + tip: "用 Bitcoin 打赏", + copiedBody: "CLINK 代码已复制到剪贴板。", + copyFailed: "复制失败", + copyFailedBody: "无法访问剪贴板。", + whatIs: "什么是 CLINK?", + tooltipTitle: "通过 Nostr 直接用 Bitcoin 支付", + tooltipBody: "CLINK 是一种自托管的付款代码 —— 无需应用账号,无中间人。用兼容的 Lightning 钱包扫描它,打赏会直接到他们那里。", + descRecipient: "向 {{recipientName}} 发送一笔自托管 Bitcoin(Lightning)付款 —— 无中间人。", + descGeneric: "通过 Nostr 发送一笔自托管 Bitcoin(Lightning)付款 —— 无中间人。", + qrAlt: "CLINK Offer 二维码", + copyCode: "复制 CLINK 代码", + openWallet: "在 CLINK 钱包中打开", + copyToWallet: "复制代码到你的钱包", + priceFixed: "固定 —— {{amount}} sats", + priceFixedShort: "固定价格", + priceVariable: "可变价格", + priceVariableCurrency: "以 {{currency}} 计价", + priceSpontaneous: "金额由你决定", + footnote: "用兼容 CLINK 的钱包(例如 ShockWallet)扫描。如果没有打开,请复制上方代码 —— 你可能没有安装兼容 CLINK 的钱包。无托管方、无 Web 服务器:发票直接通过 Nostr 请求。", + }, + paymentReadiness: { + ready: "你可以收款", + notReady: "设置付款以便收款", + readyBefore: "你的 Lightning 地址", + readyAfter: "已在你的资料上 —— 人们可以直接 zap 和付款给你。", + silentSet: "还设置了 Bitcoin Silent Payment 地址。", + notReadyBefore: "在你的", + nostrProfile: "Nostr 资料", + notReadyAfter: "中添加一个 Lightning 地址(以及可选的 Bitcoin Silent Payment 地址),这样滑手就能付款给你。设置一次即可在你这里的所有资料中生效。", + }, + 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 付款 —— 无 Web 服务器或托管方。", + learnSpecs: "了解规范", + }, + escrowPanel: { + escrowed: "已托管 {{amount}} sats", + mint: "Mint", + refundSinceBefore: "买家可退款自", + redeemBefore: "卖家现在可兑取 · 买家可退款自", + noExpiry: "此代币未设置到期时间。", + }, + escrowRequest: { + enterAmount: "输入 escrow 金额", + minLock: "至少锁定 {{days}} 天", + requestNote: "为我们的交易托管了 {{amount}} sats —— 请确认销售。", + created: "Escrow 已创建 🎉", + createdBody: "{{amount}} sats 已锁定 {{days}} 天。{{sellerName}} 可在交付后兑取。", + createFailed: "无法创建 escrow", + somethingWrong: "出了点问题。", + title: "为此交易托管", + description: "资金锁定给 {{sellerName}},如果交易在截止日期后失败,你可退款。需要连接 Lightning 钱包。", + amountLabel: "金额(sats)", + daysLabel: "买家退款于(天)", + daysHint: "若卖家未交付,经过这么多天后你可以取回资金。", + nativeOnly: "Cashu escrow 仅在 SkateSpots 应用中可用(网页版不可用)。", + lockAndRequest: "锁定并请求", + }, + }, + labOptions: { + coach: { + skill: { + basics: "基础", + ollies: "Ollies", + kickflips: "Kickflips", + grinds: "Grinds & Slides", + manuals: "Manuals", + inverts: "Inverts", + vert: "Vert/Ramp", + bowl: "Bowl", + street: "街式", + 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: "半管、四分之一管、drop-in", + bowl: "Bowl 切滑、pumping、线路", + street: "街式障碍和创意", + freestyle: "平地花式技巧与流畅度", + safety: "如何摔倒、护具、伤害预防", + diy: "建造坡道、Rails、Ledges 和其他滑板障碍", + }, + }, + filmer: { + service: { + miniclips: "迷你片段", + longparts: "长视频片段", + koth: "King of the Road 风格", + documentaries: "纪录片", + contests: "比赛拍摄", + raw: "原始素材", + followlines: "跟拍 / 线路拍摄", + lines: "线路与 B-Roll 拍摄", + }, + serviceDesc: { + miniclips: "15-60 秒的社交媒体片段", + longparts: "3-10 分钟带音乐的完整视频片段", + koth: "冒险/挑战风格的滑板视频", + documentaries: "滑板文化和故事驱动的影片", + contests: "专业比赛和赛事报道", + raw: "未剪辑的多角度素材", + followlines: "用于线路的鱼眼跟拍", + lines: "长焦线路和电影感 B-Roll", + }, + skill: { + vx1000: "VX1000", + hvx: "HVX / HPX", + cinema: "电影摄影机", + dslr: "DSLR / 无反", + actioncam: "GoPro / 运动相机", + phone: "手机拍摄", + drone: "无人机 / 航拍", + gimbal: "云台 / 稳定器", + fisheye: "鱼眼镜头", + longlens: "长焦镜头", + "4k": "4K / 高帧率", + editing: "视频剪辑", + color: "调色", + }, + skillDesc: { + vx1000: "经典的 VX1000 滑板美学", + hvx: "Panasonic HVX/HPX 标清 / 高清质感", + cinema: "电影摄影机(FX3、C 系列、RED、BMPCC)", + dslr: "高质量 DSLR 或无反相机", + actioncam: "GoPro / 运动相机第一视角和支架", + phone: "用现代智能手机拍摄", + drone: "航拍和无人机素材", + 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: "为品牌和店铺制作的宣传内容", + 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 故障、超 8、复古胶片质感", + "4k": "高分辨率 RAW/LOG 摄影机工作流", + sound: "音乐同步、音效、音频母带", + }, + }, + photo: { + service: { + action: "动作 / 技巧抓拍", + sequence: "连拍", + portraits: "人像", + editorial: "编辑 / 杂志", + product: "产品 / 店铺摄影", + events: "活动报道", + lifestyle: "生活方式 / 纪录", + prints: "冲印与 Zine", + }, + serviceDesc: { + action: "技巧和线路的巅峰动作照片", + sequence: "多帧技巧连拍", + portraits: "滑手人像和团队照", + editorial: "可直接上杂志的编辑跨页", + product: "Deck、装备和店铺产品摄影", + 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: "云台", + bag: "移动装备 / 摄影包", + laptop: "现场联机拍摄", + }, + style: { + flashfisheye: "闪光鱼眼", + natural: "自然光", + bw: "黑白", + film: "胶片美学", + longlens: "长焦", + studio: "影棚 / 布光", + street: "街拍 / 纪录", + }, + }, + builder: { + service: { + diy: "DIY 场地", + concrete: "混凝土滑板公园", + wood: "木质坡道", + bowls: "Bowl 与泳池", + transitions: "过渡与四分之一管", + rails: "Rails 与 Ledges", + boxes: "Manny Pads 与 Boxes", + minis: "迷你坡道", + pumptrack: "Pump Track", + foam: "海绵池 / 室内", + repairs: "维修与翻新", + design: "设计与咨询", + }, + serviceDesc: { + diy: "社区 DIY 场地和游击建造", + concrete: "浇筑混凝土滑板公园和设施", + wood: "木质坡道、起跳台和障碍", + bowls: "Bowl、泳池和深过渡", + transitions: "四分之一管、斜面和过渡", + rails: "钢制 Rails、Ledges 和滑行设施", + boxes: "Manny Pads、funbox 和街式设施", + minis: "迷你坡道和庭院配置", + pumptrack: "Pump Track 和流畅线路", + foam: "海绵池、resi 和室内训练设施", + repairs: "修复、修补和翻新现有场地", + design: "方案、图纸和建造咨询", + }, + skill: { + concretework: "混凝土 / 喷射混凝土", + welding: "焊接 / 钢构", + carpentry: "木工 / 木作", + formwork: "模板与钢筋", + masonry: "砌筑 / 砌块", + coping: "Coping(泳池 / 钢)", + surfacing: "Skatelite / 面层", + earthworks: "土方 / 挖掘", + }, + scale: { + backyard: "庭院 / 迷你", + diycommunity: "社区 DIY", + publicpark: "完整公共滑板公园", + indoor: "室内场馆", + event: "活动 / 比赛场地", + }, + }, + artist: { + service: { + boardart: "板面图案", + logos: "Logo 与品牌", + posters: "海报与传单", + merch: "周边与服饰", + zines: "Zine 与印刷", + illustration: "插画", + stickers: "贴纸与贴花", + webdesign: "网页 / 数字", + typography: "字体 / 手写", + animation: "动画 / 动态", + }, + serviceDesc: { + boardart: "Deck 图案和 Griptape 艺术", + logos: "品牌识别、Logo 和字标", + posters: "活动海报、传单和演出视觉", + merch: "T 恤、连帽衫和服饰图案", + zines: "Zine、编辑和印刷排版", + illustration: "定制插画和角色创作", + stickers: "贴纸包、贴花和 slaps", + 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: "Handstyles / Tags", + "3dstyle": "3D 风格", + abstract: "抽象", + }, + styleDesc: { + throwups: "快速双色填涂", + pieces: "全彩 Pieces 和 Burners", + murals: "大型壁画和作品", + characters: "角色和人物创作", + lettering: "Wildstyle 和字母结构", + stencil: "模板和街头艺术", + handstyles: "Tags 和手写风格", + "3dstyle": "3D 和变形字体", + abstract: "抽象和自由风格", + }, + medium: { + spray: "喷漆罐", + rollers: "滚筒 / 乳胶漆", + markers: "马克笔 / 墨水", + brush: "画笔 / 颜料", + digital: "数字 / Procreate", + }, + context: { + legalwalls: "合法墙", + commissions: "委托", + liveart: "现场绘画", + skateparks: "滑板公园壁画", + interiors: "室内 / 店铺", + workshops: "工作坊", + }, + }, + tattoo: { + style: { + traditional: "传统 / Old School", + neotraditional: "新传统", + fineline: "细线", + blackwork: "Blackwork", + realism: "写实", + lettering: "字体 / 手写体", + illustrative: "插画风", + skateflash: "滑板 Flash", + ignorant: "Ignorant / Handpoke 风格", + japanese: "日式 / Irezumi", + }, + styleDesc: { + traditional: "粗线条、经典美式", + neotraditional: "带现代细节的传统风", + fineline: "精致的单针作品", + blackwork: "纯黑和图案", + realism: "照片写实和人像", + lettering: "手写体、字体和语录", + illustrative: "插画和图形", + skateflash: "滑板文化 Flash 设计", + ignorant: "Ignorant / 朴素 Handpoke 风格", + japanese: "日本传统 / irezumi", + }, + method: { + machine: "纹身机", + handpoke: "Hand-Poke / Stick & Poke", + 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: "朋克", + hardcore: "硬核", + metal: "金属", + rock: "摇滚", + indie: "独立 / 另类", + hiphop: "嘻哈 / 说唱", + electronic: "电子", + lofi: "Lo-Fi / 节拍", + reggae: "雷鬼 / Dub", + ska: "Ska", + jazz: "爵士", + funk: "Funk / 灵魂", + flamenco: "弗拉门戈", + folk: "民谣 / 原声", + 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: "比赛 / Comp", + street_league: "Street League 风格", + bowl: "Bowl / Vert", + mini_ramp: "迷你坡道", + park: "公园", + street: "街式", + freestyle: "自由式", + world_tour: "World Destruction Tour", + am_series: "Am Series / 资格赛", + 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: "街式 Jam", + best_trick: "Best Trick", + game_of_skate: "Game of S.K.A.T.E.", + contest: "比赛 / Comp", + bowl: "Bowl / Vert", + mini_ramp: "迷你坡道", + park: "公园场次", + demo: "职业表演", + clinic: "教学 / 工作坊", + meetup: "聚会 / 刷街", + downhill: "速降 / 竞速", + slalom: "障碍滑雪", + kids: "儿童 / 青少年", + charity: "慈善 / 募捐", + tour_stop: "巡回站", + premiere: "视频首映", + market: "市集 / 艺术展", + }, + service: { + organizing: "全程组织", + hosting: "主持 / MC", + permits: "许可与市政", + sponsorship: "赞助 / 品牌合作", + promotion: "推广与营销", + livestream: "直播 / 报道", + sound: "音响与音乐", + ramps: "坡道与障碍", + safety: "安全与急救", + vendors: "餐饮与摊位", + media: "照片 / 视频报道", + registration: "报名与对阵表", + }, + scale: { + grassroots: "草根", + local: "本地", + regional: "区域", + national: "全国", + international: "国际", + pro: "职业巡回", + }, + }, + barber: { + service: { + haircut: "剪发", + fade: "Fade", + beard: "修胡", + lineup: "Line-up / Shape-up", + colour: "染色", + kids: "儿童剪发", + }, + serviceDesc: { + haircut: "经典剪法 —— 电推剪和剪刀。", + fade: "渐变 Fade —— 低、中或高。", + beard: "修剪、塑形和整理胡须。", + lineup: "修整发际线和颈部的干净边缘。", + colour: "染色、漂发、上色和调色。", + kids: "为年轻滑手耐心剪发。", + }, + style: { + skin_fade: "Skin Fade", + taper: "Taper", + buzz: "寸头", + mohawk: "莫霍克", + mullet: "鲻鱼头", + curly: "卷发 / 爆炸头", + long: "长发 / 层次", + classic: "经典剪刀剪", + }, + setting: { + shop: "店铺 / 理发店", + mobile: "上门 / 到府", + event: "滑板活动和比赛", + }, + }, + tour: { + skill: { + beginner: { + label: "初学者", + description: "刚开始滑板或只会基础技巧", + }, + intermediate: { + label: "中级", + description: "熟悉大多数地形", + }, + advanced: { + label: "高级", + description: "经验丰富的滑手,挑战凶险场地", + }, + all: { + label: "所有水平", + description: "适合所有人", + }, + }, + }, + }, +}; export default zhCNBatch6; diff --git a/src/i18n/zh-CN/batch7.ts b/src/i18n/zh-CN/batch7.ts index 616fc0c..8baab76 100644 --- a/src/i18n/zh-CN/batch7.ts +++ b/src/i18n/zh-CN/batch7.ts @@ -1,4 +1,908 @@ -/** zh-CN — batch 7. Filled by the translation pass; empty until then. */ -const zhCNBatch7 = {}; +/** zh-CN — batch 7. */ +export const zhCNBatch7 = { + 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 签名器应用。点击下方按钮打开 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: '通过扫描验证——无需应用或账户即可查验。', + 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: '重新加载应用', + 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 社区的每周推送。应用更新、新 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: '应用 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: '无法打开相机。请在“设置”中检查应用权限。', + 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 zhCNBatch7; diff --git a/src/i18n/zh-CN/batch8.ts b/src/i18n/zh-CN/batch8.ts index 229629a..4edd06c 100644 --- a/src/i18n/zh-CN/batch8.ts +++ b/src/i18n/zh-CN/batch8.ts @@ -1,4 +1,631 @@ -/** zh-CN — batch 8. Filled by the translation pass; empty until then. */ -const zhCNBatch8 = {}; +/** + * Simplified Chinese (简体中文) — 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 zhCNBatch8 = { + 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 zhCNBatch8; diff --git a/src/pages/CreateTourPage.tsx b/src/pages/CreateTourPage.tsx index 0c73eb6..a87c508 100644 --- a/src/pages/CreateTourPage.tsx +++ b/src/pages/CreateTourPage.tsx @@ -36,6 +36,7 @@ const COMMON_LANGUAGES = [ { code: 'de', label: 'German', flag: '🇩🇪' }, { code: 'it', label: 'Italian', flag: '🇮🇹' }, { code: 'ja', label: 'Japanese', flag: '🇯🇵' }, + { code: 'zh-CN', label: 'Chinese (Simplified)', flag: '🇨🇳' }, { code: 'zh', label: 'Chinese', flag: '🇨🇳' }, ];