most-box 0.3.5 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/out/about/index.html +2 -2
  2. package/out/admin/index.html +0 -0
  3. package/out/app/index.html +0 -0
  4. package/out/assets/{AccountMenu-D-wa5tux.js → AccountMenu-B26qus-Q.js} +1 -1
  5. package/out/assets/{AppShell-BdRKZIZ9.js → AppShell-BiYQsNO8.js} +1 -1
  6. package/out/assets/{AppTop-BE5kKBYH.js → AppTop-D-qYC0ep.js} +1 -1
  7. package/out/assets/ChatRestoringIndicator-CLV78gNW.js +1 -0
  8. package/out/assets/{CopyButton-DnFqfCN9.js → CopyButton-BrEkzqEq.js} +1 -1
  9. package/out/assets/{MarketingHeader-8gNzHawY.js → MarketingHeader-CJXpogPY.js} +1 -1
  10. package/out/assets/{MarketingLayout-BPdjpEfc.js → MarketingLayout-Ch4sw5Qm.js} +1 -1
  11. package/out/assets/{MilkdownEditor-C388llV6.js → MilkdownEditor-DfhuT9eU.js} +1 -1
  12. package/out/assets/{OpenSidebarButton-OP8zl7ad.js → OpenSidebarButton-Bvwr7B6k.js} +1 -1
  13. package/out/assets/{chatJoinInvite-CeC6H6t8.js → chatJoinInvite-7tuD-STm.js} +1 -1
  14. package/out/assets/i18n-DKsg67mH.js +1 -0
  15. package/out/assets/index-FEwag7ej.css +1 -0
  16. package/out/assets/{index-D1mozno-.js → index-mjFWLwue.js} +3 -3
  17. package/out/assets/{index.lazy-B1iJsXQ8.js → index.lazy-8GSHLIGt.js} +1 -1
  18. package/out/assets/{index.lazy-CX2l1_Gi.js → index.lazy-B3jH9yBA.js} +1 -1
  19. package/out/assets/index.lazy-B5JMiv3z.js +1 -0
  20. package/out/assets/{index.lazy-CVFcovqX.js → index.lazy-BAr7-dhf.js} +1 -1
  21. package/out/assets/index.lazy-BMFwyE_Z.js +3 -0
  22. package/out/assets/{index.lazy-Bz77Jlzu.js → index.lazy-BbA_1LnY.js} +1 -1
  23. package/out/assets/{index.lazy-m9XAzMt1.js → index.lazy-BmpOpQqg.js} +1 -1
  24. package/out/assets/{index.lazy-FvXAYdEO.js → index.lazy-CB3C6kMj.js} +1 -1
  25. package/out/assets/{index.lazy-ClrSkRx5.js → index.lazy-CVOAOO0_.js} +1 -1
  26. package/out/assets/{index.lazy-CflWbocP.js → index.lazy-CyFSwJuo.js} +1 -1
  27. package/out/assets/{index.lazy-DzaN9qwA.js → index.lazy-D3iEq2ZW.js} +2 -2
  28. package/out/assets/{index.lazy-CsTaY5WS.js → index.lazy-F3iHN_Ao.js} +1 -1
  29. package/out/assets/{index.lazy-D7E1pb1S.js → index.lazy-PnZR3z1V.js} +1 -1
  30. package/out/assets/{index.lazy-59kmyNMW.js → index.lazy-qDpRLqXu.js} +1 -1
  31. package/out/assets/{index.lazy-C_J9afOY.js → index.lazy-s6Ok77GI.js} +1 -1
  32. package/out/assets/{saveLocalFile-2CNt4X0T.js → saveLocalFile-BLTn3Z18.js} +1 -1
  33. package/out/assets/useChannelMessages-DKlO_2oW.js +4 -0
  34. package/out/assets/{useGameRoom-asr2gyY6.js → useGameRoom-DLN636mz.js} +1 -1
  35. package/out/chat/index.html +0 -0
  36. package/out/chat/join/demo/index.html +0 -0
  37. package/out/chat/join/index.html +0 -0
  38. package/out/download/index.html +2 -2
  39. package/out/game/gandengyan/index.html +0 -0
  40. package/out/game/index.html +0 -0
  41. package/out/game/zhajinhua/index.html +0 -0
  42. package/out/index.html +2 -2
  43. package/out/note/index.html +0 -0
  44. package/out/ping/index.html +2 -2
  45. package/out/profile/index.html +0 -0
  46. package/out/web3/index.html +0 -0
  47. package/package.json +1 -1
  48. package/server/src/index.js +191 -76
  49. package/out/assets/i18n-C6yaqRst.js +0 -1
  50. package/out/assets/index-C6IjeTBh.css +0 -1
  51. package/out/assets/index.lazy-CazlK1-Y.js +0 -3
  52. package/out/assets/index.lazy-JwrS2vDI.js +0 -1
  53. package/out/assets/useChannelMessages-DDBqKBXU.js +0 -4
@@ -1 +1 @@
1
- import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{B as t}from"./useAppStore-DNhyhD20.js";import{a as n}from"./i18n-C6yaqRst.js";import{n as r}from"./AppShell-BdRKZIZ9.js";var i=t(`panel-left-open`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`m14 9 3 3-3 3`,key:`8010ee`}]]),a=e();function o({label:e,className:t=``,variant:o=`primary`}){let{isSidebarVisible:s,openSidebar:c}=r(),{t:l}=n(),u=o===`primary`?`btn-primary`:``,d=e||l(`appShell.openSidebar`);return s?null:(0,a.jsxs)(`button`,{type:`button`,className:`btn ${u} sidebar-open-hint ${t}`.trim(),onClick:c,children:[(0,a.jsx)(i,{size:16}),d]})}export{o as t};
1
+ import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{B as t}from"./useAppStore-DNhyhD20.js";import{a as n}from"./i18n-DKsg67mH.js";import{n as r}from"./AppShell-BiYQsNO8.js";var i=t(`panel-left-open`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`m14 9 3 3-3 3`,key:`8010ee`}]]),a=e();function o({label:e,className:t=``,variant:o=`primary`}){let{isSidebarVisible:s,openSidebar:c}=r(),{t:l}=n(),u=o===`primary`?`btn-primary`:``,d=e||l(`appShell.openSidebar`);return s?null:(0,a.jsxs)(`button`,{type:`button`,className:`btn ${u} sidebar-open-hint ${t}`.trim(),onClick:c,children:[(0,a.jsx)(i,{size:16}),d]})}export{o as t};
@@ -1 +1 @@
1
- import{n as e}from"./i18n-C6yaqRst.js";var t=`0x955fe80bdb8312165471fcacd6a8f83df88a770dda6f38657ca4e62ec28d5b54`,n=`https://api.most.box`;function r(t){let n=typeof t==`string`?t.trim():t;return e(n)?n:void 0}function i(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function a(e){try{return JSON.parse(e)}catch{return null}}function o(e){return typeof e==`string`?a(e):e}function s(e){return typeof e==`string`?e.trim():``}function c(e){return s(e)===`sparkbit`?`sparkbit`:void 0}function l(e){let t=s(e);return t===`dark`||t===`light`?t:void 0}function u(e){let t=o(e);if(!i(t))return null;let n=s(t.uid),a=(Array.isArray(t.channels)?t.channels:[]).filter(i).map(e=>({id:s(e.id),name:s(e.name)||void 0})).filter(e=>e.id);return!n||a.length===0?null:{node_url:s(t.node_url)||void 0,node_invite:s(t.node_invite)||void 0,locale:r(t.locale),uid:n,theme:c(t.theme),appearance:l(t.appearance),logo:s(t.logo)||void 0,logo_dark:s(t.logo_dark)||void 0,data:s(t.data)||void 0,avatar:s(t.avatar)||void 0,name:s(t.name)||void 0,channels:a}}export{t as n,u as r,n as t};
1
+ import{n as e}from"./i18n-DKsg67mH.js";var t=`0x955fe80bdb8312165471fcacd6a8f83df88a770dda6f38657ca4e62ec28d5b54`,n=`https://api.most.box`;function r(t){let n=typeof t==`string`?t.trim():t;return e(n)?n:void 0}function i(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function a(e){try{return JSON.parse(e)}catch{return null}}function o(e){return typeof e==`string`?a(e):e}function s(e){return typeof e==`string`?e.trim():``}function c(e){return s(e)===`sparkbit`?`sparkbit`:void 0}function l(e){let t=s(e);return t===`dark`||t===`light`?t:void 0}function u(e){let t=o(e);if(!i(t))return null;let n=s(t.uid),a=(Array.isArray(t.channels)?t.channels:[]).filter(i).map(e=>({id:s(e.id),name:s(e.name)||void 0})).filter(e=>e.id);return!n||a.length===0?null:{node_url:s(t.node_url)||void 0,node_invite:s(t.node_invite)||void 0,locale:r(t.locale),uid:n,theme:c(t.theme),appearance:l(t.appearance),logo:s(t.logo)||void 0,logo_dark:s(t.logo_dark)||void 0,data:s(t.data)||void 0,avatar:s(t.avatar)||void 0,name:s(t.name)||void 0,channels:a}}export{t as n,u as r,n as t};
@@ -0,0 +1 @@
1
+ import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";var r=t(e(),1),i={"about.meta.title":`关于 MOST PEOPLE`,"about.meta.desc":`MOST PEOPLE 是完全开源、以聊天为基础的 P2P 工具箱,包含文件分享、知识库、多人语音、游戏房间和可复用账户系统。`,"about.hero.kicker":`去中心化 P2P 工具箱`,"about.hero.title":`关于 MOST PEOPLE`,"about.hero.desc":`MOST PEOPLE 以聊天为基础展开:邀请大家在房间里发消息、开多人语音、分享 most:// 文件、沉淀知识库和进入游戏。`,"about.link.example":`most://<cid>?filename=...`,"about.summary.cid":`CID 类似磁力链接/BT 种子的内容指纹:链接指向内容,下载后再校验是不是同一份文件。`,"about.summary.seed":`发布者和下载者都能做种,只要仍有人在线,文件就能继续传播。`,"about.summary.toolbox":`聊天是主入口,文件、知识库、游戏和工具箱都从对话里展开。`,"about.summary.opensource":`MOST PEOPLE 完全开源,账户系统也欢迎其他项目接入。`,"about.section.identity.title":`CID 是内容指纹`,"about.section.identity.body":`可以把 most:// 理解成 MOST PEOPLE 的 P2P 分享链接,思路接近磁力链接和 BT 种子:先按内容找文件,再从在线种子下载并校验。`,"about.section.identity.bullet.filename":`文件名只负责展示,不能代替 CID。`,"about.section.identity.bullet.verify":`CID 校验通过后才保存为可信文件。`,"about.section.identity.bullet.local":`判断本地已有时必须能按 CID 读到内容。`,"about.section.spread.title":`在线的人共同传播`,"about.section.spread.body":`文件不是上传到一个中心服务器,而是在当前在线的完整副本之间传播。`,"about.section.spread.bullet.seedAfterDownload":`下载完成后默认成为新的种子。`,"about.section.spread.bullet.restart":`应用或 daemon 重启后会恢复做种记录。`,"about.section.spread.bullet.status":`本机能看到正在做种的 CID、大小和 join 状态。`,"about.section.boundary.title":`不是云盘,也不是存储市场`,"about.section.boundary.body":`MOST PEOPLE 不承诺永久保存或离线可用;文件能不能下载,取决于是否还有在线种子。`,"about.section.boundary.bullet.keepData":`重要数据仍需自己保存。`,"about.section.boundary.bullet.noMarket":`没有上链存储、订单、支付或质押流程。`,"about.section.boundary.bullet.availability":`可用性来自当前在线的人,而不是云端托管。`,"about.section.chat.title":`以聊天为基础`,"about.section.chat.body":`业务重点放在聊天:先建房间把人连起来,再从对话里展开文件、知识库、游戏和协作。`,"about.section.chat.bullet.room":`房间适合私域聊天和小团队沟通。`,"about.section.chat.bullet.voice":`支持多人语音通话。`,"about.section.chat.bullet.attachments":`文件附件会自然接入 most:// 分享流程。`,"about.section.note.title":`知识库`,"about.section.note.body":`把聊天里的重要信息、想法和附件线索整理成 Markdown 笔记,减少信息散落。`,"about.section.note.bullet.markdown":`支持 Markdown 块编辑。`,"about.section.note.bullet.fromChat":`聊天内容可以保存成笔记草稿。`,"about.section.note.bullet.backup":`按需备份和恢复,不把它当成永久云盘。`,"about.section.game.title":`游戏房间`,"about.section.game.body":`游戏复用同一套房间和频道系统,不需要单独理解另一套连接方式。`,"about.section.game.bullet.channel":`游戏事件通过公共 Channel 同步。`,"about.section.game.bullet.rooms":`房间链接可以发给朋友一起加入。`,"about.section.game.bullet.lightweight":`适合朋友间快速开局和测试玩法。`,"about.section.web3.title":`开源账户系统`,"about.section.web3.body":`MOST PEOPLE 账户使用这套本地身份系统:完全开源,可复用,也方便其他项目接入。`,"about.section.web3.bullet.accounts":`聊天、知识库和游戏身份共用这一套。`,"about.section.web3.bullet.integrate":`其他项目可用它做本地登录、签名和数据隔离。`,"about.section.web3.bullet.export":`支持密钥、地址和助记词导出。`,"about.section.web3.bullet.separate":`它不参与文件下载、校验或做种主流程。`,"about.cta.chat":`进入聊天`,"about.cta.download":`下载客户端`},a={"about.meta.title":`關於 MOST PEOPLE`,"about.meta.desc":`MOST PEOPLE 是完全開源、以聊天為基礎的 P2P 工具箱,包含檔案分享、知識庫、多人語音、遊戲房間和可複用帳戶系統。`,"about.hero.kicker":`去中心化 P2P 工具箱`,"about.hero.title":`關於 MOST PEOPLE`,"about.hero.desc":`MOST PEOPLE 以聊天為基礎展開:邀請大家在房間裡發訊息、開多人語音、分享 most:// 檔案、沉澱知識庫和進入遊戲。`,"about.link.example":`most://<cid>?filename=...`,"about.summary.cid":`CID 類似磁力連結/BT 種子的內容指紋:連結指向內容,下載後再校驗是不是同一份檔案。`,"about.summary.seed":`發布者和下載者都能做種,只要仍有人在線,檔案就能繼續傳播。`,"about.summary.toolbox":`聊天是主入口,檔案、知識庫、遊戲和工具箱都從對話裡展開。`,"about.summary.opensource":`MOST PEOPLE 完全開源,帳戶系統也歡迎其他項目接入。`,"about.section.identity.title":`CID 是內容指紋`,"about.section.identity.body":`可以把 most:// 理解成 MOST PEOPLE 的 P2P 分享連結,思路接近磁力連結和 BT 種子:先按內容找檔案,再從線上種子下載並校驗。`,"about.section.identity.bullet.filename":`檔名只負責展示,不能代替 CID。`,"about.section.identity.bullet.verify":`CID 校驗通過後才保存為可信檔案。`,"about.section.identity.bullet.local":`判斷本機已有時必須能按 CID 讀到內容。`,"about.section.spread.title":`線上的人共同傳播`,"about.section.spread.body":`檔案不是上傳到一個中心伺服器,而是在目前線上的完整副本之間傳播。`,"about.section.spread.bullet.seedAfterDownload":`下載完成後預設成為新的種子。`,"about.section.spread.bullet.restart":`應用或 daemon 重啟後會恢復做種記錄。`,"about.section.spread.bullet.status":`本機能看到正在做種的 CID、大小和 join 狀態。`,"about.section.boundary.title":`不是雲端硬碟,也不是儲存市場`,"about.section.boundary.body":`MOST PEOPLE 不承諾永久保存或離線可用;檔案能不能下載,取決於是否還有線上種子。`,"about.section.boundary.bullet.keepData":`重要資料仍需自己保存。`,"about.section.boundary.bullet.noMarket":`沒有上鏈儲存、訂單、支付或質押流程。`,"about.section.boundary.bullet.availability":`可用性來自目前線上的人,而不是雲端託管。`,"about.section.chat.title":`以聊天為基礎`,"about.section.chat.body":`業務重點放在聊天:先建房間把人連起來,再從對話裡展開檔案、知識庫、遊戲和協作。`,"about.section.chat.bullet.room":`房間適合私域聊天和小團隊溝通。`,"about.section.chat.bullet.voice":`支援多人語音通話。`,"about.section.chat.bullet.attachments":`檔案附件會自然接入 most:// 分享流程。`,"about.section.note.title":`知識庫`,"about.section.note.body":`把聊天裡的重要資訊、想法和附件線索整理成 Markdown 筆記,減少資訊散落。`,"about.section.note.bullet.markdown":`支援 Markdown 區塊編輯。`,"about.section.note.bullet.fromChat":`聊天內容可以保存成筆記草稿。`,"about.section.note.bullet.backup":`按需備份和恢復,不把它當成永久雲端硬碟。`,"about.section.game.title":`遊戲房間`,"about.section.game.body":`遊戲復用同一套房間和頻道系統,不需要單獨理解另一套連接方式。`,"about.section.game.bullet.channel":`遊戲事件透過公共 Channel 同步。`,"about.section.game.bullet.rooms":`房間連結可以發給朋友一起加入。`,"about.section.game.bullet.lightweight":`適合朋友間快速開局和測試玩法。`,"about.section.web3.title":`開源帳戶系統`,"about.section.web3.body":`MOST PEOPLE 帳戶使用這套本地身份系統:完全開源,可複用,也方便其他項目接入。`,"about.section.web3.bullet.accounts":`聊天、知識庫和遊戲身份共用這一套。`,"about.section.web3.bullet.integrate":`其他項目可用它做本地登入、簽名和資料隔離。`,"about.section.web3.bullet.export":`支援密鑰、地址和助記詞匯出。`,"about.section.web3.bullet.separate":`它不參與檔案下載、校驗或做種主流程。`,"about.cta.chat":`進入聊天`,"about.cta.download":`下載用戶端`},o={"about.meta.title":`About MOST PEOPLE`,"about.meta.desc":`MOST PEOPLE is a fully open source, chat-first P2P toolbox for file sharing, a Knowledge Base, multi-person voice, game rooms, and a reusable account system.`,"about.hero.kicker":`Decentralized P2P toolbox`,"about.hero.title":`About MOST PEOPLE`,"about.hero.desc":`MOST PEOPLE starts from chat: invite everyone into rooms for messages, voice calls, files, notes, games, and tools.`,"about.link.example":`most://<cid>?filename=...`,"about.summary.cid":`CID works like a content fingerprint for magnet links and BT torrents: the link points to content, then the download is verified.`,"about.summary.seed":`Publishers and downloaders can both seed, so files keep spreading while peers stay online.`,"about.summary.toolbox":`Chat is the entry point; files, Knowledge Base, games, and tools unfold from conversations.`,"about.summary.opensource":`MOST PEOPLE is fully open source, and its account system is meant for other projects to integrate.`,"about.section.identity.title":`CID is the content fingerprint`,"about.section.identity.body":`Think of most:// as MOST PEOPLE's P2P share link. It is close to magnet links and BT torrents: find content by identity, download from online seeders, then verify the CID.`,"about.section.identity.bullet.filename":`File names are for display; they do not replace the CID.`,"about.section.identity.bullet.verify":`A file is trusted only after CID verification passes.`,"about.section.identity.bullet.local":`Local availability must be proven by reading content by CID.`,"about.section.spread.title":`Online peers spread files together`,"about.section.spread.body":`Files are not uploaded to one central server; they move between online peers that hold complete copies.`,"about.section.spread.bullet.seedAfterDownload":`A completed download becomes a new seed by default.`,"about.section.spread.bullet.restart":`The app or daemon restores seeding records after restart.`,"about.section.spread.bullet.status":`You can see seeded CIDs, file sizes, and topic join status locally.`,"about.section.boundary.title":`Not cloud storage or a storage market`,"about.section.boundary.body":`MOST PEOPLE is not cloud storage and does not promise permanent or offline availability; downloads depend on online seeders.`,"about.section.boundary.bullet.keepData":`You still need to keep important data yourself.`,"about.section.boundary.bullet.noMarket":`There is no on-chain storage, order, payment, or staking flow.`,"about.section.boundary.bullet.availability":`Availability comes from online people, not hosted cloud storage.`,"about.section.chat.title":`Chat as the base`,"about.section.chat.body":`The product focus is chat: connect people in a room first, then bring files, notes, games, and collaboration into the conversation.`,"about.section.chat.bullet.room":`Rooms fit private chats and small-team conversations.`,"about.section.chat.bullet.voice":`Multi-person voice calls are supported.`,"about.section.chat.bullet.attachments":`File attachments naturally join the most:// sharing flow.`,"about.section.note.title":`Knowledge Base`,"about.section.note.body":`Turn important chat context, ideas, and attachment clues into Markdown notes so they do not scatter.`,"about.section.note.bullet.markdown":`Markdown block editing is supported.`,"about.section.note.bullet.fromChat":`Chat content can be saved as note drafts.`,"about.section.note.bullet.backup":`Backup and restore are available when needed, but it is not permanent cloud storage.`,"about.section.game.title":`Game rooms`,"about.section.game.body":`Games reuse the same room and channel system, so there is no second connection model to learn.`,"about.section.game.bullet.channel":`Game events sync through the shared Channel system.`,"about.section.game.bullet.rooms":`Room links can be sent to friends so they can join.`,"about.section.game.bullet.lightweight":`Good for quick friend games and testing table rules.`,"about.section.web3.title":`Open-source account system`,"about.section.web3.body":`MOST PEOPLE accounts use this local identity system: open source, reusable, and ready for other projects to integrate.`,"about.section.web3.bullet.accounts":`Chat, Knowledge Base, and game identities share it.`,"about.section.web3.bullet.integrate":`Other projects can use it for local login, signatures, and data separation.`,"about.section.web3.bullet.export":`Keys, addresses, and mnemonics can be exported.`,"about.section.web3.bullet.separate":`It does not participate in file download, verification, or seeding.`,"about.cta.chat":`Enter chat`,"about.cta.download":`Download client`},s={"common.brand":`MOST PEOPLE`,"common.cancel":`取消`,"common.confirm":`确认`,"common.processing":`处理中...`,"common.copy":`复制`,"common.download":`下载`,"common.close":`关闭`,"common.copied":`已复制`,"common.back":`上一页`,"common.backHome":`回首页`,"common.moreActions":`更多操作`,"common.appearance.toggle":`切换外观`,"common.locale.choose":`选择语言`,"common.status.checking":`检测中`,"common.status.connected":`已连接`,"common.status.needsConnection":`需连接`,"common.status.ready":`已就绪`,"nav.downloadClient":`下载客户端`,"nav.profile":`个人资料`,"nav.displayNamePlaceholder":`输入显示名称`,"nav.avatarUrlPlaceholder":`输入头像 URL`,"nav.avatarUrlInvalid":`请输入 http 或 https 头像 URL`,"footer.about":`关于`,"footer.network":`网络`,"errorBoundary.title":`出错了`,"errorBoundary.desc":`发生了意外错误,请尝试重新加载页面`,"errorBoundary.reload":`重新加载`,"notFound.title":`页面未找到`,"notFound.desc":`你访问的页面似乎已经迷失在 P2P 网络中了`,"appShell.openMenu":`打开菜单`,"appShell.expandSidebar":`展开侧边栏`,"appShell.collapseSidebar":`收起侧边栏`,"appShell.openSidebar":`打开侧边栏`},c={"common.brand":`MOST PEOPLE`,"common.cancel":`取消`,"common.confirm":`確認`,"common.processing":`處理中...`,"common.copy":`複製`,"common.download":`下載`,"common.close":`關閉`,"common.copied":`已複製`,"common.back":`上一頁`,"common.backHome":`回首頁`,"common.moreActions":`更多操作`,"common.appearance.toggle":`切換外觀`,"common.locale.choose":`選擇語言`,"common.status.checking":`檢測中`,"common.status.connected":`已連線`,"common.status.needsConnection":`需連線`,"common.status.ready":`已就緒`,"nav.downloadClient":`下載用戶端`,"nav.profile":`個人資料`,"nav.displayNamePlaceholder":`輸入顯示名稱`,"nav.avatarUrlPlaceholder":`輸入頭像 URL`,"nav.avatarUrlInvalid":`請輸入 http 或 https 頭像 URL`,"footer.about":`關於`,"footer.network":`網路`,"errorBoundary.title":`出錯了`,"errorBoundary.desc":`發生了意外錯誤,請嘗試重新載入頁面`,"errorBoundary.reload":`重新載入`,"notFound.title":`頁面未找到`,"notFound.desc":`你訪問的頁面似乎已經迷失在 P2P 網路中了`,"appShell.openMenu":`開啟選單`,"appShell.expandSidebar":`展開側邊欄`,"appShell.collapseSidebar":`收起側邊欄`,"appShell.openSidebar":`開啟側邊欄`},ee={"common.brand":`MOST PEOPLE`,"common.cancel":`Cancel`,"common.confirm":`Confirm`,"common.processing":`Processing...`,"common.copy":`Copy`,"common.download":`Download`,"common.close":`Close`,"common.copied":`Copied`,"common.back":`Back`,"common.backHome":`Back home`,"common.moreActions":`More actions`,"common.appearance.toggle":`Toggle appearance`,"common.locale.choose":`Choose language`,"common.status.checking":`Checking`,"common.status.connected":`Connected`,"common.status.needsConnection":`Needs connection`,"common.status.ready":`Ready`,"nav.downloadClient":`Download client`,"nav.profile":`Profile`,"nav.displayNamePlaceholder":`Enter a display name`,"nav.avatarUrlPlaceholder":`Enter an avatar URL`,"nav.avatarUrlInvalid":`Enter an http or https avatar URL`,"footer.about":`About`,"footer.network":`Network`,"errorBoundary.title":`Something went wrong`,"errorBoundary.desc":`An unexpected error occurred. Try reloading the page.`,"errorBoundary.reload":`Reload`,"notFound.title":`Page not found`,"notFound.desc":`The page you opened seems to be lost in the P2P network.`,"appShell.openMenu":`Open menu`,"appShell.expandSidebar":`Expand sidebar`,"appShell.collapseSidebar":`Collapse sidebar`,"appShell.openSidebar":`Open sidebar`},te={"download.meta.title":`下载 MostBox 客户端`,"download.meta.desc":`下载 MostBox 桌面或 Android 客户端,获得 P2P 文件分享、下载校验和持续做种能力`,"download.hero.title":`下载客户端`,"download.hero.desc":`桌面客户端内置本地 P2P 节点,提供发布、下载校验和持续做种的完整能力;Android Alpha 支持前台聊天附件、下载校验和做种。Web 端只连接已有 MostBox 节点。`,"download.platforms.title":`选择你的平台`,"download.comparison.title":`Web 端 vs 桌面端`,"download.comparison.feature":`功能`,"download.comparison.web":`Web 端`,"download.comparison.desktop":`桌面端`,"download.comparison.node":`节点能力`,"download.comparison.fileSharing":`P2P 文件分享`,"download.comparison.verification":`下载校验`,"download.comparison.seeding":`持续做种`,"download.comparison.largeFiles":`大文件传输`,"download.comparison.webConnectsNode":`连接已有节点`,"download.comparison.webDependsNode":`依赖所连节点`,"download.comparison.desktopBuiltinNode":`内置本地节点`,"download.comparison.desktopFull":`完整支持`,"download.comparison.desktopDefaultOn":`默认开启`,"download.comparison.desktop10gb":`10GB 上限内`,"download.npmNote":`使用 npm 入口请先安装 Node.js >= 22.12,然后运行 npx most-box@latest 启动本机完整节点。`,"download.source.label":`下载来源`,"download.source.r2Mirror":`Cloudflare R2 高速镜像`,"download.source.loading":`正在获取 Cloudflare R2 高速镜像。`,"download.source.ready":`当前版本 {version},可切换 Cloudflare R2 或 GitHub Releases 下载。`,"download.source.fallback":`无法获取高速镜像信息,已切换到 GitHub Releases 备用下载。`,"download.platform.windows.desc":`Windows 10 或更高版本`,"download.platform.macos.desc":`macOS 12 Monterey 或更高版本`,"download.platform.linux.desc":`Ubuntu 20.04+ / Debian 11+ / 其他主流发行版`,"download.platform.source":`来源`,"download.platform.size":`大小`,"download.platform.action":`下载 {ext}`,"download.platform.current":`当前`,"download.platform.currentSystem":`当前系统`,"download.platform.recommended":`推荐下载`,"download.platform.matchedSystem":`已匹配你的设备`,"download.platform.otherPlatforms":`其他可下载客户端`,"download.platform.mobilePlatforms":`移动端`,"download.platform.comingSoon":`敬请期待`,"download.platform.ios.name":`iOS`,"download.platform.ios.desc":`iPhone / iPad 客户端规划中`,"download.platform.android.name":`安卓`,"download.platform.android.desc":`Android Alpha APK,支持前台聊天附件、下载校验和做种`},ne={"download.meta.title":`下載 MostBox 用戶端`,"download.meta.desc":`下載 MostBox 桌面或 Android 用戶端,獲得 P2P 檔案分享、下載校驗和持續做種能力`,"download.hero.title":`下載用戶端`,"download.hero.desc":`桌面用戶端內建本機 P2P 節點,提供發布、下載校驗和持續做種的完整能力;Android Alpha 支援前台聊天附件、下載校驗和做種。Web 端只連線已有 MostBox 節點。`,"download.platforms.title":`選擇你的平臺`,"download.comparison.title":`Web 端 vs 桌面端`,"download.comparison.feature":`功能`,"download.comparison.web":`Web 端`,"download.comparison.desktop":`桌面端`,"download.comparison.node":`節點能力`,"download.comparison.fileSharing":`P2P 檔案分享`,"download.comparison.verification":`下載校驗`,"download.comparison.seeding":`持續做種`,"download.comparison.largeFiles":`大檔案傳輸`,"download.comparison.webConnectsNode":`連線已有節點`,"download.comparison.webDependsNode":`依賴所連節點`,"download.comparison.desktopBuiltinNode":`內建本機節點`,"download.comparison.desktopFull":`完整支援`,"download.comparison.desktopDefaultOn":`預設開啟`,"download.comparison.desktop10gb":`10GB 上限內`,"download.npmNote":`使用 npm 入口請先安裝 Node.js >= 22.12,然後執行 npx most-box@latest 啟動本機完整節點。`,"download.source.label":`下載來源`,"download.source.r2Mirror":`Cloudflare R2 高速映象`,"download.source.loading":`正在取得 Cloudflare R2 高速映象。`,"download.source.ready":`當前版本 {version},可切換 Cloudflare R2 或 GitHub Releases 下載。`,"download.source.fallback":`無法取得高速映象資訊,已切換到 GitHub Releases 備用下載。`,"download.platform.windows.desc":`Windows 10 或更高版本`,"download.platform.macos.desc":`macOS 12 Monterey 或更高版本`,"download.platform.linux.desc":`Ubuntu 20.04+ / Debian 11+ / 其他主流發行版`,"download.platform.source":`來源`,"download.platform.size":`大小`,"download.platform.action":`下載 {ext}`,"download.platform.current":`當前`,"download.platform.currentSystem":`當前系統`,"download.platform.recommended":`推薦下載`,"download.platform.matchedSystem":`已匹配你的裝置`,"download.platform.otherPlatforms":`其他可下載用戶端`,"download.platform.mobilePlatforms":`行動端`,"download.platform.comingSoon":`敬請期待`,"download.platform.ios.name":`iOS`,"download.platform.ios.desc":`iPhone / iPad 用戶端規劃中`,"download.platform.android.name":`Android`,"download.platform.android.desc":`Android Alpha APK,支援前台聊天附件、下載校驗和做種`},l={"download.meta.title":`Download the MostBox client`,"download.meta.desc":`Download the MostBox desktop or Android client for P2P sharing, verification, and continuous seeding.`,"download.hero.title":`Download client`,"download.hero.desc":`The desktop client includes a local P2P node with full publish, download verification, and continuous seeding support. The Android Alpha supports foreground chat attachments, download verification, and seeding. The Web entry only connects to existing MostBox nodes.`,"download.platforms.title":`Choose your platform`,"download.comparison.title":`Web vs desktop`,"download.comparison.feature":`Feature`,"download.comparison.web":`Web`,"download.comparison.desktop":`Desktop`,"download.comparison.node":`Node capability`,"download.comparison.fileSharing":`P2P file sharing`,"download.comparison.verification":`Download verification`,"download.comparison.seeding":`Continuous seeding`,"download.comparison.largeFiles":`Large file transfer`,"download.comparison.webConnectsNode":`Connects to existing nodes`,"download.comparison.webDependsNode":`Depends on the connected node`,"download.comparison.desktopBuiltinNode":`Built-in local node`,"download.comparison.desktopFull":`Fully supported`,"download.comparison.desktopDefaultOn":`On by default`,"download.comparison.desktop10gb":`Within the 10GB limit`,"download.npmNote":`For the npm entry, install Node.js >= 22.12 first, then run npx most-box@latest to start a full local node.`,"download.source.label":`Download source`,"download.source.r2Mirror":`Cloudflare R2 mirror`,"download.source.loading":`Fetching the Cloudflare R2 mirror.`,"download.source.ready":`Current version {version}. You can switch between Cloudflare R2 and GitHub Releases.`,"download.source.fallback":`Mirror information is unavailable, so GitHub Releases is selected as fallback.`,"download.platform.windows.desc":`Windows 10 or later`,"download.platform.macos.desc":`macOS 12 Monterey or later`,"download.platform.linux.desc":`Ubuntu 20.04+ / Debian 11+ / other mainstream distributions`,"download.platform.source":`Source`,"download.platform.size":`Size`,"download.platform.action":`Download {ext}`,"download.platform.current":`Current`,"download.platform.currentSystem":`Current system`,"download.platform.recommended":`Recommended download`,"download.platform.matchedSystem":`Matched to your device`,"download.platform.otherPlatforms":`Other downloads`,"download.platform.mobilePlatforms":`Mobile`,"download.platform.comingSoon":`Coming soon`,"download.platform.ios.name":`iOS`,"download.platform.ios.desc":`iPhone and iPad client is planned.`,"download.platform.android.name":`Android`,"download.platform.android.desc":`Android Alpha APK with foreground chat attachments, download verification, and seeding.`},u={"cid.meta.title":`CID 下载检查 - MostBox`,"cid.meta.desc":`检查 MostBox CID 是否有在线种子,并在确认后开始下载。`,"cid.kicker":`MostBox CID`,"cid.title":`检查分享文件`,"cid.subtitle":`MostBox 会先检查这个 CID 是否能从在线种子下载。确认可用后,你可以手动开始下载。`,"cid.handoff.title":`用 MostBox 客户端打开`,"cid.handoff.desc":`已安装客户端时,浏览器会交给系统打开这个 most:// 分享,并让 MostBox 接管检测和下载。`,"cid.handoff.action":`用 MostBox 打开`,"cid.handoff.fallback":`如果浏览器没有弹出确认,或 MostBox 没有打开,可能还没安装客户端或系统协议未注册。你仍可在本页连接本地节点检测下载。`,"cid.handoff.downloadAction":`下载客户端`,"cid.fileNameLabel":`文件名`,"cid.cidLabel":`CID`,"cid.sizeLabel":`大小`,"cid.saveToLabel":`保存到`,"cid.saveToFallback":`MostBox 数据目录/downloads`,"cid.unknownSize":`检测到后显示`,"cid.label.idle":`准备检测`,"cid.label.checking":`正在检测`,"cid.label.available":`可以下载`,"cid.label.alreadyLocal":`本机已有`,"cid.label.loginRequired":`需要登录`,"cid.label.backendMissing":`节点未连接`,"cid.label.waitingBackend":`等待节点`,"cid.label.error":`检测未通过`,"cid.status.waitingBackend":`正在等待本地节点状态。`,"cid.status.backendMissing":`没有连接到 MostBox 本地节点。`,"cid.status.loginRequired":`请先登录本地身份,然后再检查这个 CID。`,"cid.status.checking":`正在查找在线种子并确认下载目录可写。`,"cid.status.available":`{fileName} 当前可以下载。`,"cid.status.alreadyLocal":`{fileName} 已在本机,可继续做种。`,"cid.status.startingDownload":`正在创建下载任务。`,"cid.status.downloading":`正在下载并校验文件。`,"cid.status.downloadingFile":`正在下载 {fileName}。`,"cid.status.downloadComplete":`{fileName} 下载完成,已默认继续做种。`,"cid.status.downloadFailed":`下载失败:{error}`,"cid.status.cancelled":`下载已取消。`,"cid.errorFallback":`未知错误`,"cid.loginAction":`登录`,"cid.connectAction":`连接节点`,"cid.startAction":`开始下载`,"cid.downloadingAction":`下载中`,"cid.cancelAction":`取消下载`,"cid.retryAction":`重新检测`,"cid.openAppAction":`打开文件列表`,"cid.toast.downloadStarted":`下载已开始`,"cid.toast.downloadComplete":`下载完成`,"cid.toast.downloadFailed":`下载失败:{error}`,"cid.toast.cancelled":`下载已取消`,"cid.toast.alreadyLocal":`本机已有该文件`},d={"cid.meta.title":`CID 下載檢查 - MostBox`,"cid.meta.desc":`檢查 MostBox CID 是否有線上種子,並在確認後開始下載。`,"cid.kicker":`MostBox CID`,"cid.title":`檢查分享檔案`,"cid.subtitle":`MostBox 會先檢查這個 CID 是否能從線上種子下載。確認可用後,你可以手動開始下載。`,"cid.handoff.title":`用 MostBox 用戶端開啟`,"cid.handoff.desc":`已安裝用戶端時,瀏覽器會交給系統開啟這個 most:// 分享,並讓 MostBox 接管檢測和下載。`,"cid.handoff.action":`用 MostBox 開啟`,"cid.handoff.fallback":`如果瀏覽器沒有跳出確認,或 MostBox 沒有開啟,可能尚未安裝用戶端或系統協議未註冊。你仍可在本頁連線本機節點檢測下載。`,"cid.handoff.downloadAction":`下載用戶端`,"cid.fileNameLabel":`檔案名稱`,"cid.cidLabel":`CID`,"cid.sizeLabel":`大小`,"cid.saveToLabel":`儲存到`,"cid.saveToFallback":`MostBox 資料目錄/downloads`,"cid.unknownSize":`檢測到後顯示`,"cid.label.idle":`準備檢測`,"cid.label.checking":`正在檢測`,"cid.label.available":`可以下載`,"cid.label.alreadyLocal":`本機已有`,"cid.label.loginRequired":`需要登入`,"cid.label.backendMissing":`節點未連線`,"cid.label.waitingBackend":`等待節點`,"cid.label.error":`檢測未通過`,"cid.status.waitingBackend":`正在等待本機節點狀態。`,"cid.status.backendMissing":`沒有連線到 MostBox 本機節點。`,"cid.status.loginRequired":`請先登入本機身份,然後再檢查這個 CID。`,"cid.status.checking":`正在尋找線上種子並確認下載目錄可寫。`,"cid.status.available":`{fileName} 目前可以下載。`,"cid.status.alreadyLocal":`{fileName} 已在本機,可繼續做種。`,"cid.status.startingDownload":`正在建立下載任務。`,"cid.status.downloading":`正在下載並校驗檔案。`,"cid.status.downloadingFile":`正在下載 {fileName}。`,"cid.status.downloadComplete":`{fileName} 下載完成,已預設繼續做種。`,"cid.status.downloadFailed":`下載失敗:{error}`,"cid.status.cancelled":`下載已取消。`,"cid.errorFallback":`未知錯誤`,"cid.loginAction":`登入`,"cid.connectAction":`連線節點`,"cid.startAction":`開始下載`,"cid.downloadingAction":`下載中`,"cid.cancelAction":`取消下載`,"cid.retryAction":`重新檢測`,"cid.openAppAction":`開啟檔案列表`,"cid.toast.downloadStarted":`下載已開始`,"cid.toast.downloadComplete":`下載完成`,"cid.toast.downloadFailed":`下載失敗:{error}`,"cid.toast.cancelled":`下載已取消`,"cid.toast.alreadyLocal":`本機已有該檔案`},f={"cid.meta.title":`CID download check - MostBox`,"cid.meta.desc":`Check whether a MostBox CID has online seeders, then start the download after confirming it.`,"cid.kicker":`MostBox CID`,"cid.title":`Check shared file`,"cid.subtitle":`MostBox checks whether this CID can be downloaded from online seeders first. Once it is available, you can start the download manually.`,"cid.handoff.title":`Open with the MostBox client`,"cid.handoff.desc":`If the client is installed, your browser will hand this most:// share to the system so MostBox can take over checking and downloading.`,"cid.handoff.action":`Open in MostBox`,"cid.handoff.fallback":`If the browser did not ask for confirmation or MostBox did not open, the client may not be installed or the system protocol may not be registered. You can still connect a local node on this page to check and download.`,"cid.handoff.downloadAction":`Download client`,"cid.fileNameLabel":`File name`,"cid.cidLabel":`CID`,"cid.sizeLabel":`Size`,"cid.saveToLabel":`Save to`,"cid.saveToFallback":`MostBox data directory/downloads`,"cid.unknownSize":`Shown after checking`,"cid.label.idle":`Ready to check`,"cid.label.checking":`Checking`,"cid.label.available":`Ready to download`,"cid.label.alreadyLocal":`Already local`,"cid.label.loginRequired":`Login required`,"cid.label.backendMissing":`Node disconnected`,"cid.label.waitingBackend":`Waiting for node`,"cid.label.error":`Check failed`,"cid.status.waitingBackend":`Waiting for the local node status.`,"cid.status.backendMissing":`No MostBox local node is connected.`,"cid.status.loginRequired":`Sign in with a local identity before checking this CID.`,"cid.status.checking":`Looking for online seeders and checking that the download directory is writable.`,"cid.status.available":`{fileName} is available to download.`,"cid.status.alreadyLocal":`{fileName} is already on this device and can keep seeding.`,"cid.status.startingDownload":`Creating the download task.`,"cid.status.downloading":`Downloading and verifying the file.`,"cid.status.downloadingFile":`Downloading {fileName}.`,"cid.status.downloadComplete":`{fileName} downloaded and is seeding by default.`,"cid.status.downloadFailed":`Download failed: {error}`,"cid.status.cancelled":`Download cancelled.`,"cid.errorFallback":`Unknown error`,"cid.loginAction":`Sign in`,"cid.connectAction":`Connect node`,"cid.startAction":`Start download`,"cid.downloadingAction":`Downloading`,"cid.cancelAction":`Cancel download`,"cid.retryAction":`Check again`,"cid.openAppAction":`Open file list`,"cid.toast.downloadStarted":`Download started`,"cid.toast.downloadComplete":`Download complete`,"cid.toast.downloadFailed":`Download failed: {error}`,"cid.toast.cancelled":`Download cancelled`,"cid.toast.alreadyLocal":`This file is already local`},re={"ping.meta.title":`MostBox - 网络连通性`,"ping.meta.desc":`测试到全球主流网站的网络连通性和延迟`,"ping.title":`网络连通性`,"ping.subtitle":`通过向对应网站发送请求进行测试,延迟值仅供参考。`,"ping.retryAll":`重新测试全部`,"ping.retryOne":`重新测试 {name}`,"ping.retry":`重新测试`,"ping.available":`可用`,"ping.unavailable":`不可用`,"ping.timeout":`超时`},ie={"ping.meta.title":`MostBox - 網路連通性`,"ping.meta.desc":`測試到全球主流網站的網路連通性和延遲`,"ping.title":`網路連通性`,"ping.subtitle":`通過向對應網站傳送請求進行測試,延遲值僅供參考。`,"ping.retryAll":`重新測試全部`,"ping.retryOne":`重新測試 {name}`,"ping.retry":`重新測試`,"ping.available":`可用`,"ping.unavailable":`不可用`,"ping.timeout":`超時`},ae={"ping.meta.title":`MostBox - Network connectivity`,"ping.meta.desc":`Test connectivity and latency to major global websites`,"ping.title":`Network connectivity`,"ping.subtitle":`Tests send requests to the corresponding websites. Latency is for reference only.`,"ping.retryAll":`Retest all`,"ping.retryOne":`Retest {name}`,"ping.retry":`Retest`,"ping.available":`Available`,"ping.unavailable":`Unavailable`,"ping.timeout":`Timeout`},oe={"portal.meta.description":`MostBox 是用户之间直连的聊天优先 P2P 工具箱:从聊天开始,传文件、整理知识库。`,"portal.hero.subtitle":`用户之间直接连接的 P2P 工具箱。从聊天开始,直连传文件,整理知识库。`,"portal.nodeEntry":`节点入口`,"portal.webConnectNode":`Web 连接节点`,"portal.nodeAdmin":`节点管理`,"portal.enterFeature":`进入 {title}`,"portal.openFeature":`打开{title}`,"portal.feature.app.title":`文件`,"portal.feature.app.subtitle":`聊天附件和传输管理`,"portal.feature.app.hero":`文件作为聊天附件`,"portal.feature.app.desc":`在聊天里直接发送文件,底层仍使用 most:// 链接、CID 校验和下载后做种。MostBox 不是云盘;可用性来自当前在线种子。`,"portal.feature.app.bullet.localIdentity":`无需云端账号,使用本地身份隔离数据`,"portal.feature.app.bullet.hyperswarm":`用户之间直接连接传输文件`,"portal.feature.app.bullet.largeFiles":`GB 级大文件流式处理`,"portal.feature.app.bullet.cid":`相同文件 = 相同 CID,链接可反复校验`,"portal.feature.app.bullet.seedAfterDownload":`下载完成后默认继续做种`,"portal.feature.app.bullet.noCloud":`不依赖中心化账号或云端托管,也不承诺永久保存`,"portal.feature.app.bullet.desktop":`Web 端只连接已有节点,桌面端提供完整 P2P 能力`,"portal.feature.app.bullet.openSource":`MIT 开源,自托管,数据完全自主掌控`,"portal.feature.app.step.download.title":`下载客户端`,"portal.feature.app.step.download.desc":`支持 Windows、macOS 和 Linux,桌面端提供完整的 P2P 能力。`,"portal.feature.app.step.download.link":`前往下载页`,"portal.feature.app.step.install.title":`安装并运行`,"portal.feature.app.step.install.desc":`安装后打开应用,无需单独安装 Node.js。`,"portal.feature.app.step.share.title":`在聊天里分享`,"portal.feature.app.step.share.desc":`发送文件附件生成 most:// 链接,朋友下载校验通过后也会成为新的种子。`,"portal.feature.chat.title":`聊天`,"portal.feature.chat.subtitle":`用户之间直接连接`,"portal.feature.chat.hero":`从聊天开始`,"portal.feature.chat.desc":`创建聊天或房间,把房间 ID 发给朋友;消息、文件和知识库整理都从这里开始。`,"portal.feature.chat.bullet.encrypted":`私域聊天和房间消息`,"portal.feature.chat.bullet.identity":`本地登录身份保护消息署名`,"portal.feature.chat.bullet.sync":`消息通过 P2P Channel 同步`,"portal.feature.chat.bullet.offline":`文件和知识库自然接入聊天流程`,"portal.feature.chat.bullet.noAccount":`无需中心化账号注册`,"portal.feature.chat.step.download.title":`下载客户端`,"portal.feature.chat.step.download.desc":`支持 Windows、macOS 和 Linux。`,"portal.feature.chat.step.download.link":`前往下载页`,"portal.feature.chat.step.create.title":`创建聊天`,"portal.feature.chat.step.create.desc":`输入房间名即可加入或创建,并把房间 ID 发给朋友。`,"portal.feature.chat.step.send.title":`开始聊天`,"portal.feature.chat.step.send.desc":`先发消息,再发送附件或保存到知识库。`,"portal.feature.note.title":`知识库`,"portal.feature.note.subtitle":`Markdown 知识库`,"portal.feature.note.hero":`把聊天整理成知识库`,"portal.feature.note.desc":`把聊天里的重要内容、想法和附件线索整理成 Markdown 知识库;现有笔记库能力保留,可从聊天消息直接保存草稿。`,"portal.feature.note.bullet.markdown":`Markdown 块编辑器`,"portal.feature.note.bullet.privacy":`公开 / 私密笔记切换`,"portal.feature.note.bullet.folders":`文件夹、搜索和移动`,"portal.feature.note.bullet.web3":`本地身份用于数据隔离`,"portal.feature.note.bullet.backup":`按需备份与恢复`,"portal.feature.note.bullet.independent":`知识库不是云盘,也不承诺永久同步`,"portal.feature.note.step.account.title":`生成 Web3 账号`,"portal.feature.note.step.account.desc":`用用户名和密码派生本地密钥。`,"portal.feature.note.step.create.title":`创建笔记`,"portal.feature.note.step.create.desc":`写 Markdown,按需切换为私密内容。`,"portal.feature.note.step.backup.title":`备份恢复`,"portal.feature.note.step.backup.desc":`登录后可把加密笔记同步到云端。`,"portal.feature.game.title":`游戏`,"portal.feature.game.subtitle":`独立房间游戏`,"portal.feature.game.hero":`打开独立游戏房间`,"portal.feature.game.desc":`游戏保留独立入口,继续复用 Channel 系统和 game.* 事件,不新增独立后端协议。`,"portal.feature.game.bullet.account":`使用 MostBox 本地账号进入房间`,"portal.feature.game.bullet.channel":`复用 /chat/ 的频道后端,不新增游戏后端接口`,"portal.feature.game.bullet.link":`房间链接可手动分享给朋友`,"portal.feature.game.bullet.rules":`支持 1-2 副牌、2-6 人和人机陪测`,"portal.feature.game.bullet.maintain":`游戏规则、频道事件和页面样式拆分维护`,"portal.feature.game.step.login.title":`登录账号`,"portal.feature.game.step.login.desc":`使用现有 MostBox Web3 本地账号作为牌桌身份。`,"portal.feature.game.step.create.title":`创建房间`,"portal.feature.game.step.create.desc":`创建房间后复制链接,发给朋友加入。`,"portal.feature.game.step.test.title":`开始调试`,"portal.feature.game.step.test.desc":`可先用人机补位测试出牌、计分和房间同步。`,"portal.feature.web3.title":`Web3`,"portal.feature.web3.subtitle":`开源账户系统`,"portal.feature.web3.hero":`确定性密钥派生工具箱`,"portal.feature.web3.desc":`纯前端运行的 Web3 账户工具。输入用户名和密码,即可生成 Ed25519 / x25519 密钥对、助记词、以太坊地址,支持 PEM 导出和地址派生。`,"portal.feature.web3.bullet.frontend":`开源且可复用`,"portal.feature.web3.bullet.keys":`Ed25519 / x25519 密钥对生成`,"portal.feature.web3.bullet.mnemonic":`BIP-39 助记词派生`,"portal.feature.web3.bullet.eth":`以太坊地址与私钥导出`,"portal.feature.web3.bullet.pem":`PEM 格式密钥导出`,"portal.feature.web3.bullet.qr":`二维码展示地址与助记词`,"portal.feature.web3.step.username.title":`输入用户名`,"portal.feature.web3.step.username.desc":`用户名 + 密码(可选)作为种子。`,"portal.feature.web3.step.keys.title":`查看密钥`,"portal.feature.web3.step.keys.desc":`即时生成 Ed25519、x25519 公钥与 IPNS ID。`,"portal.feature.web3.step.export.title":`导出使用`,"portal.feature.web3.step.export.desc":`复制地址、导出 PEM、派生子地址。`},se={"portal.meta.description":`MostBox 是使用者之間直接連線的聊天優先 P2P 工具箱:從聊天開始,傳檔案、整理知識庫。`,"portal.hero.subtitle":`使用者之間直接連線的 P2P 工具箱。從聊天開始,直連傳檔案,整理知識庫。`,"portal.nodeEntry":`節點入口`,"portal.webConnectNode":`Web 連線節點`,"portal.nodeAdmin":`節點管理`,"portal.enterFeature":`進入 {title}`,"portal.openFeature":`開啟{title}`,"portal.feature.app.title":`檔案`,"portal.feature.app.subtitle":`聊天附件和傳輸管理`,"portal.feature.app.hero":`檔案作為聊天附件`,"portal.feature.app.desc":`在聊天裡直接傳送檔案,底層仍使用 most:// 連結、CID 校驗和下載後做種。MostBox 不是雲盤;可用性來自當前線上種子。`,"portal.feature.app.bullet.localIdentity":`無需雲端帳號,使用本機身份隔離資料`,"portal.feature.app.bullet.hyperswarm":`使用者之間直接連線傳輸檔案`,"portal.feature.app.bullet.largeFiles":`GB 級大檔案流式處理`,"portal.feature.app.bullet.cid":`相同檔案 = 相同 CID,連結可反覆校驗`,"portal.feature.app.bullet.seedAfterDownload":`下載完成後預設繼續做種`,"portal.feature.app.bullet.noCloud":`不依賴中心化帳號或雲端託管,也不承諾永久保存`,"portal.feature.app.bullet.desktop":`Web 端只連線已有節點,桌面端提供完整 P2P 能力`,"portal.feature.app.bullet.openSource":`MIT 開源,自託管,資料完全自主掌控`,"portal.feature.app.step.download.title":`下載用戶端`,"portal.feature.app.step.download.desc":`支援 Windows、macOS 和 Linux,桌面端提供完整的 P2P 能力。`,"portal.feature.app.step.download.link":`前往下載頁`,"portal.feature.app.step.install.title":`安裝並執行`,"portal.feature.app.step.install.desc":`安裝後開啟應用,無需單獨安裝 Node.js。`,"portal.feature.app.step.share.title":`在聊天裡分享`,"portal.feature.app.step.share.desc":`傳送檔案附件生成 most:// 連結,朋友下載校驗通過後也會成為新的種子。`,"portal.feature.chat.title":`聊天`,"portal.feature.chat.subtitle":`使用者之間直接連線`,"portal.feature.chat.hero":`從聊天開始`,"portal.feature.chat.desc":`建立聊天或房間,把房間 ID 發給朋友;訊息、檔案和知識庫整理都從這裡開始。`,"portal.feature.chat.bullet.encrypted":`私域聊天和房間訊息`,"portal.feature.chat.bullet.identity":`本機登入身份保護訊息署名`,"portal.feature.chat.bullet.sync":`訊息通過 P2P Channel 同步`,"portal.feature.chat.bullet.offline":`檔案和知識庫自然接入聊天流程`,"portal.feature.chat.bullet.noAccount":`無需中心化帳號註冊`,"portal.feature.chat.step.download.title":`下載用戶端`,"portal.feature.chat.step.download.desc":`支援 Windows、macOS 和 Linux。`,"portal.feature.chat.step.download.link":`前往下載頁`,"portal.feature.chat.step.create.title":`建立聊天`,"portal.feature.chat.step.create.desc":`輸入房間名即可加入或建立,並把房間 ID 發給朋友。`,"portal.feature.chat.step.send.title":`開始聊天`,"portal.feature.chat.step.send.desc":`先傳送訊息,再傳送附件或保存到知識庫。`,"portal.feature.note.title":`知識庫`,"portal.feature.note.subtitle":`Markdown 知識庫`,"portal.feature.note.hero":`把聊天整理成知識庫`,"portal.feature.note.desc":`把聊天裡的重要內容、想法和附件線索整理成 Markdown 知識庫;現有筆記庫能力保留,可從聊天訊息直接儲存草稿。`,"portal.feature.note.bullet.markdown":`Markdown 塊編輯器`,"portal.feature.note.bullet.privacy":`公開 / 私密筆記切換`,"portal.feature.note.bullet.folders":`資料夾、搜尋和移動`,"portal.feature.note.bullet.web3":`本機身份用於資料隔離`,"portal.feature.note.bullet.backup":`按需備份與恢復`,"portal.feature.note.bullet.independent":`知識庫不是雲盤,也不承諾永久同步`,"portal.feature.note.step.account.title":`生成 Web3 帳號`,"portal.feature.note.step.account.desc":`用使用者名稱和密碼派生本機金鑰。`,"portal.feature.note.step.create.title":`建立筆記`,"portal.feature.note.step.create.desc":`寫 Markdown,按需切換為私密內容。`,"portal.feature.note.step.backup.title":`備份恢復`,"portal.feature.note.step.backup.desc":`登入後可把加密筆記同步到雲端。`,"portal.feature.game.title":`遊戲`,"portal.feature.game.subtitle":`獨立房間遊戲`,"portal.feature.game.hero":`開啟獨立遊戲房間`,"portal.feature.game.desc":`遊戲保留獨立入口,繼續複用 Channel 系統和 game.* 事件,不新增獨立後端協議。`,"portal.feature.game.bullet.account":`使用 MostBox 本機帳號進入房間`,"portal.feature.game.bullet.channel":`複用 /chat/ 的頻道後端,不新增遊戲後端介面`,"portal.feature.game.bullet.link":`房間連結可手動分享給朋友`,"portal.feature.game.bullet.rules":`支援 1-2 副牌、2-6 人和人機陪測`,"portal.feature.game.bullet.maintain":`遊戲規則、頻道事件和頁面樣式拆分維護`,"portal.feature.game.step.login.title":`登入帳號`,"portal.feature.game.step.login.desc":`使用現有 MostBox Web3 本機帳號作為牌桌身份。`,"portal.feature.game.step.create.title":`建立房間`,"portal.feature.game.step.create.desc":`建立房間後複製連結,發給朋友加入。`,"portal.feature.game.step.test.title":`開始除錯`,"portal.feature.game.step.test.desc":`可先用人機補位測試出牌、計分和房間同步。`,"portal.feature.web3.title":`Web3`,"portal.feature.web3.subtitle":`開源帳戶系統`,"portal.feature.web3.hero":`確定性金鑰派生工具箱`,"portal.feature.web3.desc":`純前端執行的 Web3 帳戶工具。輸入使用者名稱和密碼,即可生成 Ed25519 / x25519 金鑰對、助記詞、以太坊地址,支援 PEM 匯出和地址派生。`,"portal.feature.web3.bullet.frontend":`開源且可複用`,"portal.feature.web3.bullet.keys":`Ed25519 / x25519 金鑰對生成`,"portal.feature.web3.bullet.mnemonic":`BIP-39 助記詞派生`,"portal.feature.web3.bullet.eth":`以太坊地址與私鑰匯出`,"portal.feature.web3.bullet.pem":`PEM 格式金鑰匯出`,"portal.feature.web3.bullet.qr":`二維碼展示地址與助記詞`,"portal.feature.web3.step.username.title":`輸入使用者名稱`,"portal.feature.web3.step.username.desc":`使用者名稱 + 密碼(可選)作為種子。`,"portal.feature.web3.step.keys.title":`檢視金鑰`,"portal.feature.web3.step.keys.desc":`即時生成 Ed25519、x25519 公鑰與 IPNS ID。`,"portal.feature.web3.step.export.title":`匯出使用`,"portal.feature.web3.step.export.desc":`複製地址、匯出 PEM、派生子地址。`},ce={"portal.meta.description":`MostBox is a chat-first P2P toolbox for direct user-to-user connection: start with chat, send files, and grow a knowledge base.`,"portal.hero.subtitle":`A P2P toolbox for direct user-to-user connection. Start with chat, send files directly, and grow a knowledge base.`,"portal.nodeEntry":`Node entry`,"portal.webConnectNode":`Connect Web node`,"portal.nodeAdmin":`Node admin`,"portal.enterFeature":`Open {title}`,"portal.openFeature":`Open {title}`,"portal.feature.app.title":`Files`,"portal.feature.app.subtitle":`Chat attachments and transfer management`,"portal.feature.app.hero":`Files as chat attachments`,"portal.feature.app.desc":`Send files directly in chat while the protocol still uses most:// links, CID verification, and seeding after download. MostBox is not cloud storage; availability comes from online seeders.`,"portal.feature.app.bullet.localIdentity":`No cloud account required; local identity keeps data separated`,"portal.feature.app.bullet.hyperswarm":`Direct user-to-user file transfer`,"portal.feature.app.bullet.largeFiles":`Streaming support for GB-scale files`,"portal.feature.app.bullet.cid":`Same file means same CID, and links can be verified repeatedly`,"portal.feature.app.bullet.seedAfterDownload":`Downloads keep seeding by default after completion`,"portal.feature.app.bullet.noCloud":`No centralized account or hosted storage dependency, and no promise of permanent storage`,"portal.feature.app.bullet.desktop":`The Web app connects to existing nodes; the desktop app provides full P2P capability`,"portal.feature.app.bullet.openSource":`MIT open source, self-hostable, and fully under your control`,"portal.feature.app.step.download.title":`Download client`,"portal.feature.app.step.download.desc":`Supports Windows, macOS, and Linux. The desktop app provides full P2P capability.`,"portal.feature.app.step.download.link":`Go to downloads`,"portal.feature.app.step.install.title":`Install and run`,"portal.feature.app.step.install.desc":`Open the app after installation. No separate Node.js install is required.`,"portal.feature.app.step.share.title":`Share in chat`,"portal.feature.app.step.share.desc":`Send a file attachment to create a most:// link. Friends who complete and verify the download become new seeders.`,"portal.feature.chat.title":`Chat`,"portal.feature.chat.subtitle":`Direct user-to-user connection`,"portal.feature.chat.hero":`Start with chat`,"portal.feature.chat.desc":`Create a chat or room and share the room ID with friends; messages, files, and knowledge all start in one flow.`,"portal.feature.chat.bullet.encrypted":`Private chat and room messages`,"portal.feature.chat.bullet.identity":`Local login identity protects message signatures`,"portal.feature.chat.bullet.sync":`Messages sync through P2P Channels`,"portal.feature.chat.bullet.offline":`Files and the knowledge base fit naturally into chat`,"portal.feature.chat.bullet.noAccount":`No centralized account registration required`,"portal.feature.chat.step.download.title":`Download client`,"portal.feature.chat.step.download.desc":`Supports Windows, macOS, and Linux.`,"portal.feature.chat.step.download.link":`Go to downloads`,"portal.feature.chat.step.create.title":`Create chat`,"portal.feature.chat.step.create.desc":`Enter a room name to join or create it, then send the room ID to friends.`,"portal.feature.chat.step.send.title":`Start chatting`,"portal.feature.chat.step.send.desc":`Send messages first, then attach files or save to the knowledge base.`,"portal.feature.note.title":`Knowledge Base`,"portal.feature.note.subtitle":`Markdown knowledge base`,"portal.feature.note.hero":`Turn chat into a knowledge base`,"portal.feature.note.desc":`Collect important chat content, ideas, and attachment context into a Markdown knowledge base. The existing note vault stays available, and chat messages can be saved as drafts.`,"portal.feature.note.bullet.markdown":`Markdown block editor`,"portal.feature.note.bullet.privacy":`Public/private note switching`,"portal.feature.note.bullet.folders":`Folders, search, and move`,"portal.feature.note.bullet.web3":`Local identity keeps data separated`,"portal.feature.note.bullet.backup":`Backup and restore when needed`,"portal.feature.note.bullet.independent":`The knowledge base is not cloud storage and does not promise permanent sync`,"portal.feature.note.step.account.title":`Generate Web3 account`,"portal.feature.note.step.account.desc":`Derive local keys from a username and password.`,"portal.feature.note.step.create.title":`Create note`,"portal.feature.note.step.create.desc":`Write Markdown and switch content to private when needed.`,"portal.feature.note.step.backup.title":`Backup and restore`,"portal.feature.note.step.backup.desc":`After login, encrypted notes can sync to the cloud.`,"portal.feature.game.title":`Games`,"portal.feature.game.subtitle":`Standalone room games`,"portal.feature.game.hero":`Open a standalone game room`,"portal.feature.game.desc":`Games keep their standalone entry point and continue using the Channel system and game.* events without adding a game-only backend protocol.`,"portal.feature.game.bullet.account":`Enter rooms with your local MostBox account`,"portal.feature.game.bullet.channel":`Reuses the /chat/ channel backend without adding game-only APIs`,"portal.feature.game.bullet.link":`Room links can be shared manually with friends`,"portal.feature.game.bullet.rules":`Supports 1-2 decks, 2-6 players, and bot testing`,"portal.feature.game.bullet.maintain":`Game rules, channel events, and page styles are maintained separately`,"portal.feature.game.step.login.title":`Sign in`,"portal.feature.game.step.login.desc":`Use your existing local MostBox Web3 account as the table identity.`,"portal.feature.game.step.create.title":`Create room`,"portal.feature.game.step.create.desc":`Create a room, copy the link, and send it to friends.`,"portal.feature.game.step.test.title":`Start testing`,"portal.feature.game.step.test.desc":`Use bot seats to test plays, scoring, and room sync first.`,"portal.feature.web3.title":`Web3`,"portal.feature.web3.subtitle":`Open-source account system`,"portal.feature.web3.hero":`Deterministic key derivation toolbox`,"portal.feature.web3.desc":`A front-end only Web3 account tool. Enter a username and password to generate Ed25519/x25519 key pairs, a mnemonic, an Ethereum address, PEM exports, and derived addresses.`,"portal.feature.web3.bullet.frontend":`Open source and reusable`,"portal.feature.web3.bullet.keys":`Ed25519 / x25519 key pair generation`,"portal.feature.web3.bullet.mnemonic":`BIP-39 mnemonic derivation`,"portal.feature.web3.bullet.eth":`Ethereum address and private key export`,"portal.feature.web3.bullet.pem":`PEM key export`,"portal.feature.web3.bullet.qr":`QR codes for addresses and mnemonics`,"portal.feature.web3.step.username.title":`Enter username`,"portal.feature.web3.step.username.desc":`Use username plus optional password as the seed.`,"portal.feature.web3.step.keys.title":`View keys`,"portal.feature.web3.step.keys.desc":`Instantly generate Ed25519 and x25519 public keys plus an IPNS ID.`,"portal.feature.web3.step.export.title":`Export and use`,"portal.feature.web3.step.export.desc":`Copy addresses, export PEM, and derive child addresses.`},p={"remote.title.edit":`当前远程节点`,"remote.title.connect":`连接远程节点`,"remote.hint":`Web 端只连接已有 MostBox 节点。输入别人部署好的节点地址和邀请码后,可通过该节点使用文件分享和聊天;本机完整 P2P 能力请使用桌面客户端。`,"remote.invite.placeholder":`邀请码`,"remote.connecting":`连接中...`,"remote.updateConnection":`更新连接`,"remote.connectNode":`连接节点`,"remote.disconnect":`断开连接`,"remote.history.title":`历史节点`,"remote.history.current":`当前`,"remote.history.switchTo":`切换到 {url}`,"remote.error.invalidUrl":`请输入有效的 http(s) 节点地址`,"remote.error.http":`远程节点 HTTP 不可达,请检查地址`,"remote.error.ws":`远程节点 WebSocket 不可达,请检查地址或代理配置`,"remote.error.failed":`远程节点连接失败,请检查地址和邀请码`,"remote.connected":`远程节点已连接`,"remote.connectFailed":`远程节点连接失败`,"remote.cleared":`已清除远程节点,优先使用本地节点`,"connectModal.title":`连接节点`,"account.signIn":`登录`,"account.logout":`退出`,"account.logoutTitle":`退出登录`},m={"remote.title.edit":`當前遠端節點`,"remote.title.connect":`連線遠端節點`,"remote.hint":`Web 端只連線已有 MostBox 節點。輸入別人部署好的節點地址和邀請碼後,可通過該節點使用檔案分享和聊天;本機完整 P2P 能力請使用桌面用戶端。`,"remote.invite.placeholder":`邀請碼`,"remote.connecting":`連線中...`,"remote.updateConnection":`更新連線`,"remote.connectNode":`連線節點`,"remote.disconnect":`斷開連線`,"remote.history.title":`歷史節點`,"remote.history.current":`當前`,"remote.history.switchTo":`切換到 {url}`,"remote.error.invalidUrl":`請輸入有效的 http(s) 節點地址`,"remote.error.http":`遠端節點 HTTP 不可達,請檢查地址`,"remote.error.ws":`遠端節點 WebSocket 不可達,請檢查地址或代理設定`,"remote.error.failed":`遠端節點連線失敗,請檢查地址和邀請碼`,"remote.connected":`遠端節點已連線`,"remote.connectFailed":`遠端節點連線失敗`,"remote.cleared":`已清除遠端節點,優先使用本機節點`,"connectModal.title":`連線節點`,"account.signIn":`登入`,"account.logout":`退出`,"account.logoutTitle":`登出`},h={"remote.title.edit":`Current remote node`,"remote.title.connect":`Connect remote node`,"remote.hint":`The Web app only connects to an existing MostBox node. Enter a deployed node URL and invite code to use file sharing and chat through that node; use the desktop client for full local P2P capability.`,"remote.invite.placeholder":`Invite code`,"remote.connecting":`Connecting...`,"remote.updateConnection":`Update connection`,"remote.connectNode":`Connect node`,"remote.disconnect":`Disconnect`,"remote.history.title":`Node history`,"remote.history.current":`Current`,"remote.history.switchTo":`Switch to {url}`,"remote.error.invalidUrl":`Please enter a valid http(s) node URL`,"remote.error.http":`The remote node HTTP endpoint is unreachable`,"remote.error.ws":`The remote node WebSocket endpoint is unreachable. Check the URL or proxy.`,"remote.error.failed":`Remote node connection failed. Check the URL and invite code.`,"remote.connected":`Remote node connected`,"remote.connectFailed":`Remote node connection failed`,"remote.cleared":`Remote node cleared; local node will be preferred`,"connectModal.title":`Connect node`,"account.signIn":`Sign in`,"account.logout":`Sign out`,"account.logoutTitle":`Sign out`},g={"chat.unread":`有新消息`,"chat.channelActions":`聊天操作`,"chat.pin":`置顶`,"chat.unpin":`取消置顶`,"chat.rename":`重命名`,"chat.delete":`删除`,"chat.noMembers":`暂无成员`,"chat.attachmentType":`附件类型`,"chat.attachment.add":`添加附件`,"chat.attachment.image":`图片`,"chat.attachment.video":`视频`,"chat.attachment.file":`文件`,"chat.voice.menu":`语音通话`,"chat.voice.title":`语音房间`,"chat.voice.subtitle":`实时语音`,"chat.voice.empty":`还没有人加入语音`,"chat.voice.join":`加入语音`,"chat.voice.joining":`加入中...`,"chat.voice.mute":`静音`,"chat.voice.unmute":`取消静音`,"chat.voice.leave":`离开`,"chat.voice.you":`我`,"chat.voice.connected":`已连接`,"chat.voice.connecting":`连接中`,"chat.voice.memberMuted":`已静音`,"chat.voice.memberSpeaking":`麦克风开启`,"chat.voice.bannerActive":`{count} 人正在通话`,"chat.voice.bannerJoined":`你正在和 {count} 人通话`,"chat.voice.minimize":`收起`,"chat.voice.expand":`展开语音`,"chat.voice.floatingActive":`{count} 人`,"chat.system.memberJoined":`{name} 加入了群聊`,"chat.sendMessage":`发送消息`,"chat.sending":`发送中...`,"chat.checking":`检测中`,"chat.mostboxFile":`文件`,"chat.attachment.downloadStarted":`开始下载附件`,"chat.attachment.downloadCompleted":`{fileName} 下载完成`,"chat.attachment.downloadCancelled":`附件下载已取消`,"chat.attachment.downloadFailed":`附件下载失败`,"chat.attachment.localAvailable":`本机已有`,"chat.attachment.previewAvailable":`可预览`,"chat.attachment.downloadAvailable":`可下载`,"chat.attachment.downloading":`下载中`,"chat.attachment.download":`下载`,"chat.attachment.preview":`预览`,"chat.attachment.retry":`重试`,"chat.attachment.noSeedsTitle":`暂时没有在线种子`,"chat.attachment.noSeedsFallback":`暂时没有发现在线种子。请确认分享者或其他下载者仍在线做种。`,"chat.attachment.retryCheck":`再次检测`,"chat.noteDraft.settingsTitle":`知识库`,"chat.noteDraft.historyTitle":`{room} 聊天记录 {time}`,"chat.noteDraft.heading":`聊天记录`,"chat.noteDraft.room":`聊天`,"chat.noteDraft.exportedAt":`保存时间`,"chat.noteDraft.messageCount":`消息数`,"chat.noteDraft.message":`消息`,"chat.noteDraft.attachment":`附件`,"chat.noteDraft.file":`文件`,"chat.noteDraft.saveAll":`保存聊天记录到知识库`,"chat.noteDraft.saveAllDesc":`将当前聊天里的消息、时间和附件链接整理成 Markdown 草稿。`,"chat.noteDraft.empty":`当前聊天还没有可保存的消息`,"chat.noteDraft.saveFailed":`无法保存到知识库`,"chat.channel.createdAt":`创建时间`,"chat.ticket.create":`创建工单`,"chat.title":`聊天`,"chat.search.placeholder":`搜索`,"chat.empty.noChannels":`暂无聊天`,"chat.empty.noMatches":`未找到聊天`,"chat.joinChannel":`加入聊天`,"chat.channelSettings":`聊天设置`,"chat.empty.noMessages":`暂无消息,开始聊天吧!`,"chat.composer.placeholder":`输入消息...`,"chat.composer.signInPlaceholder":`请先登录后发言`,"chat.select.title":`选择聊天`,"chat.select.desc":`从左侧边栏选择一个聊天或房间,或创建一个新的聊天`,"chat.openChannelList":`打开聊天列表`,"chat.join.placeholder":`房间 ID:3-30 位字母、数字、_ 或 -`,"chat.join.confirm":`加入`,"chat.join.joining":`加入中...`,"chat.renameChannel":`设置聊天备注`,"chat.remark.placeholder":`输入聊天备注`,"chat.remark.save":`保存`,"chat.remark.saving":`保存中...`,"chat.remark.tooLong":`备注名称最多 50 个字符`,"chat.leaveChannel":`退出聊天`,"chat.leaveConfirm":`确定要退出聊天 "{channel}" 吗?`,"chat.leaving":`退出中...`,"chat.details.title":`设置`,"chat.details.members":`成员 ({count})`,"chat.details.showAddressSuffix":`显示 #地址后四位`,"chat.details.channelId":`房间 ID`,"chat.error.messages":`无法读取聊天消息`,"chat.error.nodeId":`无法读取节点 ID`,"chat.error.channelList":`无法读取聊天列表`,"chat.error.leave":`退出聊天失败`,"chat.error.pin":`置顶失败`,"chat.error.unpin":`取消置顶失败`,"chat.error.join":`加入聊天失败`,"chat.error.send":`发送失败`,"chat.error.attachmentSend":`附件发送失败`,"chat.error.remark":`设置备注失败`,"chat.error.rename":`重命名失败`,"chat.validation.nameMin":`房间名至少 {count} 个字符`,"chat.validation.nameMax":`房间名最多 {count} 个字符`,"chat.validation.dotReserved":`点号为系统保留,不能用于手动房间 ID`,"chat.validation.allowedChars":`房间名只能包含字母、数字、下划线和连字符`},_={"chat.unread":`有新訊息`,"chat.channelActions":`聊天操作`,"chat.pin":`置頂`,"chat.unpin":`取消置頂`,"chat.rename":`重新命名`,"chat.delete":`刪除`,"chat.noMembers":`暫無成員`,"chat.attachmentType":`附件型別`,"chat.attachment.add":`新增附件`,"chat.attachment.image":`圖片`,"chat.attachment.video":`影片`,"chat.attachment.file":`檔案`,"chat.voice.menu":`語音通話`,"chat.voice.title":`語音房間`,"chat.voice.subtitle":`即時語音`,"chat.voice.empty":`還沒有人加入語音`,"chat.voice.join":`加入語音`,"chat.voice.joining":`加入中...`,"chat.voice.mute":`靜音`,"chat.voice.unmute":`取消靜音`,"chat.voice.leave":`離開`,"chat.voice.you":`我`,"chat.voice.connected":`已連線`,"chat.voice.connecting":`連線中`,"chat.voice.memberMuted":`已靜音`,"chat.voice.memberSpeaking":`麥克風開啟`,"chat.voice.bannerActive":`{count} 人正在通話`,"chat.voice.bannerJoined":`你正在和 {count} 人通話`,"chat.voice.minimize":`收起`,"chat.voice.expand":`展開語音`,"chat.voice.floatingActive":`{count} 人`,"chat.system.memberJoined":`{name} 加入了群聊`,"chat.sendMessage":`傳送訊息`,"chat.sending":`傳送中...`,"chat.checking":`檢測中`,"chat.mostboxFile":`檔案`,"chat.attachment.downloadStarted":`開始下載附件`,"chat.attachment.downloadCompleted":`{fileName} 下載完成`,"chat.attachment.downloadCancelled":`附件下載已取消`,"chat.attachment.downloadFailed":`附件下載失敗`,"chat.attachment.localAvailable":`本機已有`,"chat.attachment.previewAvailable":`可預覽`,"chat.attachment.downloadAvailable":`可下載`,"chat.attachment.downloading":`下載中`,"chat.attachment.download":`下載`,"chat.attachment.preview":`預覽`,"chat.attachment.retry":`重試`,"chat.attachment.noSeedsTitle":`暫時沒有線上種子`,"chat.attachment.noSeedsFallback":`暫時沒有發現線上種子。請確認分享者或其他下載者仍線上做種。`,"chat.attachment.retryCheck":`再次檢測`,"chat.noteDraft.settingsTitle":`知識庫`,"chat.noteDraft.historyTitle":`{room} 聊天記錄 {time}`,"chat.noteDraft.heading":`聊天記錄`,"chat.noteDraft.room":`聊天`,"chat.noteDraft.exportedAt":`儲存時間`,"chat.noteDraft.messageCount":`訊息數`,"chat.noteDraft.message":`訊息`,"chat.noteDraft.attachment":`附件`,"chat.noteDraft.file":`檔案`,"chat.noteDraft.saveAll":`儲存聊天記錄到知識庫`,"chat.noteDraft.saveAllDesc":`將目前聊天裡的訊息、時間和附件連結整理成 Markdown 草稿。`,"chat.noteDraft.empty":`目前聊天還沒有可儲存的訊息`,"chat.noteDraft.saveFailed":`無法儲存到知識庫`,"chat.channel.createdAt":`建立時間`,"chat.ticket.create":`建立工單`,"chat.title":`聊天`,"chat.search.placeholder":`搜尋`,"chat.empty.noChannels":`暫無聊天`,"chat.empty.noMatches":`未找到聊天`,"chat.joinChannel":`加入聊天`,"chat.channelSettings":`聊天設定`,"chat.empty.noMessages":`暫無訊息,開始聊天吧!`,"chat.composer.placeholder":`輸入訊息...`,"chat.composer.signInPlaceholder":`請先登入後發言`,"chat.select.title":`選擇聊天`,"chat.select.desc":`從左側邊欄選擇一個聊天或房間,或建立一個新的聊天`,"chat.openChannelList":`開啟聊天列表`,"chat.join.placeholder":`房間 ID:3-30 位字母、數字、_ 或 -`,"chat.join.confirm":`加入`,"chat.join.joining":`加入中...`,"chat.renameChannel":`設定聊天備註`,"chat.remark.placeholder":`輸入聊天備註`,"chat.remark.save":`儲存`,"chat.remark.saving":`儲存中...`,"chat.remark.tooLong":`備註名稱最多 50 個字元`,"chat.leaveChannel":`退出聊天`,"chat.leaveConfirm":`確定要退出聊天 "{channel}" 嗎?`,"chat.leaving":`退出中...`,"chat.details.title":`設定`,"chat.details.members":`成員 ({count})`,"chat.details.showAddressSuffix":`顯示 #地址後四位`,"chat.details.channelId":`房間 ID`,"chat.error.messages":`無法讀取聊天訊息`,"chat.error.nodeId":`無法讀取節點 ID`,"chat.error.channelList":`無法讀取聊天列表`,"chat.error.leave":`退出聊天失敗`,"chat.error.pin":`置頂失敗`,"chat.error.unpin":`取消置頂失敗`,"chat.error.join":`加入聊天失敗`,"chat.error.send":`傳送失敗`,"chat.error.attachmentSend":`附件傳送失敗`,"chat.error.remark":`設定備註失敗`,"chat.error.rename":`重新命名失敗`,"chat.validation.nameMin":`房間名至少 {count} 個字元`,"chat.validation.nameMax":`房間名最多 {count} 個字元`,"chat.validation.dotReserved":`點號為系統保留,不能用於手動房間 ID`,"chat.validation.allowedChars":`房間名只能包含字母、數字、下劃線和連字元`},v={"chat.unread":`New messages`,"chat.channelActions":`Chat actions`,"chat.pin":`Pin`,"chat.unpin":`Unpin`,"chat.rename":`Rename`,"chat.delete":`Delete`,"chat.noMembers":`No members yet`,"chat.attachmentType":`Attachment type`,"chat.attachment.add":`Add attachment`,"chat.attachment.image":`Image`,"chat.attachment.video":`Video`,"chat.attachment.file":`File`,"chat.voice.menu":`Voice call`,"chat.voice.title":`Voice room`,"chat.voice.subtitle":`Live voice`,"chat.voice.empty":`No one has joined voice yet`,"chat.voice.join":`Join voice`,"chat.voice.joining":`Joining...`,"chat.voice.mute":`Mute`,"chat.voice.unmute":`Unmute`,"chat.voice.leave":`Leave`,"chat.voice.you":`You`,"chat.voice.connected":`Connected`,"chat.voice.connecting":`Connecting`,"chat.voice.memberMuted":`Muted`,"chat.voice.memberSpeaking":`Mic on`,"chat.voice.bannerActive":`{count} in voice`,"chat.voice.bannerJoined":`You are talking with {count}`,"chat.voice.minimize":`Minimize`,"chat.voice.expand":`Expand voice`,"chat.voice.floatingActive":`{count} people`,"chat.system.memberJoined":`{name} joined the chat`,"chat.sendMessage":`Send message`,"chat.sending":`Sending...`,"chat.checking":`Checking`,"chat.mostboxFile":`File`,"chat.attachment.downloadStarted":`Attachment download started`,"chat.attachment.downloadCompleted":`{fileName} downloaded`,"chat.attachment.downloadCancelled":`Attachment download cancelled`,"chat.attachment.downloadFailed":`Attachment download failed`,"chat.attachment.localAvailable":`Already on this device`,"chat.attachment.previewAvailable":`Ready to preview`,"chat.attachment.downloadAvailable":`Ready to download`,"chat.attachment.downloading":`Downloading`,"chat.attachment.download":`Download`,"chat.attachment.preview":`Preview`,"chat.attachment.retry":`Retry`,"chat.attachment.noSeedsTitle":`No online seeders right now`,"chat.attachment.noSeedsFallback":`No online seeders were found. Make sure the sharer or another downloader is still seeding.`,"chat.attachment.retryCheck":`Check again`,"chat.noteDraft.settingsTitle":`Knowledge base`,"chat.noteDraft.historyTitle":`{room} chat history {time}`,"chat.noteDraft.heading":`Chat note`,"chat.noteDraft.room":`Chat`,"chat.noteDraft.exportedAt":`Saved at`,"chat.noteDraft.messageCount":`Messages`,"chat.noteDraft.message":`Message`,"chat.noteDraft.attachment":`Attachment`,"chat.noteDraft.file":`File`,"chat.noteDraft.saveAll":`Save chat history to knowledge base`,"chat.noteDraft.saveAllDesc":`Turn the current chat messages, timestamps, and attachment links into an editable Markdown draft.`,"chat.noteDraft.empty":`This chat has no messages to save yet`,"chat.noteDraft.saveFailed":`Could not save to knowledge base`,"chat.channel.createdAt":`Created`,"chat.ticket.create":`Create ticket`,"chat.title":`Chat`,"chat.search.placeholder":`Search`,"chat.empty.noChannels":`No chats yet`,"chat.empty.noMatches":`No chats found`,"chat.joinChannel":`Join chat`,"chat.channelSettings":`Chat settings`,"chat.empty.noMessages":`No messages yet. Start the conversation.`,"chat.composer.placeholder":`Type a message...`,"chat.composer.signInPlaceholder":`Sign in before sending messages`,"chat.select.title":`Select a chat`,"chat.select.desc":`Choose a chat or room from the sidebar, or create a new chat.`,"chat.openChannelList":`Open chat list`,"chat.join.placeholder":`Room ID: 3-30 letters, numbers, _ or -`,"chat.join.confirm":`Join`,"chat.join.joining":`Joining...`,"chat.renameChannel":`Set chat remark`,"chat.remark.placeholder":`Enter chat remark`,"chat.remark.save":`Save`,"chat.remark.saving":`Saving...`,"chat.remark.tooLong":`Remark name must be 50 characters or fewer`,"chat.leaveChannel":`Leave chat`,"chat.leaveConfirm":`Leave chat "{channel}"?`,"chat.leaving":`Leaving...`,"chat.details.title":`Settings`,"chat.details.members":`Members ({count})`,"chat.details.showAddressSuffix":`Show #address suffix`,"chat.details.channelId":`Room ID`,"chat.error.messages":`Failed to read chat messages`,"chat.error.nodeId":`Failed to read node ID`,"chat.error.channelList":`Failed to read chat list`,"chat.error.leave":`Failed to leave chat`,"chat.error.pin":`Failed to pin chat`,"chat.error.unpin":`Failed to unpin chat`,"chat.error.join":`Failed to join chat`,"chat.error.send":`Failed to send message`,"chat.error.attachmentSend":`Failed to send attachment`,"chat.error.remark":`Failed to set remark`,"chat.error.rename":`Failed to rename chat`,"chat.validation.nameMin":`Room name must be at least {count} characters`,"chat.validation.nameMax":`Room name must be at most {count} characters`,"chat.validation.dotReserved":`Dots are reserved for the system and cannot be used in manual room IDs`,"chat.validation.allowedChars":`Room names can only contain letters, numbers, underscores, and hyphens`},y={"chatJoin.error.unknownFixture":`未知预设邀请:{fixture}`,"chatJoin.error.missingToken":`缺少 token 参数`,"chatJoin.error.missingPub":`缺少 pub 参数`,"chatJoin.error.remoteConnectFailed":`远程节点连接失败`,"chatJoin.error.noBackend":`未连接后端,邀请中也没有 node_url`,"chatJoin.error.decrypt":`解密失败`,"chatJoin.error.invalidInvite":`邀请内容缺少 uid 或 channels[].id`,"chatJoin.error.request":`请求出错: {message}`,"chatJoin.action.retry":`重试`,"chatJoin.demo.title":`聊天邀请 Demo`,"chatJoin.demo.parseSection":`解析现有链接`,"chatJoin.demo.inviteSection":`邀请内容`,"chatJoin.demo.cryptoSection":`加密参数`,"chatJoin.demo.outputSection":`生成结果`,"chatJoin.demo.field.existingLink":`现有邀请链接`,"chatJoin.demo.field.origin":`链接域名`,"chatJoin.demo.field.uid":`用户 ID`,"chatJoin.demo.field.name":`昵称`,"chatJoin.demo.field.locale":`语言`,"chatJoin.demo.field.theme":`主题`,"chatJoin.demo.field.appearance":`外观`,"chatJoin.demo.field.channelId":`频道 ID`,"chatJoin.demo.field.channelName":`频道备注`,"chatJoin.demo.field.nodeUrl":`远程节点地址`,"chatJoin.demo.field.nodeInvite":`远程节点邀请码`,"chatJoin.demo.field.logo":`浅色 Logo`,"chatJoin.demo.field.logoDark":`深色 Logo`,"chatJoin.demo.field.avatar":`头像`,"chatJoin.demo.field.data":`扩展数据`,"chatJoin.demo.field.recipientPublicKey":`接收方公钥`,"chatJoin.demo.field.senderUsername":`发送方用户名`,"chatJoin.demo.field.senderPassword":`发送方密码`,"chatJoin.demo.field.senderPublicKey":`发送方公钥`,"chatJoin.demo.field.payload":`邀请内容 JSON`,"chatJoin.demo.field.token":`加密令牌`,"chatJoin.demo.field.pub":`发送方公钥`,"chatJoin.demo.field.link":`邀请链接`,"chatJoin.demo.action.parseLink":`解析链接`,"chatJoin.demo.action.parsing":`解析中...`,"chatJoin.demo.action.deriveSender":`派生发送方`,"chatJoin.demo.action.generate":`生成链接`,"chatJoin.demo.action.openLink":`打开链接`,"chatJoin.demo.status.linkParsed":`已解析 token 和 pub`,"chatJoin.demo.status.linkDecrypted":`已解密 payload 并回填表单`,"chatJoin.demo.error.linkInvalid":`请输入包含 token 和 pub 的邀请链接`,"chatJoin.demo.error.parseInvalidPayload":`链接已解析,但解密结果不是有效邀请 payload`,"chatJoin.demo.error.parseDecryptFailed":`链接已解析,但解密失败: {message}`,"chatJoin.demo.error.uidRequired":`uid 不能为空`,"chatJoin.demo.error.channelInvalid":`频道 ID 需要是 3-30 位字母、数字、_ 或 -`,"chatJoin.demo.error.recipientPublicInvalid":`接收方公钥必须是 32 字节 0x hex`,"chatJoin.demo.error.senderKeysInvalid":`发送方密钥无效,请重新派生`,"chatJoin.demo.error.encryptFailed":`加密失败,请检查密钥和 payload`},b={"chatJoin.error.unknownFixture":`未知預設邀請:{fixture}`,"chatJoin.error.missingToken":`缺少 token 參數`,"chatJoin.error.missingPub":`缺少 pub 參數`,"chatJoin.error.remoteConnectFailed":`遠端節點連線失敗`,"chatJoin.error.noBackend":`未連線後端,邀請中也沒有 node_url`,"chatJoin.error.decrypt":`解密失敗`,"chatJoin.error.invalidInvite":`邀請內容缺少 uid 或 channels[].id`,"chatJoin.error.request":`請求出錯: {message}`,"chatJoin.action.retry":`重試`,"chatJoin.demo.title":`聊天邀請 Demo`,"chatJoin.demo.parseSection":`解析現有連結`,"chatJoin.demo.inviteSection":`邀請內容`,"chatJoin.demo.cryptoSection":`加密參數`,"chatJoin.demo.outputSection":`生成結果`,"chatJoin.demo.field.existingLink":`現有邀請連結`,"chatJoin.demo.field.origin":`連結域名`,"chatJoin.demo.field.uid":`使用者 ID`,"chatJoin.demo.field.name":`暱稱`,"chatJoin.demo.field.locale":`語言`,"chatJoin.demo.field.theme":`主題`,"chatJoin.demo.field.appearance":`外觀`,"chatJoin.demo.field.channelId":`頻道 ID`,"chatJoin.demo.field.channelName":`頻道備註`,"chatJoin.demo.field.nodeUrl":`遠端節點位址`,"chatJoin.demo.field.nodeInvite":`遠端節點邀請碼`,"chatJoin.demo.field.logo":`淺色 Logo`,"chatJoin.demo.field.logoDark":`深色 Logo`,"chatJoin.demo.field.avatar":`頭像`,"chatJoin.demo.field.data":`擴充資料`,"chatJoin.demo.field.recipientPublicKey":`接收方公鑰`,"chatJoin.demo.field.senderUsername":`發送方使用者名稱`,"chatJoin.demo.field.senderPassword":`發送方密碼`,"chatJoin.demo.field.senderPublicKey":`發送方公鑰`,"chatJoin.demo.field.payload":`邀請內容 JSON`,"chatJoin.demo.field.token":`加密權杖`,"chatJoin.demo.field.pub":`發送方公鑰`,"chatJoin.demo.field.link":`邀請連結`,"chatJoin.demo.action.parseLink":`解析連結`,"chatJoin.demo.action.parsing":`解析中...`,"chatJoin.demo.action.deriveSender":`派生發送方`,"chatJoin.demo.action.generate":`生成連結`,"chatJoin.demo.action.openLink":`開啟連結`,"chatJoin.demo.status.linkParsed":`已解析 token 和 pub`,"chatJoin.demo.status.linkDecrypted":`已解密 payload 並回填表單`,"chatJoin.demo.error.linkInvalid":`請輸入包含 token 和 pub 的邀請連結`,"chatJoin.demo.error.parseInvalidPayload":`連結已解析,但解密結果不是有效邀請 payload`,"chatJoin.demo.error.parseDecryptFailed":`連結已解析,但解密失敗: {message}`,"chatJoin.demo.error.uidRequired":`uid 不能為空`,"chatJoin.demo.error.channelInvalid":`頻道 ID 需要是 3-30 位字母、數字、_ 或 -`,"chatJoin.demo.error.recipientPublicInvalid":`接收方公鑰必須是 32 位元組 0x hex`,"chatJoin.demo.error.senderKeysInvalid":`發送方密鑰無效,請重新派生`,"chatJoin.demo.error.encryptFailed":`加密失敗,請檢查密鑰和 payload`},x={"chatJoin.error.unknownFixture":`Unknown preset invite: {fixture}`,"chatJoin.error.missingToken":`Missing token parameter`,"chatJoin.error.missingPub":`Missing pub parameter`,"chatJoin.error.remoteConnectFailed":`Failed to connect to remote node`,"chatJoin.error.noBackend":`No backend is connected and the invite has no node_url`,"chatJoin.error.decrypt":`Decrypt failed`,"chatJoin.error.invalidInvite":`Invite is missing uid or channels[].id`,"chatJoin.error.request":`Request failed: {message}`,"chatJoin.action.retry":`Retry`,"chatJoin.demo.title":`Chat invite demo`,"chatJoin.demo.parseSection":`Parse existing link`,"chatJoin.demo.inviteSection":`Invite payload`,"chatJoin.demo.cryptoSection":`Crypto inputs`,"chatJoin.demo.outputSection":`Generated output`,"chatJoin.demo.field.existingLink":`Existing invite link`,"chatJoin.demo.field.origin":`Link origin`,"chatJoin.demo.field.uid":`User ID`,"chatJoin.demo.field.name":`Display name`,"chatJoin.demo.field.locale":`Locale`,"chatJoin.demo.field.theme":`Theme`,"chatJoin.demo.field.appearance":`Appearance`,"chatJoin.demo.field.channelId":`Channel ID`,"chatJoin.demo.field.channelName":`Channel remark`,"chatJoin.demo.field.nodeUrl":`Remote node URL`,"chatJoin.demo.field.nodeInvite":`Remote node invite code`,"chatJoin.demo.field.logo":`Light logo`,"chatJoin.demo.field.logoDark":`Dark logo`,"chatJoin.demo.field.avatar":`Avatar`,"chatJoin.demo.field.data":`Extra data`,"chatJoin.demo.field.recipientPublicKey":`Recipient public key`,"chatJoin.demo.field.senderUsername":`Sender username`,"chatJoin.demo.field.senderPassword":`Sender password`,"chatJoin.demo.field.senderPublicKey":`Sender public key`,"chatJoin.demo.field.payload":`Invite payload JSON`,"chatJoin.demo.field.token":`Encrypted token`,"chatJoin.demo.field.pub":`Sender public key`,"chatJoin.demo.field.link":`Invite link`,"chatJoin.demo.action.parseLink":`Parse link`,"chatJoin.demo.action.parsing":`Parsing...`,"chatJoin.demo.action.deriveSender":`Derive sender`,"chatJoin.demo.action.generate":`Generate link`,"chatJoin.demo.action.openLink":`Open link`,"chatJoin.demo.status.linkParsed":`Parsed token and pub`,"chatJoin.demo.status.linkDecrypted":`Decrypted payload and filled the form`,"chatJoin.demo.error.linkInvalid":`Enter an invite link containing token and pub`,"chatJoin.demo.error.parseInvalidPayload":`The link was parsed, but the decrypted result is not a valid invite payload.`,"chatJoin.demo.error.parseDecryptFailed":`The link was parsed, but decrypt failed: {message}`,"chatJoin.demo.error.uidRequired":`uid is required`,"chatJoin.demo.error.channelInvalid":`Channel ID must be 3-30 letters, numbers, _ or -`,"chatJoin.demo.error.recipientPublicInvalid":`Recipient public key must be 32-byte 0x hex`,"chatJoin.demo.error.senderKeysInvalid":`Sender keys are invalid. Derive them again.`,"chatJoin.demo.error.encryptFailed":`Encryption failed. Check the keys and payload.`},S={"preview.close":`关闭预览`,"preview.loadFailed":`加载失败`,"preview.audioLoading":`正在加载音频预览...`,"preview.unsupported":`无法预览`,"preview.textLoading":`正在加载文本预览...`,"preview.firstSyncHint":`如果是初次预览,可能需要等待 P2P 网络同步`,"preview.emptyFile":`(文件为空)`,"move.title":`移动到`,"move.selectedCount":`已选 {count} 个项目`,"move.pathPlaceholder":`输入路径创建嵌套文件夹`,"move.pathExample":`如 图片/壁纸`,"move.noSubfolders":`该目录下没有子文件夹`,"move.action":`移动`,"move.root":`全部内容`,"app.nav.local":`文件库`,"app.nav.favorites":`收藏`,"app.nav.trash":`回收站`,"app.search.placeholder":`搜索文件库...`,"app.emptyTrash":`清空回收站`,"app.publishFile":`添加到文件库`,"app.downloadFile":`下载到文件库`,"app.allContent":`文件库`,"app.noMatches":`未找到相关文件`,"app.trashEmpty":`回收站是空的`,"app.noFavorites":`暂无的收藏`,"app.noLocalFiles":`暂无文件库内容`,"app.openFileNavigation":`打开文件导航`,"app.deletedOn":`删除于 {date}`,"app.shareLink":`分享链接`,"app.shareMostLink":`MostBox 链接`,"app.shareWebLink":`网页入口`,"app.copyMostShareLink":`复制 MostBox 链接`,"app.copyWebShareLink":`复制网页入口链接`,"app.shareSeedNote":`两种链接都指向同一个 CID;本机在线时可下载,下载者完成后会默认继续做种。`,"app.downloadLink.placeholder":`粘贴 most://、网页入口或 CID`,"app.download.validation.empty":`请先粘贴分享链接或 CID。`,"app.download.validation.invalidUrl":`链接格式不正确,请粘贴 most://、网页入口或 CID。`,"app.download.validation.protocol":`链接格式不正确,请确认输入末尾是有效的 CID 或 CID?filename=...。`,"app.download.validation.path":`链接路径不受支持,请确认输入末尾是 CID 或 CID?filename=...。`,"app.download.validation.invalidCid":`CID 无效,请确认输入末尾是有效的 CID 或 CID?filename=...。`,"app.download.validation.cidV1":`链接中的 CID 必须是 CID v1。`,"app.download.validation.cidDigest":`链接中的 CID digest 长度不正确。`,"app.download.validation.unsupportedParam":`分享链接包含不支持的参数:{param}。`,"app.download.validation.generic":`分享链接无效,请检查后重试。`,"app.check":`检测`,"app.checking":`检测中...`,"app.passed":`已通过`,"app.startDownload":`开始下载`,"app.downloading":`下载中...`,"app.selectedItems":`已选 {count} 项`,"app.restore":`恢复`,"app.permanentDelete":`永久删除`,"app.preview":`预览`,"app.favorite":`收藏`,"app.rename":`重命名`,"app.move":`移动`,"app.delete":`删除`,"app.pullToLocal":`拉取到本机`,"app.share":`分享`,"app.saveAs":`另存为`,"app.transfers":`传输管理`,"app.noTransfers":`暂无传输任务`,"app.completed":`完成`,"app.failed":`失败`,"app.cancelled":`已取消`,"app.cancelling":`取消中`,"app.transferProgress":`{fileName} 传输进度`,"app.clearTrash.title":`清空回收站`,"app.clearTrash.message":`确定要清空回收站吗?此操作不可恢复!`,"app.clear":`清空`,"app.batchDelete":`批量删除`,"app.deleteSelectedPermanent":`确定要永久删除选中的 {count} 个项目吗?此操作不可恢复!`,"app.deleteSelected":`确定要删除选中的 {count} 个项目吗?`,"app.renameFolder":`重命名文件夹`,"app.renameFile":`重命名文件`,"app.enterNewName":`请输入新名称`,"app.fileAlreadyExists":`{fileName} 已存在`,"app.fileAlreadyLocal":`{fileName} 已在本机`,"app.fileAvailable":`{fileName} 可下载`,"app.fileDownloadCompleted":`{fileName} 下载完成`,"app.publishFailedWithFile":`添加失败: {fileName}`,"app.publish.fileTooLarge":`超过最大 {maxSize} 限制`,"app.downloadFailedWithError":`下载失败: {error}`,"app.saveFailedWithError":`保存失败: {error}`,"app.toast.restored":`已恢复`,"app.toast.restoreFailed":`恢复失败`,"app.toast.trashEmptied":`回收站已清空`,"app.toast.emptyFailed":`清空失败`,"app.toast.favorited":`已收藏`,"app.toast.unfavorited":`已取消收藏`,"app.toast.actionFailed":`操作失败`,"app.toast.deletedPermanently":`已永久删除`,"app.toast.deleted":`已删除`,"app.toast.deleteFailed":`删除失败`,"app.toast.moved":`已移动`,"app.toast.moveFailed":`移动失败`,"app.toast.renamed":`已重命名`,"app.toast.renameFailed":`重命名失败`,"app.toast.signInBeforePublish":`请先登录后添加文件`,"app.toast.signInBeforeDownload":`请先登录后下载文件`,"app.toast.checkLinkFirst":`请先检测链接可用性`,"app.toast.downloadStarted":`下载已开始`,"app.toast.downloadFailed":`下载失败`,"app.toast.cancelFailed":`取消失败`,"app.toast.fileNotLocal":`文件尚未保存在本机,请先拉取到本机`,"app.toast.getFileFailed":`获取文件失败`,"app.toast.fileSaved":`文件已保存`,"app.toast.fileDownloaded":`文件已下载`,"app.toast.startPullLocal":`开始拉取到本机`,"app.toast.pulledAndSeeding":`已拉取到本机并开始做种`,"app.toast.pullFailed":`拉取失败`,"app.toast.downloadCancelled":`下载已取消`,"app.toast.checkPassed":`检测通过`,"app.downloadFallbackName":`下载文件`},C={"preview.close":`關閉預覽`,"preview.loadFailed":`載入失敗`,"preview.audioLoading":`正在載入音訊預覽...`,"preview.unsupported":`無法預覽`,"preview.textLoading":`正在載入文字預覽...`,"preview.firstSyncHint":`如果是初次預覽,可能需要等待 P2P 網路同步`,"preview.emptyFile":`(檔案為空)`,"move.title":`移動到`,"move.selectedCount":`已選 {count} 個項目`,"move.pathPlaceholder":`輸入路徑建立巢狀資料夾`,"move.pathExample":`如 圖片/桌布`,"move.noSubfolders":`該目錄下沒有子資料夾`,"move.action":`移動`,"move.root":`全部內容`,"app.nav.local":`檔案庫`,"app.nav.favorites":`收藏`,"app.nav.trash":`垃圾桶`,"app.search.placeholder":`搜尋檔案庫...`,"app.emptyTrash":`清空垃圾桶`,"app.publishFile":`新增到檔案庫`,"app.downloadFile":`下載到檔案庫`,"app.allContent":`檔案庫`,"app.noMatches":`未找到相關檔案`,"app.trashEmpty":`垃圾桶是空的`,"app.noFavorites":`暫無的收藏`,"app.noLocalFiles":`暫無檔案庫內容`,"app.openFileNavigation":`開啟檔案導覽`,"app.deletedOn":`刪除於 {date}`,"app.shareLink":`分享連結`,"app.shareMostLink":`MostBox 連結`,"app.shareWebLink":`網頁入口`,"app.copyMostShareLink":`複製 MostBox 連結`,"app.copyWebShareLink":`複製網頁入口連結`,"app.shareSeedNote":`兩種連結都指向同一個 CID;本機線上時可下載,下載者完成後預設繼續做種。`,"app.downloadLink.placeholder":`貼上 most://、網頁入口或 CID`,"app.download.validation.empty":`請先貼上分享連結或 CID。`,"app.download.validation.invalidUrl":`連結格式不正確,請貼上 most://、網頁入口或 CID。`,"app.download.validation.protocol":`連結格式不正確,請確認輸入末尾是有效的 CID 或 CID?filename=...。`,"app.download.validation.path":`連結路徑不受支援,請確認輸入末尾是 CID 或 CID?filename=...。`,"app.download.validation.invalidCid":`CID 無效,請確認輸入末尾是有效的 CID 或 CID?filename=...。`,"app.download.validation.cidV1":`連結中的 CID 必須是 CID v1。`,"app.download.validation.cidDigest":`連結中的 CID digest 長度不正確。`,"app.download.validation.unsupportedParam":`分享連結包含不支援的參數:{param}。`,"app.download.validation.generic":`分享連結無效,請檢查後重試。`,"app.check":`檢測`,"app.checking":`檢測中...`,"app.passed":`已通過`,"app.startDownload":`開始下載`,"app.downloading":`下載中...`,"app.selectedItems":`已選 {count} 項`,"app.restore":`恢復`,"app.permanentDelete":`永久刪除`,"app.preview":`預覽`,"app.favorite":`收藏`,"app.rename":`重新命名`,"app.move":`移動`,"app.delete":`刪除`,"app.pullToLocal":`拉取到本機`,"app.share":`分享`,"app.saveAs":`另存新檔`,"app.transfers":`傳輸管理`,"app.noTransfers":`暫無傳輸任務`,"app.completed":`完成`,"app.failed":`失敗`,"app.cancelled":`已取消`,"app.cancelling":`取消中`,"app.transferProgress":`{fileName} 傳輸進度`,"app.clearTrash.title":`清空垃圾桶`,"app.clearTrash.message":`確定要清空垃圾桶嗎?此操作不可恢復!`,"app.clear":`清空`,"app.batchDelete":`批次刪除`,"app.deleteSelectedPermanent":`確定要永久刪除選中的 {count} 個項目嗎?此操作不可恢復!`,"app.deleteSelected":`確定要刪除選中的 {count} 個項目嗎?`,"app.renameFolder":`重新命名資料夾`,"app.renameFile":`重新命名檔案`,"app.enterNewName":`請輸入新名稱`,"app.fileAlreadyExists":`{fileName} 已存在`,"app.fileAlreadyLocal":`{fileName} 已在本機`,"app.fileAvailable":`{fileName} 可下載`,"app.fileDownloadCompleted":`{fileName} 下載完成`,"app.publishFailedWithFile":`新增失敗: {fileName}`,"app.publish.fileTooLarge":`超過最大 {maxSize} 限制`,"app.downloadFailedWithError":`下載失敗: {error}`,"app.saveFailedWithError":`儲存失敗: {error}`,"app.toast.restored":`已恢復`,"app.toast.restoreFailed":`恢復失敗`,"app.toast.trashEmptied":`垃圾桶已清空`,"app.toast.emptyFailed":`清空失敗`,"app.toast.favorited":`已收藏`,"app.toast.unfavorited":`已取消收藏`,"app.toast.actionFailed":`操作失敗`,"app.toast.deletedPermanently":`已永久刪除`,"app.toast.deleted":`已刪除`,"app.toast.deleteFailed":`刪除失敗`,"app.toast.moved":`已移動`,"app.toast.moveFailed":`移動失敗`,"app.toast.renamed":`已重新命名`,"app.toast.renameFailed":`重新命名失敗`,"app.toast.signInBeforePublish":`請先登入後新增檔案`,"app.toast.signInBeforeDownload":`請先登入後下載檔案`,"app.toast.checkLinkFirst":`請先檢測連結可用性`,"app.toast.downloadStarted":`下載已開始`,"app.toast.downloadFailed":`下載失敗`,"app.toast.cancelFailed":`取消失敗`,"app.toast.fileNotLocal":`檔案尚未儲存在本機,請先拉取到本機`,"app.toast.getFileFailed":`取得檔案失敗`,"app.toast.fileSaved":`檔案已儲存`,"app.toast.fileDownloaded":`檔案已下載`,"app.toast.startPullLocal":`開始拉取到本機`,"app.toast.pulledAndSeeding":`已拉取到本機並開始做種`,"app.toast.pullFailed":`拉取失敗`,"app.toast.downloadCancelled":`下載已取消`,"app.toast.checkPassed":`檢測通過`,"app.downloadFallbackName":`下載檔案`},w={"preview.close":`Close preview`,"preview.loadFailed":`Failed to load`,"preview.audioLoading":`Loading audio preview...`,"preview.unsupported":`Preview unavailable`,"preview.textLoading":`Loading text preview...`,"preview.firstSyncHint":`For a first preview, P2P sync may take a moment.`,"preview.emptyFile":`(File is empty)`,"move.title":`Move to`,"move.selectedCount":`Selected {count} items`,"move.pathPlaceholder":`Enter a path to create nested folders`,"move.pathExample":`Example: Images/Wallpapers`,"move.noSubfolders":`No subfolders in this folder`,"move.action":`Move`,"move.root":`All content`,"app.nav.local":`File library`,"app.nav.favorites":`Favorites`,"app.nav.trash":`Trash`,"app.search.placeholder":`Search file library...`,"app.emptyTrash":`Empty trash`,"app.publishFile":`Add to file library`,"app.downloadFile":`Download to file library`,"app.allContent":`File library`,"app.noMatches":`No matching files found`,"app.trashEmpty":`Trash is empty`,"app.noFavorites":`No favorites yet`,"app.noLocalFiles":`No file library content yet`,"app.openFileNavigation":`Open file navigation`,"app.deletedOn":`Deleted on {date}`,"app.shareLink":`Share links`,"app.shareMostLink":`MostBox link`,"app.shareWebLink":`Web entry`,"app.copyMostShareLink":`Copy MostBox link`,"app.copyWebShareLink":`Copy web entry link`,"app.shareSeedNote":`Both links point to the same CID. It is available while this device is online, and completed downloaders keep seeding by default.`,"app.downloadLink.placeholder":`Paste most://, a web entry, or a CID`,"app.download.validation.empty":`Paste a share link or CID first.`,"app.download.validation.invalidUrl":`The link format is invalid. Paste most://, a web entry, or a CID.`,"app.download.validation.protocol":`The link is invalid. Make sure it ends with a valid CID or CID?filename=...`,"app.download.validation.path":`Link paths are not supported. Make sure it ends with CID or CID?filename=...`,"app.download.validation.invalidCid":`The CID is invalid. Make sure the input ends with a valid CID or CID?filename=...`,"app.download.validation.cidV1":`The CID in this link must be CID v1.`,"app.download.validation.cidDigest":`The CID digest in this link has the wrong length.`,"app.download.validation.unsupportedParam":`The share link contains an unsupported parameter: {param}.`,"app.download.validation.generic":`This share link is invalid. Check it and try again.`,"app.check":`Check`,"app.checking":`Checking...`,"app.passed":`Passed`,"app.startDownload":`Start download`,"app.downloading":`Downloading...`,"app.selectedItems":`Selected {count} items`,"app.restore":`Restore`,"app.permanentDelete":`Delete permanently`,"app.preview":`Preview`,"app.favorite":`Favorite`,"app.rename":`Rename`,"app.move":`Move`,"app.delete":`Delete`,"app.pullToLocal":`Pull to this device`,"app.share":`Share`,"app.saveAs":`Save as`,"app.transfers":`Transfer management`,"app.noTransfers":`No transfer tasks`,"app.completed":`Completed`,"app.failed":`Failed`,"app.cancelled":`Cancelled`,"app.cancelling":`Cancelling`,"app.transferProgress":`{fileName} transfer progress`,"app.clearTrash.title":`Empty trash`,"app.clearTrash.message":`Empty trash? This cannot be undone.`,"app.clear":`Empty`,"app.batchDelete":`Delete selected`,"app.deleteSelectedPermanent":`Permanently delete {count} selected items? This cannot be undone.`,"app.deleteSelected":`Delete {count} selected items?`,"app.renameFolder":`Rename folder`,"app.renameFile":`Rename file`,"app.enterNewName":`Enter a new name`,"app.fileAlreadyExists":`{fileName} already exists`,"app.fileAlreadyLocal":`{fileName} is already on this device`,"app.fileAvailable":`{fileName} is available to download`,"app.fileDownloadCompleted":`{fileName} download completed`,"app.publishFailedWithFile":`Add failed: {fileName}`,"app.publish.fileTooLarge":`Exceeds the {maxSize} limit`,"app.downloadFailedWithError":`Download failed: {error}`,"app.saveFailedWithError":`Save failed: {error}`,"app.toast.restored":`Restored`,"app.toast.restoreFailed":`Restore failed`,"app.toast.trashEmptied":`Trash emptied`,"app.toast.emptyFailed":`Empty failed`,"app.toast.favorited":`Added to favorites`,"app.toast.unfavorited":`Removed from favorites`,"app.toast.actionFailed":`Action failed`,"app.toast.deletedPermanently":`Deleted permanently`,"app.toast.deleted":`Deleted`,"app.toast.deleteFailed":`Delete failed`,"app.toast.moved":`Moved`,"app.toast.moveFailed":`Move failed`,"app.toast.renamed":`Renamed`,"app.toast.renameFailed":`Rename failed`,"app.toast.signInBeforePublish":`Sign in before adding files`,"app.toast.signInBeforeDownload":`Sign in before downloading files`,"app.toast.checkLinkFirst":`Check link availability first`,"app.toast.downloadStarted":`Download started`,"app.toast.downloadFailed":`Download failed`,"app.toast.cancelFailed":`Cancel failed`,"app.toast.fileNotLocal":`This file is not saved on this device yet. Pull it locally first.`,"app.toast.getFileFailed":`Failed to get file`,"app.toast.fileSaved":`File saved`,"app.toast.fileDownloaded":`File downloaded`,"app.toast.startPullLocal":`Pulling to this device`,"app.toast.pulledAndSeeding":`Pulled to this device and started seeding`,"app.toast.pullFailed":`Pull failed`,"app.toast.downloadCancelled":`Download cancelled`,"app.toast.checkPassed":`Check passed`,"app.downloadFallbackName":`Download file`},T={"note.title":`知识库`,"note.count":`{count} 篇`,"note.listLabel":`知识库列表`,"note.privacy.secret":`私密`,"note.privacy.public":`公开`,"note.mode.edit":`编辑模式`,"note.mode.read":`阅读模式`,"note.search.placeholder":`搜索知识库`,"note.empty.noMatches":`未找到笔记`,"note.empty.noNotes":`还没有笔记`,"note.newNote":`新笔记`,"note.namePlaceholder":`笔记名称`,"note.untitled":`未命名笔记`,"note.editorLabel.edit":`笔记编辑器`,"note.editorLabel.read":`笔记阅读器`,"note.noOpen.title":`没有打开的笔记`,"note.noOpen.select":`选择一篇笔记继续`,"note.noOpen.createFirst":`创建第一篇笔记`,"note.openList":`打开知识库列表`,"note.loading":`加载中...`,"note.vault.open":`打开笔记库`,"note.vault.opening":`正在打开`,"note.vault.opened":`笔记库已打开`,"note.vault.emptyPrompt":`选择一个目录`,"note.vault.noFiles":`没有 Markdown 文件`,"note.vault.loginRequired":`请先登录 Web3 账号`,"note.vault.loadFailed":`无法加载笔记库`,"note.vault.selectFailed":`无法打开笔记库`,"note.chatDraft.defaultTitle":`聊天记录`,"note.chatDraft.created":`已保存到知识库`,"note.chatDraft.missing":`聊天记录草稿已失效`,"note.chatDraft.openVaultFirst":`请先打开笔记库,再保存聊天记录`,"note.create.title":`新建笔记`,"note.create.action":`创建`,"note.delete.folderTitle":`删除文件夹`,"note.delete.noteTitle":`删除笔记`,"note.delete.message":`确定要删除「{name}」吗?此操作不可撤销。`,"note.action.save":`保存`,"note.action.saving":`保存中`,"note.action.move":`移动`,"note.action.delete":`删除`,"note.action.edit":`编辑`,"note.toast.notFound":`笔记不存在`,"note.toast.nameRequired":`请输入笔记名称`,"note.toast.saved":`笔记已保存`,"note.toast.saveFailed":`保存失败`,"note.toast.created":`笔记已创建`,"note.toast.createFailed":`创建失败`,"note.toast.moved":`已移动`,"note.toast.moveFailed":`移动失败`,"note.toast.deleted":`已删除`,"note.toast.deleteFailed":`删除失败`,"note.error.notFound":`笔记不存在`,"note.error.loginToDecrypt":`请先登录 Web3 账号以解密此笔记`,"note.error.decryptFailed":`无法解密,请确认当前 Web3 账号正确`,"note.error.nameRequired":`请输入名称`,"note.error.nameNoSlash":`名称不能包含 /`,"note.error.nameNoBackslash":`名称不能包含 \\`,"note.error.nameInvalid":`名称无效`,"note.error.nameConflict":`目标位置已存在同名笔记`,"note.error.moveIntoSelf":`不能移动到自身子目录`,"note.move.title":`移动笔记`,"note.move.moving":`正在移动`,"note.move.rootDirectory":`根目录`,"note.move.noFolders":`还没有可选文件夹`,"note.move.pathPlaceholder":`或输入新目录路径,如 文章/摘录`,"note.move.destinationLabel":`目标位置:`,"note.move.destination":`目标位置:{path}`,"milkdown.placeholder":`输入 / 以使用命令...`,"milkdown.image.upload":`上传图片`,"milkdown.image.placeholder":`或粘贴图片链接...`,"milkdown.image.captionPlaceholder":`添加标题...`,"milkdown.group.basic":`基础`,"milkdown.group.list":`列表`,"milkdown.group.advanced":`高级`,"milkdown.block.text":`文本`,"milkdown.block.h1":`一级标题`,"milkdown.block.h2":`二级标题`,"milkdown.block.h3":`三级标题`,"milkdown.block.h4":`四级标题`,"milkdown.block.h5":`五级标题`,"milkdown.block.h6":`六级标题`,"milkdown.block.quote":`引用`,"milkdown.block.divider":`分割线`,"milkdown.block.bulletList":`无序列表`,"milkdown.block.orderedList":`有序列表`,"milkdown.block.taskList":`任务列表`,"milkdown.block.image":`图片`,"milkdown.block.codeBlock":`代码块`,"milkdown.block.table":`表格`,"milkdown.block.math":`数学公式`},E={"note.title":`知識庫`,"note.count":`{count} 篇`,"note.listLabel":`知識庫列表`,"note.privacy.secret":`私密`,"note.privacy.public":`公開`,"note.mode.edit":`編輯模式`,"note.mode.read":`閱讀模式`,"note.search.placeholder":`搜尋知識庫`,"note.empty.noMatches":`未找到筆記`,"note.empty.noNotes":`還沒有筆記`,"note.newNote":`新筆記`,"note.namePlaceholder":`筆記名稱`,"note.untitled":`未命名筆記`,"note.editorLabel.edit":`筆記編輯器`,"note.editorLabel.read":`筆記閱讀器`,"note.noOpen.title":`沒有開啟的筆記`,"note.noOpen.select":`選擇一篇筆記繼續`,"note.noOpen.createFirst":`建立第一篇筆記`,"note.openList":`開啟知識庫列表`,"note.loading":`載入中...`,"note.vault.open":`開啟筆記庫`,"note.vault.opening":`正在開啟`,"note.vault.opened":`筆記庫已開啟`,"note.vault.emptyPrompt":`選擇一個目錄`,"note.vault.noFiles":`沒有 Markdown 檔案`,"note.vault.loginRequired":`請先登入 Web3 帳號`,"note.vault.loadFailed":`無法載入筆記庫`,"note.vault.selectFailed":`無法開啟筆記庫`,"note.chatDraft.defaultTitle":`聊天記錄`,"note.chatDraft.created":`已儲存到知識庫`,"note.chatDraft.missing":`聊天記錄草稿已失效`,"note.chatDraft.openVaultFirst":`請先開啟筆記庫,再儲存聊天記錄`,"note.create.title":`新建筆記`,"note.create.action":`建立`,"note.delete.folderTitle":`刪除資料夾`,"note.delete.noteTitle":`刪除筆記`,"note.delete.message":`確定要刪除「{name}」嗎?此操作不可撤銷。`,"note.action.save":`儲存`,"note.action.saving":`儲存中`,"note.action.move":`移動`,"note.action.delete":`刪除`,"note.action.edit":`編輯`,"note.toast.notFound":`筆記不存在`,"note.toast.nameRequired":`請輸入筆記名稱`,"note.toast.saved":`筆記已儲存`,"note.toast.saveFailed":`儲存失敗`,"note.toast.created":`筆記已建立`,"note.toast.createFailed":`建立失敗`,"note.toast.moved":`已移動`,"note.toast.moveFailed":`移動失敗`,"note.toast.deleted":`已刪除`,"note.toast.deleteFailed":`刪除失敗`,"note.error.notFound":`筆記不存在`,"note.error.loginToDecrypt":`請先登入 Web3 帳號以解密此筆記`,"note.error.decryptFailed":`無法解密,請確認當前 Web3 帳號正確`,"note.error.nameRequired":`請輸入名稱`,"note.error.nameNoSlash":`名稱不能包含 /`,"note.error.nameNoBackslash":`名稱不能包含 \\\\`,"note.error.nameInvalid":`名稱無效`,"note.error.nameConflict":`目標位置已存在同名筆記`,"note.error.moveIntoSelf":`不能移動到自身子目錄`,"note.move.title":`移動筆記`,"note.move.moving":`正在移動`,"note.move.rootDirectory":`根目錄`,"note.move.noFolders":`還沒有可選資料夾`,"note.move.pathPlaceholder":`或輸入新目錄路徑,如 文章/摘錄`,"note.move.destinationLabel":`目標位置:`,"note.move.destination":`目標位置:{path}`,"milkdown.placeholder":`輸入 / 以使用命令...`,"milkdown.image.upload":`上傳圖片`,"milkdown.image.placeholder":`或貼上圖片連結...`,"milkdown.image.captionPlaceholder":`新增標題...`,"milkdown.group.basic":`基礎`,"milkdown.group.list":`列表`,"milkdown.group.advanced":`高階`,"milkdown.block.text":`文字`,"milkdown.block.h1":`一級標題`,"milkdown.block.h2":`二級標題`,"milkdown.block.h3":`三級標題`,"milkdown.block.h4":`四級標題`,"milkdown.block.h5":`五級標題`,"milkdown.block.h6":`六級標題`,"milkdown.block.quote":`引用`,"milkdown.block.divider":`分割線`,"milkdown.block.bulletList":`無序列表`,"milkdown.block.orderedList":`有序列表`,"milkdown.block.taskList":`任務列表`,"milkdown.block.image":`圖片`,"milkdown.block.codeBlock":`程式碼塊`,"milkdown.block.table":`表格`,"milkdown.block.math":`數學公式`},D={"note.title":`Knowledge Base`,"note.count":`{count} notes`,"note.listLabel":`Knowledge base list`,"note.privacy.secret":`Private`,"note.privacy.public":`Public`,"note.mode.edit":`Edit mode`,"note.mode.read":`Read mode`,"note.search.placeholder":`Search knowledge base`,"note.empty.noMatches":`No notes found`,"note.empty.noNotes":`No notes yet`,"note.newNote":`New note`,"note.namePlaceholder":`Note name`,"note.untitled":`Untitled note`,"note.editorLabel.edit":`Note editor`,"note.editorLabel.read":`Note reader`,"note.noOpen.title":`No note open`,"note.noOpen.select":`Select a note to continue`,"note.noOpen.createFirst":`Create your first note`,"note.openList":`Open knowledge base`,"note.loading":`Loading...`,"note.vault.open":`Open vault`,"note.vault.opening":`Opening`,"note.vault.opened":`Vault opened`,"note.vault.emptyPrompt":`Choose a directory`,"note.vault.noFiles":`No Markdown files`,"note.vault.loginRequired":`Sign in with a Web3 account`,"note.vault.loadFailed":`Could not load vault`,"note.vault.selectFailed":`Could not open vault`,"note.chatDraft.defaultTitle":`Chat note`,"note.chatDraft.created":`Saved to knowledge base`,"note.chatDraft.missing":`The chat note draft expired`,"note.chatDraft.openVaultFirst":`Open a note vault before saving chat notes`,"note.create.title":`New note`,"note.create.action":`Create`,"note.delete.folderTitle":`Delete folder`,"note.delete.noteTitle":`Delete note`,"note.delete.message":`Delete "{name}"? This cannot be undone.`,"note.action.save":`Save`,"note.action.saving":`Saving`,"note.action.move":`Move`,"note.action.delete":`Delete`,"note.action.edit":`Edit`,"note.toast.notFound":`Note not found`,"note.toast.nameRequired":`Enter a note name`,"note.toast.saved":`Note saved`,"note.toast.saveFailed":`Save failed`,"note.toast.created":`Note created`,"note.toast.createFailed":`Create failed`,"note.toast.moved":`Moved`,"note.toast.moveFailed":`Move failed`,"note.toast.deleted":`Deleted`,"note.toast.deleteFailed":`Delete failed`,"note.error.notFound":`Note not found`,"note.error.loginToDecrypt":`Sign in with a Web3 account to decrypt this note`,"note.error.decryptFailed":`Could not decrypt. Make sure the current Web3 account is correct.`,"note.error.nameRequired":`Enter a name`,"note.error.nameNoSlash":`Names cannot contain /`,"note.error.nameNoBackslash":`Names cannot contain \\`,"note.error.nameInvalid":`Invalid name`,"note.error.nameConflict":`A note with this name already exists there`,"note.error.moveIntoSelf":`Cannot move a folder into itself`,"note.move.title":`Move note`,"note.move.moving":`Moving`,"note.move.rootDirectory":`Root directory`,"note.move.noFolders":`No folders available`,"note.move.pathPlaceholder":`Or enter a new folder path, e.g. Articles/Clips`,"note.move.destinationLabel":`Destination: `,"note.move.destination":`Destination: {path}`,"milkdown.placeholder":`Type / for commands...`,"milkdown.image.upload":`Upload image`,"milkdown.image.placeholder":`Or paste an image link...`,"milkdown.image.captionPlaceholder":`Add caption...`,"milkdown.group.basic":`Basic`,"milkdown.group.list":`List`,"milkdown.group.advanced":`Advanced`,"milkdown.block.text":`Text`,"milkdown.block.h1":`Heading 1`,"milkdown.block.h2":`Heading 2`,"milkdown.block.h3":`Heading 3`,"milkdown.block.h4":`Heading 4`,"milkdown.block.h5":`Heading 5`,"milkdown.block.h6":`Heading 6`,"milkdown.block.quote":`Quote`,"milkdown.block.divider":`Divider`,"milkdown.block.bulletList":`Bullet list`,"milkdown.block.orderedList":`Ordered list`,"milkdown.block.taskList":`Task list`,"milkdown.block.image":`Image`,"milkdown.block.codeBlock":`Code block`,"milkdown.block.table":`Table`,"milkdown.block.math":`Math`},O={"login.title":`登录`,"login.username.placeholder":`用户名`,"login.password.placeholder":`密码`,"login.preview":`登录`,"login.previewed":`检查地址`,"login.loading":`登录中`,"login.toast.signedIn":`已登录 {username}`,"login.error.credentialsRequired":`请输入用户名和密码`,"login.error.previewRequired":`请先预览并确认头像`,"login.error.failed":`登录失败`},k={"login.title":`登入`,"login.username.placeholder":`使用者名稱`,"login.password.placeholder":`密碼`,"login.preview":`登入`,"login.previewed":`檢查地址`,"login.loading":`登入中`,"login.toast.signedIn":`已登入 {username}`,"login.error.credentialsRequired":`請輸入使用者名稱和密碼`,"login.error.previewRequired":`請先預覽並確認頭像`,"login.error.failed":`登入失敗`},A={"login.title":`Sign in`,"login.username.placeholder":`Username`,"login.password.placeholder":`Password`,"login.preview":`Sign in`,"login.previewed":`Check address`,"login.loading":`Signing in`,"login.toast.signedIn":`Signed in as {username}`,"login.error.credentialsRequired":`Enter a username and password`,"login.error.previewRequired":`Preview and confirm the avatar first`,"login.error.failed":`Sign-in failed`},j={"web3.view.wallet":`Web3`,"web3.view.pem":`PEM 导出`,"web3.view.export":`Wallet 导出`,"web3.view.asymmetric":`非对称加密`,"web3.login.passwordOptional":`密码(可选)`,"web3.login.generating":`生成中...`,"web3.login.generateAndSignIn":`生成并登录`,"web3.toast.accountGenerated":`账号已生成`,"web3.error.accountsRequired":`请先生成 A 和 B 两个账号`,"web3.error.messageRequired":`请输入要加密的消息`,"web3.error.cipherRequired":`请先生成或粘贴密文`,"web3.error.decryptFailed":`解密失败,请确认发送方公钥、接收方私钥和密文匹配`,"web3.error.senderPublicRequired":`请输入发送方公钥`,"web3.error.recipientPrivateRequired":`请输入接收方私钥`,"web3.error.senderPrivateRequired":`请输入发送方私钥`,"web3.error.recipientPublicRequired":`请输入接收方公钥`,"web3.empty.pem":`请输入用户名和密码以生成 PEM 密钥`,"web3.empty.identity":`请输入用户名和密码以查看身份信息`,"web3.empty.walletTools":`请输入用户名和密码以使用钱包工具`,"web3.notSignedIn":`未登录`,"web3.action.view":`查看`,"web3.action.show":`显示`,"web3.action.hide":`隐藏`,"web3.action.showPrivateKey":`显示私钥`,"web3.action.hidePrivateKey":`隐藏私钥`,"web3.action.showAddressQr":`显示地址二维码`,"web3.action.hideAddressQr":`隐藏地址二维码`,"web3.action.showMnemonic":`显示助记词`,"web3.action.hideMnemonic":`隐藏助记词`,"web3.action.showMnemonicQr":`显示助记词二维码`,"web3.action.hideMnemonicQr":`隐藏助记词二维码`,"web3.action.deriveAddresses":`派生 {count} 个地址`,"web3.warning.mnemonic":`任何拥有您助记词的人都可以窃取您账户中的任何资产,切勿泄露!`,"web3.warning.privateKey":`任何拥有您私钥的人都可以窃取您地址中的任何资产,切勿泄露!`,"web3.label.account":`账户`,"web3.label.address":`地址`,"web3.label.ed25519Public":`Ed25519 公钥`,"web3.label.x25519Public":`x25519 公钥`,"web3.label.x25519Private":`x25519 私钥`,"web3.label.combinedPrivate":`x25519 & Ed25519 私钥`,"web3.label.privateKeyToggle":`私钥(点击{action})`,"web3.box.accountA":`A 账号`,"web3.box.accountB":`B 账号`,"web3.box.account.desc":`用户名和密码会确定性生成 x25519 密钥对。`,"web3.box.account.generate":`生成账号`,"web3.box.flowAB.desc":`加密使用 A 私钥 + B 公钥;解密使用 A 公钥 + B 私钥。`,"web3.box.flowAB.encrypt":`用 A 私钥 + B 公钥加密`,"web3.box.flowAB.decrypt":`用 A 公钥 + B 私钥解密`,"web3.box.flowAB.messagePlaceholder":`输入要从 A 发给 B 的消息`,"web3.box.flowBA.desc":`加密使用 B 私钥 + A 公钥;解密使用 B 公钥 + A 私钥。`,"web3.box.flowBA.encrypt":`用 B 私钥 + A 公钥加密`,"web3.box.flowBA.decrypt":`用 B 公钥 + A 私钥解密`,"web3.box.flowBA.messagePlaceholder":`输入要从 B 发给 A 的消息`,"web3.box.cipherPlaceholder":`加密后生成密文,或粘贴已有密文`,"web3.box.plaintext":`明文`,"web3.box.ciphertext":`密文`,"web3.box.decryptResult":`解密结果`,"web3.box.decryptResultPlaceholder":`解密成功后显示明文`,"web3.box.timestamp":`时间戳`,"web3.box.nonce":`随机数`,"web3.box.encryptTitle":`加密`,"web3.box.encryptDesc":`只输入发送方私钥和接收方公钥即可加密,无需生成完整账号。`,"web3.box.decryptTitle":`解密`,"web3.box.decryptDesc":`只输入发送方公钥和接收方私钥即可解密,无需生成完整账号。`,"web3.box.sender":`发送方`,"web3.box.recipient":`接收方`,"web3.box.senderPrivatePlaceholder":`发送方 x25519 私钥`,"web3.box.senderPublicPlaceholder":`发送方 x25519 公钥`,"web3.box.recipientPrivatePlaceholder":`接收方 x25519 私钥`,"web3.box.recipientPublicPlaceholder":`接收方 x25519 公钥`,"web3.box.messagePlaceholder":`输入要加密的消息`,"web3.box.encryptResultPlaceholder":`加密成功后显示密文`,"web3.box.cipherDecryptPlaceholder":`粘贴要解密的密文`},M={"web3.view.wallet":`Web3`,"web3.view.pem":`PEM 匯出`,"web3.view.export":`Wallet 匯出`,"web3.view.asymmetric":`非對稱加密`,"web3.login.passwordOptional":`密碼(可選)`,"web3.login.generating":`生成中...`,"web3.login.generateAndSignIn":`生成並登入`,"web3.toast.accountGenerated":`帳號已生成`,"web3.error.accountsRequired":`請先生成 A 和 B 兩個帳號`,"web3.error.messageRequired":`請輸入要加密的訊息`,"web3.error.cipherRequired":`請先生成或貼上密文`,"web3.error.decryptFailed":`解密失敗,請確認傳送方公鑰、接收方私鑰和密文匹配`,"web3.error.senderPublicRequired":`請輸入傳送方公鑰`,"web3.error.recipientPrivateRequired":`請輸入接收方私鑰`,"web3.error.senderPrivateRequired":`請輸入傳送方私鑰`,"web3.error.recipientPublicRequired":`請輸入接收方公鑰`,"web3.empty.pem":`請輸入使用者名稱和密碼以生成 PEM 金鑰`,"web3.empty.identity":`請輸入使用者名稱和密碼以檢視身份資訊`,"web3.empty.walletTools":`請輸入使用者名稱和密碼以使用錢包工具`,"web3.notSignedIn":`未登入`,"web3.action.view":`檢視`,"web3.action.show":`顯示`,"web3.action.hide":`隱藏`,"web3.action.showPrivateKey":`顯示私鑰`,"web3.action.hidePrivateKey":`隱藏私鑰`,"web3.action.showAddressQr":`顯示地址二維碼`,"web3.action.hideAddressQr":`隱藏地址二維碼`,"web3.action.showMnemonic":`顯示助記詞`,"web3.action.hideMnemonic":`隱藏助記詞`,"web3.action.showMnemonicQr":`顯示助記詞二維碼`,"web3.action.hideMnemonicQr":`隱藏助記詞二維碼`,"web3.action.deriveAddresses":`派生 {count} 個地址`,"web3.warning.mnemonic":`任何擁有您助記詞的人都可以竊取您帳戶中的任何資產,切勿洩露!`,"web3.warning.privateKey":`任何擁有您私鑰的人都可以竊取您地址中的任何資產,切勿洩露!`,"web3.label.account":`帳戶`,"web3.label.address":`地址`,"web3.label.ed25519Public":`Ed25519 公鑰`,"web3.label.x25519Public":`x25519 公鑰`,"web3.label.x25519Private":`x25519 私鑰`,"web3.label.combinedPrivate":`x25519 & Ed25519 私鑰`,"web3.label.privateKeyToggle":`私鑰(點選{action})`,"web3.box.accountA":`A 帳號`,"web3.box.accountB":`B 帳號`,"web3.box.account.desc":`使用者名稱和密碼會確定性生成 x25519 金鑰對。`,"web3.box.account.generate":`生成帳號`,"web3.box.flowAB.desc":`加密使用 A 私鑰 + B 公鑰;解密使用 A 公鑰 + B 私鑰。`,"web3.box.flowAB.encrypt":`用 A 私鑰 + B 公鑰加密`,"web3.box.flowAB.decrypt":`用 A 公鑰 + B 私鑰解密`,"web3.box.flowAB.messagePlaceholder":`輸入要從 A 發給 B 的訊息`,"web3.box.flowBA.desc":`加密使用 B 私鑰 + A 公鑰;解密使用 B 公鑰 + A 私鑰。`,"web3.box.flowBA.encrypt":`用 B 私鑰 + A 公鑰加密`,"web3.box.flowBA.decrypt":`用 B 公鑰 + A 私鑰解密`,"web3.box.flowBA.messagePlaceholder":`輸入要從 B 發給 A 的訊息`,"web3.box.cipherPlaceholder":`加密後生成密文,或貼上已有密文`,"web3.box.plaintext":`明文`,"web3.box.ciphertext":`密文`,"web3.box.decryptResult":`解密結果`,"web3.box.decryptResultPlaceholder":`解密成功後顯示明文`,"web3.box.timestamp":`時間戳`,"web3.box.nonce":`隨機數`,"web3.box.encryptTitle":`加密`,"web3.box.encryptDesc":`只輸入傳送方私鑰和接收方公鑰即可加密,無需生成完整帳號。`,"web3.box.decryptTitle":`解密`,"web3.box.decryptDesc":`只輸入傳送方公鑰和接收方私鑰即可解密,無需生成完整帳號。`,"web3.box.sender":`傳送方`,"web3.box.recipient":`接收方`,"web3.box.senderPrivatePlaceholder":`傳送方 x25519 私鑰`,"web3.box.senderPublicPlaceholder":`傳送方 x25519 公鑰`,"web3.box.recipientPrivatePlaceholder":`接收方 x25519 私鑰`,"web3.box.recipientPublicPlaceholder":`接收方 x25519 公鑰`,"web3.box.messagePlaceholder":`輸入要加密的訊息`,"web3.box.encryptResultPlaceholder":`加密成功後顯示密文`,"web3.box.cipherDecryptPlaceholder":`貼上要解密的密文`},N={"web3.view.wallet":`Web3`,"web3.view.pem":`PEM export`,"web3.view.export":`Wallet export`,"web3.view.asymmetric":`Asymmetric encryption`,"web3.login.passwordOptional":`Password (optional)`,"web3.login.generating":`Generating...`,"web3.login.generateAndSignIn":`Generate and sign in`,"web3.toast.accountGenerated":`Account generated`,"web3.error.accountsRequired":`Generate both A and B accounts first`,"web3.error.messageRequired":`Enter a message to encrypt`,"web3.error.cipherRequired":`Generate or paste ciphertext first`,"web3.error.decryptFailed":`Decrypt failed. Check the sender public key, recipient private key, and ciphertext.`,"web3.error.senderPublicRequired":`Enter the sender public key`,"web3.error.recipientPrivateRequired":`Enter the recipient private key`,"web3.error.senderPrivateRequired":`Enter the sender private key`,"web3.error.recipientPublicRequired":`Enter the recipient public key`,"web3.empty.pem":`Enter a username and password to generate PEM keys`,"web3.empty.identity":`Enter a username and password to view identity info`,"web3.empty.walletTools":`Enter a username and password to use wallet tools`,"web3.notSignedIn":`Not signed in`,"web3.action.view":`View`,"web3.action.show":`show`,"web3.action.hide":`hide`,"web3.action.showPrivateKey":`Show private key`,"web3.action.hidePrivateKey":`Hide private key`,"web3.action.showAddressQr":`Show address QR`,"web3.action.hideAddressQr":`Hide address QR`,"web3.action.showMnemonic":`Show mnemonic`,"web3.action.hideMnemonic":`Hide mnemonic`,"web3.action.showMnemonicQr":`Show mnemonic QR`,"web3.action.hideMnemonicQr":`Hide mnemonic QR`,"web3.action.deriveAddresses":`Derive {count} addresses`,"web3.warning.mnemonic":`Anyone with your mnemonic can steal assets from your account. Never disclose it.`,"web3.warning.privateKey":`Anyone with your private key can steal assets from your address. Never disclose it.`,"web3.label.account":`Account`,"web3.label.address":`Address`,"web3.label.ed25519Public":`Ed25519 public key`,"web3.label.x25519Public":`x25519 public key`,"web3.label.x25519Private":`x25519 private key`,"web3.label.combinedPrivate":`x25519 & Ed25519 private key`,"web3.label.privateKeyToggle":`Private key (click to {action})`,"web3.box.accountA":`Account A`,"web3.box.accountB":`Account B`,"web3.box.account.desc":`The username and password deterministically generate an x25519 key pair.`,"web3.box.account.generate":`Generate account`,"web3.box.flowAB.desc":`Encrypt with A private key + B public key. Decrypt with A public key + B private key.`,"web3.box.flowAB.encrypt":`Encrypt with A private + B public`,"web3.box.flowAB.decrypt":`Decrypt with A public + B private`,"web3.box.flowAB.messagePlaceholder":`Message from A to B`,"web3.box.flowBA.desc":`Encrypt with B private key + A public key. Decrypt with B public key + A private key.`,"web3.box.flowBA.encrypt":`Encrypt with B private + A public`,"web3.box.flowBA.decrypt":`Decrypt with B public + A private`,"web3.box.flowBA.messagePlaceholder":`Message from B to A`,"web3.box.cipherPlaceholder":`Ciphertext appears after encryption, or paste existing ciphertext`,"web3.box.plaintext":`Plaintext`,"web3.box.ciphertext":`Ciphertext`,"web3.box.decryptResult":`Decrypted result`,"web3.box.decryptResultPlaceholder":`Plaintext appears after decryption`,"web3.box.timestamp":`Timestamp`,"web3.box.nonce":`Nonce`,"web3.box.encryptTitle":`Encrypt`,"web3.box.encryptDesc":`Encrypt with only the sender private key and recipient public key. A full account is not required.`,"web3.box.decryptTitle":`Decrypt`,"web3.box.decryptDesc":`Decrypt with only the sender public key and recipient private key. A full account is not required.`,"web3.box.sender":`Sender`,"web3.box.recipient":`Recipient`,"web3.box.senderPrivatePlaceholder":`Sender x25519 private key`,"web3.box.senderPublicPlaceholder":`Sender x25519 public key`,"web3.box.recipientPrivatePlaceholder":`Recipient x25519 private key`,"web3.box.recipientPublicPlaceholder":`Recipient x25519 public key`,"web3.box.messagePlaceholder":`Enter a message to encrypt`,"web3.box.encryptResultPlaceholder":`Ciphertext appears after encryption`,"web3.box.cipherDecryptPlaceholder":`Paste ciphertext to decrypt`},P={"game.gandengyan.title":`干瞪眼`,"game.zhajinhua.title":`炸金花`,"game.toast.joinedRoom":`已进入房间`,"game.toast.roomCreated":`房间已创建`,"game.action.shareRoom":`分享房间`,"game.action.createRoom":`创建房间`,"game.action.joinRoom":`加入房间`,"game.action.startRound":`开始本局`,"game.action.nextRound":`再来一局`,"game.hero.desc":`创建房间码邀请朋友加入,房间状态通过 MostBox P2P 频道同步。`,"game.currentAccount":`当前账号`,"game.roomCode":`房间号`,"game.roomCode.placeholder":`输入房间号`,"game.room.error.readLog":`无法读取房间记录`,"game.room.error.invalidCode":`请输入 4-8 位房间码`,"game.room.error.createFailed":`创建房间失败`,"game.room.error.joinFailed":`进入房间失败`,"game.room.error.sendEventFailed":`发送房间事件失败`,"game.status.nodeConnected":`节点已连接`,"game.status.nodeConnecting":`正在连接节点...`,"game.status.playing":`进行中`,"game.status.finished":`本局结束`,"game.status.waitingStart":`等待开局`,"game.status.title":`状态`,"game.actions":`操作`,"game.waitingHost":`等待房主开始或继续牌局。`,"game.waitingPlayers":`等待玩家加入`,"game.host":`房主`,"game.round":`本轮`,"game.hint":`提示`,"game.player":`玩家`,"game.card":`牌`,"game.roomLabel":`房间 {room}`,"game.status.online":`在线`,"game.status.offline":`离线`,"game.toast.playerLeft":`{player} 已退出房间`,"game.gandengyan.mark":`干`,"game.gandengyan.hero.title":`干瞪眼牌桌`,"game.gandengyan.speech.gameOver":`游戏结束`,"game.gandengyan.error.playFailed":`出牌失败`,"game.gandengyan.error.actionFailed":`操作失败`,"game.gandengyan.deck":`牌堆`,"game.gandengyan.tablePlay":`{player} 出 {combo}`,"game.gandengyan.waitingLead":`等待领出`,"game.gandengyan.baseScore":`底分`,"game.gandengyan.result.winnerGain":`{player} 获胜,赢 {score} 分`,"game.gandengyan.result.bombCount":`({count} 个炸弹)`,"game.gandengyan.result.sealedLoss":`{player}(封牌)扣 {loss} 分`,"game.gandengyan.result.cardsLeftLoss":`{player} 剩 {cards} 张,扣 {loss} 分`,"game.gandengyan.result.winner":`{player} 获胜`,"game.gandengyan.status.yourTurn":`轮到你出牌`,"game.gandengyan.roundPanel":`牌局`,"game.gandengyan.score":`分数`,"game.gandengyan.bombCount":`炸弹 {count} 次`,"game.gandengyan.discardCount":`弃牌 {count} 张`,"game.gandengyan.log":`牌局记录`,"game.gandengyan.invalidCombo":`牌型不合法`,"game.gandengyan.selectCards":`先选牌`,"game.gandengyan.jokerOrderHint":`按选择顺序解释大小王`,"game.gandengyan.action.play":`出牌`,"game.gandengyan.action.pass":`不要`,"game.gandengyan.handCount":`{count} 张`,"game.gandengyan.position.seat":`座位 {seat}`,"game.gandengyan.position.me":`我`,"game.gandengyan.position.opponent":`对手位`,"game.gandengyan.position.nextOpponent":`下家/对手位`,"game.gandengyan.position.prevOpponent":`上家/对手位`,"game.gandengyan.position.partner":`对家/队友位`,"game.gandengyan.position.seatPartner":`座位 {seat}/队友位`,"game.gandengyan.position.seatOpponent":`座位 {seat}/对手位`,"game.zhajinhua.hero.title":`炸金花牌桌`,"game.zhajinhua.toast.roundStarted":`新一局已开始`,"game.zhajinhua.error.notEnoughPlayers":`至少需要 2 名有足够筹码的玩家`,"game.zhajinhua.error.startFailed":`开局失败`,"game.zhajinhua.error.tooManyLowChips":`筹码不足的玩家太多,无法开局`,"game.zhajinhua.status.yourTurn":`轮到你操作`,"game.zhajinhua.status.waitingPlayer":`等待 {player}`,"game.zhajinhua.result.winChips":`{player} 赢得 {amount} 筹码`,"game.zhajinhua.result.winner":`{player} 胜出`,"game.zhajinhua.pot":`底池`,"game.zhajinhua.currentBet":`当前注 {amount}`,"game.zhajinhua.chips":`{amount} 筹码`,"game.zhajinhua.player.folded":`已弃牌`,"game.zhajinhua.player.looked":`已看牌`,"game.zhajinhua.player.inRound":`在局中`,"game.zhajinhua.myHand":`我的手牌`,"game.zhajinhua.myChips":`我的筹码`,"game.zhajinhua.hand.unlooked":`未看牌`,"game.zhajinhua.hand.waitingDeal":`等待房主发牌`,"game.zhajinhua.action.look":`看牌`,"game.zhajinhua.action.call":`跟注`,"game.zhajinhua.action.fold":`弃牌`,"game.zhajinhua.action.raiseOption":`加 {amount}`,"game.zhajinhua.action.raise":`加注`,"game.zhajinhua.action.comparePlaceholder":`选择比牌对象`,"game.zhajinhua.action.compare":`比牌`,"game.zhajinhua.compareResult":`比牌结果`},F={"game.gandengyan.title":`乾瞪眼`,"game.zhajinhua.title":`炸金花`,"game.toast.joinedRoom":`已進入房間`,"game.toast.roomCreated":`房間已建立`,"game.action.shareRoom":`分享房間`,"game.action.createRoom":`建立房間`,"game.action.joinRoom":`加入房間`,"game.action.startRound":`開始本局`,"game.action.nextRound":`再來一局`,"game.hero.desc":`建立房間碼邀請朋友加入,房間狀態通過 MostBox P2P 頻道同步。`,"game.currentAccount":`當前帳號`,"game.roomCode":`房間號`,"game.roomCode.placeholder":`輸入房間號`,"game.room.error.readLog":`無法讀取房間記錄`,"game.room.error.invalidCode":`請輸入 4-8 位房間碼`,"game.room.error.createFailed":`建立房間失敗`,"game.room.error.joinFailed":`進入房間失敗`,"game.room.error.sendEventFailed":`傳送房間事件失敗`,"game.status.nodeConnected":`節點已連線`,"game.status.nodeConnecting":`正在連線節點...`,"game.status.playing":`進行中`,"game.status.finished":`本局結束`,"game.status.waitingStart":`等待開局`,"game.status.title":`狀態`,"game.actions":`操作`,"game.waitingHost":`等待房主開始或繼續牌局。`,"game.waitingPlayers":`等待玩家加入`,"game.host":`房主`,"game.round":`本輪`,"game.hint":`提示`,"game.player":`玩家`,"game.card":`牌`,"game.roomLabel":`房間 {room}`,"game.status.online":`線上`,"game.status.offline":`離線`,"game.toast.playerLeft":`{player} 已退出房間`,"game.gandengyan.mark":`幹`,"game.gandengyan.hero.title":`乾瞪眼牌桌`,"game.gandengyan.speech.gameOver":`遊戲結束`,"game.gandengyan.error.playFailed":`出牌失敗`,"game.gandengyan.error.actionFailed":`操作失敗`,"game.gandengyan.deck":`牌堆`,"game.gandengyan.tablePlay":`{player} 出 {combo}`,"game.gandengyan.waitingLead":`等待領出`,"game.gandengyan.baseScore":`底分`,"game.gandengyan.result.winnerGain":`{player} 獲勝,贏 {score} 分`,"game.gandengyan.result.bombCount":`({count} 個炸彈)`,"game.gandengyan.result.sealedLoss":`{player}(封牌)扣 {loss} 分`,"game.gandengyan.result.cardsLeftLoss":`{player} 剩 {cards} 張,扣 {loss} 分`,"game.gandengyan.result.winner":`{player} 獲勝`,"game.gandengyan.status.yourTurn":`輪到你出牌`,"game.gandengyan.roundPanel":`牌局`,"game.gandengyan.score":`分數`,"game.gandengyan.bombCount":`炸彈 {count} 次`,"game.gandengyan.discardCount":`棄牌 {count} 張`,"game.gandengyan.log":`牌局記錄`,"game.gandengyan.invalidCombo":`牌型不合法`,"game.gandengyan.selectCards":`先選牌`,"game.gandengyan.jokerOrderHint":`按選擇順序解釋大小王`,"game.gandengyan.action.play":`出牌`,"game.gandengyan.action.pass":`不要`,"game.gandengyan.handCount":`{count} 張`,"game.gandengyan.position.seat":`座位 {seat}`,"game.gandengyan.position.me":`我`,"game.gandengyan.position.opponent":`對手位`,"game.gandengyan.position.nextOpponent":`下家/對手位`,"game.gandengyan.position.prevOpponent":`上家/對手位`,"game.gandengyan.position.partner":`對家/隊友位`,"game.gandengyan.position.seatPartner":`座位 {seat}/隊友位`,"game.gandengyan.position.seatOpponent":`座位 {seat}/對手位`,"game.zhajinhua.hero.title":`炸金花牌桌`,"game.zhajinhua.toast.roundStarted":`新一局已開始`,"game.zhajinhua.error.notEnoughPlayers":`至少需要 2 名有足夠籌碼的玩家`,"game.zhajinhua.error.startFailed":`開局失敗`,"game.zhajinhua.error.tooManyLowChips":`籌碼不足的玩家太多,無法開局`,"game.zhajinhua.status.yourTurn":`輪到你操作`,"game.zhajinhua.status.waitingPlayer":`等待 {player}`,"game.zhajinhua.result.winChips":`{player} 贏得 {amount} 籌碼`,"game.zhajinhua.result.winner":`{player} 勝出`,"game.zhajinhua.pot":`底池`,"game.zhajinhua.currentBet":`當前注 {amount}`,"game.zhajinhua.chips":`{amount} 籌碼`,"game.zhajinhua.player.folded":`已棄牌`,"game.zhajinhua.player.looked":`已看牌`,"game.zhajinhua.player.inRound":`在局中`,"game.zhajinhua.myHand":`我的手牌`,"game.zhajinhua.myChips":`我的籌碼`,"game.zhajinhua.hand.unlooked":`未看牌`,"game.zhajinhua.hand.waitingDeal":`等待房主發牌`,"game.zhajinhua.action.look":`看牌`,"game.zhajinhua.action.call":`跟注`,"game.zhajinhua.action.fold":`棄牌`,"game.zhajinhua.action.raiseOption":`加 {amount}`,"game.zhajinhua.action.raise":`加註`,"game.zhajinhua.action.comparePlaceholder":`選擇比牌物件`,"game.zhajinhua.action.compare":`比牌`,"game.zhajinhua.compareResult":`比牌結果`},le={"game.gandengyan.title":`Gan Deng Yan`,"game.zhajinhua.title":`Zha Jin Hua`,"game.toast.joinedRoom":`Joined room`,"game.toast.roomCreated":`Room created`,"game.action.shareRoom":`Share room`,"game.action.createRoom":`Create room`,"game.action.joinRoom":`Join room`,"game.action.startRound":`Start round`,"game.action.nextRound":`Next round`,"game.hero.desc":`Create a room code and invite friends. Room state syncs through the MostBox P2P channel.`,"game.currentAccount":`Current account`,"game.roomCode":`Room code`,"game.roomCode.placeholder":`Enter room code`,"game.room.error.readLog":`Failed to read room log`,"game.room.error.invalidCode":`Enter a 4-8 character room code`,"game.room.error.createFailed":`Failed to create room`,"game.room.error.joinFailed":`Failed to join room`,"game.room.error.sendEventFailed":`Failed to send room event`,"game.status.nodeConnected":`Node connected`,"game.status.nodeConnecting":`Connecting node...`,"game.status.playing":`In progress`,"game.status.finished":`Round finished`,"game.status.waitingStart":`Waiting to start`,"game.status.title":`Status`,"game.actions":`Actions`,"game.waitingHost":`Waiting for the host to start or continue.`,"game.waitingPlayers":`Waiting for players`,"game.host":`Host`,"game.round":`Round`,"game.hint":`Hint`,"game.player":`Player`,"game.card":`cards`,"game.roomLabel":`Room {room}`,"game.status.online":`Online`,"game.status.offline":`Offline`,"game.toast.playerLeft":`{player} left the room`,"game.gandengyan.mark":`G`,"game.gandengyan.hero.title":`Gan Deng Yan table`,"game.gandengyan.speech.gameOver":`Game over`,"game.gandengyan.error.playFailed":`Failed to play cards`,"game.gandengyan.error.actionFailed":`Action failed`,"game.gandengyan.deck":`Deck`,"game.gandengyan.tablePlay":`{player} played {combo}`,"game.gandengyan.waitingLead":`Waiting for lead`,"game.gandengyan.baseScore":`Base score`,"game.gandengyan.result.winnerGain":`{player} wins {score} points`,"game.gandengyan.result.bombCount":` ({count} bombs)`,"game.gandengyan.result.sealedLoss":`{player} sealed, loses {loss} points`,"game.gandengyan.result.cardsLeftLoss":`{player} has {cards} cards left, loses {loss} points`,"game.gandengyan.result.winner":`{player} wins`,"game.gandengyan.status.yourTurn":`Your turn to play`,"game.gandengyan.roundPanel":`Round`,"game.gandengyan.score":`Score`,"game.gandengyan.bombCount":`{count} bombs`,"game.gandengyan.discardCount":`{count} discarded`,"game.gandengyan.log":`Round log`,"game.gandengyan.invalidCombo":`Invalid combo`,"game.gandengyan.selectCards":`Select cards first`,"game.gandengyan.jokerOrderHint":`Jokers are interpreted in the selected order`,"game.gandengyan.action.play":`Play`,"game.gandengyan.action.pass":`Pass`,"game.gandengyan.handCount":`{count} cards`,"game.gandengyan.position.seat":`Seat {seat}`,"game.gandengyan.position.me":`Me`,"game.gandengyan.position.opponent":`Opponent`,"game.gandengyan.position.nextOpponent":`Next / opponent`,"game.gandengyan.position.prevOpponent":`Previous / opponent`,"game.gandengyan.position.partner":`Across / partner`,"game.gandengyan.position.seatPartner":`Seat {seat} / partner`,"game.gandengyan.position.seatOpponent":`Seat {seat} / opponent`,"game.zhajinhua.hero.title":`Zha Jin Hua table`,"game.zhajinhua.toast.roundStarted":`New round started`,"game.zhajinhua.error.notEnoughPlayers":`At least 2 players with enough chips are required`,"game.zhajinhua.error.startFailed":`Failed to start round`,"game.zhajinhua.error.tooManyLowChips":`Too many players are short on chips to start`,"game.zhajinhua.status.yourTurn":`Your turn`,"game.zhajinhua.status.waitingPlayer":`Waiting for {player}`,"game.zhajinhua.result.winChips":`{player} won {amount} chips`,"game.zhajinhua.result.winner":`{player} wins`,"game.zhajinhua.pot":`Pot`,"game.zhajinhua.currentBet":`Current bet {amount}`,"game.zhajinhua.chips":`{amount} chips`,"game.zhajinhua.player.folded":`Folded`,"game.zhajinhua.player.looked":`Looked`,"game.zhajinhua.player.inRound":`In round`,"game.zhajinhua.myHand":`My hand`,"game.zhajinhua.myChips":`My chips`,"game.zhajinhua.hand.unlooked":`Not looked`,"game.zhajinhua.hand.waitingDeal":`Waiting for host to deal`,"game.zhajinhua.action.look":`Look`,"game.zhajinhua.action.call":`Call`,"game.zhajinhua.action.fold":`Fold`,"game.zhajinhua.action.raiseOption":`Raise {amount}`,"game.zhajinhua.action.raise":`Raise`,"game.zhajinhua.action.comparePlaceholder":`Choose compare target`,"game.zhajinhua.action.compare":`Compare`,"game.zhajinhua.compareResult":`Compare result`},I={"admin.title":`节点管理`,"admin.status.online":`在线`,"admin.status.waiting":`等待`,"admin.action.refresh":`刷新`,"admin.action.copyNodeId":`复制节点 ID`,"admin.action.clear":`清除`,"admin.action.saveConfig":`保存配置`,"admin.action.exportDiagnostics":`导出诊断`,"admin.action.clearLogs":`清空日志`,"admin.toast.backendChecking":`正在检测后端连接,请稍后再试`,"admin.toast.backendDisconnected":`未连接后端`,"admin.toast.statusRefreshed":`节点状态已刷新`,"admin.toast.configSavedRestart":`节点配置已保存。修改了数据目录,需要重启 daemon 生效。`,"admin.toast.configSaved":`节点配置已保存`,"admin.toast.nodeIdCopied":`节点 ID 已复制`,"admin.toast.logsCleared":`节点日志已清空`,"admin.toast.diagnosticsExported":`诊断已导出`,"admin.toast.userDataCleared":`用户数据已清除`,"admin.error.readStatus":`无法读取节点状态`,"admin.error.saveConfig":`保存配置失败`,"admin.error.clearLogs":`清空日志失败`,"admin.error.exportDiagnostics":`导出诊断失败`,"admin.error.clearUserData":`清除用户数据失败`,"admin.error.localDaemonDisconnected":`未连接本地 daemon`,"admin.remoteUnavailable.title":`远程节点管理不可用`,"admin.remoteUnavailable.desc":`当前连接的是别人部署的远程节点,普通邀请码不能查看或修改节点管理数据。`,"admin.confirm.clearUserData":`确定清除用户 {address} 的文件记录和回收站吗?无人引用的副本也会被清理。`,"admin.metric.nodeId":`节点 ID`,"admin.metric.connections":`连接`,"admin.metric.peers":`{count} peers`,"admin.metric.capacity":`容量`,"admin.metric.uptime":`运行`,"admin.uptime.daysHours":`{days} 天 {hours} 小时`,"admin.uptime.hoursMinutes":`{hours} 小时 {minutes} 分钟`,"admin.uptime.minutes":`{minutes} 分钟`,"admin.nodeStatus.title":`节点状态`,"admin.nodeStatus.version":`版本`,"admin.nodeStatus.listen":`监听`,"admin.nodeStatus.dataPath":`数据目录`,"admin.userData.title":`用户数据`,"admin.userData.user":`用户`,"admin.userData.files":`文件`,"admin.userData.trash":`回收站`,"admin.userData.actions":`操作`,"admin.userData.empty":`暂无用户数据`,"admin.settings.title":`节点设置`,"admin.settings.dataPath":`数据目录`,"admin.settings.capacityGiB":`容量上限 GiB`,"admin.settings.maxFileSizeGiB":`单文件最大 GiB`,"admin.settings.maxFileSize":`单文件最大`,"admin.settings.maxFileSizeUnit":`单文件最大单位`,"admin.settings.maxFileSizePlaceholder":`例如 10.2`,"admin.settings.remoteInvites":`远程访问邀请码`,"admin.settings.remoteInvitesPlaceholder":`每行一个,或用英文逗号分隔`,"admin.settings.hint":`数据目录变更保存后需要重启 daemon。修改邀请码后新请求立即生效。发布和下载成功后会固定做种;MostBox 不设同时做种数或传输限速。`,"admin.holdings.title":`持有副本`,"admin.holdings.file":`文件`,"admin.holdings.size":`大小`,"admin.holdings.peers":`Peer`,"admin.holdings.topicJoined":`Topic join`,"admin.holdings.lastServed":`最近服务`,"admin.holdings.totalServed":`累计服务`,"admin.holdings.status":`状态`,"admin.holdings.joinedYes":`已 join`,"admin.holdings.joinedNo":`未 join`,"admin.holdings.empty":`暂无持有副本`,"admin.seedHelp.label":`做种状态说明`,"admin.seedHelp.active.label":`做种中`,"admin.seedHelp.active.desc":`已加入 CID topic,可被其他节点发现并提供完整副本。`,"admin.seedHelp.pending.label":`队列中 / 加入中`,"admin.seedHelp.pending.desc":`正在等待或重连 topic,通常会自动进入做种中。`,"admin.seedHelp.paused.label":`已暂停 / 未 join`,"admin.seedHelp.paused.desc":`本机仍持有文件,但当前不会对外提供下载。`,"admin.seedHelp.error.label":`错误`,"admin.seedHelp.error.desc":`加入或做种失败,请查看下方节点日志里的 seed 事件。`,"admin.seedStatus.queued":`队列中`,"admin.seedStatus.joining":`加入中`,"admin.seedStatus.active":`做种中`,"admin.seedStatus.paused":`已暂停`,"admin.seedStatus.error":`错误`,"admin.seedStatus.errorWithMessage":`错误:{message}`,"admin.seedStatus.notJoined":`未 join`,"admin.time.never":`从未`,"admin.time.justNow":`刚刚`,"admin.logs.title":`节点日志`,"admin.logs.filterLabel":`日志筛选`,"admin.logs.empty":`暂无日志`,"admin.logs.time":`时间`,"admin.logs.level":`级别`,"admin.logs.event":`事件`,"admin.logs.message":`消息`,"admin.logFilter.all":`全部`,"admin.logFilter.join":`Join`,"admin.logFilter.pull":`Pull`,"admin.logFilter.verify":`Verify`,"admin.logFilter.serve":`Serve`,"admin.logFilter.error":`Error`,"admin.table.pagination":`表格分页`,"admin.table.totalRows":`共 {count} 条`,"admin.table.pageSize":`每页`,"admin.table.pageIndicator":`第 {page} / {total} 页`,"admin.table.firstPage":`第一页`,"admin.table.previousPage":`上一页`,"admin.table.nextPage":`下一页`,"admin.table.lastPage":`最后一页`,"admin.table.sortAsc":`升序排序`,"admin.table.sortDesc":`降序排序`,"admin.table.sortClear":`取消排序`},L={"admin.title":`節點管理`,"admin.status.online":`線上`,"admin.status.waiting":`等待`,"admin.action.refresh":`重新整理`,"admin.action.copyNodeId":`複製節點 ID`,"admin.action.clear":`清除`,"admin.action.saveConfig":`儲存設定`,"admin.action.exportDiagnostics":`匯出診斷`,"admin.action.clearLogs":`清空日誌`,"admin.toast.backendChecking":`正在檢測後端連線,請稍後再試`,"admin.toast.backendDisconnected":`未連線後端`,"admin.toast.statusRefreshed":`節點狀態已重新整理`,"admin.toast.configSavedRestart":`節點設定已儲存。修改了資料目錄,需要重啟 daemon 生效。`,"admin.toast.configSaved":`節點設定已儲存`,"admin.toast.nodeIdCopied":`節點 ID 已複製`,"admin.toast.logsCleared":`節點日誌已清空`,"admin.toast.diagnosticsExported":`診斷已匯出`,"admin.toast.userDataCleared":`使用者資料已清除`,"admin.error.readStatus":`無法讀取節點狀態`,"admin.error.saveConfig":`儲存設定失敗`,"admin.error.clearLogs":`清空日誌失敗`,"admin.error.exportDiagnostics":`匯出診斷失敗`,"admin.error.clearUserData":`清除使用者資料失敗`,"admin.error.localDaemonDisconnected":`未連線本機 daemon`,"admin.remoteUnavailable.title":`遠端節點管理不可用`,"admin.remoteUnavailable.desc":`當前連線的是別人部署的遠端節點,普通邀請碼不能檢視或修改節點管理資料。`,"admin.confirm.clearUserData":`確定清除使用者 {address} 的檔案記錄和垃圾桶嗎?無人引用的副本也會被清理。`,"admin.metric.nodeId":`節點 ID`,"admin.metric.connections":`連線`,"admin.metric.peers":`{count} peers`,"admin.metric.capacity":`容量`,"admin.metric.uptime":`執行`,"admin.uptime.daysHours":`{days} 天 {hours} 小時`,"admin.uptime.hoursMinutes":`{hours} 小時 {minutes} 分鐘`,"admin.uptime.minutes":`{minutes} 分鐘`,"admin.nodeStatus.title":`節點狀態`,"admin.nodeStatus.version":`版本`,"admin.nodeStatus.listen":`監聽`,"admin.nodeStatus.dataPath":`資料目錄`,"admin.userData.title":`使用者資料`,"admin.userData.user":`使用者`,"admin.userData.files":`檔案`,"admin.userData.trash":`垃圾桶`,"admin.userData.actions":`操作`,"admin.userData.empty":`暫無使用者資料`,"admin.settings.title":`節點設定`,"admin.settings.dataPath":`資料目錄`,"admin.settings.capacityGiB":`容量上限 GiB`,"admin.settings.maxFileSizeGiB":`單檔案最大 GiB`,"admin.settings.maxFileSize":`單檔案最大`,"admin.settings.maxFileSizeUnit":`單檔案最大單位`,"admin.settings.maxFileSizePlaceholder":`例如 10.2`,"admin.settings.remoteInvites":`遠端訪問邀請碼`,"admin.settings.remoteInvitesPlaceholder":`每行一個,或用英文逗號分隔`,"admin.settings.hint":`資料目錄變更儲存後需要重啟 daemon。修改邀請碼後新請求立即生效。發布和下載成功後會固定做種;MostBox 不設同時做種數或傳輸限速。`,"admin.holdings.title":`持有副本`,"admin.holdings.file":`檔案`,"admin.holdings.size":`大小`,"admin.holdings.peers":`Peer`,"admin.holdings.topicJoined":`Topic join`,"admin.holdings.lastServed":`最近服務`,"admin.holdings.totalServed":`累計服務`,"admin.holdings.status":`狀態`,"admin.holdings.joinedYes":`已 join`,"admin.holdings.joinedNo":`未 join`,"admin.holdings.empty":`暫無持有副本`,"admin.seedHelp.label":`做種狀態說明`,"admin.seedHelp.active.label":`做種中`,"admin.seedHelp.active.desc":`已加入 CID topic,可被其他節點發現並提供完整副本。`,"admin.seedHelp.pending.label":`佇列中 / 加入中`,"admin.seedHelp.pending.desc":`正在等待或重連 topic,通常會自動進入做種中。`,"admin.seedHelp.paused.label":`已暫停 / 未 join`,"admin.seedHelp.paused.desc":`本機仍持有檔案,但當前不會對外提供下載。`,"admin.seedHelp.error.label":`錯誤`,"admin.seedHelp.error.desc":`加入或做種失敗,請檢視下方節點日誌裡的 seed 事件。`,"admin.seedStatus.queued":`佇列中`,"admin.seedStatus.joining":`加入中`,"admin.seedStatus.active":`做種中`,"admin.seedStatus.paused":`已暫停`,"admin.seedStatus.error":`錯誤`,"admin.seedStatus.errorWithMessage":`錯誤:{message}`,"admin.seedStatus.notJoined":`未 join`,"admin.time.never":`從未`,"admin.time.justNow":`剛剛`,"admin.logs.title":`節點日誌`,"admin.logs.filterLabel":`日誌篩選`,"admin.logs.empty":`暫無日誌`,"admin.logs.time":`時間`,"admin.logs.level":`級別`,"admin.logs.event":`事件`,"admin.logs.message":`訊息`,"admin.logFilter.all":`全部`,"admin.logFilter.join":`Join`,"admin.logFilter.pull":`Pull`,"admin.logFilter.verify":`Verify`,"admin.logFilter.serve":`Serve`,"admin.logFilter.error":`Error`,"admin.table.pagination":`表格分頁`,"admin.table.totalRows":`共 {count} 筆`,"admin.table.pageSize":`每頁`,"admin.table.pageIndicator":`第 {page} / {total} 頁`,"admin.table.firstPage":`第一頁`,"admin.table.previousPage":`上一頁`,"admin.table.nextPage":`下一頁`,"admin.table.lastPage":`最後一頁`,"admin.table.sortAsc":`升冪排序`,"admin.table.sortDesc":`降冪排序`,"admin.table.sortClear":`取消排序`},R={"admin.title":`Node admin`,"admin.status.online":`Online`,"admin.status.waiting":`Waiting`,"admin.action.refresh":`Refresh`,"admin.action.copyNodeId":`Copy node ID`,"admin.action.clear":`Clear`,"admin.action.saveConfig":`Save config`,"admin.action.exportDiagnostics":`Export diagnostics`,"admin.action.clearLogs":`Clear logs`,"admin.toast.backendChecking":`Checking backend connection. Try again soon.`,"admin.toast.backendDisconnected":`Backend is not connected`,"admin.toast.statusRefreshed":`Node status refreshed`,"admin.toast.configSavedRestart":`Node config saved. Restart the daemon for the data directory change to take effect.`,"admin.toast.configSaved":`Node config saved`,"admin.toast.nodeIdCopied":`Node ID copied`,"admin.toast.logsCleared":`Node logs cleared`,"admin.toast.diagnosticsExported":`Diagnostics exported`,"admin.toast.userDataCleared":`User data cleared`,"admin.error.readStatus":`Failed to read node status`,"admin.error.saveConfig":`Failed to save config`,"admin.error.clearLogs":`Failed to clear logs`,"admin.error.exportDiagnostics":`Failed to export diagnostics`,"admin.error.clearUserData":`Failed to clear user data`,"admin.error.localDaemonDisconnected":`Local daemon is not connected`,"admin.remoteUnavailable.title":`Remote node admin unavailable`,"admin.remoteUnavailable.desc":`You are connected to a remote node deployed by someone else. A regular invite cannot view or edit node admin data.`,"admin.confirm.clearUserData":`Clear file records and trash for user {address}? Unreferenced local copies may also be removed.`,"admin.metric.nodeId":`Node ID`,"admin.metric.connections":`Connections`,"admin.metric.peers":`{count} peers`,"admin.metric.capacity":`Capacity`,"admin.metric.uptime":`Uptime`,"admin.uptime.daysHours":`{days} d {hours} h`,"admin.uptime.hoursMinutes":`{hours} h {minutes} min`,"admin.uptime.minutes":`{minutes} min`,"admin.nodeStatus.title":`Node status`,"admin.nodeStatus.version":`Version`,"admin.nodeStatus.listen":`Listen`,"admin.nodeStatus.dataPath":`Data directory`,"admin.userData.title":`User data`,"admin.userData.user":`User`,"admin.userData.files":`Files`,"admin.userData.trash":`Trash`,"admin.userData.actions":`Actions`,"admin.userData.empty":`No user data`,"admin.settings.title":`Node settings`,"admin.settings.dataPath":`Data directory`,"admin.settings.capacityGiB":`Capacity limit GiB`,"admin.settings.maxFileSizeGiB":`Max file GiB`,"admin.settings.maxFileSize":`Max file`,"admin.settings.maxFileSizeUnit":`Max file unit`,"admin.settings.maxFileSizePlaceholder":`Example: 10.2`,"admin.settings.remoteInvites":`Remote access invites`,"admin.settings.remoteInvitesPlaceholder":`One per line, or separate with commas`,"admin.settings.hint":`Restart the daemon after saving a data directory change. Invite changes apply to new requests immediately. Publishing and downloading always seed afterward; MostBox does not set a product-level seed count or transfer throttle.`,"admin.holdings.title":`Held copies`,"admin.holdings.file":`File`,"admin.holdings.size":`Size`,"admin.holdings.peers":`Peers`,"admin.holdings.topicJoined":`Topic join`,"admin.holdings.lastServed":`Last served`,"admin.holdings.totalServed":`Served`,"admin.holdings.status":`Status`,"admin.holdings.joinedYes":`Joined`,"admin.holdings.joinedNo":`Not joined`,"admin.holdings.empty":`No held copies`,"admin.seedHelp.label":`Seeding status help`,"admin.seedHelp.active.label":`Seeding`,"admin.seedHelp.active.desc":`Joined the CID topic and can be discovered by other nodes to provide a full copy.`,"admin.seedHelp.pending.label":`Queued / joining`,"admin.seedHelp.pending.desc":`Waiting for or reconnecting to the topic. It usually becomes active automatically.`,"admin.seedHelp.paused.label":`Paused / not joined`,"admin.seedHelp.paused.desc":`This device still holds the file, but is not currently serving downloads.`,"admin.seedHelp.error.label":`Error`,"admin.seedHelp.error.desc":`Joining or seeding failed. Check seed events in the node logs below.`,"admin.seedStatus.queued":`Queued`,"admin.seedStatus.joining":`Joining`,"admin.seedStatus.active":`Seeding`,"admin.seedStatus.paused":`Paused`,"admin.seedStatus.error":`Error`,"admin.seedStatus.errorWithMessage":`Error: {message}`,"admin.seedStatus.notJoined":`Not joined`,"admin.time.never":`Never`,"admin.time.justNow":`Just now`,"admin.logs.title":`Node logs`,"admin.logs.filterLabel":`Log filter`,"admin.logs.empty":`No logs`,"admin.logs.time":`Time`,"admin.logs.level":`Level`,"admin.logs.event":`Event`,"admin.logs.message":`Message`,"admin.logFilter.all":`All`,"admin.logFilter.join":`Join`,"admin.logFilter.pull":`Pull`,"admin.logFilter.verify":`Verify`,"admin.logFilter.serve":`Serve`,"admin.logFilter.error":`Error`,"admin.table.pagination":`Table pagination`,"admin.table.totalRows":`{count} rows`,"admin.table.pageSize":`Rows`,"admin.table.pageIndicator":`Page {page} / {total}`,"admin.table.firstPage":`First page`,"admin.table.previousPage":`Previous page`,"admin.table.nextPage":`Next page`,"admin.table.lastPage":`Last page`,"admin.table.sortAsc":`Sort ascending`,"admin.table.sortDesc":`Sort descending`,"admin.table.sortClear":`Clear sort`},z={"profile.meta.title":`个人资料 | MostBox`,"profile.meta.desc":`管理 MostBox 账号头像、显示名称和本地身份信息。`,"profile.kicker":`个人资料`,"profile.signedOut.title":`请先登录`,"profile.signedOut.desc":`登录后管理头像、名称和身份信息。`,"profile.section.account":`账号资料`,"profile.section.account.desc":`这些信息用于聊天、游戏和工具箱里的身份展示,并会随账号备份同步。`,"profile.section.avatar":`头像`,"profile.section.avatar.desc":`选择一个内置头像,或继续使用自己的头像 URL。`,"profile.section.backup":`账号备份`,"profile.section.backup.desc":`手动备份或恢复加密账号数据,包括显示名称、头像、偏好设置、知识库、文件目录、回收站和频道偏好。`,"profile.backup.summary.label":`账号备份数据概览`,"profile.backup.summary.notes":`笔记`,"profile.backup.summary.files":`文件`,"profile.backup.summary.trash":`回收站`,"profile.backup.summary.channels":`频道`,"profile.logout.backupReminder":`退出登录前,建议先备份到云端,或导出到本地,避免显示名称、头像、偏好设置和本机资料丢失。`,"profile.section.identity":`身份信息`,"profile.section.identity.desc":`以下信息来自当前本地账号,可用于识别和复制公开身份。`,"profile.label.displayName":`显示名称`,"profile.label.username":`用户名`,"profile.label.customAvatar":`自定义头像 URL`,"profile.action.save":`保存`,"profile.action.openWallet":`打开 Web3 钱包`,"profile.backup.action.cloudBackup":`备份到云端`,"profile.backup.action.cloudRestore":`从云端恢复`,"profile.backup.action.exportLocal":`导出到本地`,"profile.backup.action.importLocal":`导入到本地`,"profile.backup.status.disabled":`未登录`,"profile.backup.status.idle":`待操作`,"profile.backup.status.backingUp":`正在备份`,"profile.backup.status.restoring":`正在恢复`,"profile.backup.status.exporting":`正在导出`,"profile.backup.status.importing":`正在导入`,"profile.backup.status.done":`已完成`,"profile.backup.status.error":`操作失败`,"profile.backup.confirm.backupTitle":`确认备份到云端`,"profile.backup.confirm.backupMessage":`这会用当前本机账号数据覆盖云端备份,继续吗?`,"profile.backup.confirm.restoreTitle":`确认从云端恢复`,"profile.backup.confirm.restoreMessage":`这会用云端备份覆盖当前本机数据,继续吗?`,"profile.backup.confirm.importTitle":`确认导入备份`,"profile.backup.confirm.restore":`导入备份会合并账号元数据并替换本地知识库,继续吗?`,"profile.backup.toast.cloudUpdated":`账号备份已上传`,"profile.backup.toast.noCloudBackup":`云端暂无账号备份`,"profile.backup.toast.restoredCloud":`已从云端恢复账号备份`,"profile.backup.toast.exportedLocal":`账号备份已导出`,"profile.backup.toast.restoredLocal":`已导入账号备份`,"profile.backup.toast.cancelRestore":`已取消恢复`,"profile.backup.error.backendRequired":`请先连接 MostBox 后端`,"profile.backup.error.loginRequired":`请先登录`,"profile.backup.error.ownerMismatch":`备份不属于当前账号`,"profile.backup.error.backupFailed":`账号备份失败`,"profile.backup.error.restoreFailed":`账号恢复失败`,"profile.backup.error.exportFailed":`导出备份失败`,"profile.backup.error.importFailed":`导入备份失败`,"profile.backup.error.profileSaveFailed":`资料已保存到本机,但写入后端 profile 失败`,"profile.toast.saved":`资料已保存`,"profile.toast.avatarUpdated":`头像已更新`,"profile.avatar.address":`地址头像`,"profile.avatar.panda":`熊猫`,"profile.avatar.owl":`猫头鹰`,"profile.avatar.dolphin":`海豚`,"profile.avatar.tiger":`老虎`,"profile.avatar.turtle":`海龟`,"profile.avatar.snow-mountain":`雪山`},B={"profile.meta.title":`個人資料 | MostBox`,"profile.meta.desc":`管理 MostBox 帳號頭像、顯示名稱和本機身份資訊。`,"profile.kicker":`個人資料`,"profile.signedOut.title":`請先登入`,"profile.signedOut.desc":`登入後管理頭像、名稱和身份資訊。`,"profile.section.account":`帳號資料`,"profile.section.account.desc":`這些資訊用於聊天、遊戲和工具箱裡的身份展示,並會隨帳號備份同步。`,"profile.section.avatar":`頭像`,"profile.section.avatar.desc":`選擇一個內建頭像,或繼續使用自己的頭像 URL。`,"profile.section.backup":`帳號備份`,"profile.section.backup.desc":`手動備份或恢復加密帳號資料,包括顯示名稱、頭像、偏好設定、知識庫、檔案目錄、垃圾桶和頻道偏好。`,"profile.backup.summary.label":`帳號備份資料概覽`,"profile.backup.summary.notes":`筆記`,"profile.backup.summary.files":`檔案`,"profile.backup.summary.trash":`垃圾桶`,"profile.backup.summary.channels":`頻道`,"profile.logout.backupReminder":`登出前,建議先備份到雲端,或匯出到本機,避免顯示名稱、頭像、偏好設定和本機資料遺失。`,"profile.section.identity":`身份資訊`,"profile.section.identity.desc":`以下資訊來自目前本機帳號,可用於識別和複製公開身份。`,"profile.label.displayName":`顯示名稱`,"profile.label.username":`使用者名稱`,"profile.label.customAvatar":`自訂頭像 URL`,"profile.action.save":`儲存`,"profile.action.openWallet":`開啟 Web3 錢包`,"profile.backup.action.cloudBackup":`備份到雲端`,"profile.backup.action.cloudRestore":`從雲端恢復`,"profile.backup.action.exportLocal":`匯出到本機`,"profile.backup.action.importLocal":`匯入到本機`,"profile.backup.status.disabled":`未登入`,"profile.backup.status.idle":`待操作`,"profile.backup.status.backingUp":`正在備份`,"profile.backup.status.restoring":`正在恢復`,"profile.backup.status.exporting":`正在匯出`,"profile.backup.status.importing":`正在匯入`,"profile.backup.status.done":`已完成`,"profile.backup.status.error":`操作失敗`,"profile.backup.confirm.backupTitle":`確認備份到雲端`,"profile.backup.confirm.backupMessage":`這會用目前本機帳號資料覆蓋雲端備份,繼續嗎?`,"profile.backup.confirm.restoreTitle":`確認從雲端恢復`,"profile.backup.confirm.restoreMessage":`這會用雲端備份覆蓋目前本機資料,繼續嗎?`,"profile.backup.confirm.importTitle":`確認匯入備份`,"profile.backup.confirm.restore":`匯入備份會合併帳號元資料並取代本機知識庫,繼續嗎?`,"profile.backup.toast.cloudUpdated":`帳號備份已上傳`,"profile.backup.toast.noCloudBackup":`雲端暫無帳號備份`,"profile.backup.toast.restoredCloud":`已從雲端恢復帳號備份`,"profile.backup.toast.exportedLocal":`帳號備份已匯出`,"profile.backup.toast.restoredLocal":`已匯入帳號備份`,"profile.backup.toast.cancelRestore":`已取消恢復`,"profile.backup.error.backendRequired":`請先連接 MostBox 後端`,"profile.backup.error.loginRequired":`請先登入`,"profile.backup.error.ownerMismatch":`備份不屬於目前帳號`,"profile.backup.error.backupFailed":`帳號備份失敗`,"profile.backup.error.restoreFailed":`帳號恢復失敗`,"profile.backup.error.exportFailed":`匯出備份失敗`,"profile.backup.error.importFailed":`匯入備份失敗`,"profile.backup.error.profileSaveFailed":`資料已儲存到本機,但寫入後端 profile 失敗`,"profile.toast.saved":`資料已儲存`,"profile.toast.avatarUpdated":`頭像已更新`,"profile.avatar.address":`地址頭像`,"profile.avatar.panda":`熊貓`,"profile.avatar.owl":`貓頭鷹`,"profile.avatar.dolphin":`海豚`,"profile.avatar.tiger":`老虎`,"profile.avatar.turtle":`海龜`,"profile.avatar.snow-mountain":`雪山`},V={"profile.meta.title":`Profile | MostBox`,"profile.meta.desc":`Manage the MostBox account avatar, display name, and local identity.`,"profile.kicker":`Profile`,"profile.signedOut.title":`Sign in first`,"profile.signedOut.desc":`Sign in to manage your profile.`,"profile.section.account":`Account`,"profile.section.account.desc":`These details are used for identity display across chat, games, and tools, and sync through account backup.`,"profile.section.avatar":`Avatar`,"profile.section.avatar.desc":`Choose a built-in avatar, or keep using your own avatar URL.`,"profile.section.backup":`Account backup`,"profile.section.backup.desc":`Manually back up or restore encrypted account data, including display name, avatar, preferences, knowledge base, file directories, trash, and channel preferences.`,"profile.backup.summary.label":`Account backup data overview`,"profile.backup.summary.notes":`Notes`,"profile.backup.summary.files":`Files`,"profile.backup.summary.trash":`Trash`,"profile.backup.summary.channels":`Channels`,"profile.logout.backupReminder":`Before signing out, back up to the cloud or export locally to avoid losing display name, avatar, preferences, and local data.`,"profile.section.identity":`Identity`,"profile.section.identity.desc":`These details come from the current local account and are safe to copy as public identity.`,"profile.label.displayName":`Display name`,"profile.label.username":`Username`,"profile.label.customAvatar":`Custom avatar URL`,"profile.action.save":`Save`,"profile.action.openWallet":`Open Web3 wallet`,"profile.backup.action.cloudBackup":`Back up to cloud`,"profile.backup.action.cloudRestore":`Restore from cloud`,"profile.backup.action.exportLocal":`Export to local`,"profile.backup.action.importLocal":`Import to local`,"profile.backup.status.disabled":`Not signed in`,"profile.backup.status.idle":`Ready`,"profile.backup.status.backingUp":`Backing up`,"profile.backup.status.restoring":`Restoring`,"profile.backup.status.exporting":`Exporting`,"profile.backup.status.importing":`Importing`,"profile.backup.status.done":`Done`,"profile.backup.status.error":`Failed`,"profile.backup.confirm.backupTitle":`Confirm cloud backup`,"profile.backup.confirm.backupMessage":`This will replace the cloud backup with this device account data. Continue?`,"profile.backup.confirm.restoreTitle":`Confirm cloud restore`,"profile.backup.confirm.restoreMessage":`This will replace this device data with the cloud backup. Continue?`,"profile.backup.confirm.importTitle":`Confirm backup import`,"profile.backup.confirm.restore":`Importing a backup will merge account metadata and replace the local knowledge base. Continue?`,"profile.backup.toast.cloudUpdated":`Account backup uploaded`,"profile.backup.toast.noCloudBackup":`No account backup in the cloud`,"profile.backup.toast.restoredCloud":`Account backup restored from cloud`,"profile.backup.toast.exportedLocal":`Account backup exported`,"profile.backup.toast.restoredLocal":`Account backup imported`,"profile.backup.toast.cancelRestore":`Restore cancelled`,"profile.backup.error.backendRequired":`Connect to the MostBox backend first`,"profile.backup.error.loginRequired":`Sign in first`,"profile.backup.error.ownerMismatch":`This backup belongs to another account`,"profile.backup.error.backupFailed":`Account backup failed`,"profile.backup.error.restoreFailed":`Account restore failed`,"profile.backup.error.exportFailed":`Backup export failed`,"profile.backup.error.importFailed":`Backup import failed`,"profile.backup.error.profileSaveFailed":`Profile was saved locally, but backend profile save failed`,"profile.toast.saved":`Profile saved`,"profile.toast.avatarUpdated":`Avatar updated`,"profile.avatar.address":`Address avatar`,"profile.avatar.panda":`Panda`,"profile.avatar.owl":`Owl`,"profile.avatar.dolphin":`Dolphin`,"profile.avatar.tiger":`Tiger`,"profile.avatar.turtle":`Turtle`,"profile.avatar.snow-mountain":`Snow mountain`},H=`zh-CN`,U=`mostbox.locale`,W=[`zh-CN`,`zh-TW`,`en`],G={"zh-CN":`简体中文`,"zh-TW":`繁體中文`,en:`English`},ue={...s,...i,...te,...u,...re,...oe,...p,...g,...y,...S,...T,...O,...j,...P,...I,...z},de={...ee,...o,...l,...f,...ae,...ce,...h,...v,...x,...w,...D,...A,...N,...le,...R,...V},K={"zh-CN":ue,"zh-TW":{...c,...a,...ne,...d,...ie,...se,...m,..._,...b,...C,...E,...k,...M,...F,...L,...B},en:de},fe=n(),q=(0,r.createContext)(null);function J(e){return typeof e==`string`&&W.includes(e)}function Y(e){return J(e)?e:H}function pe(e){let t=W.indexOf(e);return W[t<0?0:(t+1)%W.length]??`zh-CN`}function me(e,t){return t?e.replace(/\{(\w+)\}/g,(e,n)=>t[n]===void 0?`{${n}}`:String(t[n])):e}function X(e,t=H,n){return me(K[t][e]||K[`zh-CN`][e],n)}function he(e,t){return e===`zh-TW`?t.replace(/(上午|下午)(?=\d)/,`$1 `):t}function Z(){if(typeof window>`u`)return H;try{return Y(window.localStorage.getItem(U))}catch{return H}}function ge(e){if(!(typeof window>`u`))try{window.localStorage.setItem(U,e)}catch{}}function Q(e){typeof document>`u`||(document.documentElement.lang=e,document.documentElement.dataset.locale=e)}function $(e){return e instanceof Date?e:new Date(e)}function _e({children:e}){let[t,n]=(0,r.useState)(H);(0,r.useEffect)(()=>{n(Z())},[]);let i=(0,r.useCallback)(e=>{n(e),ge(e),Q(e)},[]);(0,r.useEffect)(()=>{Q(t)},[t]),(0,r.useEffect)(()=>{if(typeof window>`u`)return;function e(e){e.key===`mostbox.locale`&&n(Z())}return window.addEventListener(`storage`,e),()=>window.removeEventListener(`storage`,e)},[]);let a=(0,r.useMemo)(()=>{let e=pe(t),n=new Intl.DateTimeFormat(t),r=new Intl.DateTimeFormat(t,{hour:`2-digit`,minute:`2-digit`}),a=new Intl.DateTimeFormat(t,{dateStyle:`medium`,timeStyle:`short`}),o=new Intl.NumberFormat(t),s=new Intl.Collator(t);return{locale:t,localeName:G[t],nextLocale:e,nextLocaleName:G[e],setLocale:i,t:(e,n)=>X(e,t,n),formatDate:(e,r)=>r?new Intl.DateTimeFormat(t,r).format($(e)):n.format($(e)),formatTime:(e,n)=>he(t,n?new Intl.DateTimeFormat(t,n).format($(e)):r.format($(e))),formatDateTime:(e,n)=>n?new Intl.DateTimeFormat(t,n).format($(e)):a.format($(e)),formatNumber:(e,n)=>n?new Intl.NumberFormat(t,n).format(e):o.format(e),compareStrings:(e,t)=>s.compare(e,t)}},[t,i]);return(0,fe.jsx)(q.Provider,{value:a,children:e})}function ve(){let e=(0,r.useContext)(q);if(!e)throw Error(`useI18n must be used within I18nProvider`);return e}export{ve as a,G as c,X as i,J as n,W as o,Y as r,U as s,_e as t};