@audiofool/moondog 0.1.0 → 0.2.0-beta.2
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.
- package/LICENSE +202 -0
- package/README.md +153 -68
- package/contracts/v1/definitions.schema.json +1 -169
- package/package.json +7 -23
- package/scripts/contract-lib.mjs +0 -7
- package/scripts/contract-semantics.mjs +0 -1904
- package/scripts/moondog.mjs +285 -74
- package/src/core/apple-library-source-status.mjs +0 -16
- package/src/core/apple-projection-domain-services.mjs +168 -36
- package/src/core/application-update.mjs +320 -0
- package/src/core/capability-catalog.mjs +278 -55
- package/src/core/listening-now.mjs +108 -0
- package/src/core/listening-profile-domain-services.mjs +153 -41
- package/src/core/listening-upkeep.mjs +31 -0
- package/src/core/moondog-application.mjs +1908 -104
- package/src/core/playback-preferences.mjs +97 -0
- package/src/core/spotify-listening-intent.mjs +121 -0
- package/src/core/synthetic-domain-services.mjs +24 -3
- package/src/demo/moondog-demo.mjs +4 -22
- package/src/i18n/index.mjs +285 -0
- package/src/i18n/messages/de.mjs +128 -0
- package/src/i18n/messages/en.mjs +129 -0
- package/src/i18n/messages/es.mjs +128 -0
- package/src/i18n/messages/fr.mjs +128 -0
- package/src/i18n/messages/it.mjs +128 -0
- package/src/i18n/messages/ja.mjs +128 -0
- package/src/i18n/messages/ko.mjs +128 -0
- package/src/i18n/messages/pt.mjs +128 -0
- package/src/i18n/messages/zh-Hant.mjs +128 -0
- package/src/i18n/messages/zh.mjs +128 -0
- package/src/i18n/preferences.mjs +34 -0
- package/src/i18n/screen/es.mjs +966 -0
- package/src/i18n/screen/ja.mjs +966 -0
- package/src/i18n/screen/pt.mjs +966 -0
- package/src/i18n/screen/zh.mjs +966 -0
- package/src/importers/apple-music-library/index.mjs +0 -16
- package/src/importers/apple-music-library/sqlite-projection.mjs +51 -9
- package/src/integrations/apple-music/catalog.mjs +123 -14
- package/src/integrations/apple-music/music-app.mjs +232 -0
- package/src/integrations/apple-music/storefront.mjs +28 -0
- package/src/integrations/apple-music/terminal-preview-player.mjs +221 -0
- package/src/integrations/lastfm/history.mjs +221 -0
- package/src/integrations/lastfm/settings.mjs +75 -0
- package/src/integrations/netease/ncm-cli-player.mjs +321 -0
- package/src/integrations/open-music-similarity/artist-radio.mjs +26 -18
- package/src/integrations/public-playlists.mjs +2 -1
- package/src/integrations/spotify/account-data-profile.mjs +14 -6
- package/src/integrations/spotify/authentication.mjs +149 -15
- package/src/integrations/spotify/catalog-resolver.mjs +8 -4
- package/src/integrations/spotify/connection.mjs +2 -1
- package/src/integrations/spotify/credential-store.mjs +4 -0
- package/src/integrations/spotify/extended-streaming-history.mjs +11 -11
- package/src/integrations/spotify/history-archive.mjs +1 -1
- package/src/integrations/spotify/library-snapshot.mjs +227 -0
- package/src/integrations/spotify/recent-activity.mjs +2 -0
- package/src/integrations/spotify/service.mjs +873 -69
- package/src/integrations/spotify/web-api-client.mjs +407 -127
- package/src/integrations/web/brave-web.mjs +45 -0
- package/src/integrations/web/codex-web.mjs +15 -82
- package/src/integrations/web/deepseek-web.mjs +81 -0
- package/src/integrations/web/web-research.mjs +119 -0
- package/src/integrations/web/web-result.mjs +215 -0
- package/src/integrations/youtube-music/takeout.mjs +3 -1
- package/src/memory/local-memory-store.mjs +469 -41
- package/src/profile/history-import.mjs +42 -6
- package/src/profile/listener-profile-build.mjs +378 -0
- package/src/profile/listener-profile-store.mjs +130 -0
- package/src/profile/listener-profile-verification.mjs +68 -0
- package/src/profile/listener-profile-worker.mjs +172 -0
- package/src/profile/listening-history-store.mjs +424 -8
- package/src/profile/listening-profile-projection.mjs +242 -76
- package/src/profile/local-music-data.mjs +1 -1
- package/src/profile/music-providers.mjs +11 -7
- package/src/profile/profile-exploration.mjs +84 -0
- package/src/profile/recorded-measures.mjs +24 -0
- package/src/profile/spotify-archive-taste.mjs +0 -4
- package/src/runtime/pi/agent-runtime.mjs +2204 -605
- package/src/runtime/pi/authentication.mjs +34 -1
- package/src/runtime/pi/configured-runtime.mjs +22 -6
- package/src/runtime/pi/conversation-name.mjs +53 -0
- package/src/runtime/pi/memory-agent-runtime.mjs +2 -2
- package/src/runtime/pi/model-catalog.mjs +28 -5
- package/src/runtime/pi/model-settings.mjs +202 -0
- package/src/runtime/pi/model-transport.mjs +10 -0
- package/src/runtime/pi/persistent-credential-store.mjs +67 -31
- package/src/runtime/pi/profile-build-runtime.mjs +160 -0
- package/src/runtime/pi/public-model-catalog.mjs +288 -0
- package/src/runtime/pi/runtime-settings.mjs +10 -2
- package/src/runtime/pi/skills/listener-profile/SKILL.md +46 -0
- package/src/runtime/pi/tool-trace.mjs +37 -0
- package/src/surfaces/cli/auth-command.mjs +12 -4
- package/src/surfaces/cli/brand-components.mjs +310 -132
- package/src/surfaces/cli/brand-theme.mjs +51 -28
- package/src/surfaces/cli/command-completions.mjs +58 -42
- package/src/surfaces/cli/format-output.mjs +199 -388
- package/src/surfaces/cli/history-import-view.mjs +292 -139
- package/src/surfaces/cli/import-guides.mjs +2 -0
- package/src/surfaces/cli/listener-profile-command.mjs +92 -0
- package/src/surfaces/cli/listening-menu.mjs +7 -4
- package/src/surfaces/cli/profile-command.mjs +30 -21
- package/src/surfaces/cli/seasons-chart.mjs +87 -0
- package/src/surfaces/cli/spotify-command.mjs +54 -6
- package/src/surfaces/cli/taste-profile-model.mjs +78 -79
- package/src/surfaces/cli/taste-profile-view.mjs +33 -26
- package/src/surfaces/cli/terminal-art.mjs +140 -35
- package/src/surfaces/cli/tui.mjs +1066 -357
- package/src/surfaces/cli/update-command.mjs +32 -0
- package/src/surfaces/cli/web-command.mjs +53 -14
- package/src/surfaces/html/tasteprint.mjs +43 -70
- package/contracts/v1/capability-policy.schema.json +0 -572
- package/contracts/v1/profile-evidence.schema.json +0 -237
- package/contracts/v1/tool-invocation.schema.json +0 -318
- package/contracts/v1/tool-receipt.schema.json +0 -1066
- package/scripts/demo-studio.mjs +0 -58
- package/src/core/apple-data-migration.mjs +0 -50
- package/src/demo/moondog-interactive-tasteprint-demo.mjs +0 -293
- package/src/demo/moondog-tasteprint-demo.mjs +0 -631
- package/src/integrations/spotify/index.mjs +0 -80
- package/src/surfaces/web/showcase.mjs +0 -272
- package/src/surfaces/web/studio-page.mjs +0 -4148
- package/src/surfaces/web/studio.mjs +0 -2288
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// Italiano. Keys match messages/en.mjs; a missing key falls back to English.
|
|
2
|
+
export default {
|
|
3
|
+
"discovery.reason.listenbrainz": ({ adjacent, seed, release }) => `I dati d'ascolto di ListenBrainz collegano ${adjacent} a ${seed}; da "${release}".`,
|
|
4
|
+
"discovery.reason.appleMusic": ({ queries, release, genre }) => `Catalogo Apple Music: ${queries ? `corrisponde a ${queries}` : "candidato"}; da "${release}"${genre ? `, genere nel catalogo: ${genre}` : ""}.`,
|
|
5
|
+
"discovery.reason.external": ({ release }) => `Dal catalogo esterno consultato, su "${release}".`,
|
|
6
|
+
"discovery.order": ({ path }) => `Ascolta in quest'ordine: ${path}.`,
|
|
7
|
+
"discovery.unavailable": "Non sono riuscito a raggiungere i servizi di scoperta musicale, quindi questa richiesta non ha prodotto consigli. Invia di nuovo la richiesta per riprovare.",
|
|
8
|
+
|
|
9
|
+
"citations.heading": "Fonti musicali pubbliche (separate dai tuoi dati d'ascolto personali):",
|
|
10
|
+
"citations.item": ({ label, url, storefront, date }) => `- [${label}](<${url}>) - store ${storefront}, consultato il ${date}.`,
|
|
11
|
+
"citations.scope": "Ambito: queste pagine di catalogo pubbliche non dimostrano preferenze personali, una cronologia d'ascolto completa né la disponibilità su altre piattaforme.",
|
|
12
|
+
"web.sources.heading": ({ providers }) => `Fonti web pubbliche (${providers})`,
|
|
13
|
+
"web.sources.headingUnnamed": "Fonti web pubbliche",
|
|
14
|
+
"web.sources.published": ({ date }) => `data della fonte: ${date}`,
|
|
15
|
+
"web.sources.retrieved": ({ date }) => `consultato: ${date}`,
|
|
16
|
+
|
|
17
|
+
"external.neighbors": ({ seed }) => seed ? `vicini d'ascolto ListenBrainz di ${seed}` : "vicini d'ascolto ListenBrainz",
|
|
18
|
+
"external.listenbrainz": ({ neighbor, date }) => `${neighbor} (identità Wikidata, CC0, consultata il ${date}; non è una somiglianza sonora)`,
|
|
19
|
+
"external.appleMusic": ({ date }) => `corrispondenze di titoli su Apple Music US (consultate il ${date})`,
|
|
20
|
+
"external.limit": "È escluso solo ciò che compare nella tua libreria importata con lo stesso titolo e artista, quindi non significa che tu non li abbia mai sentiti. Sono suggerimenti d'ascolto.",
|
|
21
|
+
"external.from": ({ parts, limit }) => `Da ${parts.join(" e ")}. ${limit}`,
|
|
22
|
+
|
|
23
|
+
"failure.deviceList": ({ noMatch, names, code }) => `Il nome del dispositivo ${noMatch ? "non corrisponde a nessun dispositivo" : "corrisponde a più dispositivi"}. Spotify al momento mostra: ${names}. Di' "riproducilo su" seguito dal nome mostrato; il brano scelto resta selezionato. Non è stata inviata alcuna richiesta di riproduzione. (${code})`,
|
|
24
|
+
"failure.networkRead": ({ notSent, code }) => `Un errore di rete ha impedito di leggere lo stato di dispositivi e riproduzione di Spotify; la preparazione si è fermata.${notSent ? " La richiesta di riproduzione non è stata inviata." : ""} Controlla la connessione a Spotify e riprova. (${code})`,
|
|
25
|
+
"failure.readiness.spotify_device_selection_required": "Il brano scelto resta selezionato, ma il dispositivo di destinazione non è stabilito. Indica il dispositivo che vuoi; quello precedente non verrà usato al suo posto.",
|
|
26
|
+
"failure.readiness.spotify_device_not_found": "Spotify non vede il dispositivo di destinazione. Apri Spotify su quel dispositivo, poi richiedi di nuovo la riproduzione; nessun altro dispositivo è stato usato al suo posto.",
|
|
27
|
+
"failure.readiness.spotify_device_ambiguous": "Potrebbero essere disponibili più dispositivi Spotify. Indica il nome del dispositivo che vuoi.",
|
|
28
|
+
"failure.readiness.spotify_device_restricted": "Il dispositivo di destinazione non conferma il controllo tramite la Web API di Spotify. Scegli un altro dispositivo disponibile.",
|
|
29
|
+
"failure.readiness.spotify_device_changed": "Un altro dispositivo Spotify è diventato attivo. Scegli esplicitamente il dispositivo che vuoi; la riproduzione non è stata spostata in automatico.",
|
|
30
|
+
"failure.readiness.spotify_device_state_unconfirmed": "Lo stato di dispositivi e riproduzione di Spotify è incompleto o incoerente. Controlla il dispositivo attuale in Spotify prima di riprovare.",
|
|
31
|
+
"failure.readiness.spotify_device_not_ready": "Il dispositivo di destinazione non è stato pronto entro l'attesa prevista. Apri Spotify su quel dispositivo, poi richiedi di nuovo lo stesso brano.",
|
|
32
|
+
"failure.readiness.spotify_playback_restricted": "Al momento Spotify non permette di riprendere la riproduzione. Controlla il dispositivo di destinazione.",
|
|
33
|
+
"failure.songNotSent": " La richiesta di riproduzione non è stata inviata.",
|
|
34
|
+
"failure.preparationStopped": ({ evidence }) => `I controlli del dispositivo di riproduzione non sono stati completati (${evidence}); non è stata inviata alcuna richiesta di riproduzione. Controlla lo stato del dispositivo Spotify prima di riprovare.`,
|
|
35
|
+
"failure.queueRequestRequired": "Nessun brano è stato messo in coda: non sono riuscito a collegare questa risposta a una richiesta di coda. Per continuare serve una richiesta esplicita di aggiungere musica alla coda di riproduzione.",
|
|
36
|
+
"failure.notSent": ({ code }) => `Non ho inviato nulla a Spotify: non sono riuscito a collegarlo ai brani trovati (${code}). Chiedimelo di nuovo con il titolo o l'artista e cercherò ancora.`,
|
|
37
|
+
"failure.outcome.lookup": "La ricerca su Spotify non è stata completata",
|
|
38
|
+
"failure.outcome.unknown": "L'esito dell'azione su Spotify è incerto",
|
|
39
|
+
"failure.outcome.unconfirmed": "L'azione di riproduzione su Spotify non è stata confermata",
|
|
40
|
+
"failure.reason": ({ reason }) => `Spotify ha segnalato: ${reason}.`,
|
|
41
|
+
"failure.reasonUnknown": "La causa precisa non è confermata.",
|
|
42
|
+
"failure.lookup": ({ outcome, evidence, reason }) => `${outcome} (${evidence}). ${reason} Non è stata inviata alcuna riproduzione né aggiunta alla coda.`,
|
|
43
|
+
"failure.general": ({ targets, outcome, evidence, reason, playbackNotSent, recovered }) =>
|
|
44
|
+
`${targets ? `Destinazione: ${targets}.\n` : ""}${outcome} (${evidence}). ${reason}${playbackNotSent ? " La richiesta di riproduzione non è stata inviata." : ""} ${recovered ? "Un recupero limitato del dispositivo si è concluso; non ci sono stati altri tentativi." : "L'azione non è stata ritentata."} Leggi lo stato della riproduzione e i dispositivi disponibili per approfondire.`,
|
|
45
|
+
|
|
46
|
+
"queue.unverified": ({ one }) => `Spotify ${one ? "l'ha accettato" : "li ha accettati"}, ma non sono riuscito a leggere la tua coda per controllare.`,
|
|
47
|
+
"queue.confirmedPlaying": ({ one }) => one ? "Riproduzione confermata su Spotify." : "Confermato su Spotify: il primo è in riproduzione e gli altri sono nella tua coda.",
|
|
48
|
+
"queue.confirmed": ({ count }) => count === 1 ? "Confermato nella tua coda di Spotify." : `Confermati nella tua coda di Spotify: tutti e ${count}.`,
|
|
49
|
+
"queue.partlyVisible": ({ accepted, confirmed, truncated }) => `Spotify ne ha accettati ${accepted}; ${confirmed} sono visibili nella tua coda in questo momento${truncated ? " (Spotify mostra solo una parte delle code lunghe)" : ""}.`,
|
|
50
|
+
"queue.noPlayback": "Su Spotify non c'è un brano in corso da usare come punto di partenza; non è stato messo in coda nulla.",
|
|
51
|
+
"queue.noCandidates": "Dopo il filtro non è rimasto alcun candidato; non è stato messo in coda nulla.",
|
|
52
|
+
"queue.requested": ({ requested, accepted, shortfall }) => `Richiesti ${requested}; Spotify ne ha accettati ${accepted}${shortfall ? `, ne mancano ${shortfall}` : ""}.`,
|
|
53
|
+
"queue.similarSeed": ({ artist }) => `Artisti simili a ${artist}, secondo gli ascoltatori:`,
|
|
54
|
+
"queue.cancelled": "Ho smesso di aggiungere brani dopo l'annullamento; quelli accettati restano in coda.",
|
|
55
|
+
"queue.stopped": ({ count, title, artist }) => `Messi ${count} in coda su Spotify, poi mi sono fermato a "${title}" - ${artist}.`,
|
|
56
|
+
"queue.queued": ({ count }) => `Messi ${count} in coda su Spotify:`,
|
|
57
|
+
"queue.queuedSome": ({ count, unmatched }) => `Messi in coda su Spotify ${count} su ${count + unmatched}:`,
|
|
58
|
+
"queue.outcomeUnknown": "Spotify non ha confermato se il brano su cui mi sono fermato sia stato aggiunto. Controlla la coda prima di riprovare; questa scrittura non è stata ripetuta.",
|
|
59
|
+
"queue.started": ({ title, device, more }) => `Non suonava niente, quindi ho avviato "${title}"${device ? ` su ${device}` : ""}${more ? " e messo in fila il resto" : ""}.`,
|
|
60
|
+
"queue.unmatchedHeading": "Non trovati su Spotify:",
|
|
61
|
+
"queue.skippedDuplicates": ({ count }) => `Saltati ${count} brani duplicati.`,
|
|
62
|
+
"queue.skippedUncertain": ({ count }) => `Saltati ${count} brani con un esito precedente incerto, per evitare doppioni; controlla la coda di Spotify.`,
|
|
63
|
+
"queue.skippedAvoided": ({ count }) => `Saltati ${count} brani che volevi evitare.`,
|
|
64
|
+
"queue.skippedKnown": ({ count }) => `Saltati ${count} brani già presenti nella tua cronologia, come richiesto.`,
|
|
65
|
+
"queue.observationTruncated": "Il controllo dei doppioni copre solo la parte limitata della coda restituita da Spotify; le voci non visibili potrebbero ancora essere doppioni.",
|
|
66
|
+
"queue.notAddedHeading": "Non aggiunti:",
|
|
67
|
+
"queue.earlierReceipt": "Questo è l'esito della richiesta di coda precedente; questo chiarimento non ha aggiunto di nuovo i brani.",
|
|
68
|
+
|
|
69
|
+
"playlist.partialUnknown": ({ name }) => `Spotify ha creato la playlist privata "${name}", ma l'aggiunta dei brani non è stata confermata. Controllala prima di decidere se riprovare.`,
|
|
70
|
+
"playlist.partialEmpty": ({ name }) => `Spotify ha creato la playlist privata "${name}", ma non ha aggiunto i brani. La playlist vuota ora esiste; controllala prima di decidere se riprovare.`,
|
|
71
|
+
"playlist.saved": ({ name, count }) => `Salvata come playlist privata di Spotify "${name}" (${count} brani).`,
|
|
72
|
+
|
|
73
|
+
"action.playback.resume": "richiesta di riproduzione",
|
|
74
|
+
"action.playback.pause": "richiesta di pausa",
|
|
75
|
+
"action.playback.next": "richiesta del brano successivo",
|
|
76
|
+
"action.playback.previous": "richiesta del brano precedente",
|
|
77
|
+
"action.playback.volume.set": "modifica del volume",
|
|
78
|
+
"action.playback.seek": "modifica della posizione di riproduzione",
|
|
79
|
+
"action.playback.shuffle.set": "impostazione della riproduzione casuale",
|
|
80
|
+
"action.playback.repeat.set": "impostazione della ripetizione",
|
|
81
|
+
"action.playback.transfer": "cambio di dispositivo",
|
|
82
|
+
"action.playback.queue.add": "aggiunta alla coda",
|
|
83
|
+
"action.library.remove": "rimozione dalla libreria",
|
|
84
|
+
"action.library.save": "salvataggio in libreria",
|
|
85
|
+
"action.playlist.write": "creazione della playlist",
|
|
86
|
+
"action.playlist.edit": "modifica della playlist",
|
|
87
|
+
"action.playlist.rename": "cambio di nome della playlist",
|
|
88
|
+
"action.playlist.unfollow": "rimozione della playlist dalla libreria",
|
|
89
|
+
"action.playlist.remove_track": "rimozione di un brano dalla playlist",
|
|
90
|
+
"action.other": "modifica richiesta",
|
|
91
|
+
"write.unknown": ({ action, target }) => `Spotify non ha confermato l'operazione "${action}"${target ? ` per "${target}"` : ""}. Controlla lo stato prima di decidere se riprovare.`,
|
|
92
|
+
"write.unfollowed": ({ name }) => `"${name}" è stata rimossa dalla tua libreria di Spotify (non la segui più). La playlist può ancora esistere per altri ascoltatori; non è stata eliminata per tutti.`,
|
|
93
|
+
"write.renamed": ({ name }) => `Spotify ha accettato di rinominare la playlist in "${name}".`,
|
|
94
|
+
"write.trackRemoved": ({ name }) => `Spotify ha accettato la rimozione di un brano da "${name}".`,
|
|
95
|
+
"write.accepted": ({ action, count, targets }) => `Spotify ha accettato l'operazione "${action}"${count === null ? "" : ` (${count} brani)`}${targets ? `: ${targets}` : ""}.`,
|
|
96
|
+
|
|
97
|
+
"plan.heading.private_library": ({ count }) => `Selezione di ${count} brani dalla tua libreria:`,
|
|
98
|
+
"plan.heading.private_history": ({ count }) => `${count} brani da riascoltare, dalla tua cronologia:`,
|
|
99
|
+
"plan.heading.external_catalog": ({ count }) => `${count} brani:`,
|
|
100
|
+
"plan.heading.mixed": ({ count }) => `${count} brani:`,
|
|
101
|
+
"plan.heading.timeCapsule": ({ count }) => `Macchina del tempo in ${count} tappe attraverso i tuoi anni d'ascolto:`,
|
|
102
|
+
"plan.heading.historicalReturn": ({ count }) => `${count} brani tornati dopo una lunga pausa:`,
|
|
103
|
+
"plan.heading.backToBack": ({ count }) => `${count} brani che hai ascoltato uno dopo l'altro:`,
|
|
104
|
+
"plan.externalTrack": ({ line, release }) => `${line}, da "${release}"`,
|
|
105
|
+
"plan.rationale": ({ text }) => ` Perché l'ho scelto: ${text}`,
|
|
106
|
+
"plan.ordering": ({ text }) => `Perché quest'ordine: ${text}`,
|
|
107
|
+
"plan.notSaved": "Non ho ancora salvato né messo in coda nulla.",
|
|
108
|
+
"plan.previewing": "Le anteprime di 30 secondi stanno suonando nel tuo player; i brani completi sono su Apple Music.",
|
|
109
|
+
"plan.pending": "Limite: questa selezione attende conferma solo nella sessione in corso, non è stata scritta su Spotify e non ha effetti esterni.",
|
|
110
|
+
"plan.backToBackBoundary": "Limite d'interpretazione: ascolti registrati uno dopo l'altro non dimostrano la modalità ripetizione, un riascolto voluto né che il brano ti piaccia.",
|
|
111
|
+
"plan.validationScope": "Ambito della verifica: il pianificatore locale verifica identità dei brani, appartenenza ai candidati, numero e ordine; i motivi della scelta e l'adattamento alla situazione restano giudizi del modello basati sui metadati disponibili.",
|
|
112
|
+
"plan.unvalidated": "Non sono riuscito a verificare questa selezione, quindi non restituirò un elenco di brani non confrontato con candidati affidabili. Restringi o allarga la ricerca e riprova.",
|
|
113
|
+
|
|
114
|
+
"edit.previewHeading": ({ name, before, after }) => `Anteprima della modifica alla playlist privata di Spotify "${name}" (${before} -> ${after} brani):`,
|
|
115
|
+
"edit.status.added": "aggiunto",
|
|
116
|
+
"edit.status.moved": "spostato",
|
|
117
|
+
"edit.status.retained": "resta",
|
|
118
|
+
"edit.removeHeading": "Da rimuovere:",
|
|
119
|
+
"edit.summary": ({ added, removed, moved, retained }) => `Riepilogo: ${added} aggiunti, ${removed} rimossi, ${moved} spostati, ${retained} rimasti al loro posto.`,
|
|
120
|
+
"edit.boundary": "Limite: Spotify non è ancora cambiato. Conferma esplicitamente nel prossimo messaggio perché Moondog scriva esattamente questa versione conservata.",
|
|
121
|
+
"edit.updated": ({ name, before, after }) => `Ho aggiornato la playlist privata di Spotify "${name}" esattamente secondo l'anteprima confermata${before === null ? ` (ora ${after} brani)` : ` (${before} -> ${after} brani)`}.`,
|
|
122
|
+
|
|
123
|
+
"selection.note": ({ playlist, track }) => `\n\nSelezionati per le prossime modifiche: playlist ${playlist}; brano ${track}.`,
|
|
124
|
+
"memory.spotifyExcluded": "\n\nI risultati di Spotify sono esclusi dalla memoria generale; si potevano ricordare solo le tue parole verificate, e il resto non è stato salvato.",
|
|
125
|
+
"memory.notSaved": "\n\nLa risposta è completa, ma la memoria non è stata salvata.",
|
|
126
|
+
"turn.cancelled": "Ho annullato il resto.",
|
|
127
|
+
"turn.interrupted": "La risposta si è interrotta. Gli esiti di Spotify registrati sono qui sotto; nessuna azione è stata ripetuta.",
|
|
128
|
+
};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// 日本語(です・ます調)。Keys match messages/en.mjs; a missing key falls back to English.
|
|
2
|
+
export default {
|
|
3
|
+
"discovery.reason.listenbrainz": ({ adjacent, seed, release }) => `ListenBrainz の再生データで ${adjacent} と ${seed} がつながっています。『${release}』収録。`,
|
|
4
|
+
"discovery.reason.appleMusic": ({ queries, release, genre }) => `Apple Music カタログ${queries ? `で ${queries} に一致` : "の候補"}。『${release}』収録${genre ? `、カタログ上のジャンル: ${genre}` : ""}。`,
|
|
5
|
+
"discovery.reason.external": ({ release }) => `取得した外部カタログから。『${release}』収録。`,
|
|
6
|
+
"discovery.order": ({ path }) => `この順に聴いてみてください: ${path}。`,
|
|
7
|
+
"discovery.unavailable": "音楽を探すサービスに接続できなかったため、今回はおすすめを出せませんでした。もう一度送ってみてください。",
|
|
8
|
+
|
|
9
|
+
"citations.heading": "公開されている音楽情報(個人の再生記録とは別のものです):",
|
|
10
|
+
"citations.item": ({ label, url, storefront, date }) => `- [${label}](<${url}>) - ${storefront} ストア、${date} に取得。`,
|
|
11
|
+
"citations.scope": "範囲: これらの公開カタログページは、個人の好み、完全な再生履歴、他サービスでの配信状況を示すものではありません。",
|
|
12
|
+
"web.sources.heading": ({ providers }) => `公開 Web の出典(${providers})`,
|
|
13
|
+
"web.sources.headingUnnamed": "公開 Web の出典",
|
|
14
|
+
"web.sources.published": ({ date }) => `出典の日付:${date}`,
|
|
15
|
+
"web.sources.retrieved": ({ date }) => `取得:${date}`,
|
|
16
|
+
|
|
17
|
+
"external.neighbors": ({ seed }) => seed ? `ListenBrainz で ${seed} を聴く人たちに近いアーティスト` : "ListenBrainz で近いリスナーが聴くアーティスト",
|
|
18
|
+
"external.listenbrainz": ({ neighbor, date }) => `${neighbor}(Wikidata の識別情報、CC0、${date} に取得。音が似ているという意味ではありません)`,
|
|
19
|
+
"external.appleMusic": ({ date }) => `Apple Music US の曲名一致(${date} に取得)`,
|
|
20
|
+
"external.limit": "取り込んだライブラリと曲名・アーティストが完全に一致するものだけを除いています。まだ聴いたことがない曲という意味ではありません。聴いてみるための提案です。",
|
|
21
|
+
"external.from": ({ parts, limit }) => `出典: ${parts.join("、および")}。${limit}`,
|
|
22
|
+
|
|
23
|
+
"failure.deviceList": ({ noMatch, names, code }) => `デバイス名が${noMatch ? "一致しませんでした" : "複数のデバイスに一致しました"}。Spotify に現在表示されているのは: ${names}。表示された名前で「〜で再生して」と伝えてください。選んだ曲はそのまま保持されます。再生リクエストは送っていません。 (${code})`,
|
|
24
|
+
"failure.networkRead": ({ notSent, code }) => `ネットワークエラーで Spotify のデバイスや再生状態を読み取れず、準備を中止しました。${notSent ? "再生リクエストは送っていません。" : ""}Spotify との接続を確認してから、もう一度試してください。 (${code})`,
|
|
25
|
+
"failure.readiness.spotify_device_selection_required": "選んだ曲は保持していますが、再生するデバイスが決まっていません。使うデバイスの名前を教えてください。前のデバイスに勝手に切り替えることはありません。",
|
|
26
|
+
"failure.readiness.spotify_device_not_found": "指定したデバイスが Spotify に表示されていません。そのデバイスで Spotify を開いてから、もう一度再生を頼んでください。別のデバイスには切り替えていません。",
|
|
27
|
+
"failure.readiness.spotify_device_ambiguous": "使える Spotify デバイスが複数あるかもしれません。使いたいデバイスの名前を教えてください。",
|
|
28
|
+
"failure.readiness.spotify_device_restricted": "指定したデバイスは Spotify Web API での操作が確認できません。別のデバイスを選んでください。",
|
|
29
|
+
"failure.readiness.spotify_device_changed": "別の Spotify デバイスがアクティブになりました。使うデバイスをはっきり選んでください。再生は自動で移していません。",
|
|
30
|
+
"failure.readiness.spotify_device_state_unconfirmed": "Spotify のデバイスや再生状態の情報が不完全か、食い違っています。Spotify で今のデバイスを確認してから、もう一度試してください。",
|
|
31
|
+
"failure.readiness.spotify_device_not_ready": "待ち時間内にデバイスの準備ができませんでした。そのデバイスで Spotify を開いてから、同じ曲をもう一度頼んでください。",
|
|
32
|
+
"failure.readiness.spotify_playback_restricted": "Spotify が現在、再生の再開を許可していません。デバイスを確認してください。",
|
|
33
|
+
"failure.songNotSent": " 再生リクエストは送っていません。",
|
|
34
|
+
"failure.preparationStopped": ({ evidence }) => `再生前のデバイス確認が完了しませんでした(${evidence})。再生リクエストは送っていません。Spotify のデバイスの状態を確認してから、もう一度試してください。`,
|
|
35
|
+
"failure.queueRequestRequired": "曲は追加していません。この返事をキューへの追加リクエストと結びつけられませんでした。続けるには、キューに追加したいとはっきり伝えてください。",
|
|
36
|
+
"failure.notSent": ({ code }) => `Spotify には何も送っていません。さっき見つけた曲と結び付けられませんでした(${code})。曲名かアーティスト名を添えてもう一度頼んでください。改めて探します。`,
|
|
37
|
+
"failure.outcome.lookup": "Spotify での検索が完了しませんでした",
|
|
38
|
+
"failure.outcome.unknown": "Spotify での操作結果がわかりません",
|
|
39
|
+
"failure.outcome.unconfirmed": "Spotify が再生操作を確認しませんでした",
|
|
40
|
+
"failure.reason": ({ reason }) => `Spotify からの理由: ${reason}。`,
|
|
41
|
+
"failure.reasonUnknown": "具体的な原因は確認できていません。",
|
|
42
|
+
"failure.lookup": ({ outcome, evidence, reason }) => `${outcome}(${evidence})。${reason}再生やキューへの追加は送っていません。`,
|
|
43
|
+
"failure.general": ({ targets, outcome, evidence, reason, playbackNotSent, recovered }) =>
|
|
44
|
+
`${targets ? `対象: ${targets}。\n` : ""}${outcome}(${evidence})。${reason}${playbackNotSent ? "再生リクエストは送っていません。" : ""}${recovered ? "デバイスの復旧を一度だけ試して終了しました。これ以上は再試行しません。" : "自動では再試行していません。"}再生状態と使えるデバイスを確認すると、原因を詳しく調べられます。`,
|
|
45
|
+
|
|
46
|
+
"queue.unverified": () => "Spotify は受け付けましたが、キューを読み取って確認できませんでした。",
|
|
47
|
+
"queue.confirmedPlaying": ({ one }) => one ? "Spotify で再生中であることを確認しました。" : "Spotify で確認しました。1 曲目が再生中で、残りはキューに入っています。",
|
|
48
|
+
"queue.confirmed": ({ count }) => count === 1 ? "Spotify のキューに入っていることを確認しました。" : `Spotify のキューに ${count} 曲すべて入っていることを確認しました。`,
|
|
49
|
+
"queue.partlyVisible": ({ accepted, confirmed, truncated }) => `Spotify は ${accepted} 曲を受け付け、今キューに見えているのは ${confirmed} 曲です${truncated ? "(長いキューは Spotify が一部しか表示しません)" : ""}。`,
|
|
50
|
+
"queue.noPlayback": "Spotify で再生中の曲がなく、手がかりにできないため、何も追加していません。",
|
|
51
|
+
"queue.noCandidates": "絞り込んだ結果、追加できる候補が残らなかったため、何も追加していません。",
|
|
52
|
+
"queue.requested": ({ requested, accepted, shortfall }) => `${requested} 曲のリクエストに対し、Spotify が受け付けたのは ${accepted} 曲です${shortfall ? `(${shortfall} 曲不足)` : ""}。`,
|
|
53
|
+
"queue.similarSeed": ({ artist }) => `${artist} を聴く人たちに近いアーティストから:`,
|
|
54
|
+
"queue.cancelled": "キャンセルを受けて追加を止めました。受け付け済みの曲はキューに残っています。",
|
|
55
|
+
"queue.stopped": ({ count, title, artist }) => `Spotify のキューに ${count} 曲追加し、「${title}」 - ${artist} で止まりました。`,
|
|
56
|
+
"queue.queued": ({ count }) => `Spotify のキューに ${count} 曲追加しました:`,
|
|
57
|
+
"queue.queuedSome": ({ count, unmatched }) => `Spotify のキューに ${count + unmatched} 曲中 ${count} 曲追加しました:`,
|
|
58
|
+
"queue.outcomeUnknown": "止まった曲が追加されたかどうか、Spotify が確認しませんでした。もう一度試す前にキューを確認してください。再送はしていません。",
|
|
59
|
+
"queue.started": ({ title, device, more }) => `何も再生していなかったので、${device ? `${device} で` : ""}「${title}」を再生し${more ? "、残りをキューに入れ" : ""}ました。`,
|
|
60
|
+
"queue.unmatchedHeading": "Spotify で見つからなかった曲:",
|
|
61
|
+
"queue.skippedDuplicates": ({ count }) => `重複していた ${count} 曲を飛ばしました。`,
|
|
62
|
+
"queue.skippedUncertain": ({ count }) => `前回キューへの追加結果がはっきりしなかった ${count} 曲を、重複を避けるため飛ばしました。Spotify のキューを確認してください。`,
|
|
63
|
+
"queue.skippedAvoided": ({ count }) => `避けるよう指定された ${count} 曲を飛ばしました。`,
|
|
64
|
+
"queue.skippedKnown": ({ count }) => `ご希望どおり、再生履歴にある ${count} 曲を飛ばしました。`,
|
|
65
|
+
"queue.observationTruncated": "重複の確認は Spotify が表示するキューの範囲だけです。表示されていない部分と重なる可能性があります。",
|
|
66
|
+
"queue.notAddedHeading": "まだ追加していない曲:",
|
|
67
|
+
"queue.earlierReceipt": "これは前回のキュー操作の結果です。今回の補足では曲を再度追加していません。",
|
|
68
|
+
|
|
69
|
+
"playlist.partialUnknown": ({ name }) => `Spotify に非公開プレイリスト「${name}」を作成しましたが、曲の追加は確認できませんでした。再試行する前にプレイリストを確認してください。`,
|
|
70
|
+
"playlist.partialEmpty": ({ name }) => `Spotify に非公開プレイリスト「${name}」を作成しましたが、曲は追加されませんでした。空のプレイリストが残っています。再試行する前に確認してください。`,
|
|
71
|
+
"playlist.saved": ({ name, count }) => `Spotify の非公開プレイリスト「${name}」として保存しました(${count} 曲)。`,
|
|
72
|
+
|
|
73
|
+
"action.playback.resume": "再生リクエスト",
|
|
74
|
+
"action.playback.pause": "一時停止",
|
|
75
|
+
"action.playback.next": "次の曲へのスキップ",
|
|
76
|
+
"action.playback.previous": "前の曲への移動",
|
|
77
|
+
"action.playback.volume.set": "音量の変更",
|
|
78
|
+
"action.playback.seek": "再生位置の変更",
|
|
79
|
+
"action.playback.shuffle.set": "シャッフルの設定",
|
|
80
|
+
"action.playback.repeat.set": "リピートの設定",
|
|
81
|
+
"action.playback.transfer": "デバイスの切り替え",
|
|
82
|
+
"action.playback.queue.add": "キューへの追加",
|
|
83
|
+
"action.library.remove": "ライブラリからの削除",
|
|
84
|
+
"action.library.save": "ライブラリへの保存",
|
|
85
|
+
"action.playlist.write": "プレイリストの作成",
|
|
86
|
+
"action.playlist.edit": "プレイリストの変更",
|
|
87
|
+
"action.playlist.rename": "プレイリスト名の変更",
|
|
88
|
+
"action.playlist.unfollow": "ライブラリからのプレイリストの削除",
|
|
89
|
+
"action.playlist.remove_track": "プレイリストからの曲の削除",
|
|
90
|
+
"action.other": "依頼された変更",
|
|
91
|
+
"write.unknown": ({ action, target }) => `Spotify で${target ? `「${target}」の` : ""}${action}が確認できませんでした。再試行する前に状態を確認してください。`,
|
|
92
|
+
"write.unfollowed": ({ name }) => `「${name}」を Spotify のライブラリから外しました(フォロー解除)。プレイリスト自体はほかのリスナーには残っている場合があり、削除はしていません。`,
|
|
93
|
+
"write.renamed": ({ name }) => `Spotify でプレイリスト名を「${name}」に変更しました。`,
|
|
94
|
+
"write.trackRemoved": ({ name }) => `Spotify で「${name}」から 1 曲削除しました。`,
|
|
95
|
+
"write.accepted": ({ action, count, targets }) => `Spotify が${action}を受け付けました${count === null ? "" : `(${count} 曲)`}${targets ? `: ${targets}` : ""}。`,
|
|
96
|
+
|
|
97
|
+
"plan.heading.private_library": ({ count }) => `あなたのライブラリから選んだ ${count} 曲のプラン:`,
|
|
98
|
+
"plan.heading.private_history": ({ count }) => `再生履歴からもう一度聴きたい ${count} 曲のプラン:`,
|
|
99
|
+
"plan.heading.external_catalog": ({ count }) => `${count} 曲:`,
|
|
100
|
+
"plan.heading.mixed": ({ count }) => `${count} 曲:`,
|
|
101
|
+
"plan.heading.timeCapsule": ({ count }) => `あなたの聴いてきた年をたどる ${count} 曲のタイムマシン:`,
|
|
102
|
+
"plan.heading.historicalReturn": ({ count }) => `長い空白のあとに戻ってきた ${count} 曲:`,
|
|
103
|
+
"plan.heading.backToBack": ({ count }) => `続けて再生していた ${count} 曲:`,
|
|
104
|
+
"plan.externalTrack": ({ line, release }) => `${line}(『${release}』収録)`,
|
|
105
|
+
"plan.rationale": ({ text }) => ` 選んだ理由: ${text}`,
|
|
106
|
+
"plan.ordering": ({ text }) => `曲順の理由: ${text}`,
|
|
107
|
+
"plan.notSaved": "まだ保存もキューへの追加もしていません。",
|
|
108
|
+
"plan.previewing": "30秒のプレビューをプレーヤーで再生中です。フル尺の曲は Apple Music で聴けます。",
|
|
109
|
+
"plan.pending": "範囲: このプランは今のセッション内で保留中です。Spotify には書き込んでおらず、外部への影響はありません。",
|
|
110
|
+
"plan.backToBackBoundary": "読み方の注意: 保存された再生が続いていても、リピート再生だった、意図して聴き直した、気に入っている、とは限りません。",
|
|
111
|
+
"plan.validationScope": "確認した範囲: ローカルのプランナーが曲の同一性、候補への所属、曲数、順番を確認しています。選んだ理由や場面への合い方は、手元のメタデータにもとづくモデルの判断です。",
|
|
112
|
+
"plan.unvalidated": "このプランを検証できなかったため、信頼できる候補で確認していない曲リストはお出ししません。検索を絞るか広げて、もう一度試してください。",
|
|
113
|
+
|
|
114
|
+
"edit.previewHeading": ({ name, before, after }) => `Spotify の非公開プレイリスト「${name}」の編集プレビュー(${before} -> ${after} 曲):`,
|
|
115
|
+
"edit.status.added": "追加",
|
|
116
|
+
"edit.status.moved": "移動",
|
|
117
|
+
"edit.status.retained": "維持",
|
|
118
|
+
"edit.removeHeading": "削除する曲:",
|
|
119
|
+
"edit.summary": ({ added, removed, moved, retained }) => `変更の概要: 追加 ${added}、削除 ${removed}、移動 ${moved}、そのまま ${retained}。`,
|
|
120
|
+
"edit.boundary": "範囲: Spotify はまだ変わっていません。次のメッセージではっきり確認してもらえたら、Moondog がこのとおりの内容で書き込みます。",
|
|
121
|
+
"edit.updated": ({ name, before, after }) => `確認済みのプレビューどおりに Spotify の非公開プレイリスト「${name}」を更新しました${before === null ? `(現在 ${after} 曲)` : `(${before} -> ${after} 曲)`}。`,
|
|
122
|
+
|
|
123
|
+
"selection.note": ({ playlist, track }) => `\n\n続けて編集する対象: プレイリスト ${playlist}、曲 ${track}。`,
|
|
124
|
+
"memory.spotifyExcluded": "\n\nSpotify の検索結果は一般の記憶には残しません。確認できるあなたの発言だけが対象で、それ以外は保存していません。",
|
|
125
|
+
"memory.notSaved": "\n\n返事は完了しましたが、記憶は保存できませんでした。",
|
|
126
|
+
"turn.cancelled": "以降の処理をキャンセルしました。",
|
|
127
|
+
"turn.interrupted": "返事が中断されました。記録された Spotify の操作結果は下のとおりです。操作は繰り返していません。",
|
|
128
|
+
};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// 한국어. Keys match messages/en.mjs; a missing key falls back to English.
|
|
2
|
+
export default {
|
|
3
|
+
"discovery.reason.listenbrainz": ({ adjacent, seed, release }) => `ListenBrainz 청취 데이터에서 ${adjacent}, ${seed} 두 아티스트가 이어집니다. 수록: "${release}".`,
|
|
4
|
+
"discovery.reason.appleMusic": ({ queries, release, genre }) => `Apple Music 카탈로그 ${queries ? `검색어 ${queries}와 일치` : "후보"}. 수록: "${release}"${genre ? `, 카탈로그 장르: ${genre}` : ""}.`,
|
|
5
|
+
"discovery.reason.external": ({ release }) => `가져온 외부 카탈로그에서 찾았습니다. 수록: "${release}".`,
|
|
6
|
+
"discovery.order": ({ path }) => `이 순서로 들어 보세요: ${path}.`,
|
|
7
|
+
"discovery.unavailable": "음악 탐색 서비스에 연결하지 못해 이번에는 추천을 만들지 못했습니다. 같은 요청을 다시 보내 주세요.",
|
|
8
|
+
|
|
9
|
+
"citations.heading": "공개 음악 출처(개인 청취 증거와는 별개):",
|
|
10
|
+
"citations.item": ({ label, url, storefront, date }) => `- [${label}](<${url}>) - ${storefront} 스토어, ${date}에 확인.`,
|
|
11
|
+
"citations.scope": "범위: 이 공개 카탈로그 페이지는 개인 취향, 전체 청취 기록, 다른 플랫폼에서의 이용 가능 여부를 증명하지 않습니다.",
|
|
12
|
+
"web.sources.heading": ({ providers }) => `공개 웹 출처(${providers})`,
|
|
13
|
+
"web.sources.headingUnnamed": "공개 웹 출처",
|
|
14
|
+
"web.sources.published": ({ date }) => `출처 날짜: ${date}`,
|
|
15
|
+
"web.sources.retrieved": ({ date }) => `확인: ${date}`,
|
|
16
|
+
|
|
17
|
+
"external.neighbors": ({ seed }) => seed ? `${seed}에서 이어지는 ListenBrainz 청취자 이웃` : "ListenBrainz 청취자 이웃",
|
|
18
|
+
"external.listenbrainz": ({ neighbor, date }) => `${neighbor} (Wikidata 식별 정보, CC0, ${date}에 확인. 오디오 유사도가 아닙니다)`,
|
|
19
|
+
"external.appleMusic": ({ date }) => `Apple Music 미국 스토어 제목 일치 (${date}에 확인)`,
|
|
20
|
+
"external.limit": "가져온 라이브러리에서 제목과 아티스트가 같은 곡만 제외했기 때문에, 한 번도 들어 본 적 없는 곡이라는 뜻은 아닙니다. 들어 볼 만한 제안입니다.",
|
|
21
|
+
"external.from": ({ parts, limit }) => `출처: ${parts.join(", 그리고 ")}. ${limit}`,
|
|
22
|
+
|
|
23
|
+
"failure.deviceList": ({ noMatch, names, code }) => `기기 이름이 ${noMatch ? "일치하지 않았습니다" : "여러 기기와 일치했습니다"}. 현재 Spotify에 보이는 기기: ${names}. 표시된 기기 이름으로 "이 기기에서 재생해"라고 말해 주세요. 고른 곡은 그대로 남아 있습니다. 곡 재생 요청은 보내지 않았습니다. (${code})`,
|
|
24
|
+
"failure.networkRead": ({ notSent, code }) => `네트워크 오류로 Spotify 기기와 재생 상태를 읽지 못해 준비를 멈췄습니다.${notSent ? " 곡 재생 요청은 보내지 않았습니다." : ""} Spotify 연결을 확인한 뒤 다시 시도해 주세요. (${code})`,
|
|
25
|
+
"failure.readiness.spotify_device_selection_required": "고른 곡은 남아 있지만 재생할 기기가 정해지지 않았습니다. 원하는 기기 이름을 말해 주세요. 이전 기기로 대신 재생하지 않습니다.",
|
|
26
|
+
"failure.readiness.spotify_device_not_found": "Spotify에서 대상 기기가 보이지 않습니다. 그 기기에서 Spotify를 연 다음 다시 재생을 요청해 주세요. 다른 기기로 대신 재생하지 않았습니다.",
|
|
27
|
+
"failure.readiness.spotify_device_ambiguous": "사용할 수 있는 Spotify 기기가 여러 대일 수 있습니다. 원하는 기기 이름을 알려 주세요.",
|
|
28
|
+
"failure.readiness.spotify_device_restricted": "대상 기기가 Spotify Web API 제어를 허용하는지 확인되지 않습니다. 사용할 수 있는 다른 기기를 골라 주세요.",
|
|
29
|
+
"failure.readiness.spotify_device_changed": "다른 Spotify 기기가 활성화되었습니다. 원하는 기기를 직접 골라 주세요. 재생을 자동으로 옮기지 않았습니다.",
|
|
30
|
+
"failure.readiness.spotify_device_state_unconfirmed": "Spotify 기기와 재생 상태가 불완전하거나 서로 맞지 않습니다. Spotify에서 현재 기기를 확인한 뒤 다시 시도해 주세요.",
|
|
31
|
+
"failure.readiness.spotify_device_not_ready": "대상 기기가 정해진 대기 시간 안에 준비되지 않았습니다. 그 기기에서 Spotify를 연 다음 같은 곡을 다시 요청해 주세요.",
|
|
32
|
+
"failure.readiness.spotify_playback_restricted": "지금은 Spotify가 재생 재개를 허용하지 않습니다. 대상 기기를 확인해 주세요.",
|
|
33
|
+
"failure.songNotSent": " 곡 재생 요청은 보내지 않았습니다.",
|
|
34
|
+
"failure.preparationStopped": ({ evidence }) => `재생 기기 확인을 마치지 못했습니다(${evidence}). 곡 재생 요청은 보내지 않았습니다. Spotify 기기 상태를 확인한 뒤 다시 시도해 주세요.`,
|
|
35
|
+
"failure.queueRequestRequired": "곡을 대기열에 넣지 않았습니다. 이 답변을 대기열 추가 요청과 연결하지 못했습니다. 계속하려면 재생 대기열에 음악을 넣어 달라고 분명히 요청해 주세요.",
|
|
36
|
+
"failure.notSent": ({ code }) => `Spotify에 아무것도 보내지 않았습니다. 방금 찾은 곡과 연결하지 못했습니다(${code}). 곡 제목이나 아티스트 이름을 넣어 다시 말해 주시면 다시 찾아볼게요.`,
|
|
37
|
+
"failure.outcome.lookup": "Spotify 검색을 마치지 못했습니다",
|
|
38
|
+
"failure.outcome.unknown": "Spotify 작업 결과가 확실하지 않습니다",
|
|
39
|
+
"failure.outcome.unconfirmed": "Spotify 재생 작업이 확인되지 않았습니다",
|
|
40
|
+
"failure.reason": ({ reason }) => `Spotify가 알려 준 이유: ${reason}.`,
|
|
41
|
+
"failure.reasonUnknown": "정확한 원인은 확인되지 않았습니다.",
|
|
42
|
+
"failure.lookup": ({ outcome, evidence, reason }) => `${outcome} (${evidence}). ${reason} 재생이나 대기열 작업은 보내지 않았습니다.`,
|
|
43
|
+
"failure.general": ({ targets, outcome, evidence, reason, playbackNotSent, recovered }) =>
|
|
44
|
+
`${targets ? `대상: ${targets}.\n` : ""}${outcome} (${evidence}). ${reason}${playbackNotSent ? " 곡 재생 요청은 보내지 않았습니다." : ""} ${recovered ? "제한된 기기 복구를 한 번 마쳤고, 더 이상 다시 시도하지 않았습니다." : "작업을 다시 시도하지 않았습니다."} 재생 상태와 사용 가능한 기기를 읽으면 더 자세히 살펴볼 수 있습니다.`,
|
|
45
|
+
|
|
46
|
+
"queue.unverified": () => "Spotify가 받아들였지만, 대기열을 읽어 다시 확인하지는 못했습니다.",
|
|
47
|
+
"queue.confirmedPlaying": ({ one }) => one ? "Spotify에서 재생 중인 것을 확인했습니다." : "Spotify에서 확인했습니다. 첫 곡이 재생 중이고 나머지는 대기열에 있습니다.",
|
|
48
|
+
"queue.confirmed": ({ count }) => count === 1 ? "Spotify 대기열에서 확인했습니다." : `Spotify 대기열에서 ${count}곡 모두 확인했습니다.`,
|
|
49
|
+
"queue.partlyVisible": ({ accepted, confirmed, truncated }) => `Spotify가 ${accepted}곡을 받아들였고, 지금 대기열에는 ${confirmed}곡이 보입니다${truncated ? "(Spotify는 긴 대기열의 일부만 보여 줍니다)" : ""}.`,
|
|
50
|
+
"queue.noPlayback": "Spotify에 기준으로 삼을 현재 곡이 없어 아무것도 대기열에 넣지 않았습니다.",
|
|
51
|
+
"queue.noCandidates": "걸러 낸 뒤 남은 후보가 없어 아무것도 대기열에 넣지 않았습니다.",
|
|
52
|
+
"queue.requested": ({ requested, accepted, shortfall }) => `${requested}곡을 요청했고 Spotify가 ${accepted}곡을 받아들였습니다${shortfall ? `. ${shortfall}곡이 모자랍니다` : ""}.`,
|
|
53
|
+
"queue.similarSeed": ({ artist }) => `청취자 데이터로 본 비슷한 아티스트 (기준: ${artist}):`,
|
|
54
|
+
"queue.cancelled": "취소 요청에 따라 대기열 추가를 멈췄습니다. 이미 받아들여진 곡은 대기열에 남아 있습니다.",
|
|
55
|
+
"queue.stopped": ({ count, title, artist }) => `Spotify 대기열에 ${count}곡을 넣은 뒤 "${title}" - ${artist}에서 멈췄습니다.`,
|
|
56
|
+
"queue.queued": ({ count }) => `Spotify 대기열에 ${count}곡을 넣었습니다:`,
|
|
57
|
+
"queue.queuedSome": ({ count, unmatched }) => `Spotify 대기열에 ${count + unmatched}곡 중 ${count}곡을 넣었습니다:`,
|
|
58
|
+
"queue.outcomeUnknown": "멈춘 곡이 추가되었는지 Spotify가 확인해 주지 않았습니다. 다시 시도하기 전에 대기열을 확인해 주세요. 이 작업은 다시 보내지 않았습니다.",
|
|
59
|
+
"queue.started": ({ title, device, more }) => `재생 중인 곡이 없어서 ${device ? `${device}에서 ` : ""}"${title}" 재생을 시작했습니다${more ? ". 나머지는 그 뒤에 이어집니다" : ""}.`,
|
|
60
|
+
"queue.unmatchedHeading": "Spotify에서 찾지 못한 곡:",
|
|
61
|
+
"queue.skippedDuplicates": ({ count }) => `중복된 곡 ${count}곡을 건너뛰었습니다.`,
|
|
62
|
+
"queue.skippedUncertain": ({ count }) => `이전 대기열 결과가 불확실한 곡 ${count}곡은 중복을 피하려고 건너뛰었습니다. Spotify 대기열을 확인해 주세요.`,
|
|
63
|
+
"queue.skippedAvoided": ({ count }) => `피해 달라고 한 곡 ${count}곡을 건너뛰었습니다.`,
|
|
64
|
+
"queue.skippedKnown": ({ count }) => `요청대로 청취 기록에 있는 곡 ${count}곡을 건너뛰었습니다.`,
|
|
65
|
+
"queue.observationTruncated": "Spotify가 돌려준 대기열의 일부만 확인했습니다. 보이지 않는 부분에 같은 곡이 있을 수 있습니다.",
|
|
66
|
+
"queue.notAddedHeading": "추가하지 않은 곡:",
|
|
67
|
+
"queue.earlierReceipt": "이것은 앞선 대기열 작업의 결과입니다. 이번 설명으로 곡을 다시 넣지는 않았습니다.",
|
|
68
|
+
|
|
69
|
+
"playlist.partialUnknown": ({ name }) => `Spotify에 비공개 플레이리스트 "${name}" 생성은 끝났지만, 곡 추가는 확인되지 않았습니다. 다시 시도할지 정하기 전에 확인해 주세요.`,
|
|
70
|
+
"playlist.partialEmpty": ({ name }) => `Spotify에 비공개 플레이리스트 "${name}" 생성은 끝났지만 곡은 추가하지 않았습니다. 빈 플레이리스트가 생겼으니 다시 시도할지 정하기 전에 확인해 주세요.`,
|
|
71
|
+
"playlist.saved": ({ name, count }) => `Spotify 비공개 플레이리스트 "${name}"(${count}곡)으로 저장했습니다.`,
|
|
72
|
+
|
|
73
|
+
"action.playback.resume": "재생 요청",
|
|
74
|
+
"action.playback.pause": "일시 정지 요청",
|
|
75
|
+
"action.playback.next": "다음 곡 요청",
|
|
76
|
+
"action.playback.previous": "이전 곡 요청",
|
|
77
|
+
"action.playback.volume.set": "볼륨 변경",
|
|
78
|
+
"action.playback.seek": "재생 위치 변경",
|
|
79
|
+
"action.playback.shuffle.set": "셔플 설정",
|
|
80
|
+
"action.playback.repeat.set": "반복 설정",
|
|
81
|
+
"action.playback.transfer": "기기 전환",
|
|
82
|
+
"action.playback.queue.add": "대기열 추가",
|
|
83
|
+
"action.library.remove": "보관함에서 삭제",
|
|
84
|
+
"action.library.save": "보관함에 저장",
|
|
85
|
+
"action.playlist.write": "플레이리스트 만들기",
|
|
86
|
+
"action.playlist.edit": "플레이리스트 변경",
|
|
87
|
+
"action.playlist.rename": "플레이리스트 이름 변경",
|
|
88
|
+
"action.playlist.unfollow": "보관함에서 플레이리스트 삭제",
|
|
89
|
+
"action.playlist.remove_track": "플레이리스트 곡 삭제",
|
|
90
|
+
"action.other": "요청한 변경",
|
|
91
|
+
"write.unknown": ({ action, target }) => `Spotify에서 다음 작업이 확인되지 않았습니다: ${action}${target ? ` ("${target}")` : ""}. 다시 시도할지 정하기 전에 상태를 확인해 주세요.`,
|
|
92
|
+
"write.unfollowed": ({ name }) => `Spotify 보관함에서 "${name}" 플레이리스트를 삭제했습니다(팔로우 취소). 다른 청취자에게는 플레이리스트가 남아 있을 수 있으며, 완전히 삭제된 것은 아닙니다.`,
|
|
93
|
+
"write.renamed": ({ name }) => `Spotify가 플레이리스트 이름 변경을 받아들였습니다. 새 이름: "${name}".`,
|
|
94
|
+
"write.trackRemoved": ({ name }) => `Spotify가 "${name}"에서 곡 하나를 삭제하는 것을 받아들였습니다.`,
|
|
95
|
+
"write.accepted": ({ action, count, targets }) => `Spotify가 다음 작업을 받아들였습니다: ${action}${count === null ? "" : ` (${count}곡)`}${targets ? ` - ${targets}` : ""}.`,
|
|
96
|
+
|
|
97
|
+
"plan.heading.private_library": ({ count }) => `내 라이브러리에서 고른 ${count}곡 구성:`,
|
|
98
|
+
"plan.heading.private_history": ({ count }) => `청취 기록에서 다시 들어 볼 ${count}곡:`,
|
|
99
|
+
"plan.heading.external_catalog": ({ count }) => `${count}곡:`,
|
|
100
|
+
"plan.heading.mixed": ({ count }) => `${count}곡:`,
|
|
101
|
+
"plan.heading.timeCapsule": ({ count }) => `여러 해의 청취를 지나는 ${count}곡 타임머신:`,
|
|
102
|
+
"plan.heading.historicalReturn": ({ count }) => `오랜만에 다시 돌아온 ${count}곡:`,
|
|
103
|
+
"plan.heading.backToBack": ({ count }) => `연달아 재생했던 ${count}곡:`,
|
|
104
|
+
"plan.externalTrack": ({ line, release }) => `${line}, 수록: "${release}"`,
|
|
105
|
+
"plan.rationale": ({ text }) => ` 고른 이유: ${text}`,
|
|
106
|
+
"plan.ordering": ({ text }) => `순서를 정한 이유: ${text}`,
|
|
107
|
+
"plan.notSaved": "아직 저장하거나 대기열에 넣지 않았습니다.",
|
|
108
|
+
"plan.previewing": "30초 미리 듣기가 플레이어에서 재생 중입니다. 전체 곡은 Apple Music에서 들을 수 있습니다.",
|
|
109
|
+
"plan.pending": "안내: 이 구성은 지금 실행 중인 세션에서만 확인을 기다리며, Spotify에 기록되지 않았고 다른 외부 영향도 없습니다.",
|
|
110
|
+
"plan.backToBackBoundary": "해석 안내: 연달아 남은 재생 기록만으로는 반복 재생 설정, 의도적인 다시 듣기, 좋아함을 증명할 수 없습니다.",
|
|
111
|
+
"plan.validationScope": "검증 범위: 로컬 플래너가 곡 식별 정보, 후보 범위, 곡 수, 순서를 검증했습니다. 고른 이유와 상황에 맞는지는 가진 정보에 바탕을 둔 모델의 판단입니다.",
|
|
112
|
+
"plan.unvalidated": "이 플레이리스트 구성을 검증하지 못해, 신뢰할 수 있는 후보와 대조하지 않은 곡 목록은 보여 드리지 않습니다. 검색 범위를 좁히거나 넓혀서 다시 시도해 주세요.",
|
|
113
|
+
|
|
114
|
+
"edit.previewHeading": ({ name, before, after }) => `Spotify 비공개 플레이리스트 "${name}" 편집 미리 보기 (${before} -> ${after}곡):`,
|
|
115
|
+
"edit.status.added": "추가",
|
|
116
|
+
"edit.status.moved": "이동",
|
|
117
|
+
"edit.status.retained": "유지",
|
|
118
|
+
"edit.removeHeading": "삭제할 곡:",
|
|
119
|
+
"edit.summary": ({ added, removed, moved, retained }) => `변경 요약: 추가 ${added}, 삭제 ${removed}, 이동 ${moved}, 제자리 유지 ${retained}.`,
|
|
120
|
+
"edit.boundary": "안내: Spotify는 아직 바뀌지 않았습니다. 다음 메시지에서 분명히 확인해 주시면 Moondog가 이 보관된 버전을 그대로 기록합니다.",
|
|
121
|
+
"edit.updated": ({ name, before, after }) => `Spotify 비공개 플레이리스트 "${name}" 업데이트를 마쳤습니다. 확인한 미리 보기 그대로입니다${before === null ? ` (지금 ${after}곡)` : ` (${before} -> ${after}곡)`}.`,
|
|
122
|
+
|
|
123
|
+
"selection.note": ({ playlist, track }) => `\n\n다음 편집에 쓸 항목: 플레이리스트 ${playlist}, 곡 ${track}.`,
|
|
124
|
+
"memory.spotifyExcluded": "\n\nSpotify 결과는 일반 기억에 넣지 않습니다. 확인된 사용자 본인의 말만 기억할 수 있으며, 다른 내용은 저장하지 않았습니다.",
|
|
125
|
+
"memory.notSaved": "\n\n답변은 끝났지만 기억을 저장하지 못했습니다.",
|
|
126
|
+
"turn.cancelled": "남은 작업을 취소했습니다.",
|
|
127
|
+
"turn.interrupted": "답변이 중단되었습니다. 기록된 Spotify 결과는 아래와 같으며, 어떤 작업도 다시 실행하지 않았습니다.",
|
|
128
|
+
};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// Português do Brasil, com "você". Keys match messages/en.mjs; a missing key falls back to English.
|
|
2
|
+
export default {
|
|
3
|
+
"discovery.reason.listenbrainz": ({ adjacent, seed, release }) => `Os dados de escuta do ListenBrainz ligam ${adjacent} a ${seed}; do álbum "${release}".`,
|
|
4
|
+
"discovery.reason.appleMusic": ({ queries, release, genre }) => `${queries ? `Resultado do catálogo do Apple Music para ${queries}` : "Candidata do catálogo do Apple Music"}; do álbum "${release}"${genre ? `, gênero no catálogo: ${genre}` : ""}.`,
|
|
5
|
+
"discovery.reason.external": ({ release }) => `Do catálogo externo consultado, em "${release}".`,
|
|
6
|
+
"discovery.order": ({ path }) => `Ouça nesta ordem: ${path}.`,
|
|
7
|
+
"discovery.unavailable": "Não consegui acessar os serviços de descoberta de música, então este pedido não trouxe recomendações. Envie o pedido de novo para tentar outra vez.",
|
|
8
|
+
|
|
9
|
+
"citations.heading": "Fontes musicais públicas (separadas do seu histórico de escuta pessoal):",
|
|
10
|
+
"citations.item": ({ label, url, storefront, date }) => `- [${label}](<${url}>) - loja ${storefront}, consultada em ${date}.`,
|
|
11
|
+
"citations.scope": "Alcance: estas páginas públicas de catálogo não comprovam seu gosto pessoal, seu histórico completo nem a disponibilidade em outras plataformas.",
|
|
12
|
+
"web.sources.heading": ({ providers }) => `Fontes públicas da web (${providers})`,
|
|
13
|
+
"web.sources.headingUnnamed": "Fontes públicas da web",
|
|
14
|
+
"web.sources.published": ({ date }) => `data da fonte: ${date}`,
|
|
15
|
+
"web.sources.retrieved": ({ date }) => `consultado em ${date}`,
|
|
16
|
+
|
|
17
|
+
"external.neighbors": ({ seed }) => seed ? `ouvintes próximos de ${seed} no ListenBrainz` : "ouvintes próximos no ListenBrainz",
|
|
18
|
+
"external.listenbrainz": ({ neighbor, date }) => `${neighbor} (identidade do Wikidata, CC0, consultado em ${date}; isto não é semelhança de som)`,
|
|
19
|
+
"external.appleMusic": ({ date }) => `títulos correspondentes no Apple Music US (consultado em ${date})`,
|
|
20
|
+
"external.limit": "Só fica de fora o que coincide em título e artista com a sua biblioteca importada, então isso não quer dizer que você nunca ouviu essas músicas. São sugestões para ouvir.",
|
|
21
|
+
"external.from": ({ parts, limit }) => `A partir de ${parts.join(" e ")}. ${limit}`,
|
|
22
|
+
|
|
23
|
+
"failure.deviceList": ({ noMatch, names, code }) => `O nome do dispositivo ${noMatch ? "não corresponde a nenhum" : "corresponde a vários dispositivos"}. O Spotify mostra agora: ${names}. Diga "toca no" seguido do nome que aparece; a música escolhida fica guardada. Nenhum pedido de reprodução foi enviado. (${code})`,
|
|
24
|
+
"failure.networkRead": ({ notSent, code }) => `Um erro de rede impediu a leitura do estado dos dispositivos ou da reprodução do Spotify; a preparação parou.${notSent ? " O pedido de reprodução não foi enviado." : ""} Confira a conexão com o Spotify e tente de novo. (${code})`,
|
|
25
|
+
"failure.readiness.spotify_device_selection_required": "A música escolhida fica guardada, mas o dispositivo ainda não foi definido. Diga qual quer usar; o anterior não será usado no lugar.",
|
|
26
|
+
"failure.readiness.spotify_device_not_found": "O Spotify não vê o dispositivo escolhido. Abra o Spotify nele e peça a música de novo; nenhum outro dispositivo foi usado no lugar.",
|
|
27
|
+
"failure.readiness.spotify_device_ambiguous": "Pode haver vários dispositivos do Spotify disponíveis. Diga o nome do que você quer usar.",
|
|
28
|
+
"failure.readiness.spotify_device_restricted": "O dispositivo escolhido não confirma que pode ser controlado pela Web API do Spotify. Escolha outro dispositivo disponível.",
|
|
29
|
+
"failure.readiness.spotify_device_changed": "Outro dispositivo do Spotify ficou ativo. Escolha o dispositivo que você quer; a reprodução não foi movida automaticamente.",
|
|
30
|
+
"failure.readiness.spotify_device_state_unconfirmed": "O estado dos dispositivos ou da reprodução do Spotify está incompleto ou inconsistente. Confira o dispositivo atual no Spotify antes de tentar de novo.",
|
|
31
|
+
"failure.readiness.spotify_device_not_ready": "O dispositivo não ficou pronto dentro do tempo de espera. Abra o Spotify nele e peça a mesma música de novo.",
|
|
32
|
+
"failure.readiness.spotify_playback_restricted": "No momento, o Spotify não permite retomar a reprodução. Confira o dispositivo.",
|
|
33
|
+
"failure.songNotSent": " O pedido de reprodução não foi enviado.",
|
|
34
|
+
"failure.preparationStopped": ({ evidence }) => `As verificações do dispositivo não terminaram (${evidence}); nenhum pedido de reprodução foi enviado. Confira o estado do dispositivo no Spotify antes de tentar de novo.`,
|
|
35
|
+
"failure.queueRequestRequired": "Nenhuma música foi adicionada: não consegui ligar esta resposta a um pedido de fila. Para continuar, peça explicitamente para adicionar música à fila.",
|
|
36
|
+
"failure.notSent": ({ code }) => `Não enviei nada ao Spotify: não consegui relacionar isso com as músicas que encontrei (${code}). Peça de novo com o nome da música ou do artista, e eu procuro outra vez.`,
|
|
37
|
+
"failure.outcome.lookup": "A busca no Spotify não terminou",
|
|
38
|
+
"failure.outcome.unknown": "Não se sabe ao certo o resultado da ação no Spotify",
|
|
39
|
+
"failure.outcome.unconfirmed": "O Spotify não confirmou a ação de reprodução",
|
|
40
|
+
"failure.reason": ({ reason }) => `O Spotify informou: ${reason}.`,
|
|
41
|
+
"failure.reasonUnknown": "A causa exata não foi confirmada.",
|
|
42
|
+
"failure.lookup": ({ outcome, evidence, reason }) => `${outcome} (${evidence}). ${reason} Nenhuma ação de reprodução ou de fila foi enviada.`,
|
|
43
|
+
"failure.general": ({ targets, outcome, evidence, reason, playbackNotSent, recovered }) =>
|
|
44
|
+
`${targets ? `Alvo: ${targets}.\n` : ""}${outcome} (${evidence}). ${reason}${playbackNotSent ? " O pedido de reprodução não foi enviado." : ""} ${recovered ? "Uma tentativa limitada de recuperar o dispositivo terminou; não houve nova tentativa." : "A ação não foi repetida."} Consulte o estado da reprodução e os dispositivos disponíveis para entender melhor.`,
|
|
45
|
+
|
|
46
|
+
"queue.unverified": ({ one }) => `O Spotify ${one ? "aceitou" : "aceitou todas"}, mas não consegui ler sua fila para conferir.`,
|
|
47
|
+
"queue.confirmedPlaying": ({ one }) => one ? "Confirmado: está tocando no Spotify." : "Confirmado no Spotify: a primeira está tocando e as outras estão na sua fila.",
|
|
48
|
+
"queue.confirmed": ({ count }) => count === 1 ? "Confirmado na sua fila do Spotify." : `Confirmadas na sua fila do Spotify: todas as ${count}.`,
|
|
49
|
+
"queue.partlyVisible": ({ accepted, confirmed, truncated }) => `O Spotify aceitou ${accepted}; agora aparecem ${confirmed} na sua fila${truncated ? " (o Spotify só mostra parte de uma fila longa)" : ""}.`,
|
|
50
|
+
"queue.noPlayback": "O Spotify não tem nenhuma música tocando para servir de ponto de partida; nada foi adicionado.",
|
|
51
|
+
"queue.noCandidates": "Depois do filtro, não sobrou nenhuma candidata; nada foi adicionado.",
|
|
52
|
+
"queue.requested": ({ requested, accepted, shortfall }) => `Você pediu ${requested}; o Spotify aceitou ${accepted}${shortfall ? `, faltaram ${shortfall}` : ""}.`,
|
|
53
|
+
"queue.similarSeed": ({ artist }) => `Artistas próximos de ${artist} segundo outros ouvintes:`,
|
|
54
|
+
"queue.cancelled": "Parei de adicionar depois do cancelamento; as que já foram aceitas continuam na fila.",
|
|
55
|
+
"queue.stopped": ({ count, title, artist }) => `Adicionei ${count} à fila do Spotify e parei em "${title}" - ${artist}.`,
|
|
56
|
+
"queue.queued": ({ count }) => `Adicionei ${count} à fila do Spotify:`,
|
|
57
|
+
"queue.queuedSome": ({ count, unmatched }) => `Adicionei ${count} de ${count + unmatched} à fila do Spotify:`,
|
|
58
|
+
"queue.outcomeUnknown": "O Spotify não confirmou se a música em que parei foi adicionada. Confira a fila antes de tentar de novo; não reenviei.",
|
|
59
|
+
"queue.started": ({ title, device, more }) => `Nada estava tocando, então coloquei "${title}"${device ? ` no ${device}` : ""}${more ? " e deixei as outras na fila" : ""}.`,
|
|
60
|
+
"queue.unmatchedHeading": "Não encontradas no Spotify:",
|
|
61
|
+
"queue.skippedDuplicates": ({ count }) => `Pulei ${count} músicas repetidas.`,
|
|
62
|
+
"queue.skippedUncertain": ({ count }) => `Pulei ${count} músicas cujo resultado anterior na fila não ficou claro, para não repetir; confira a fila do Spotify.`,
|
|
63
|
+
"queue.skippedAvoided": ({ count }) => `Pulei ${count} músicas que você marcou para evitar.`,
|
|
64
|
+
"queue.skippedKnown": ({ count }) => `Pulei ${count} músicas que já aparecem no seu histórico, como você pediu.`,
|
|
65
|
+
"queue.observationTruncated": "A checagem de repetidas só cobre a parte da fila que o Spotify mostra; o que não aparece ainda pode repetir alguma.",
|
|
66
|
+
"queue.notAddedHeading": "Não adicionadas:",
|
|
67
|
+
"queue.earlierReceipt": "Este é o resultado da fila anterior; este esclarecimento não adicionou as músicas de novo.",
|
|
68
|
+
|
|
69
|
+
"playlist.partialUnknown": ({ name }) => `O Spotify criou a playlist privada "${name}", mas não confirmou que as músicas foram adicionadas. Confira antes de decidir se tenta de novo.`,
|
|
70
|
+
"playlist.partialEmpty": ({ name }) => `O Spotify criou a playlist privada "${name}", mas não adicionou as músicas. A playlist vazia já existe; confira antes de decidir se tenta de novo.`,
|
|
71
|
+
"playlist.saved": ({ name, count }) => `Salva como a playlist privada do Spotify "${name}" (${count} músicas).`,
|
|
72
|
+
|
|
73
|
+
"action.playback.resume": "o pedido de reprodução",
|
|
74
|
+
"action.playback.pause": "a pausa",
|
|
75
|
+
"action.playback.next": "o pulo para a próxima",
|
|
76
|
+
"action.playback.previous": "a volta para a anterior",
|
|
77
|
+
"action.playback.volume.set": "a mudança de volume",
|
|
78
|
+
"action.playback.seek": "a mudança de posição",
|
|
79
|
+
"action.playback.shuffle.set": "o ajuste do modo aleatório",
|
|
80
|
+
"action.playback.repeat.set": "o ajuste de repetição",
|
|
81
|
+
"action.playback.transfer": "a troca de dispositivo",
|
|
82
|
+
"action.playback.queue.add": "a adição à fila",
|
|
83
|
+
"action.library.remove": "a remoção da sua biblioteca",
|
|
84
|
+
"action.library.save": "o salvamento na sua biblioteca",
|
|
85
|
+
"action.playlist.write": "a criação da playlist",
|
|
86
|
+
"action.playlist.edit": "a mudança na playlist",
|
|
87
|
+
"action.playlist.rename": "a mudança de nome da playlist",
|
|
88
|
+
"action.playlist.unfollow": "a remoção da playlist da sua biblioteca",
|
|
89
|
+
"action.playlist.remove_track": "a remoção de uma música da playlist",
|
|
90
|
+
"action.other": "a mudança pedida",
|
|
91
|
+
"write.unknown": ({ action, target }) => `O Spotify não confirmou ${action}${target ? ` para "${target}"` : ""}. Confira o estado antes de decidir se tenta de novo.`,
|
|
92
|
+
"write.unfollowed": ({ name }) => `Tirei "${name}" da sua biblioteca do Spotify (você deixou de seguir). A playlist pode continuar existindo para outros ouvintes; ela não foi apagada.`,
|
|
93
|
+
"write.renamed": ({ name }) => `O Spotify aceitou o novo nome da playlist: "${name}".`,
|
|
94
|
+
"write.trackRemoved": ({ name }) => `O Spotify aceitou tirar uma música de "${name}".`,
|
|
95
|
+
"write.accepted": ({ action, count, targets }) => `O Spotify aceitou ${action}${count === null ? "" : ` (${count} músicas)`}${targets ? `: ${targets}` : ""}.`,
|
|
96
|
+
|
|
97
|
+
"plan.heading.private_library": ({ count }) => `Plano de ${count} músicas da sua biblioteca:`,
|
|
98
|
+
"plan.heading.private_history": ({ count }) => `Plano de ${count} músicas do seu histórico para ouvir de novo:`,
|
|
99
|
+
"plan.heading.external_catalog": ({ count }) => `${count} músicas:`,
|
|
100
|
+
"plan.heading.mixed": ({ count }) => `${count} músicas:`,
|
|
101
|
+
"plan.heading.timeCapsule": ({ count }) => `Máquina do tempo de ${count} paradas pelos seus anos de escuta:`,
|
|
102
|
+
"plan.heading.historicalReturn": ({ count }) => `${count} músicas do seu histórico que voltaram depois de uma longa pausa:`,
|
|
103
|
+
"plan.heading.backToBack": ({ count }) => `${count} músicas do seu histórico que você ouviu em sequência:`,
|
|
104
|
+
"plan.externalTrack": ({ line, release }) => `${line}, do álbum "${release}"`,
|
|
105
|
+
"plan.rationale": ({ text }) => ` Por que está aqui: ${text}`,
|
|
106
|
+
"plan.ordering": ({ text }) => `Por que esta ordem: ${text}`,
|
|
107
|
+
"plan.notSaved": "Nada foi salvo nem adicionado à fila ainda.",
|
|
108
|
+
"plan.previewing": "As prévias de 30 segundos estão tocando no seu player; as músicas completas estão no Apple Music.",
|
|
109
|
+
"plan.pending": "Limite: este plano só está pendente nesta sessão, não foi gravado no Spotify e não tem efeitos externos.",
|
|
110
|
+
"plan.backToBackBoundary": "Como ler: duas reproduções guardadas em sequência não provam que você usou a repetição, que tocou de novo de propósito nem que gosta da música.",
|
|
111
|
+
"plan.validationScope": "O que foi conferido: o planejador local verifica a identidade de cada música, se ela está entre as candidatas, a quantidade e a ordem; os motivos e o encaixe com o momento continuam sendo julgamentos do modelo a partir dos metadados disponíveis.",
|
|
112
|
+
"plan.unvalidated": "Não consegui validar este plano, então não vou devolver uma lista que não foi conferida contra candidatas confiáveis. Refine ou amplie a busca e tente de novo.",
|
|
113
|
+
|
|
114
|
+
"edit.previewHeading": ({ name, before, after }) => `Prévia das mudanças na playlist privada do Spotify "${name}" (${before} -> ${after} músicas):`,
|
|
115
|
+
"edit.status.added": "adicionar",
|
|
116
|
+
"edit.status.moved": "mover",
|
|
117
|
+
"edit.status.retained": "manter",
|
|
118
|
+
"edit.removeHeading": "Remover:",
|
|
119
|
+
"edit.summary": ({ added, removed, moved, retained }) => `Resumo: ${added} adicionadas, ${removed} removidas, ${moved} movidas e ${retained} sem mudança.`,
|
|
120
|
+
"edit.boundary": "Limite: o Spotify não mudou. Confirme explicitamente na sua próxima mensagem para o Moondog gravar exatamente esta versão.",
|
|
121
|
+
"edit.updated": ({ name, before, after }) => `Atualizei a playlist privada do Spotify "${name}" com a prévia que você confirmou${before === null ? ` (agora tem ${after} músicas)` : ` (${before} -> ${after} músicas)`}.`,
|
|
122
|
+
|
|
123
|
+
"selection.note": ({ playlist, track }) => `\n\nSelecionado para as próximas edições: playlist ${playlist}; música ${track}.`,
|
|
124
|
+
"memory.spotifyExcluded": "\n\nOs resultados do Spotify não vão para a memória geral; só citações suas verificáveis podiam ser guardadas, e o resto não foi salvo.",
|
|
125
|
+
"memory.notSaved": "\n\nA resposta terminou, mas não foi possível salvar a memória.",
|
|
126
|
+
"turn.cancelled": "Cancelei o resto.",
|
|
127
|
+
"turn.interrupted": "A resposta foi interrompida. Abaixo estão os resultados registrados no Spotify; nenhuma ação foi repetida.",
|
|
128
|
+
};
|