@audiofool/moondog 0.1.0 → 0.2.0-beta.3

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 (125) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +156 -68
  3. package/contracts/v1/definitions.schema.json +1 -169
  4. package/package.json +7 -23
  5. package/scripts/contract-lib.mjs +0 -7
  6. package/scripts/contract-semantics.mjs +0 -1904
  7. package/scripts/moondog.mjs +285 -74
  8. package/src/core/apple-library-source-status.mjs +0 -16
  9. package/src/core/apple-projection-domain-services.mjs +253 -53
  10. package/src/core/application-update.mjs +320 -0
  11. package/src/core/capability-catalog.mjs +290 -55
  12. package/src/core/listener-avoids.mjs +101 -0
  13. package/src/core/listening-now.mjs +108 -0
  14. package/src/core/listening-profile-domain-services.mjs +189 -41
  15. package/src/core/listening-upkeep.mjs +31 -0
  16. package/src/core/moondog-application.mjs +2115 -107
  17. package/src/core/playback-preferences.mjs +97 -0
  18. package/src/core/spotify-listening-intent.mjs +124 -0
  19. package/src/core/synthetic-domain-services.mjs +24 -3
  20. package/src/core/track-title.mjs +107 -0
  21. package/src/demo/moondog-demo.mjs +4 -22
  22. package/src/i18n/index.mjs +285 -0
  23. package/src/i18n/messages/de.mjs +135 -0
  24. package/src/i18n/messages/en.mjs +136 -0
  25. package/src/i18n/messages/es.mjs +135 -0
  26. package/src/i18n/messages/fr.mjs +135 -0
  27. package/src/i18n/messages/it.mjs +135 -0
  28. package/src/i18n/messages/ja.mjs +135 -0
  29. package/src/i18n/messages/ko.mjs +135 -0
  30. package/src/i18n/messages/pt.mjs +135 -0
  31. package/src/i18n/messages/zh-Hant.mjs +135 -0
  32. package/src/i18n/messages/zh.mjs +135 -0
  33. package/src/i18n/preferences.mjs +34 -0
  34. package/src/i18n/screen/es.mjs +967 -0
  35. package/src/i18n/screen/ja.mjs +967 -0
  36. package/src/i18n/screen/pt.mjs +967 -0
  37. package/src/i18n/screen/zh.mjs +967 -0
  38. package/src/importers/apple-music-library/index.mjs +0 -16
  39. package/src/importers/apple-music-library/sqlite-projection.mjs +51 -9
  40. package/src/integrations/apple-music/catalog.mjs +166 -14
  41. package/src/integrations/apple-music/music-app.mjs +232 -0
  42. package/src/integrations/apple-music/storefront.mjs +28 -0
  43. package/src/integrations/apple-music/terminal-preview-player.mjs +221 -0
  44. package/src/integrations/lastfm/history.mjs +221 -0
  45. package/src/integrations/lastfm/settings.mjs +75 -0
  46. package/src/integrations/netease/ncm-cli-player.mjs +328 -0
  47. package/src/integrations/open-music-similarity/artist-radio.mjs +26 -18
  48. package/src/integrations/public-playlists.mjs +2 -1
  49. package/src/integrations/spotify/account-data-profile.mjs +14 -6
  50. package/src/integrations/spotify/authentication.mjs +149 -15
  51. package/src/integrations/spotify/catalog-resolver.mjs +9 -6
  52. package/src/integrations/spotify/connection.mjs +2 -1
  53. package/src/integrations/spotify/credential-store.mjs +4 -0
  54. package/src/integrations/spotify/extended-streaming-history.mjs +11 -11
  55. package/src/integrations/spotify/history-archive.mjs +1 -1
  56. package/src/integrations/spotify/library-snapshot.mjs +227 -0
  57. package/src/integrations/spotify/recent-activity.mjs +2 -0
  58. package/src/integrations/spotify/service.mjs +873 -69
  59. package/src/integrations/spotify/web-api-client.mjs +410 -127
  60. package/src/integrations/web/brave-web.mjs +45 -0
  61. package/src/integrations/web/codex-web.mjs +15 -82
  62. package/src/integrations/web/deepseek-web.mjs +81 -0
  63. package/src/integrations/web/web-research.mjs +119 -0
  64. package/src/integrations/web/web-result.mjs +215 -0
  65. package/src/integrations/youtube-music/takeout.mjs +3 -1
  66. package/src/memory/local-memory-store.mjs +542 -57
  67. package/src/profile/history-import.mjs +42 -6
  68. package/src/profile/listener-corrections.mjs +22 -0
  69. package/src/profile/listener-profile-build.mjs +461 -0
  70. package/src/profile/listener-profile-store.mjs +130 -0
  71. package/src/profile/listener-profile-verification.mjs +68 -0
  72. package/src/profile/listener-profile-worker.mjs +179 -0
  73. package/src/profile/listening-history-store.mjs +640 -17
  74. package/src/profile/listening-profile-projection.mjs +454 -86
  75. package/src/profile/local-music-data.mjs +1 -1
  76. package/src/profile/moondog-suggestions.mjs +184 -0
  77. package/src/profile/music-providers.mjs +11 -7
  78. package/src/profile/profile-exploration.mjs +92 -0
  79. package/src/profile/recorded-measures.mjs +24 -0
  80. package/src/profile/spotify-archive-taste.mjs +0 -4
  81. package/src/runtime/pi/agent-runtime.mjs +2536 -692
  82. package/src/runtime/pi/authentication.mjs +34 -1
  83. package/src/runtime/pi/configured-runtime.mjs +22 -6
  84. package/src/runtime/pi/conversation-name.mjs +53 -0
  85. package/src/runtime/pi/memory-agent-runtime.mjs +2 -2
  86. package/src/runtime/pi/model-catalog.mjs +28 -5
  87. package/src/runtime/pi/model-settings.mjs +202 -0
  88. package/src/runtime/pi/model-transport.mjs +10 -0
  89. package/src/runtime/pi/persistent-credential-store.mjs +67 -31
  90. package/src/runtime/pi/profile-build-runtime.mjs +161 -0
  91. package/src/runtime/pi/public-model-catalog.mjs +288 -0
  92. package/src/runtime/pi/runtime-settings.mjs +10 -2
  93. package/src/runtime/pi/skills/listener-profile/SKILL.md +48 -0
  94. package/src/runtime/pi/tool-trace.mjs +37 -0
  95. package/src/surfaces/cli/auth-command.mjs +12 -4
  96. package/src/surfaces/cli/brand-components.mjs +310 -132
  97. package/src/surfaces/cli/brand-theme.mjs +51 -28
  98. package/src/surfaces/cli/command-completions.mjs +58 -42
  99. package/src/surfaces/cli/format-output.mjs +199 -388
  100. package/src/surfaces/cli/history-import-view.mjs +292 -139
  101. package/src/surfaces/cli/import-guides.mjs +2 -0
  102. package/src/surfaces/cli/listener-profile-command.mjs +92 -0
  103. package/src/surfaces/cli/listening-menu.mjs +7 -4
  104. package/src/surfaces/cli/profile-command.mjs +30 -21
  105. package/src/surfaces/cli/seasons-chart.mjs +87 -0
  106. package/src/surfaces/cli/spotify-command.mjs +54 -6
  107. package/src/surfaces/cli/taste-profile-model.mjs +78 -79
  108. package/src/surfaces/cli/taste-profile-view.mjs +33 -26
  109. package/src/surfaces/cli/terminal-art.mjs +140 -35
  110. package/src/surfaces/cli/tui.mjs +1066 -357
  111. package/src/surfaces/cli/update-command.mjs +32 -0
  112. package/src/surfaces/cli/web-command.mjs +53 -14
  113. package/src/surfaces/html/tasteprint.mjs +43 -70
  114. package/contracts/v1/capability-policy.schema.json +0 -572
  115. package/contracts/v1/profile-evidence.schema.json +0 -237
  116. package/contracts/v1/tool-invocation.schema.json +0 -318
  117. package/contracts/v1/tool-receipt.schema.json +0 -1066
  118. package/scripts/demo-studio.mjs +0 -58
  119. package/src/core/apple-data-migration.mjs +0 -50
  120. package/src/demo/moondog-interactive-tasteprint-demo.mjs +0 -293
  121. package/src/demo/moondog-tasteprint-demo.mjs +0 -631
  122. package/src/integrations/spotify/index.mjs +0 -80
  123. package/src/surfaces/web/showcase.mjs +0 -272
  124. package/src/surfaces/web/studio-page.mjs +0 -4148
  125. package/src/surfaces/web/studio.mjs +0 -2288
@@ -0,0 +1,967 @@
1
+ // Screen text in Simplified Chinese.
2
+ // Keys are the English sentences in the source; scripts/i18n-strings.mjs lists them.
3
+ export default {
4
+ "your listening room": "你的聆听室",
5
+ "profile ready": "资料就绪",
6
+ "local profile": "本地资料",
7
+ "no history": "暂无历史",
8
+ "bring your history": "导入你的历史",
9
+ "model ready": "模型就绪",
10
+ "conversation ready": "可以对话",
11
+ "model offline": "模型离线",
12
+ "Spotify connected": "Spotify 已连接",
13
+ "Music tool": "音乐工具",
14
+ "{count} done": "{count} 项完成",
15
+ "{count} didn't work": "{count} 项失败",
16
+ "{count} not confirmed": "{count} 项未确认",
17
+ "{count} earlier": "之前 {count} 项",
18
+ "NEXT": "下一条",
19
+ "TAB TO TYPE": "按 TAB 输入",
20
+ "YOU": "你",
21
+ "Esc returns to your next thought.": "Esc 回到输入。",
22
+ "What have you been listening to?": "最近在听什么?",
23
+ "A song, a playlist, or what to play next.": "一首歌、一个歌单,或者接下来放什么。",
24
+ "Your personal music agent.": "你的私人音乐助手。",
25
+ "# Your listening room\n\n## 01 / Listen and discover\n\nJust type to talk about music, ask for a playlist, or go exploring.\nTo talk, Moondog needs a model: `/auth` signs you in, then `/model` picks one.\nWhile an answer is coming, each step shows in the conversation, and the footer names the one in progress.\n\n- `/taste` - your profile: open any song or artist to see why it's there\n- `/taste report` - the whole picture on one page\n- `/import` - bring in your history, your library, or a playlist\n- `/lyrics` - the lyrics on the sleeve; `/lyrics sync` finds more\n- `/spotify` - play, queue, and make playlists in Spotify\n- Ask to move playback onto your iPhone, computer, or another Spotify device by name\n- `/web search <query>` or `/web read <url>` - look things up on public music sites\n\n## 02 / Make it yours\n\n- `/profile` - the same profile as `/taste`\n- `/profile corrections` - everything you've told me\n- `/profile retract <id>` - undo one of those\n- `/profile help` - the full set of profile commands\n- `/remember <text>`, `/memory`, `/forget <id>` - what I remember between conversations\n\n## 03 / Around the room\n\n- `/home` - back to the record sleeve; the conversation stays\n- `/theme paper|charcoal|terminal|auto` - change the look\n- `/art braille|ascii|off` - change the artwork\n- `/motion on|off` - turn the animation on or off\n- `/commands` or Ctrl+P - search every command; your message stays put\n- Page Up and Page Down scroll the conversation. The header and your draft stay put\n- Up and Down in the draft recall what you typed in this conversation\n- `/resume` - pick up a saved conversation (type to filter, Enter opens)\n- `/new` - start fresh; this conversation stays saved\n- `/status`, `/sources`, `/tools`, `/doctor` - see what's connected and working\n- `/reload` - reload model settings and sign-ins\n- `/update [--check] [--channel latest|beta]` - check for a release, or close this room and install it\n- `/help all` - every command, including the ones for the shell\n- `/language` - choose the language Moondog uses\n- `/quit` - leave\n\nTab moves to the menu on the home screen. Esc goes back to typing.\nEnter sends, and Shift+Enter starts a new line.\nTab or Enter accepts a suggestion.\nCtrl+C stops a model or web request, or leaves when nothing is running.\nIn the profile, type to filter, Tab switches lists, and Enter shows what you can do.\nCtrl+R refreshes it and Ctrl+O opens the full report.\nYour profile works without a model.\nPut quotes around paths, titles, and names that have spaces.": "# 你的聆听室\n\n## 01 / 听歌与发现\n\n直接输入就能聊音乐、要一个歌单,或者随便逛逛。\n对话需要一个模型:`/auth` 登录,然后用 `/model` 选一个。\n回答生成时,每一步都会显示在对话里,底栏会标出正在进行的那一步。\n\n- `/taste` - 你的资料:打开任意歌曲或艺人,看看它为什么在这里\n- `/taste report` - 一页看完整体情况\n- `/import` - 导入你的历史、曲库或一个歌单\n- `/lyrics` - 封套上的歌词;`/lyrics sync` 找更多\n- `/spotify` - 在 Spotify 里播放、加入队列、建歌单\n- 说出设备名,就能把播放切到你的 iPhone、电脑或其他 Spotify 设备\n- `/web search <关键词>` 或 `/web read <网址>` - 在公开音乐网站上查资料\n\n## 02 / 变成你的\n\n- `/profile` - 和 `/taste` 是同一份资料\n- `/profile corrections` - 你告诉过我的所有选择\n- `/profile retract <id>` - 撤销其中一项\n- `/profile help` - 资料相关的全部命令\n- `/remember <内容>`、`/memory`、`/forget <id>` - 我在对话之间记住的内容\n\n## 03 / 在房间里转转\n\n- `/home` - 回到唱片封套;对话还在\n- `/theme paper|charcoal|terminal|auto` - 换外观\n- `/art braille|ascii|off` - 换插画\n- `/motion on|off` - 打开或关闭动画\n- `/commands` 或 Ctrl+P - 搜索全部命令;你正在写的消息不会丢\n- Page Up 和 Page Down 滚动对话,顶栏和草稿保持不动\n- 在草稿里按上下键,可以找回本次对话中输入过的内容\n- `/resume` - 继续一段保存的对话(输入筛选,Enter 打开)\n- `/new` - 重新开始;这段对话会保存下来\n- `/status`、`/sources`、`/tools`、`/doctor` - 看看哪些已连接、正常工作\n- `/reload` - 重新加载模型设置和登录\n- `/update [--check] [--channel latest|beta]` - 检查新版本,或关闭聆听室并安装\n- `/help all` - 全部命令,包括终端里的\n- `/language` - 选择 Moondog 使用的语言\n- `/quit` - 离开\n\n在首页按 Tab 进入菜单,按 Esc 回到输入。\nEnter 发送,Shift+Enter 换行。\nTab 或 Enter 接受补全建议。\nCtrl+C 停止模型或网页请求;没有任务在运行时则退出。\n在资料页里,输入即可筛选,Tab 切换列表,Enter 查看可做的操作。\nCtrl+R 刷新,Ctrl+O 打开完整报告。\n没有模型,资料页也能用。\n路径、标题和名字里有空格时,请加上引号。",
26
+ "Listening profile": "聆听资料",
27
+ "Profile": "资料",
28
+ "See what your listening reveals. Tell me what I missed.": "看看你的聆听透露了什么,告诉我哪里没看到。",
29
+ "Import your music": "导入你的音乐",
30
+ "Import music": "导入音乐",
31
+ "Bring songs, playlists or listening history.": "导入歌曲、歌单或聆听历史。",
32
+ "Appearance": "外观",
33
+ "Paper, charcoal, or your terminal colors.": "纸张、炭黑,或沿用终端配色。",
34
+ "Help & commands": "帮助与命令",
35
+ "Help": "帮助",
36
+ "Commands, connections and keyboard shortcuts.": "命令、连接和快捷键。",
37
+ "Black ink on white paper": "白纸黑字",
38
+ "Moonlight on a black sky": "黑夜里的月光",
39
+ "Keep your terminal's colors": "沿用终端的配色",
40
+ "Follow MOONDOG_THEME, or guess from your terminal": "跟随 MOONDOG_THEME,或根据终端自动判断",
41
+ "Character artwork with fine detail": "细节丰富的字符插画",
42
+ "Simple terminal characters": "简单的终端字符",
43
+ "A quiet opening, no artwork": "安静的开场,不显示插画",
44
+ "Choose artwork for this terminal": "为这个终端选择插画",
45
+ "Animate the character artwork": "让字符插画动起来",
46
+ "Keep the artwork still": "让插画保持静止",
47
+ "Search public music sites": "搜索公开音乐网站",
48
+ "Read a public page": "读取一个公开网页",
49
+ "Check whether web lookups work": "检查网页查询是否可用",
50
+ "Web lookup commands": "网页查询命令",
51
+ "Check your Spotify connection": "检查 Spotify 连接",
52
+ "What's playing now": "现在在放什么",
53
+ "Your Spotify devices": "你的 Spotify 设备",
54
+ "What's queued up": "队列里有什么",
55
+ "What you played lately": "你最近听了什么",
56
+ "Which account is connected": "连接的是哪个账号",
57
+ "Resume playback or play a Spotify URI": "继续播放,或播放一个 Spotify URI",
58
+ "Pause playback": "暂停播放",
59
+ "Play the next track": "播放下一首",
60
+ "Play the previous track": "播放上一首",
61
+ "Set volume from 0 to 100": "把音量设为 0 到 100",
62
+ "Seek to a position in milliseconds": "跳到某个位置(毫秒)",
63
+ "Set shuffle on or off": "打开或关闭随机播放",
64
+ "Repeat off, one track, or the context": "循环:关闭、单曲或当前列表",
65
+ "Move playback to another device": "把播放切到另一台设备",
66
+ "Add a track or episode URI to the queue": "把歌曲或节目 URI 加入队列",
67
+ "Find a track by title and artist": "按歌名和艺人查找歌曲",
68
+ "Add your latest plays to your profile": "把最近的播放加入你的资料",
69
+ "Add your Spotify library and top artists to your profile": "把你的 Spotify 曲库和常听艺人加入你的资料",
70
+ "Add a Spotify history ZIP to your profile": "把 Spotify 历史 ZIP 加入你的资料",
71
+ "Save your Spotify app's Client ID": "保存你的 Spotify 应用 Client ID",
72
+ "Connect your Spotify account": "连接你的 Spotify 账号",
73
+ "Disconnect your Spotify account": "断开你的 Spotify 账号",
74
+ "Spotify commands": "Spotify 命令",
75
+ "Enable shuffle": "打开随机播放",
76
+ "Disable shuffle": "关闭随机播放",
77
+ "Disable repeat": "关闭循环",
78
+ "Repeat this track": "单曲循环",
79
+ "Repeat the album or playlist": "循环整张专辑或歌单",
80
+ "Stable releases": "正式版",
81
+ "Preview releases": "预览版",
82
+ "Check without installing": "只检查不安装",
83
+ "Choose the release channel": "选择更新渠道",
84
+ "Check profile songs for lyrics": "为资料里的歌曲查找歌词",
85
+ "Apple Music library: not imported": "Apple Music 曲库:尚未导入",
86
+ "Apple Music library: {tracks} and {playlists}, as of {date}": "Apple Music 曲库:{tracks},{playlists},截至 {date}",
87
+ "Includes a full listening history": "包含完整的聆听历史",
88
+ "A library shows what you keep, not every play": "曲库显示的是你收藏了什么,而不是每一次播放",
89
+ "Not ready yet: {reason}": "还没准备好:{reason}",
90
+ "Not ready yet": "还没准备好",
91
+ "`/import` brings in your history": "`/import` 可以导入你的历史",
92
+ "{hours} h": "{hours} 小时",
93
+ "from {services}": "来自 {services}",
94
+ "unknown duration": "时长未知",
95
+ "{minutes} min": "{minutes} 分钟",
96
+ "saved in your library": "在你的曲库里",
97
+ "on one of your playlists": "在你的某个歌单里",
98
+ "you said you like it": "你说过喜欢",
99
+ "biggest in {year}": "{year} 年听得最多",
100
+ "came back once": "回来过一次",
101
+ "up to {count} in a row": "最多连续 {count} 次",
102
+ "{count} separate runs": "{count} 段连播",
103
+ "Unknown year": "年份未知",
104
+ "{count} new": "新增 {count} 首",
105
+ "mostly {artist}": "主要是 {artist}",
106
+ "Unknown season": "季度未知",
107
+ "nothing in your history": "历史里没有记录",
108
+ "top song {song}": "代表曲:{song}",
109
+ "track": "歌曲",
110
+ "artist": "艺人",
111
+ "Keep out": "不再推荐",
112
+ "Like": "喜欢",
113
+ "{share}% ({count} of {total})": "{share}%({total} 次中的 {count} 次)",
114
+ "{first} to {last}": "{first} 至 {last}",
115
+ "Your listening, so far": "你目前的聆听",
116
+ "A one-off reading of the file you chose. Nothing was saved to your profile.": "这是对你所选文件的一次性解读,没有保存到你的资料里。",
117
+ "Read from your own files. It stays on this machine.": "从你自己的文件里读取,只保存在这台电脑上。",
118
+ "What I'm reading from": "我读取的来源",
119
+ "Listening time is known for {count} of those plays": "其中 {count} 次播放有聆听时长",
120
+ "What you told me": "你告诉我的",
121
+ "Artists who stayed with you across the years": "多年来一直陪着你的艺人",
122
+ "Lately": "最近",
123
+ "Who you've played most in the last {count} days": "过去 {count} 天里你听得最多的",
124
+ "Who you've played most recently": "你最近听得最多的",
125
+ "Year by year": "逐年回顾",
126
+ "Seasons": "季度",
127
+ "Your last twelve quarters. \"New\" means new to your history, not necessarily new to you.": "最近十二个季度。“新增”指你的历史里第一次出现,不一定是你第一次听到。",
128
+ "The years, one track each": "每一年,一首歌",
129
+ "Songs you used to play a lot that have gone quiet for {count}+ days": "以前常听、已经沉寂 {count}+ 天的歌",
130
+ "Songs you used to play a lot that have gone quiet": "以前常听、后来沉寂的歌",
131
+ "Songs that found their way back after {count}+ days away": "沉寂 {count}+ 天之后又回来的歌",
132
+ "Songs that found their way back after long gaps": "长时间沉寂之后又回来的歌",
133
+ "Songs you played again right away": "你马上又重放的歌",
134
+ "Most played": "播放最多",
135
+ "Recently": "最近播放",
136
+ "Songs you picked yourself": "你自己选的歌",
137
+ "Songs that followed on": "自动接着播放的歌",
138
+ "Played to the end": "完整听完",
139
+ "Skipped": "跳过",
140
+ "On shuffle": "随机播放时",
141
+ "Offline": "离线时",
142
+ "How you listen": "你怎么听歌",
143
+ "Kept on purpose": "特意收藏的",
144
+ "What this reading can't see": "这份解读看不到的",
145
+ "Plays show attention, not love. A song can be on repeat because it was stuck in your head.": "播放次数代表注意力,不代表喜爱。一首歌反复播放,也可能只是洗脑。",
146
+ "A skip is a moment, not a verdict.": "跳过只是一时,不是定论。",
147
+ "Years and seasons follow UTC, so a late night can land on the next day.": "年份和季度按 UTC 计算,所以深夜的播放可能算到第二天。",
148
+ "A quiet stretch means no history was kept, not that you stopped listening.": "一段空白只说明那段时间没有记录,不代表你没在听歌。",
149
+ "If something here is wrong, open the song or artist in /taste and tell me.": "如果这里有不对的地方,在 /taste 里打开那首歌或那位艺人告诉我。",
150
+ "Add `--json` to the same `--from` command for the full data.": "在同一条 `--from` 命令后加上 `--json` 可以看完整数据。",
151
+ "For the full data with evidence IDs, run `moondog taste --json`.": "想看带证据 ID 的完整数据,运行 `moondog taste --json`。",
152
+ "I keep what you tell me in conversation apart from your music profile.": "你在对话里告诉我的事,我和你的音乐资料分开保存。",
153
+ "I only remember something for good when you say it plainly, or when you ask with `/remember`.": "只有你明确说出来,或用 `/remember` 让我记住时,我才会长期记住。",
154
+ "`/forget <id>` removes it.": "`/forget <id>` 可以删除。",
155
+ "What I remember": "我记住的",
156
+ "Recent conversations": "最近的对话",
157
+ "ready": "就绪",
158
+ "not available yet": "暂不可用",
159
+ "not available": "不可用",
160
+ "off": "关闭",
161
+ "Waiting on: {reason}": "等待:{reason}",
162
+ "What I can do": "我能做什么",
163
+ "Checkup": "检查",
164
+ "ok": "正常",
165
+ "not set up (optional)": "未设置(可选)",
166
+ "not working": "不可用",
167
+ "Talking through `{model}`": "正在通过 `{model}` 对话",
168
+ "Talking through your chosen model": "正在通过你选择的模型对话",
169
+ "Not signed in yet. `/auth` fixes that.": "还没有登录。用 `/auth` 登录。",
170
+ "No model connected. `/model` picks one. Your profile works without it.": "没有连接模型。用 `/model` 选一个。没有模型,资料页也能用。",
171
+ "Connected": "已连接",
172
+ "Not connected. `/import` > Spotify walks you through it.": "未连接。`/import` > Spotify 会一步步带你设置。",
173
+ "Where things stand": "当前状态",
174
+ "Your profile": "你的资料",
175
+ "Talking": "对话",
176
+ "Memory": "记忆",
177
+ "Right now I can't change anything in your music accounts.": "目前我不能修改你音乐账号里的任何内容。",
178
+ "I can make changes in your connected accounts, and I always ask first.": "我可以修改你已连接的账号,并且每次都会先问你。",
179
+ "# Every command\n\nFrom your shell:\n\n- `moondog --version` - show the installed version\n- `moondog update [--check] [--channel latest|beta]` - check for or install a published release\n- `moondog web status|search|read [arguments] [--json]` - look things up on public music sites through DeepSeek, Brave Search or the Codex CLI\n- `moondog demo-history --output <absolute-file.zip> [--json]` - make a fictional Spotify history ZIP to try the importer with\n- `moondog auth login <provider>` - sign in to a model provider; the key is typed out of sight, and openai-codex uses your ChatGPT sign-in\n- `moondog auth status [provider]` - see which sign-ins are saved\n- `moondog auth logout <provider>` - sign out of a provider\n- `moondog spotify help` - set up and control Spotify\n- `moondog spotify login [client-id]` - connect Spotify in your browser\n- `moondog spotify now|devices|queue` - see what Spotify is playing, where, and what's next\n- `moondog spotify recent` - see what you played lately\n- `moondog spotify sync-recent` - add your latest plays to your profile\n- `moondog spotify sync-library` - add your Spotify library to your profile\n- `moondog spotify play|pause|next|previous` - control Spotify playback\n- `moondog listenbrainz import-history <listen-history.json>` - add a ListenBrainz listens file to your profile\n- `moondog catalog latest-single --artist <name> [--known-release <title> | --from <spotify-history.zip>]` - find an artist's latest single on Apple Music (US), no model needed\n- `moondog status [--json]` - see where things stand\n- `moondog taste [--json]` - your listening report\n- `moondog taste --html [--output <file.html>]` - save your report as a web page that works offline\n- `moondog taste --card [--output <file.html>]` - save a short recap you can check before sharing\n- `moondog taste --from <spotify-history.zip> --html` - a one-off report from a Spotify ZIP, without saving it\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - a one-off report from both Spotify exports together\n- `moondog taste --from <spotify-history.zip> --save --html` - save the Spotify history, then show your full report\n- `moondog data inspect --scope <listening|apple|profile>` - see what's stored, and get the code needed to reset it\n- `moondog data export --scope <listening|apple|profile> --output <directory>` - export a copy, leaving the original alone\n- `moondog data reset --scope <listening|apple|profile> --confirm <token>` - set stored data aside (it is archived, not deleted)\n- `moondog profile build [--force]` - build or resume a saved profile with your connected model\n- `moondog profile saved [offset]` - read your saved profile\n- `moondog profile explain <number>` - trace a saved finding to its evidence\n- `moondog profile corrections [--all]` - everything you've told me, including earlier choices\n- `moondog profile correct --artist <name> (--like|--avoid)` - like an artist, or keep them out\n- `moondog profile correct --track <title> --by <artist> (--like|--avoid)` - like a track, or keep it out\n- `moondog profile retract <correction-id>` - undo one of your choices\n- `moondog demo --offline [--json]` - a demo with made-up data, no sign-in needed\n- `moondog demo [prompt] [--json]` - the same demo, talking through your model\n- `moondog ask <prompt>` - ask one question and exit\n- `moondog remember <text>` - ask me to remember something\n- `moondog forget <memory-id>` - forget something\n- `moondog memory reflect [--dry-run] [--json]` - let me think over recent conversations now\n- `moondog` - open the listening room\n\nInside the listening room:\n\n- `/update [--check] [--channel latest|beta]` - check for updates, or save and close this session to install one\n- `/status` or `/sources` - see where things stand\n- `/profile` or `/taste` - your profile, and why each song or artist is there\n- `/taste report` - the whole report on one page\n- `/profile build [--force]` - build or resume a saved reading; Ctrl+C keeps progress\n- `/profile saved [offset]` - read your saved profile\n- `/profile explain <number>` - inspect a saved finding's evidence\n- `/profile corrections [--all]` - everything you've told me\n- `/profile correct --track \"<title>\" --by \"<artist>\" (--like|--avoid)` - like a track, or keep it out\n- `/profile correct --artist \"<name>\" (--like|--avoid)` - like an artist, or keep them out\n- `/profile retract <correction-id>` - undo a choice\n- `/memory` - what I remember\n- `/tools` - what I can do right now\n- `/doctor` - check your setup\n- `/model` - pick the model I talk through\n- `/model <provider> <model>` - switch straight to a model\n- `/model refresh [provider]` - update public model choices; keep the selected model\n- `/auth [provider]` - sign in to a model provider\n- `/web status|search|read` - look things up on public music sites\n- `/import [path]` - bring in your history, library, or a playlist\n- `/language` - choose the language Moondog uses\n- `/spotify` - Spotify commands\n- `/spotify login [client-id]` - connect Spotify\n- `/spotify now|devices|queue` - see what's playing, where, and what's next\n- `/spotify recent|sync-recent` - see or save your latest plays\n- `/spotify import-history \"/path/to/spotify-history.zip\"` - add a Spotify ZIP, no sign-in needed\n- `/skip` or `/stop` - move to the next song preview, or stop them\n- `/reload` - reload model settings and sign-ins\n- `/remember [kind] <text>` - ask me to remember something\n- `/forget <memory-id>` - forget something\n- `/rewind` or Alt+R - edit an earlier message on a new branch; the original stays saved\n- `/rewind latest` - edit the most recent message\n- `/resume` - pick up a saved conversation\n- `/resume <session-id>` - go straight to one\n- `/new` - start fresh; the last one stays saved\n- `/quit` - exit\n\nAnything you type that isn't a command goes to the model you picked with `/model`, or the one set in `MOONDOG_PROVIDER` and `MOONDOG_MODEL`.\nSign in with `/auth`, or set the provider's API key in your environment. `/auth openai-codex` uses your ChatGPT sign-in.\nOnce your profile is ready, I can search your library, explain what I see, and plan playlists with you.\nI can only control Spotify after `moondog spotify login`, and I never post, send messages, delete anything, or spend money.\nAsk me to move playback onto a device by name, such as your iPhone.": "# 全部命令\n\n在终端里:\n\n- `moondog --version` - 显示已安装的版本\n- `moondog update [--check] [--channel latest|beta]` - 检查或安装已发布的版本\n- `moondog web status|search|read [参数] [--json]` - 通过 DeepSeek、Brave Search 或 Codex CLI 在公开音乐网站上查资料\n- `moondog demo-history --output <绝对路径.zip> [--json]` - 生成一个虚构的 Spotify 历史 ZIP,用来试用导入\n- `moondog auth login <provider>` - 登录模型服务商;密钥输入时不显示,openai-codex 使用你的 ChatGPT 登录\n- `moondog auth status [provider]` - 查看保存了哪些登录\n- `moondog auth logout <provider>` - 退出某个服务商\n- `moondog spotify help` - 设置并控制 Spotify\n- `moondog spotify login [client-id]` - 在浏览器里连接 Spotify\n- `moondog spotify now|devices|queue` - 查看 Spotify 正在放什么、在哪放、接下来是什么\n- `moondog spotify recent` - 查看你最近听了什么\n- `moondog spotify sync-recent` - 把最近的播放加入你的资料\n- `moondog spotify sync-library` - 把你的 Spotify 曲库加入你的资料\n- `moondog spotify play|pause|next|previous` - 控制 Spotify 播放\n- `moondog listenbrainz import-history <listen-history.json>` - 把 ListenBrainz 收听文件加入你的资料\n- `moondog catalog latest-single --artist <名字> [--known-release <标题> | --from <spotify-history.zip>]` - 在 Apple Music(美区)查找某位艺人的最新单曲,无需模型\n- `moondog status [--json]` - 查看当前状态\n- `moondog taste [--json]` - 你的聆听报告\n- `moondog taste --html [--output <文件.html>]` - 把报告保存为可离线打开的网页\n- `moondog taste --card [--output <文件.html>]` - 保存一份简短回顾,分享前可以先检查\n- `moondog taste --from <spotify-history.zip> --html` - 从一个 Spotify ZIP 生成一次性报告,不保存\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - 从两份 Spotify 导出一起生成一次性报告\n- `moondog taste --from <spotify-history.zip> --save --html` - 保存 Spotify 历史,然后显示完整报告\n- `moondog data inspect --scope <listening|apple|profile>` - 查看保存了什么,并获取重置所需的代码\n- `moondog data export --scope <listening|apple|profile> --output <目录>` - 导出一份副本,原件保持不变\n- `moondog data reset --scope <listening|apple|profile> --confirm <代码>` - 把保存的数据移到一边(归档,不删除)\n- `moondog profile build [--force]` - 用已连接的模型生成或继续生成保存的资料\n- `moondog profile saved [偏移]` - 阅读你保存的资料\n- `moondog profile explain <编号>` - 追溯一条已保存发现的证据\n- `moondog profile corrections [--all]` - 你告诉过我的所有选择,包括早先的\n- `moondog profile correct --artist <名字> (--like|--avoid)` - 标记喜欢某位艺人,或不再推荐\n- `moondog profile correct --track <歌名> --by <艺人> (--like|--avoid)` - 标记喜欢某首歌,或不再推荐\n- `moondog profile retract <correction-id>` - 撤销你的一项选择\n- `moondog demo --offline [--json]` - 用虚构数据的演示,无需登录\n- `moondog demo [提示] [--json]` - 同样的演示,通过你的模型对话\n- `moondog ask <提示>` - 问一个问题后退出\n- `moondog remember <内容>` - 让我记住一件事\n- `moondog forget <memory-id>` - 忘掉一件事\n- `moondog memory reflect [--dry-run] [--json]` - 让我现在回顾最近的对话\n- `moondog` - 打开聆听室\n\n在聆听室里:\n\n- `/update [--check] [--channel latest|beta]` - 检查更新,或保存并关闭本次会话来安装\n- `/status` 或 `/sources` - 查看当前状态\n- `/profile` 或 `/taste` - 你的资料,以及每首歌、每位艺人为什么在这里\n- `/taste report` - 一页看完整份报告\n- `/profile build [--force]` - 生成或继续生成保存的解读;Ctrl+C 会保留进度\n- `/profile saved [偏移]` - 阅读你保存的资料\n- `/profile explain <编号>` - 查看一条已保存发现的证据\n- `/profile corrections [--all]` - 你告诉过我的所有选择\n- `/profile correct --track \"<歌名>\" --by \"<艺人>\" (--like|--avoid)` - 标记喜欢某首歌,或不再推荐\n- `/profile correct --artist \"<名字>\" (--like|--avoid)` - 标记喜欢某位艺人,或不再推荐\n- `/profile retract <correction-id>` - 撤销一项选择\n- `/memory` - 我记住的内容\n- `/tools` - 我现在能做什么\n- `/doctor` - 检查你的设置\n- `/model` - 选择我用来对话的模型\n- `/model <provider> <model>` - 直接切换到某个模型\n- `/model refresh [provider]` - 更新公开的模型列表;保留当前选择\n- `/auth [provider]` - 登录模型服务商\n- `/web status|search|read` - 在公开音乐网站上查资料\n- `/import [路径]` - 导入你的历史、曲库或一个歌单\n- `/language` - 选择 Moondog 使用的语言\n- `/spotify` - Spotify 命令\n- `/spotify login [client-id]` - 连接 Spotify\n- `/spotify now|devices|queue` - 查看正在放什么、在哪放、接下来是什么\n- `/spotify recent|sync-recent` - 查看或保存你最近的播放\n- `/spotify import-history \"/path/to/spotify-history.zip\"` - 加入一个 Spotify ZIP,无需登录\n- `/skip` 或 `/stop` - 跳到下一首试听,或停止试听\n- `/reload` - 重新加载模型设置和登录\n- `/remember [类型] <内容>` - 让我记住一件事\n- `/forget <memory-id>` - 忘掉一件事\n- `/rewind` 或 Alt+R - 在新分支上编辑之前的一条消息;原来的会保留\n- `/rewind latest` - 编辑最近的一条消息\n- `/resume` - 继续一段保存的对话\n- `/resume <session-id>` - 直接打开某一段\n- `/new` - 重新开始;上一段会保存下来\n- `/quit` - 退出\n\n你输入的非命令内容,会发给你用 `/model` 选的模型,或 `MOONDOG_PROVIDER` 和 `MOONDOG_MODEL` 指定的模型。\n用 `/auth` 登录,或在环境变量里设置服务商的 API 密钥。`/auth openai-codex` 使用你的 ChatGPT 登录。\n资料准备好之后,我可以搜索你的曲库、解释我看到的内容,并和你一起规划歌单。\n只有在 `moondog spotify login` 之后我才能控制 Spotify,而且我从不发帖、不发消息、不删除任何东西,也不花钱。\n说出设备名,比如你的 iPhone,我就能把播放切过去。",
180
+ "Apple Music library": "Apple Music 曲库",
181
+ "Model": "模型",
182
+ "Finding similar music": "查找相似的音乐",
183
+ "Changes to your accounts": "修改你的账号",
184
+ "Spotify permissions": "Spotify 权限",
185
+ "{count} tracks": "{count} 首歌",
186
+ "{count} playlists": "{count} 个歌单",
187
+ "{count} plays": "{count} 次播放",
188
+ "{count} saved songs, follows, and playlist entries from Spotify": "来自 Spotify 的 {count} 条收藏歌曲、关注和歌单条目",
189
+ "quiet for {count} days": "沉寂 {count} 天",
190
+ "came back {count} times": "回来过 {count} 次",
191
+ "longest time away {count} days": "最长离开 {count} 天",
192
+ "{count} plays that year": "当年播放 {count} 次",
193
+ "{count} saved tracks": "{count} 首收藏的歌",
194
+ "{count} songs on your playlists": "你的歌单里有 {count} 首歌",
195
+ "{count} tracks matched across your two Spotify exports": "{count} 首歌在你的两份 Spotify 导出之间匹配上",
196
+ "{count} tracks kept apart because the match was unclear": "{count} 首歌因为匹配不明确而分开保留",
197
+ "{count} private-session plays left out": "略过了 {count} 次私密会话播放",
198
+ "{count} conversations saved on this machine": "这台电脑上保存了 {count} 段对话",
199
+ "{count} things I remember about you": "我记住的关于你的 {count} 件事",
200
+ "{count} recent moments I haven't thought over yet": "{count} 个最近的片段我还没回顾",
201
+ "Your Spotify library and recent plays": "你的 Spotify 曲库和最近播放",
202
+ "Your library shows what you keep and what Spotify ranks highest for you. Recent plays are your latest 50. A history ZIP can add years of listening later.": "曲库显示你收藏了什么,以及 Spotify 认为你最常听什么。最近播放是最新的 50 次。之后可以用历史 ZIP 补上多年的聆听。",
203
+ "Spotify recent listening": "Spotify 最近聆听",
204
+ "Your latest plays, up to 50. Spotify doesn't say how long you listened here. A history ZIP can add the older ones later.": "你最近的播放,最多 50 次。这里 Spotify 不提供聆听时长。之后可以用历史 ZIP 补上更早的播放。",
205
+ "Your library with loves, ratings, play counts and when you last played each song. It doesn't list every play.": "你的曲库,包括喜爱、评分、播放次数和每首歌最后一次播放的时间。它不会列出每一次播放。",
206
+ "ListenBrainz history": "ListenBrainz 历史",
207
+ "Your saved listens. Some don't say how long you listened, so they count as plays without minutes.": "你保存的收听记录。有些没有聆听时长,所以只算播放次数、不计分钟。",
208
+ "Spotify Extended Streaming History": "Spotify 完整播放历史",
209
+ "Every play in this file, with how long you listened and how each song started and ended.": "这个文件里的每一次播放,包括你听了多久、每首歌怎么开始和结束。",
210
+ "Spotify Account Data": "Spotify 账户数据",
211
+ "Your plays from the past year, plus your library and playlists. For older plays and listening time, use Extended streaming history.": "过去一年的播放,加上你的曲库和歌单。想要更早的播放和聆听时长,请用完整播放历史(Extended streaming history)。",
212
+ "Your library songs and YouTube Music plays, read in English or Chinese. Regular YouTube videos are left out. Google doesn't say how long you listened, and history you deleted or paused can't come back.": "你曲库里的歌和 YouTube Music 的播放,支持英文或中文导出。普通 YouTube 视频不计入。Google 不提供聆听时长,删除或暂停记录的历史也无法找回。",
213
+ "{read} of {total} songs could be read; the service hides some. Only this playlist is added. It shows what you keep, not what you played, and it may not be one you made.": "读取到 {total} 首中的 {read} 首;平台隐藏了一部分。只会加入这个歌单。它显示的是你收藏了什么,而不是你听了什么,也不一定是你自己建的。",
214
+ "{read} songs could be read; the service hides some. Only this playlist is added. It shows what you keep, not what you played, and it may not be one you made.": "读取到 {read} 首;平台隐藏了一部分。只会加入这个歌单。它显示的是你收藏了什么,而不是你听了什么,也不一定是你自己建的。",
215
+ "Review your Spotify": "查看你的 Spotify",
216
+ "Nothing is added until you import it.": "在你确认导入之前,不会加入任何内容。",
217
+ "{songs} across {playlists}": "{playlists}共 {songs}",
218
+ "{artists} and {tracks} from Spotify": "Spotify 统计的 {artists}和 {tracks}",
219
+ "A very large library: Moondog read up to its limit and stopped there.": "曲库非常大:Moondog 读到上限就停下了。",
220
+ "Your library isn't included: Reconnect Spotify to allow it.": "未包含你的曲库:重新连接 Spotify 以允许读取。",
221
+ "{plays}, {first} to {last}": "{plays},{first} 至 {last}",
222
+ "No recent plays from Spotify right now.": "Spotify 现在没有最近播放。",
223
+ "Add to my profile": "加入我的资料",
224
+ "Read Spotify again": "重新读取 Spotify",
225
+ "Back": "返回",
226
+ "View my profile": "查看我的资料",
227
+ "Choose a file": "选择文件",
228
+ "Website: {url}": "网址:{url}",
229
+ "Import from YouTube Music": "从 YouTube Music 导入",
230
+ "Start with the songs in your library, then add what you've played from Google Takeout.": "先导入你曲库里的歌,再通过 Google Takeout 加上你听过的内容。",
231
+ "Already have an export? Bring it in now. A new export takes a while to arrive, but there's nothing to set up.": "已经有导出文件了?现在就导入。新的导出需要一段时间才会送达,但不用做任何设置。",
232
+ "Start with my music library": "从我的音乐曲库开始",
233
+ "Add past listening history": "添加过去的聆听历史",
234
+ "YouTube Music: saved library": "YouTube Music:已保存的曲库",
235
+ "YouTube Music: past listening": "YouTube Music:过去的聆听",
236
+ "1. In Google Takeout, deselect all products, then select YouTube and YouTube Music.": "1. 在 Google Takeout 里取消选择所有产品,然后选择 YouTube 和 YouTube Music。",
237
+ "2. Under included data, select music library songs and history. In format options, set history to JSON (not HTML).": "2. 在包含的数据里,选择音乐曲库歌曲和历史记录。在格式选项里,把历史记录设为 JSON(不是 HTML)。",
238
+ "3. Create a one-time ZIP export with a download link. Google emails you when it is ready; save it in Downloads.": "3. 创建一次性的 ZIP 导出并选择下载链接。准备好后 Google 会发邮件通知你;把它存到“下载”文件夹。",
239
+ "4. Return here and choose the ZIP, or an extracted music-library-songs.csv or watch-history.json.": "4. 回到这里选择这个 ZIP,或解压出来的 music-library-songs.csv 或 watch-history.json。",
240
+ "Library songs show what you keep. Only YouTube Music plays count as plays; regular YouTube videos are left out. Google doesn't say how long you listened.": "曲库里的歌显示你收藏了什么。只有 YouTube Music 的播放才算播放;普通 YouTube 视频不计入。Google 不提供聆听时长。",
241
+ "Regular YouTube playlist CSVs and uploaded audio don't work yet. If the ZIP is over 256 MB, unzip it and bring in the music files one at a time.": "普通 YouTube 歌单 CSV 和上传的音频暂时不支持。如果 ZIP 超过 256 MB,请解压后逐个导入音乐文件。",
242
+ "Choose my Takeout file": "选择我的 Takeout 文件",
243
+ "Open Google Takeout": "打开 Google Takeout",
244
+ "Import from {service}": "从 {service} 导入",
245
+ "Quick start: open a playlist that sounds like you, choose Share > Copy link, and paste it below.": "快速开始:打开一个最像你的歌单,选择 分享 > 复制链接,然后粘贴到下面。",
246
+ "Moondog reads the public song list without signing in. You'll see the playlist and its songs before anything is added.": "Moondog 无需登录即可读取公开的歌曲列表。加入任何内容之前,你会先看到这个歌单和里面的歌。",
247
+ "Private playlists can't be read, and some songs may be unavailable; the preview shows how many made it. A playlist shows what you keep, not what you played, and not necessarily one you made.": "私密歌单无法读取,部分歌曲可能不可用;预览会显示读取到多少首。歌单显示的是你收藏了什么,而不是你听了什么,也不一定是你自己建的。",
248
+ "Past listening: there's no reliable way to export your full history from this service yet, so playlists are the way in for now.": "过去的聆听:这个平台目前还没有可靠的方式导出完整历史,所以暂时先从歌单开始。",
249
+ "Paste a playlist share link": "粘贴歌单分享链接",
250
+ "Open my music service": "打开我的音乐平台",
251
+ "Import from Spotify": "从 Spotify 导入",
252
+ "Quick start: connect Spotify and bring in your library, your top artists, and what you've played lately.": "快速开始:连接 Spotify,导入你的曲库、常听艺人和最近的播放。",
253
+ "Past history: bring in the history ZIP Spotify sends you, going back years.": "过去的历史:导入 Spotify 发给你的历史 ZIP,可以追溯好几年。",
254
+ "Either way, it all ends up in the same profile.": "无论哪种方式,最后都汇入同一份资料。",
255
+ "Quick start": "快速开始",
256
+ "Import from Apple Music": "从 Apple Music 导入",
257
+ "Quick start: export your library from Music on Mac and bring in the XML file.": "快速开始:在 Mac 的“音乐”App 里导出曲库,然后导入 XML 文件。",
258
+ "Past history: Apple can send you your data, but Moondog can't read that archive yet.": "过去的历史:Apple 可以把你的数据发给你,但 Moondog 暂时还读不了那个归档。",
259
+ "Quick start with library XML": "用曲库 XML 快速开始",
260
+ "Past listening history guide": "过去的聆听历史指南",
261
+ "Quick start with Apple Music": "用 Apple Music 快速开始",
262
+ "1. In Music on Mac, choose File > Library > Export Library.": "1. 在 Mac 的“音乐”App 里,选择 文件 > 资料库 > 导出资料库。",
263
+ "2. Save Library.xml somewhere easy to find, such as Downloads.": "2. 把 Library.xml 存到好找的地方,比如“下载”文件夹。",
264
+ "3. Choose the XML below. Preview it before adding it to your profile.": "3. 在下面选择这个 XML。加入资料前可以先预览。",
265
+ "Moondog reads the file on this machine, including your loves, ratings and play counts. Nothing to sign in to.": "Moondog 在这台电脑上读取文件,包括你的喜爱、评分和播放次数。不需要登录。",
266
+ "A library shows what you keep and how often, but not when you played each song. Apple's privacy download is a different format.": "曲库显示你收藏了什么、听了多少次,但不显示每首歌是什么时候听的。Apple 的隐私数据下载是另一种格式。",
267
+ "Choose my Library.xml": "选择我的 Library.xml",
268
+ "Open Apple XML export guide": "打开 Apple XML 导出指南",
269
+ "Apple Music: past listening history": "Apple Music:过去的聆听历史",
270
+ "1. Sign in to Apple's Data & Privacy website and choose Request a copy of your data.": "1. 登录 Apple 的“数据与隐私”网站,选择“获取你的数据副本”。",
271
+ "2. Select Apple Media Services information, which includes Apple Music activity, then complete the request.": "2. 选择 Apple Media Services 信息(包含 Apple Music 活动),然后完成申请。",
272
+ "3. Apple notifies you when it is ready. Return to Data & Privacy to download the prepared files within 14 days.": "3. 准备好后 Apple 会通知你。请在 14 天内回到“数据与隐私”下载准备好的文件。",
273
+ "4. Save the download on your computer. Your browser usually uses Downloads, or asks you to choose a folder.": "4. 把下载的文件存到电脑上。浏览器通常会存到“下载”文件夹,或让你选择一个文件夹。",
274
+ "What's included depends on your account and region. Opening the link doesn't request or import anything by itself.": "包含哪些内容取决于你的账号和地区。打开链接本身不会申请或导入任何东西。",
275
+ "Moondog can't read Apple's privacy download yet. Keep it safe, and start with Library.xml for now.": "Moondog 暂时还读不了 Apple 的隐私数据下载。先妥善保存,现在请从 Library.xml 开始。",
276
+ "Open privacy.apple.com": "打开 privacy.apple.com",
277
+ "Start with library XML": "从曲库 XML 开始",
278
+ "Quick start with Spotify": "用 Spotify 快速开始",
279
+ "Start your profile from your Spotify library: saved songs and albums, the artists you follow, your own playlists, and the artists and tracks Spotify ranks highest for you. Your latest 50 plays come along too.": "用你的 Spotify 曲库建立资料:收藏的歌和专辑、关注的艺人、你自己的歌单,以及 Spotify 认为你最常听的艺人和歌曲。最近 50 次播放也会一起导入。",
280
+ "You'll see it all before anything is saved. No model or download needed.": "保存任何内容之前,你都会先看到全部。不需要模型,也不需要下载文件。",
281
+ "Years of listening can come later with a history ZIP.": "多年的聆听可以之后用历史 ZIP 补上。",
282
+ "Spotify is connected. Go ahead when you're ready.": "Spotify 已连接。准备好了就开始吧。",
283
+ "Your Spotify sign-in only covers recent plays. Reconnect once so Moondog can read your library too.": "你的 Spotify 登录只允许读取最近播放。重新连接一次,Moondog 就能读取你的曲库。",
284
+ "Connect Spotify so Moondog can read your library and recent plays.": "连接 Spotify,让 Moondog 读取你的曲库和最近播放。",
285
+ "Connecting Spotify takes a one-time setup on this computer. Or start with a downloaded ZIP instead.": "连接 Spotify 需要在这台电脑上做一次设置。也可以先用下载好的 ZIP 开始。",
286
+ "Preview my Spotify": "预览我的 Spotify",
287
+ "Reconnect Spotify": "重新连接 Spotify",
288
+ "Connect Spotify": "连接 Spotify",
289
+ "Set up Spotify connection": "设置 Spotify 连接",
290
+ "Just my recent plays": "只要最近播放",
291
+ "For now, Moondog connects through a Spotify app you create yourself. It takes a few minutes.": "目前 Moondog 通过你自己创建的 Spotify 应用来连接,需要几分钟。",
292
+ "In the Spotify Dashboard, create an app with Web API turned on.": "在 Spotify Dashboard 里创建一个开启 Web API 的应用。",
293
+ "Add redirect URI: {uri}": "添加重定向 URI:{uri}",
294
+ "Copy the Client ID from the app's settings. You don't need the client secret.": "从应用设置里复制 Client ID。不需要 client secret。",
295
+ "Change Client ID": "更换 Client ID",
296
+ "Sign in to Spotify": "登录 Spotify",
297
+ "Your browser opened Spotify. Sign in, then choose Agree.": "浏览器已打开 Spotify。登录后选择“同意”。",
298
+ "If Spotify shows INVALID_CLIENT or \"Invalid redirect URI\", your Spotify app doesn't match yet. Cancel, check the redirect URI, then choose Change Client ID.": "如果 Spotify 显示 INVALID_CLIENT 或 \"Invalid redirect URI\",说明你的 Spotify 应用还没配好。取消后检查重定向 URI,再选择“更换 Client ID”。",
299
+ "Browser didn't open? Use this link:": "浏览器没有打开?用这个链接:",
300
+ "Open the Spotify sign-in page": "打开 Spotify 登录页",
301
+ "Waiting for you to sign in to Spotify.": "正在等待你登录 Spotify。",
302
+ "Esc cancels": "Esc 取消",
303
+ "Checking your Spotify account...": "正在检查你的 Spotify 账户...",
304
+ "App saved. Nothing imported yet.": "应用已保存。还没有导入任何内容。",
305
+ "Sign-in cancelled. If Spotify showed an error, check the redirect URI in your Spotify app, or choose Change Client ID.": "已取消登录。如果 Spotify 显示了错误,请检查 Spotify 应用里的重定向 URI,或选择“更换 Client ID”。",
306
+ "The app owner needs Premium, and up to 5 people can use it. If you're not the owner, get added under User Management.": "应用的创建者需要 Premium,最多 5 人可以使用。如果你不是创建者,请让对方在 User Management 里添加你。",
307
+ "Open Spotify Dashboard": "打开 Spotify Dashboard",
308
+ "Enter my Client ID": "输入我的 Client ID",
309
+ "Use a history ZIP instead": "改用历史 ZIP",
310
+ "Silence from Spotify": "Spotify 一片安静",
311
+ "Spotify didn't return any recent plays, so nothing was imported.": "Spotify 没有返回任何最近播放,所以什么都没导入。",
312
+ "Play something in Spotify and try again, or bring a history ZIP.": "在 Spotify 里放点什么再试一次,或者导入历史 ZIP。",
313
+ "This only covers the last few plays. Your full history is still there.": "这里只包含最近几次播放,你的完整历史还在。",
314
+ "Try recent listening again": "重新读取最近聆听",
315
+ "Spotify: past listening history": "Spotify:过去的聆听历史",
316
+ "Already have your Spotify ZIP? Choose it below. No need to unzip it.": "已经有 Spotify ZIP 了?在下面选择它,不用解压。",
317
+ "1. Sign in, find Download your data, and select Extended streaming history. It goes back the furthest.": "1. 登录后找到“下载你的数据”,选择“完整播放历史”(Extended streaming history),它能追溯到最早。",
318
+ "2. Confirm the request. Spotify emails you when it's ready, which can take up to 30 days.": "2. 确认申请。准备好后 Spotify 会发邮件通知你,最多可能需要 30 天。",
319
+ "3. Download the ZIP. It usually lands in your Downloads folder.": "3. 下载 ZIP,通常会存到“下载”文件夹。",
320
+ "4. Come back to /import > Spotify > Add past listening history and choose that ZIP.": "4. 回到 /import > Spotify > 添加过去的聆听历史,选择这个 ZIP。",
321
+ "The quicker Account data download works too. It covers the past year plus your library. Neither needs a Spotify app or sign-in.": "更快的“账户数据”下载也可以用,包含过去一年和你的曲库。两种都不需要 Spotify 应用或登录。",
322
+ "Opening the website doesn't request or import anything by itself.": "打开网站本身不会申请或导入任何东西。",
323
+ "Choose my Spotify ZIP": "选择我的 Spotify ZIP",
324
+ "Open Spotify data export website": "打开 Spotify 数据导出网站",
325
+ "I'm waiting for my download": "我在等下载",
326
+ "Wish you were here": "Wish you were here",
327
+ "When Spotify's email arrives, save the ZIP, usually in Downloads.": "收到 Spotify 的邮件后,把 ZIP 存下来,通常在“下载”文件夹。",
328
+ "Then come back to /import > Spotify > Add past listening history and choose it.": "然后回到 /import > Spotify > 添加过去的聆听历史,选择它。",
329
+ "Your profile is still here to explore in the meantime.": "在这之前,你的资料还在,可以随时看看。",
330
+ "You can still talk music while you wait.": "等待的时候,也可以先聊聊音乐。",
331
+ "Connecting Spotify now brings in your latest plays, not your full history.": "现在连接 Spotify 只能导入最近的播放,而不是完整历史。",
332
+ "Quick start while I wait": "等待期间先快速开始",
333
+ "Other listening sources": "其他聆听来源",
334
+ "ListenBrainz: choose a listens JSON file saved from ListenBrainz, either a GET export or a single/import payload.": "ListenBrainz:选择从 ListenBrainz 保存的收听 JSON 文件,可以是 GET 导出或 single/import 数据。",
335
+ "Review your Apple Music library": "查看你的 Apple Music 曲库",
336
+ "Review recent listening": "查看最近聆听",
337
+ "Review this import": "查看这次导入",
338
+ "Your history": "你的历史",
339
+ "Unknown number of songs": "歌曲数量未知",
340
+ "Unknown number of plays": "播放次数未知",
341
+ "Unknown number of tracks": "曲目数量未知",
342
+ "As of {date}": "截至 {date}",
343
+ "an unknown date": "日期未知",
344
+ "No dates in this file.": "这个文件里没有日期。",
345
+ "This shows what you keep, so no plays will be added.": "这里显示的是你收藏了什么,所以不会加入播放记录。",
346
+ "Spotify doesn't say how long you listened to recent plays.": "Spotify 不提供最近播放的聆听时长。",
347
+ "Listening time is known for every play.": "每次播放都有聆听时长。",
348
+ "Listening time is known for {known} of {total} plays.": "{total} 次播放中有 {known} 次有聆听时长。",
349
+ "Refresh recent listening": "刷新最近聆听",
350
+ "Choose a different file": "选择其他文件",
351
+ "Bring your music": "带上你的音乐",
352
+ "Pick your music service. Start with what you've played lately, or go all the way back.": "选择你的音乐平台。从最近听的开始,或者一路追溯到最早。",
353
+ "Anything you bring in joins your profile. Your choices stay as they are.": "导入的任何内容都会加入你的资料,你的选择保持不变。",
354
+ "You'll see what's inside before anything is added. It all stays on this machine.": "加入任何内容之前,你都会先看到里面有什么。一切都保存在这台电脑上。",
355
+ "Other sources": "其他来源",
356
+ "Apple Music library XML": "Apple Music 曲库 XML",
357
+ "Original Spotify history ZIP": "原始的 Spotify 历史 ZIP",
358
+ "Takeout ZIP, music library CSV or watch-history JSON": "Takeout ZIP、音乐曲库 CSV 或 watch-history JSON",
359
+ "Music export file or public playlist link": "音乐导出文件或公开歌单链接",
360
+ "Enter your Spotify Client ID": "输入你的 Spotify Client ID",
361
+ "From your app settings. No client secret.": "在应用设置里。不需要 client secret。",
362
+ "Paste your playlist share link": "粘贴你的歌单分享链接",
363
+ "QQ Music public playlist": "QQ 音乐公开歌单",
364
+ "NetEase Music public playlist": "网易云音乐公开歌单",
365
+ "Link (or the copied share text)": "链接(或复制的分享文字)",
366
+ "Choose your music file": "选择你的音乐文件",
367
+ "File path": "文件路径",
368
+ "Enter save · Esc back": "Enter 保存 · Esc 返回",
369
+ "Paste link · Enter preview · Esc back": "粘贴链接 · Enter 预览 · Esc 返回",
370
+ "Paste or drag one path · Tab completes · Enter inspect · Esc back": "粘贴或拖入一个路径 · Tab 补全 · Enter 读取 · Esc 返回",
371
+ "Paste/drag · Tab path · ↵ inspect · Esc": "粘贴/拖入 · Tab 路径 · ↵ 读取 · Esc",
372
+ "Tab path · ↵ inspect · Esc": "Tab 路径 · ↵ 读取 · Esc",
373
+ "Working on it…": "处理中…",
374
+ "Your listening history": "你的聆听历史",
375
+ "One moment.": "请稍等。",
376
+ "↑↓ ↵ choose · PgUp/Dn read · Esc back": "↑↓ ↵ 选择 · PgUp/Dn 阅读 · Esc 返回",
377
+ "↑↓ ↵ · PgUp/Dn read · Esc": "↑↓ ↵ · PgUp/Dn 阅读 · Esc",
378
+ "↑↓ choose · Enter select · Esc back": "↑↓ 选择 · Enter 确定 · Esc 返回",
379
+ "↑↓ choose · ↵ select · Esc": "↑↓ 选择 · ↵ 确定 · Esc",
380
+ "{count} saved songs": "{count} 首收藏的歌",
381
+ "{count} saved albums": "{count} 张收藏的专辑",
382
+ "{count} followed artists": "{count} 位关注的艺人",
383
+ "{count} songs": "{count} 首歌",
384
+ "{count} playlists you made": "{count} 个你建的歌单",
385
+ "{count} top artists": "{count} 位常听艺人",
386
+ "{count} top tracks": "{count} 首常听歌曲",
387
+ "{count} playlists couldn't be read and will be left out.": "{count} 个歌单无法读取,将被略过。",
388
+ "{count} recent plays": "{count} 次最近播放",
389
+ "Also {count} saved songs, follows, or playlist entries": "另有 {count} 条收藏歌曲、关注或歌单条目",
390
+ "Left out {count} podcasts, videos, or incomplete entries": "略过了 {count} 条播客、视频或不完整的条目",
391
+ "checked and revised once": "已检查并修改过一次",
392
+ "checked": "已检查",
393
+ "Built {date}": "生成于 {date}",
394
+ "No saved reading yet. Use {prefix} build with a connected model.": "还没有保存的解读。连接模型后使用 {prefix} build。",
395
+ "Your saved listening profile · v{version}": "你保存的聆听资料 · v{version}",
396
+ "Evidence, choices or analysis changed. Use {prefix} build to update this reading.": "证据、选择或分析有变化。使用 {prefix} build 更新这份解读。",
397
+ "The final check still flagged:": "最终检查仍然指出:",
398
+ "Use {prefix} explain <number> for a finding's evidence.": "使用 {prefix} explain <编号> 查看某条发现的证据。",
399
+ "All {count} findings: {prefix} saved 0": "全部 {count} 条发现:{prefix} saved 0",
400
+ "More findings: {prefix} saved {offset}": "更多发现:{prefix} saved {offset}",
401
+ "Usage: {prefix} build [--force].": "用法:{prefix} build [--force]。",
402
+ "Import your music first with /import.": "请先用 /import 导入你的音乐。",
403
+ "Your saved reading already matches the current evidence.": "你保存的解读已经和当前证据一致。",
404
+ "Saved your new listening profile.": "已保存你的新聆听资料。",
405
+ "Usage: {prefix} saved [offset].": "用法:{prefix} saved [偏移]。",
406
+ "Usage: {prefix} explain <finding-number>.": "用法:{prefix} explain <发现编号>。",
407
+ "That finding is not in your saved profile. Open /profile saved first.": "你保存的资料里没有这条发现。请先打开 /profile saved。",
408
+ "Finding {number} · profile v{version} · needs update": "发现 {number} · 资料 v{version} · 需要更新",
409
+ "Finding {number} · profile v{version}": "发现 {number} · 资料 v{version}",
410
+ "Scope: {scope}": "范围:{scope}",
411
+ "Uncertainty: {uncertainty}": "不确定性:{uncertainty}",
412
+ "Supporting evidence:": "支持的证据:",
413
+ "Conflicting evidence:": "矛盾的证据:",
414
+ "measured": "测得",
415
+ "interpretation": "解读",
416
+ "your choice": "你的选择",
417
+ "checked; {count} concerns remain": "已检查;还有 {count} 个疑点",
418
+ "from {count} plays": "来自 {count} 次播放",
419
+ "type to filter ↑↓ choose enter select esc back": "输入筛选 ↑↓ 选择 enter 确定 esc 返回",
420
+ "↑↓ choose enter ↵ esc back": "↑↓ 选择 enter ↵ esc 返回",
421
+ "Nothing matches. Backspace to widen the search.": "没有匹配项。按退格键放宽搜索。",
422
+ "What you've told me": "你告诉过我的",
423
+ "Nothing yet. Open a song or artist in /taste to like it or keep it out.": "还没有。在 /taste 里打开一首歌或一位艺人,就可以标记喜欢或不再推荐。",
424
+ "Keep out track": "不再推荐的歌",
425
+ "Like track": "喜欢的歌",
426
+ "Keep out artist": "不再推荐的艺人",
427
+ "Like artist": "喜欢的艺人",
428
+ "Noted. I'll keep {name} out.": "记下了。我会把 {name} 排除在外。",
429
+ "Noted. You like {name}.": "记下了。你喜欢 {name}。",
430
+ "This replaces what you told me before about it.": "这会替换你之前告诉我的相关选择。",
431
+ "Your profile is updated. Your listening history stays as it was.": "你的资料已更新,聆听历史保持不变。",
432
+ "To undo it: {command}": "撤销方法:{command}",
433
+ "Undone. I'll read {name} from your listening again.": "已撤销。我会重新根据你的聆听来理解 {name}。",
434
+ "There's nothing to undo yet.": "还没有可以撤销的内容。",
435
+ "There's no profile to change yet. Bring in your music with /import first.": "还没有可修改的资料。请先用 /import 导入你的音乐。",
436
+ "{count} choices in effect.": "{count} 项选择生效中。",
437
+ "{count} heard properly": "完整听过 {count} 次",
438
+ "last played {date}": "最后播放于 {date}",
439
+ "{percent}% sure": "把握 {percent}%",
440
+ "listening time unknown": "聆听时长未知",
441
+ "Apple Music library: {tracks}": "Apple Music 曲库:{tracks}",
442
+ "Apple Music library: {tracks} · {loved} loved": "Apple Music 曲库:{tracks} · {loved} 首喜爱",
443
+ "{songs} across {count} services": "{count} 个平台共 {songs}",
444
+ "{services} history": "{services} 历史",
445
+ "History": "历史",
446
+ "Library as of {date}": "曲库截至 {date}",
447
+ "Build a saved reading: /profile build": "生成一份保存的解读:/profile build",
448
+ "Saved reading v{version} needs update: /profile build": "保存的解读 v{version} 需要更新:/profile build",
449
+ "Saved reading v{version}: /profile saved": "保存的解读 v{version}:/profile saved",
450
+ "In your Apple Music library": "在你的 Apple Music 曲库里",
451
+ "Apple Music play count": "Apple Music 播放次数",
452
+ "{source}: {details}": "{source}:{details}",
453
+ "Artist": "艺人",
454
+ "Your choice": "你的选择",
455
+ "You said: I like this": "你说过:我喜欢",
456
+ "You said: keep this out": "你说过:不再推荐",
457
+ "Lately (last {count} days)": "最近(过去 {count} 天)",
458
+ "Across the years": "多年来",
459
+ "Gone quiet": "已沉寂",
460
+ "Came back": "又回来了",
461
+ "Played in a row": "连续播放",
462
+ "Song of the year": "年度歌曲",
463
+ "Your song of {year}": "你的 {year} 年度歌曲",
464
+ "Saved in your {service} library": "在你的 {service} 曲库里",
465
+ "On your {service} playlists": "在你的 {service} 歌单里",
466
+ "Followed on {service}": "在 {service} 上关注",
467
+ "Disliked in your music service": "在你的音乐平台上标记了不喜欢",
468
+ "You disliked this in your music service. You can still change it here.": "你在音乐平台上标记了不喜欢。你仍然可以在这里修改。",
469
+ "best at #{rank}": "最高排第 {rank} 名",
470
+ "Service top list": "平台常听榜",
471
+ "In your service's top list": "在你的平台常听榜里",
472
+ "From your library": "来自你的曲库",
473
+ "Familiar from your library": "你的曲库里熟悉的",
474
+ "as of {date}": "截至 {date}",
475
+ "Library evidence": "曲库证据",
476
+ "Across your Apple library: {tracks} · {preferred} with positive preferences.": "在你的 Apple 曲库里:{tracks} · {preferred} 首有正面偏好。",
477
+ "Shows up through one of their tracks.": "通过他们的一首歌出现。",
478
+ "You asked me to keep {artist} out. That still applies, even though you like this track.": "你让我把 {artist} 排除在外。即使你喜欢这首歌,这条依然生效。",
479
+ "You asked me to keep {artist} out.": "你让我把 {artist} 排除在外。",
480
+ "Your choice for the artist": "你对这位艺人的选择",
481
+ "Nothing to look at yet.": "暂时没有可看的内容。",
482
+ "Import your history or library and it will show up here.": "导入你的历史或曲库后,就会显示在这里。",
483
+ "skipped {count} times": "跳过 {count} 次",
484
+ "on {count} playlists": "在 {count} 个歌单里",
485
+ "{count} choices you've made": "你做过 {count} 项选择",
486
+ "You like this": "你喜欢",
487
+ "You asked me to keep this out": "你让我把它排除在外",
488
+ "tab change": "tab 切换",
489
+ "Choices": "选择",
490
+ "Track": "歌曲",
491
+ "Selected": "已选择",
492
+ "Nothing more to show for this one yet.": "这一项暂时没有更多内容。",
493
+ "PgUp/PgDn to scroll": "PgUp/PgDn 滚动",
494
+ "Nothing matches that.": "没有匹配项。",
495
+ "Try fewer words, or press Tab for another list.": "少输几个词试试,或按 Tab 换一个列表。",
496
+ "Your listening profile": "你的聆听资料",
497
+ "Ctrl+R refresh · Ctrl+O report": "Ctrl+R 刷新 · Ctrl+O 报告",
498
+ "Search": "搜索",
499
+ "All": "全部",
500
+ "Tracks": "歌曲",
501
+ "Artists": "艺人",
502
+ "Your choices": "你的选择",
503
+ "you're not signed in to {provider}": "你还没有登录 {provider}",
504
+ "Sign in with `/auth {provider}`.": "用 `/auth {provider}` 登录。",
505
+ "no model is connected": "没有连接模型",
506
+ "Type `/model` to pick one.": "输入 `/model` 选一个。",
507
+ "I can't reach the model (`{reason}`)": "我连不上模型(`{reason}`)",
508
+ "Type `/model` to pick another, or `/reload` to try again.": "输入 `/model` 换一个,或用 `/reload` 再试一次。",
509
+ "Obscured by clouds. I can't talk yet because {why}.\n\n{next}\n\nYour profile doesn't need a model. `/taste`, `/import`, and `/help` all work right now.": "Obscured by clouds。我暂时还不能聊天,因为{why}。\n\n{next}\n\n你的资料不需要模型。`/taste`、`/import` 和 `/help` 现在都能用。",
510
+ "Ready.": "就绪。",
511
+ "↑ ↓ choose · enter open · esc type": "↑ ↓ 选择 · enter 打开 · esc 输入",
512
+ "enter send · ctrl+p commands": "enter 发送 · ctrl+p 命令",
513
+ "tab explore · type to talk": "tab 浏览 · 直接输入聊天",
514
+ "Reading the file. Nothing is added until you say so.": "正在读取文件。你确认之前不会加入任何内容。",
515
+ "Reading; nothing added yet.": "正在读取;还没有加入任何内容。",
516
+ "History saved. Updating your profile...": "历史已保存,正在更新你的资料...",
517
+ "Saved; refreshing profile...": "已保存;正在刷新资料...",
518
+ "Saving history locally...": "正在本地保存历史...",
519
+ "See the message above.": "请看上面的消息。",
520
+ "Opened in your browser. Moondog will be here when you're back.": "已在浏览器中打开。你回来时 Moondog 还在这里。",
521
+ "Guide opened in browser.": "指南已在浏览器中打开。",
522
+ "Ready; nothing added.": "就绪;未加入任何内容。",
523
+ "Choose one history file.": "选择一个历史文件。",
524
+ "Choose a step; Esc goes back.": "选择一步;Esc 返回。",
525
+ "Enter chooses · Esc back": "Enter 选择 · Esc 返回",
526
+ "Pick a song or artist. Enter shows why it's here.": "选择一首歌或一位艺人。按 Enter 查看它为什么在这里。",
527
+ "Enter actions · Tab views · Esc back": "Enter 操作 · Tab 切换视图 · Esc 返回",
528
+ "Here's the evidence. PgUp/PgDn to scroll, Enter for actions.": "这是证据。PgUp/PgDn 滚动,Enter 查看操作。",
529
+ "Evidence · PgUp/PgDn scroll · Enter": "证据 · PgUp/PgDn 滚动 · Enter",
530
+ "Imported. Here's your profile with everything so far.": "已导入。这是包含目前全部内容的资料。",
531
+ "Imported · Enter to review": "已导入 · Enter 查看",
532
+ "↑↓ choose · Tab/Enter complete": "↑↓ 选择 · Tab/Enter 补全",
533
+ "New conversation · /resume history": "新对话 · /resume 查看历史",
534
+ "One moment...": "请稍等...",
535
+ "Tab path · ↵ inspect · Esc back": "Tab 路径 · ↵ 读取 · Esc 返回",
536
+ "↑↓ ↵ · PgUp/Dn read · Esc back": "↑↓ ↵ · PgUp/Dn 阅读 · Esc 返回",
537
+ "paste a path · tab completes · enter inspects · esc back": "粘贴路径 · tab 补全 · enter 读取 · esc 返回",
538
+ "↑↓ choose · enter select · PgUp/PgDn read · esc back": "↑↓ 选择 · enter 确定 · PgUp/PgDn 阅读 · esc 返回",
539
+ "type filter · ↑↓ select · enter actions · tab views · esc back": "输入筛选 · ↑↓ 选择 · enter 操作 · tab 切换视图 · esc 返回",
540
+ "↑↓ select · enter actions · tab views · esc back": "↑↓ 选择 · enter 操作 · tab 切换视图 · esc 返回",
541
+ "stopping · the queue waits": "正在停止 · 队列稍后继续",
542
+ "stopping": "正在停止",
543
+ "enter queues the next one · ctrl+c cancel": "enter 把下一条加入等待 · ctrl+c 取消",
544
+ "enter queues the next one · waiting for command": "enter 把下一条加入等待 · 等待命令完成",
545
+ "enter queues the next one · answering in another window": "enter 把下一条加入等待 · 正在另一个窗口里回复",
546
+ "Answering in another Moondog window...": "正在另一个 Moondog 窗口里回复...",
547
+ "↑↓ choose · tab/enter complete · esc dismiss": "↑↓ 选择 · tab/enter 补全 · esc 关闭",
548
+ "tab explore · ctrl+p commands enter send · shift+enter newline": "tab 浏览 · ctrl+p 命令 enter 发送 · shift+enter 换行",
549
+ "tab explore · ctrl+p commands": "tab 浏览 · ctrl+p 命令",
550
+ "queued drafts paused · up edits the last": "等待中的草稿已暂停 · 上键编辑最后一条",
551
+ "enter send · shift+enter newline · alt+r rewind": "enter 发送 · shift+enter 换行 · alt+r 回退",
552
+ "enter send · /rewind": "enter 发送 · /rewind",
553
+ "You": "你",
554
+ "Profile closed · /taste opens it again.": "资料已关闭 · /taste 可以重新打开。",
555
+ "That didn't work: {error}": "没成功:{error}",
556
+ "Profile updated. Pick a song or artist.": "资料已更新。选择一首歌或一位艺人。",
557
+ "From your profile": "来自你的资料",
558
+ "Find more like this": "找更多类似的",
559
+ "Start a request from this track that you can edit": "从这首歌开始一个可编辑的请求",
560
+ "Why it's here": "为什么在这里",
561
+ "Where this comes from and what it can't tell me": "来源,以及它说明不了什么",
562
+ "I like this": "我喜欢",
563
+ "Tell Moondog you like this track": "告诉 Moondog 你喜欢这首歌",
564
+ "Tell Moondog you like this artist": "告诉 Moondog 你喜欢这位艺人",
565
+ "Keep it out": "不再推荐",
566
+ "Leave this track out of suggestions": "不再推荐这首歌",
567
+ "Leave this artist out of suggestions": "不再推荐这位艺人",
568
+ "Undo my choice": "撤销我的选择",
569
+ "Go back to what your listening says": "回到你的聆听所反映的结果",
570
+ "Keep looking around": "继续看看",
571
+ "You have a command half-typed. Finish or clear it first.": "你有一条命令输入到一半,先完成或清空它。",
572
+ "Find me 3 songs to go to from here, and tell me why each one.": "从这里出发找 3 首歌给我,并告诉我每首的理由。",
573
+ "Request ready · edit it, then press Enter.": "请求已准备好 · 编辑后按 Enter。",
574
+ "Request ready · /model connects a model first.": "请求已准备好 · 先用 /model 连接模型。",
575
+ "Which evidence?": "哪一条证据?",
576
+ "What it can't tell me": "它说明不了什么",
577
+ "How sure: {percent}%": "把握:{percent}%",
578
+ "Saving your choice...": "正在保存你的选择...",
579
+ "Undone: {name}": "已撤销:{name}",
580
+ "Liked: {name}": "已标记喜欢:{name}",
581
+ "Kept out: {name}": "已不再推荐:{name}",
582
+ "{title} by {artist}": "{artist} 的《{title}》",
583
+ "Done. I'll read {name} from your listening again, without your earlier choice.": "好了。我会重新根据你的聆听来理解 {name},不再参考你之前的选择。",
584
+ "Noted. You like {name}.\n\nYour listening history stays as it was.": "记下了。你喜欢 {name}。\n\n你的聆听历史保持不变。",
585
+ "Noted. I'll leave {name} out of suggestions.\n\nYour listening history stays as it was.": "记下了。我不会再推荐 {name}。\n\n你的聆听历史保持不变。",
586
+ "{receipt}.": "{receipt}。",
587
+ "{receipt}. The profile didn't refresh; Ctrl+R tries again.": "{receipt}。资料没有刷新;按 Ctrl+R 再试一次。",
588
+ "## Is there anybody out there?\n\nNot yet. Your profile starts with your listening history.\n\nType `/import`, pick your music service, and bring in your history, your library, or a public playlist. Then come back here to see what it says about you, and tell me what I got wrong.\n\nEverything stays on this machine. You don't need a model or a Spotify sign-in.": "## Is there anybody out there?\n\n还没有。你的资料从聆听历史开始。\n\n输入 `/import`,选择你的音乐平台,导入你的历史、曲库或一个公开歌单。然后回到这里,看看它怎么描述你,再告诉我哪里不对。\n\n一切都保存在这台电脑上。不需要模型,也不需要登录 Spotify。",
589
+ "No profile yet. /import brings in your history.": "还没有资料。/import 可以导入你的历史。",
590
+ "Profile updated.": "资料已更新。",
591
+ "Full report above. /taste opens the profile again.": "完整报告在上面。/taste 可以重新打开资料。",
592
+ "Runtime rebuilding is unavailable in this launch mode.": "这种启动方式不支持重建运行环境。",
593
+ "Usage: /model [provider] [model], or /model refresh [provider].": "用法:/model [provider] [model],或 /model refresh [provider]。",
594
+ "previous catalog retained": "保留之前的目录",
595
+ "Catalog refresh is unavailable in this launch mode.": "这种启动方式不支持刷新目录。",
596
+ "Refreshing public model metadata... Ctrl+C cancels.": "正在刷新公开的模型信息... Ctrl+C 取消。",
597
+ "Model choices refreshed from Pi’s public catalog (pi.dev).\n\n{results}\n\nYour selected model and conversation are unchanged.": "已从 Pi 的公开目录(pi.dev)刷新模型选项。\n\n{results}\n\n你选择的模型和对话都没有变化。",
598
+ "Catalog checked. /model opens the updated choices.": "目录已检查。/model 打开更新后的选项。",
599
+ "Unknown Pi provider: {provider}": "未知的 Pi 服务商:{provider}",
600
+ "Choose a model provider": "选择一个模型服务商",
601
+ "Model unchanged.": "模型未更改。",
602
+ "Checking public model catalog... Ctrl+C cancels.": "正在检查公开的模型目录... Ctrl+C 取消。",
603
+ " (cached/bundled fallback)": "(使用缓存或内置列表)",
604
+ "Catalog unavailable; showing retained choices. /model refresh retries.": "目录不可用;显示保留的选项。/model refresh 可以重试。",
605
+ "Choose a model. Esc goes back.": "选择一个模型。Esc 返回。",
606
+ "Unknown {provider} model: {model}": "未知的 {provider} 模型:{model}",
607
+ " - reasoning": " - 推理",
608
+ "Choose a model for {provider}{note}": "为 {provider} 选择一个模型{note}",
609
+ "Loading {model}...": "正在加载 {model}...",
610
+ "Now talking through `{model}`. This conversation and what I remember carry over.": "现在通过 `{model}` 对话。这段对话和我记住的内容都会保留。",
611
+ "Saved `{model}`, but you're not signed in yet. Run `/auth {provider}` to connect it.": "已保存 `{model}`,但你还没有登录。运行 `/auth {provider}` 连接它。",
612
+ "Saved `{model}`, but I can't reach it yet (`{reason}`).": "已保存 `{model}`,但暂时连不上(`{reason}`)。",
613
+ "Model ready.": "模型就绪。",
614
+ "Model saved, not connected yet.": "模型已保存,尚未连接。",
615
+ "Use /auth or /auth <provider>. Type API keys only into the hidden prompt that follows.": "使用 /auth 或 /auth <provider>。API 密钥只在随后出现的隐藏输入框里输入。",
616
+ "Sign-in isn't available when Moondog is started this way.": "这种启动方式不支持登录。",
617
+ "I can't sign in to that provider. Type /auth to see the ones I can.": "我无法登录这个服务商。输入 /auth 查看支持的服务商。",
618
+ "ChatGPT sign-in": "ChatGPT 登录",
619
+ "API key": "API 密钥",
620
+ "Sign in to a model or web search service": "登录模型或网页搜索服务商",
621
+ "Sign-in cancelled.": "已取消登录。",
622
+ "Opening {provider} sign-in...": "正在打开 {provider} 登录...",
623
+ "Signed in. Talking through `{model}`.": "已登录。正在通过 `{model}` 对话。",
624
+ "Signed in. Run `/model {provider}` to pick a model.": "已登录。运行 `/model {provider}` 选择模型。",
625
+ "Signed in. Restart Moondog to use it.": "已登录。重启 Moondog 后生效。",
626
+ "Signed in.": "已登录。",
627
+ "Here's everything I can read so far, including anything you imported before.": "这是我目前能读到的全部内容,包括你之前导入的。",
628
+ "Type `/taste` to open any song or artist and see why it's here. `/taste report` brings this report back.": "输入 `/taste` 打开任意歌曲或艺人,看看它为什么在这里。`/taste report` 可以再次显示这份报告。",
629
+ "Imported. /taste opens your profile.": "已导入。/taste 打开你的资料。",
630
+ "Your history was imported, but I couldn't show the profile: {error}\n\nNothing was lost. Type `/taste` to try again.": "你的历史已导入,但我无法显示资料:{error}\n\n没有丢失任何内容。输入 `/taste` 再试一次。",
631
+ "Imported. The profile didn't open; try /taste.": "已导入。资料没有打开;试试 /taste。",
632
+ "Import closed. Nothing changed.": "导入已关闭,没有任何改动。",
633
+ "Reading your file...": "正在读取你的文件...",
634
+ "Reading files isn't available when Moondog is started this way.": "这种启动方式不支持读取文件。",
635
+ "Here's what's inside. Nothing is added until you import it.": "这是里面的内容。你确认导入之前不会加入任何内容。",
636
+ "Nothing imported. Your path is still there to fix.": "什么都没导入。你的路径还在,可以修改。",
637
+ "Asking Spotify for your library and recent listening...": "正在向 Spotify 读取你的曲库和最近聆听...",
638
+ "Reading from Spotify. Nothing is added until you say so.": "正在从 Spotify 读取。你确认之前不会加入任何内容。",
639
+ "Reading your Spotify library: {count} saved songs...": "正在读取你的 Spotify 曲库:{count} 首收藏的歌...",
640
+ "Reading your Spotify library: {count} saved albums...": "正在读取你的 Spotify 曲库:{count} 张收藏的专辑...",
641
+ "Reading your Spotify library: {count} followed artists...": "正在读取你的 Spotify 曲库:{count} 位关注的艺人...",
642
+ "Reading your Spotify library: {count} playlists...": "正在读取你的 Spotify 曲库:{count} 个歌单...",
643
+ "Reading your Spotify library: {count} playlist songs...": "正在读取你的 Spotify 曲库:{count} 首歌单歌曲...",
644
+ "Reading your Spotify library: {count} top artists and tracks...": "正在读取你的 Spotify 曲库:{count} 个常听艺人和歌曲...",
645
+ "Recent listening isn't available when Moondog is started this way. A history ZIP still works.": "这种启动方式不支持读取最近聆听。历史 ZIP 仍然可以用。",
646
+ "Nothing to import yet. Try again later, or bring a ZIP.": "暂时没有可导入的内容。稍后再试,或导入 ZIP。",
647
+ "Here's what Spotify has. Nothing is added until you import it.": "这是 Spotify 上的内容。你确认导入之前不会加入任何内容。",
648
+ "Spotify said no. Make sure this account is listed under User Management in your Spotify app, and that the app owner has Premium. A history ZIP works either way.": "Spotify 拒绝了请求。请确认这个账号已加入你 Spotify 应用的 User Management,并且应用创建者有 Premium。历史 ZIP 不受影响,照样能用。",
649
+ "Spotify needs one more permission. Choose Reconnect Spotify.": "Spotify 还需要一项权限。请选择“重新连接 Spotify”。",
650
+ "Your Spotify sign-in has expired. Choose Reconnect Spotify.": "你的 Spotify 登录已过期。请选择“重新连接 Spotify”。",
651
+ "Your Spotify app has used up its quota for now. A downloaded history ZIP still works.": "你的 Spotify 应用暂时用完了配额。下载好的历史 ZIP 仍然可以用。",
652
+ "Spotify wants us to slow down. Wait a minute and try again, or use a history ZIP.": "Spotify 让我们慢一点。等一分钟再试,或使用历史 ZIP。",
653
+ "Nothing imported. Your profile is unchanged.": "什么都没导入,你的资料没有变化。",
654
+ "Saving your Spotify app...": "正在保存你的 Spotify 应用...",
655
+ "Spotify isn't available when Moondog is started this way.": "这种启动方式不支持 Spotify。",
656
+ "App saved. Now connect Spotify.": "应用已保存。现在连接 Spotify。",
657
+ "Spotify is connected. Next, preview what Moondog will bring in.": "Spotify 已连接。接下来预览 Moondog 将导入的内容。",
658
+ "Connected. Nothing imported yet.": "已连接,还没有导入任何内容。",
659
+ "Nothing imported. Try again, or use a history ZIP.": "什么都没导入。再试一次,或使用历史 ZIP。",
660
+ "Adding it to your profile...": "正在加入你的资料...",
661
+ "Saving your history on this machine...": "正在这台电脑上保存你的历史...",
662
+ "The profile's play count is unchanged.": "资料的播放次数没有变化。",
663
+ "You've imported this library before, so nothing changed.": "你之前已经导入过这个曲库,所以没有变化。",
664
+ "Already up to date. There was nothing new in this one.": "已是最新,这次没有新内容。",
665
+ "{plays}, {duplicates} I already had.": "{plays},其中 {duplicates} 次之前已有。",
666
+ "Also {items}": "另外,{items}",
667
+ "## Your Apple Music library is in": "## 你的 Apple Music 曲库已导入",
668
+ "## Your collection is in": "## 你的收藏已导入",
669
+ "## Your Spotify is in": "## 你的 Spotify 已导入",
670
+ "## Your history is in": "## 你的历史已导入",
671
+ "Everything from before is still here, including your choices. `/import` adds another source any time.": "之前的内容都还在,包括你的选择。随时可以用 `/import` 再加一个来源。",
672
+ "Saved. Reading it...": "已保存,正在读取...",
673
+ "Your history is saved, but I couldn't update the profile: {error}\n\nNothing was lost. Try `/reload`, then `/taste`.": "你的历史已保存,但我无法更新资料:{error}\n\n没有丢失任何内容。先试 `/reload`,再试 `/taste`。",
674
+ "History saved. The profile needs another try.": "历史已保存,资料需要再试一次。",
675
+ "Not saved. See the message above.": "未保存。请看上面的消息。",
676
+ "Can't open a browser from here.": "这里无法打开浏览器。",
677
+ "I couldn't open your browser. Here's the link: {url}": "我打不开你的浏览器。链接在这里:{url}",
678
+ "Paste or drag in a file. Tab completes the path, Enter reads it.": "粘贴或拖入一个文件。Tab 补全路径,Enter 读取。",
679
+ "Pick a step.": "选择一步。",
680
+ "Welcome to the machine. Pick your music service.": "Welcome to the machine。选择你的音乐平台。",
681
+ "Done.": "完成。",
682
+ "Use /rewind or /rewind latest.": "使用 /rewind 或 /rewind latest。",
683
+ "Conversation rewind isn't available in this runtime.": "当前运行环境不支持回退对话。",
684
+ "No earlier messages yet.": "还没有更早的消息。",
685
+ "Rewind to a message · original stays saved": "回退到某条消息 · 原内容会保留",
686
+ "Rewind cancelled. Queued drafts stay paused.": "已取消回退。等待中的草稿仍然暂停。",
687
+ "Branched before this message. Edit it below, then send. The original is in /resume. Spotify actions and saved preferences have not been undone; inspect the original receipts before repeating an action.": "已在这条消息之前创建分支。在下面编辑后发送。原内容在 /resume 里。Spotify 操作和已保存的偏好没有撤销;重复操作前请先查看原来的结果。",
688
+ "Earlier message restored · edit before sending · /resume keeps both branches": "已恢复之前的消息 · 发送前编辑 · /resume 保留两个分支",
689
+ "Use /resume, or /resume <conversation-id>.": "使用 /resume,或 /resume <对话 ID>。",
690
+ "Saved conversations aren't available when Moondog is started this way.": "这种启动方式不支持保存的对话。",
691
+ "No saved conversations yet.": "还没有保存的对话。",
692
+ "open now": "当前打开",
693
+ "Pick up where you left off": "从上次停下的地方继续",
694
+ "Staying here.": "留在这里。",
695
+ "You're already in that one.": "你已经在这段对话里了。",
696
+ "Saved conversation": "保存的对话",
697
+ "Back in: {title}": "已回到:{title}",
698
+ "Use moondog update from your shell for this installation.": "这个安装方式请在终端里使用 moondog update。",
699
+ "Update check finished.": "更新检查已完成。",
700
+ "Use /lyrics, or /lyrics sync.": "使用 /lyrics 或 /lyrics sync。",
701
+ "The lyric library isn't available when Moondog is started this way.": "这种启动方式不支持歌词库。",
702
+ "## Your lyric library": "## 你的歌词库",
703
+ "{count} looked up": "已查找 {count} 首",
704
+ "Stored at {path}": "保存在 {path}",
705
+ "Last problem: {error}": "上一次的问题:{error}",
706
+ "On the sleeve now: {title} · {artist}": "封套上现在是:{title} · {artist}",
707
+ "Lyrics from {url}": "歌词来源:{url}",
708
+ "`/lyrics sync` looks up more songs from your profile. `/home` takes you back to the sleeve.": "`/lyrics sync` 会为资料里的更多歌曲查找歌词。`/home` 回到封套。",
709
+ "Lyric library · /home to go back.": "歌词库 · /home 返回。",
710
+ "Use /taste, or /taste report.": "使用 /taste 或 /taste report。",
711
+ "Full report above. /taste opens the profile.": "完整报告在上面。/taste 打开资料。",
712
+ "Web lookups aren't available when Moondog is started this way.": "这种启动方式不支持网页查询。",
713
+ "/home doesn't take anything after it.": "/home 后面不需要加内容。",
714
+ "Say anything, or press Tab to look around.": "随便说点什么,或按 Tab 四处看看。",
715
+ "Use /theme, or /theme paper, charcoal, terminal, or auto.": "使用 /theme,或 /theme paper、charcoal、terminal 或 auto。",
716
+ "Pick a look": "选择外观",
717
+ "Theme unchanged.": "外观未更改。",
718
+ "Paper theme, for this session.": "纸张主题,仅限本次会话。",
719
+ "Charcoal theme, for this session.": "炭黑主题,仅限本次会话。",
720
+ "Terminal theme, for this session.": "终端主题,仅限本次会话。",
721
+ "Use /language, or /language {codes}.": "使用 /language,或 /language {codes}。",
722
+ "Reply language": "回复语言",
723
+ "Language unchanged.": "语言未更改。",
724
+ "{language}: replies use it unless you write in another language. MOONDOG_LANGUAGE still sets the next start.": "{language}:除非你用别的语言写,回复都会使用它。下次启动仍以 MOONDOG_LANGUAGE 为准。",
725
+ "{language}: replies use it unless you write in another language.": "{language}:除非你用别的语言写,回复都会使用它。",
726
+ "Use /art, or /art braille, ascii, off, or auto.": "使用 /art,或 /art braille、ascii、off 或 auto。",
727
+ "A quiet opening, no artwork.": "安静的开场,不显示插画。",
728
+ "ASCII artwork.": "ASCII 插画。",
729
+ "Braille artwork.": "Braille 插画。",
730
+ "Use /motion, or /motion on or off.": "使用 /motion,或 /motion on 或 off。",
731
+ "Animation on.": "动画已打开。",
732
+ "Animation off.": "动画已关闭。",
733
+ "Use /help, or /help all.": "使用 /help 或 /help all。",
734
+ "Type / to browse every command.": "输入 / 浏览全部命令。",
735
+ "Changing your profile isn't available when Moondog is started this way.": "这种启动方式不支持修改资料。",
736
+ "Retrying the model, {attempt} of {max}. Ctrl+C cancels and keeps the saved draft.": "正在重试模型,第 {attempt} 次,共 {max} 次。Ctrl+C 取消并保留已保存的草稿。",
737
+ "Checking the draft for contradictions. Ctrl+C keeps the draft.": "正在检查草稿里的矛盾。Ctrl+C 保留草稿。",
738
+ "Fixing what the check found. Ctrl+C keeps the draft.": "正在修正检查发现的问题。Ctrl+C 保留草稿。",
739
+ "Saving your listening profile.": "正在保存你的聆听资料。",
740
+ "Reading your music and writing your profile. Ctrl+C cancels.": "正在读取你的音乐并撰写资料。Ctrl+C 取消。",
741
+ "Your choice is saved, but I couldn't update the profile: {error}\n\nType `/taste` to try again.": "你的选择已保存,但我无法更新资料:{error}\n\n输入 `/taste` 再试一次。",
742
+ "Choice saved. The profile needs another try.": "选择已保存,资料需要再试一次。",
743
+ "Reloaded `{model}`. This conversation and what I remember carry over.": "已重新加载 `{model}`。这段对话和我记住的内容都会保留。",
744
+ "Reloaded, but no model is connected (`{reason}`). Your profile still works.": "已重新加载,但没有连接模型(`{reason}`)。你的资料仍然可用。",
745
+ "Reloaded.": "已重新加载。",
746
+ "Tell me what to remember, like /remember preference no live albums.": "告诉我要记住什么,比如 /remember preference 不要现场专辑。",
747
+ "I'll remember that: {text}\n\nTo forget it later: `/forget {id}`": "我会记住:{text}\n\n以后想忘掉:`/forget {id}`",
748
+ "I already knew that: {text}\n\nTo forget it later: `/forget {id}`": "我已经知道了:{text}\n\n以后想忘掉:`/forget {id}`",
749
+ "Remembered.": "已记住。",
750
+ "Tell me which memory, like /forget <memory-id>.": "告诉我是哪条记忆,比如 /forget <memory-id>。",
751
+ "Forgotten: `{id}`.": "已忘掉:`{id}`。",
752
+ "I don't have a memory called `{id}`.": "我没有名为 `{id}` 的记忆。",
753
+ "Forgotten.": "已忘掉。",
754
+ "No such memory.": "没有这条记忆。",
755
+ "/new doesn't take anything after it.": "/new 后面不需要加内容。",
756
+ "A fresh start. /resume brings back the last one.": "重新开始。/resume 可以找回上一段。",
757
+ "Commands": "命令",
758
+ "Your message is still here. Send or clear it, then use /{command}.": "你的消息还在。发送或清空后,再使用 /{command}。",
759
+ "Finish the command, then press Enter.": "把命令写完,然后按 Enter。",
760
+ "I don't know `/{command}`. Type `/help` to see what I do know.": "我不认识 `/{command}`。输入 `/help` 看看我认识哪些。",
761
+ "`/commands` doesn't take anything after it.": "`/commands` 后面不需要加内容。",
762
+ "Stopped the lookup.": "已停止查询。",
763
+ "Stopped the catalog check. Model unchanged.": "已停止目录检查,模型未更改。",
764
+ "Stopped the update check. No update installed.": "已停止更新检查,没有安装任何更新。",
765
+ "Stopped the profile build. Saved progress and your previous reading are kept. Use /profile build to continue.": "已停止生成资料。已保存的进度和你之前的解读都会保留。使用 /profile build 继续。",
766
+ "Stopped the lyric sync.": "已停止歌词同步。",
767
+ "Cancelled.": "已取消。",
768
+ "/{command} didn't work.": "/{command} 没成功。",
769
+ "Your request is still here · /model connects a model first.": "你的请求还在 · 先用 /model 连接模型。",
770
+ "Thinking...": "思考中...",
771
+ "{count} running · {label}": "{count} 项进行中 · {label}",
772
+ "{label} didn't work · carrying on...": "{label} 没成功 · 继续中...",
773
+ "Can't reach the model. Trying again ({attempt}/{max})...": "连不上模型。正在重试({attempt}/{max})...",
774
+ "Response interrupted. Spotify results are shown.": "回复中断。已显示 Spotify 的结果。",
775
+ "Up recalls this conversation.": "按上键可以找回这段对话的内容。",
776
+ "Something already ran before the connection dropped. Check what happened before you ask again.": "连接断开前已经执行了一些操作。再次请求之前,先确认发生了什么。",
777
+ "Press ↑ to bring your message back, then Enter to try again.": "按 ↑ 找回你的消息,然后按 Enter 重试。",
778
+ "Something went wrong: {error}": "出错了:{error}",
779
+ "Lost the model. Check what ran before retrying.": "和模型的连接断了。重试前先确认执行了什么。",
780
+ "Lost the model. ↑ brings your message back.": "和模型的连接断了。按 ↑ 找回你的消息。",
781
+ "The model couldn't answer.": "模型没能回答。",
782
+ "Wait for this local operation to finish before rewinding.": "请等这个本地操作完成后再回退。",
783
+ "Stopping the current turn before rewind...": "回退前正在停止当前这轮...",
784
+ "The current turn is still stopping; no rewind was made. Try again after it finishes.": "当前这轮还在停止,没有回退。等它结束后再试。",
785
+ "Stopping...": "正在停止...",
786
+ "This can't be stopped halfway. Almost there...": "这一步不能中途停止,马上就好...",
787
+ "Couldn't read the music library: {error}": "无法读取音乐曲库:{error}",
788
+ "Moondog {version} available · /update": "Moondog {version} 已发布 · /update",
789
+ "Check for or install a Moondog release": "检查或安装 Moondog 新版本",
790
+ "Back to the record sleeve": "回到唱片封套",
791
+ "Your lyric library, or sync more songs": "你的歌词库,或同步更多歌曲",
792
+ "Bring in your listening history or library": "导入你的聆听历史或曲库",
793
+ "Paper, charcoal, or your terminal colors": "纸张、炭黑,或沿用终端配色",
794
+ "The language Moondog replies in": "Moondog 回复使用的语言",
795
+ "Braille, ASCII, or a quiet opening": "Braille、ASCII 或安静的开场",
796
+ "Turn the animation on or off": "打开或关闭动画",
797
+ "Search every command": "搜索全部命令",
798
+ "See what's connected and ready": "查看哪些已连接、已就绪",
799
+ "See where your music data comes from": "查看你的音乐数据从哪里来",
800
+ "Review, change, or undo your choices": "查看、修改或撤销你的选择",
801
+ "Your listening profile and the evidence behind it": "你的聆听资料及其背后的证据",
802
+ "See what Moondog remembers": "查看 Moondog 记住了什么",
803
+ "See which music tools are available": "查看可用的音乐工具",
804
+ "Check your setup": "检查你的设置",
805
+ "Choose the model Moondog talks through": "选择 Moondog 对话使用的模型",
806
+ "Look things up on public music sites": "在公开音乐网站上查资料",
807
+ "Connect and control Spotify": "连接并控制 Spotify",
808
+ "Skip to the next song preview": "跳到下一首试听",
809
+ "Stop the song previews": "停止播放试听",
810
+ "Reload model settings and sign-ins": "重新加载模型设置和登录",
811
+ "Ask Moondog to remember something": "让 Moondog 记住一件事",
812
+ "Forget one memory by ID": "按 ID 忘掉一条记忆",
813
+ "Pick up a saved conversation": "继续一段保存的对话",
814
+ "Edit an earlier message on a new branch · Alt+R": "在新分支上编辑之前的一条消息 · Alt+R",
815
+ "Start fresh; this conversation stays saved": "重新开始;这段对话会保存下来",
816
+ "Commands and shortcuts": "命令和快捷键",
817
+ "Leave Moondog": "离开 Moondog",
818
+ "{count} more queued": "另有 {count} 条等待中",
819
+ "{count} queued · up edits the last · ctrl+c cancel": "{count} 条等待中 · 上键编辑最后一条 · ctrl+c 取消",
820
+ "{count} queued · up edits the last · waiting for command": "{count} 条等待中 · 上键编辑最后一条 · 等待命令完成",
821
+ "{count} queued · up edits the last · answering in another window": "{count} 条等待中 · 上键编辑最后一条 · 正在另一个窗口里回复",
822
+ "{count} current models": "{count} 个当前模型",
823
+ "{count} incompatible entries skipped": "略过了 {count} 个不兼容的条目",
824
+ "{count} models": "{count} 个模型",
825
+ "The profile has {count} more plays.": "资料增加了 {count} 次播放。",
826
+ "The profile has {count} fewer plays after reconciling overlaps.": "整理重复记录后,资料减少了 {count} 次播放。",
827
+ "{count} saved songs, albums, follows, playlist entries, and Spotify top picks.": "{count} 条收藏歌曲、专辑、关注、歌单条目和 Spotify 常听榜单。",
828
+ "{count} saved songs, follows, or playlist entries.": "{count} 条收藏歌曲、关注或歌单条目。",
829
+ "Saved {count} songs from your library. A library shows what you keep, not when you played it, so no plays were added.": "已保存曲库里的 {count} 首歌。曲库显示的是你收藏了什么,而不是什么时候听的,所以没有加入播放记录。",
830
+ "Saved {count} new listening records.": "已保存 {count} 条新的聆听记录。",
831
+ "{count} new plays": "{count} 次新播放",
832
+ "{count} new plays.": "{count} 次新播放。",
833
+ "Reconciled {count} overlapping records, keeping the more detailed listening evidence.": "已整理 {count} 条重复记录,保留了更详细的聆听证据。",
834
+ "{count} messages": "{count} 条消息",
835
+ "{count} songs with lyrics": "{count} 首有歌词",
836
+ "{count} instrumentals": "{count} 首纯音乐",
837
+ "Discover verified Spotify tracks": "发现经 Spotify 验证的歌曲",
838
+ "Queue the verified selection": "把验证过的选曲加入队列",
839
+ "Search the public web": "搜索公开网页",
840
+ "Read a public web page": "读取公开网页",
841
+ "Check your music sources": "检查你的音乐来源",
842
+ "Check your profile": "检查你的资料",
843
+ "Check what I remember": "查看我记住的内容",
844
+ "Check what I can do": "查看我能做什么",
845
+ "Check the model connection": "检查模型连接",
846
+ "Search your music library": "搜索你的音乐曲库",
847
+ "Read your music profile": "读取你的音乐资料",
848
+ "Read your saved listening profile": "读取你保存的聆听资料",
849
+ "Build your saved listening profile": "生成你保存的聆听资料",
850
+ "Explore your complete music profile": "浏览你完整的音乐资料",
851
+ "Find music worth another listen": "找值得再听一次的音乐",
852
+ "Find music that came back": "找又回来的音乐",
853
+ "Travel through your years": "穿越你的聆听年份",
854
+ "Find music played back to back": "找被连续播放的音乐",
855
+ "Look at why it's in your profile": "看看它为什么在你的资料里",
856
+ "Build a playlist plan": "制定歌单方案",
857
+ "Find current artist releases": "查找艺人的最新发行",
858
+ "Play previews": "播放试听片段",
859
+ "Search NetEase Music": "在网易云音乐搜索",
860
+ "Play on NetEase Music": "在网易云音乐播放",
861
+ "Control NetEase Music": "控制网易云音乐",
862
+ "See what is playing": "查看正在播放的歌",
863
+ "See what you're listening to": "查看你在听什么",
864
+ "Control the Music app": "控制“音乐”App",
865
+ "Choose a music service": "选择音乐服务",
866
+ "Search outside your library": "在你的曲库之外搜索",
867
+ "Find music nearby": "找附近的音乐",
868
+ "Remember what you've told me": "记住你告诉我的",
869
+ "Remember something you said": "记住你说过的一件事",
870
+ "Forget something": "忘掉一件事",
871
+ "Save your choice": "保存你的选择",
872
+ "Check what Spotify is playing": "查看 Spotify 正在放什么",
873
+ "See what's playing in detail": "查看正在播放的详情",
874
+ "Control Spotify playback": "控制 Spotify 播放",
875
+ "Add to Spotify queue": "加入 Spotify 队列",
876
+ "Queue more like this on Spotify": "在 Spotify 加入更多类似的歌",
877
+ "See what's queued on Spotify": "查看 Spotify 队列",
878
+ "See your Spotify devices": "查看你的 Spotify 设备",
879
+ "Move Spotify playback": "切换 Spotify 播放设备",
880
+ "Find your songs on Spotify": "在 Spotify 上找到你的歌",
881
+ "Your Spotify top artists and tracks": "你的 Spotify 常听艺人和歌曲",
882
+ "Browse your Spotify library": "浏览你的 Spotify 曲库",
883
+ "Read recent Spotify listening": "读取 Spotify 最近聆听",
884
+ "Browse album tracks or podcast episodes": "浏览专辑曲目或播客单集",
885
+ "Remove a saved Spotify item": "移除一个 Spotify 收藏",
886
+ "Search Spotify": "搜索 Spotify",
887
+ "Check Spotify saved tracks": "检查 Spotify 收藏的歌曲",
888
+ "Save tracks to Spotify library": "把歌曲存到 Spotify 曲库",
889
+ "Look at your Spotify playlists": "查看你的 Spotify 歌单",
890
+ "Make an exact playlist edit": "精确修改歌单",
891
+ "Remove a playlist from your library": "把歌单从你的曲库移除",
892
+ "Preview a playlist change": "预览歌单修改",
893
+ "Change a Spotify playlist": "修改 Spotify 歌单",
894
+ "Save the playlist to Spotify": "把歌单保存到 Spotify",
895
+ "Choose how hard the model thinks": "选择模型思考的程度",
896
+ "Use /effort, or /effort <level>.": "使用 /effort,或 /effort <级别>。",
897
+ "Choose a model with /model first.": "请先用 /model 选择模型。",
898
+ "`{model}` has no effort levels to choose from.": "`{model}` 没有可选的思考级别。",
899
+ "`{model}` supports: {levels}, or default.": "`{model}` 支持:{levels},或 default。",
900
+ "No extra thinking": "不额外思考",
901
+ "The least thinking": "最少的思考",
902
+ "Quick answers": "快速回答",
903
+ "Between speed and depth": "在速度和深度之间",
904
+ "Thinks more before answering": "回答前多想一想",
905
+ "Thinks longer; slower and costs more": "想得更久;更慢,花费更多",
906
+ "Thinks the most; slowest and costs the most": "想得最多;最慢,花费最多",
907
+ "Moondog's default: thinking off where the model allows it": "Moondog 默认:模型允许时关闭思考",
908
+ "Choose how hard {model} thinks": "选择 {model} 思考的程度",
909
+ "Effort unchanged.": "思考级别没有变化。",
910
+ "`{model}` now thinks at `{effort}`. This conversation carries over.": "`{model}` 现在以 `{effort}` 思考。这段对话会继续。",
911
+ "`{model}` is back to Moondog's default effort.": "`{model}` 已恢复为 Moondog 的默认思考级别。",
912
+ "Effort saved.": "思考级别已保存。",
913
+ "30-second previews from Apple Music": "来自 Apple Music 的 30 秒试听",
914
+ "No previews are playing.": "现在没有在播放的试听。",
915
+ "Previews stopped.": "试听已停止。",
916
+ "Skipped.": "已跳过。",
917
+ "loading": "加载中",
918
+ "paused": "已暂停",
919
+ "couldn't load": "加载失败",
920
+ "None of these previews could load. Check your connection, then ask again.": "这些试听都没能加载。请检查网络连接后再试一次。",
921
+ "Last.fm scrobbles": "Last.fm 聆听记录",
922
+ "Your latest {count} scrobbles, the most Moondog reads at once, and your loved tracks.": "你最近的 {count} 条聆听记录(Moondog 一次最多读取这么多),以及你喜爱的曲目。",
923
+ "Every scrobble Last.fm counted, and your loved tracks.": "Last.fm 记下的每一条聆听记录,以及你喜爱的曲目。",
924
+ "Import from Last.fm": "从 Last.fm 导入",
925
+ "Type your Last.fm username. Moondog reads every scrobble Last.fm counted, going back years, and your loved tracks.": "输入你的 Last.fm 用户名。Moondog 会读取 Last.fm 记下的每一条聆听记录,可以追溯好几年,也会读取你喜爱的曲目。",
926
+ "Your profile's recent listening has to be public. A long history can take several minutes.": "你主页上的最近聆听需要设为公开。历史很长的话,可能需要几分钟。",
927
+ "Listening data comes from Last.fm. Nothing is added until you say so.": "聆听数据来自 Last.fm。在你确认之前,不会添加任何内容。",
928
+ "Reading Last.fm needs a free API key, made once on this computer.": "读取 Last.fm 需要一个免费的 API 密钥,在这台电脑上设置一次即可。",
929
+ "Enter my Last.fm username": "输入我的 Last.fm 用户名",
930
+ "Set up Last.fm access": "设置 Last.fm 访问",
931
+ "Open Last.fm": "打开 Last.fm",
932
+ "For now, Moondog reads Last.fm with an API key you make yourself. It takes a minute.": "目前,Moondog 用你自己创建的 API 密钥读取 Last.fm。只需要一分钟。",
933
+ "Sign in to Last.fm and create an API account. Any name works, such as Moondog.": "登录 Last.fm,创建一个 API 账户。名字随意,比如 Moondog。",
934
+ "Copy the API key it shows. You don't need the shared secret.": "复制页面上显示的 API 密钥。不需要 shared secret。",
935
+ "Paste the key here. It stays on this computer.": "把密钥粘贴到这里。它只保存在这台电脑上。",
936
+ "Open the Last.fm API page": "打开 Last.fm API 页面",
937
+ "Enter my API key": "输入我的 API 密钥",
938
+ "Last.fm counts a play after half a song or four minutes. It doesn't say how long you listened.": "Last.fm 在一首歌播放过半或满四分钟时记一次聆听,不记录你听了多久。",
939
+ "Use a different username": "换一个用户名",
940
+ "Your Last.fm username": "你的 Last.fm 用户名",
941
+ "Or your profile link: last.fm/user/<username>": "或者你的主页链接:last.fm/user/<用户名>",
942
+ "Username": "用户名",
943
+ "Paste your Last.fm API key": "粘贴你的 Last.fm API 密钥",
944
+ "32 letters and numbers. Not the shared secret.": "32 位字母和数字。不是 shared secret。",
945
+ "Enter read · Esc back": "Enter 读取 · Esc 返回",
946
+ "Also {count} loved tracks": "另有 {count} 首喜爱的曲目",
947
+ "Asking Last.fm for your scrobbles...": "正在向 Last.fm 读取你的聆听记录...",
948
+ "Reading from Last.fm. Nothing is added until you say so.": "正在读取 Last.fm。在你确认之前,不会添加任何内容。",
949
+ "Reading your loved tracks: {count}...": "正在读取你喜爱的曲目:{count}...",
950
+ "Reading your scrobbles: {count} of {total}...": "正在读取聆听记录:{count} / {total}...",
951
+ "Reading your scrobbles: {count}...": "正在读取聆听记录:{count}...",
952
+ "Reading Last.fm isn't available when Moondog is started this way.": "这种启动方式不支持读取 Last.fm。",
953
+ "Here's what Last.fm has. Nothing is added until you import it.": "这是 Last.fm 上的内容。在你导入之前,不会添加任何内容。",
954
+ "Stopped. Nothing imported.": "已停止。什么都没导入。",
955
+ "Last.fm access isn't available when Moondog is started this way.": "这种启动方式不支持设置 Last.fm 访问。",
956
+ "Last.fm access saved. Now type your username.": "已保存 Last.fm 访问设置。现在输入你的用户名。",
957
+ "Nothing saved. Your key is still there to fix.": "什么都没保存。你的密钥还在,可以修改。",
958
+ "Type your Last.fm username, then press Enter.": "输入你的 Last.fm 用户名,然后按 Enter。",
959
+ "Paste the API key, then press Enter.": "粘贴 API 密钥,然后按 Enter。",
960
+ "{count} plays were already here from another service, so they count once.": "{count} 次播放已经从其他服务导入过,所以只算一次。",
961
+ "Web search": "网页搜索",
962
+ "Web page reading": "网页读取",
963
+ "Looking it up with {provider}... Ctrl+C cancels.": "正在用 {provider} 查询... Ctrl+C 取消。",
964
+ "Web search key": "网页搜索密钥",
965
+ "Saved the {service} key. Web search goes through {provider}.": "已保存 {service} 密钥。网页搜索使用 {provider}。",
966
+ "Saved the {service} key, but web search still isn't ready. Run `/web status` to see why.": "已保存 {service} 密钥,但网页搜索还不能用。运行 `/web status` 查看原因。",
967
+ };