Files
siftlode/frontend/src/i18n/locales/en/errors.json
T
peter fad301e7a4 fix(youtube): a refused YouTube action answers a 422 that says what to do
The two manual syncs (subscriptions import, playlist pull) had no YouTubeError
handler, so a quota, token or transport failure was a raw 500 and the blocking
"Server error" dialog (E9 F1). The other YouTube routes answered either the
upstream's English or a playlist-scoped "youtube_failed".

One helper, routes/_common.youtube_refusal: 422 {code: "youtube", reason} with
the reason sorted by what the user can do — quota (wait for the reset),
reconnect (the token step refused), unavailable (retry). Used by every route
that surfaces a YouTube failure; localizeDetail translates it.

"Reconnect" had no path: a grant Google revoked still read as granted, so
Settings and the wizard offered no connect button while every call failed.
An invalid_grant from the token endpoint now clears the stored grant.
2026-09-19 06:55:40 +02:00

101 lines
5.2 KiB
JSON

{
"title": "Couldn't complete that",
"generic": "The server couldn't carry out that action. Please try again.",
"demo": "This isn't available in the demo account.",
"validation": "Some of the values you entered weren't valid. Please check them and try again.",
"server": "Server error",
"syncCooldown": "You've synced a few times just now — give it a few minutes. The YouTube budget is shared with everyone on this instance, and background syncing keeps running either way.",
"notFound": {
"generic": "This item doesn't exist any more.",
"view": "This view doesn't exist any more.",
"tag": "This tag doesn't exist any more.",
"pin": "This isn't on your comfort shelf any more.",
"playlist": "This playlist doesn't exist any more.",
"move_target": "The playlist you're moving it to doesn't exist any more.",
"video": "This video isn't in the library any more.",
"invite": "This invite doesn't exist any more.",
"user": "This user doesn't exist any more.",
"channel": "This channel isn't in the library any more.",
"subscription": "You're not subscribed to this channel any more.",
"recipient": "There's no user with that email address.",
"job": "This job doesn't exist any more."
},
"admin": {
"not_allowed": "Their address isn't approved any more. Add it to the whitelist first.",
"not_applicable": "This account has nothing left to confirm.",
"not_approved": "Only an approved address can be invited.",
"email_off": "No mail was sent: this instance has no working SMTP setup. Check Configuration → Email / SMTP.",
"send_failed": "The mail couldn't be sent: the mail server was unreachable, or it refused the login or the message. Check Configuration → Email / SMTP, then try again.",
"demo": "The demo account is shared, so it can't get a set-password link."
},
"reason": {
"unreachable": "The server couldn't be reached. Try again.",
"forbidden": "You don't have permission to do that.",
"rateLimited": "Too many requests at once — wait a moment and try again.",
"unexpected": "Something went wrong in the app. Try again."
},
"writeFailed": {
"hideChannel": "Couldn't change whether the channel is hidden",
"blockChannel": "Couldn't change the channel's block",
"unblockChannel": "Couldn't unblock the channel",
"channelSettings": "Couldn't save the channel's settings",
"channelPriority": "Couldn't save the channel's priority",
"exploreChannel": "Couldn't load the channel's videos",
"downloadQuota": "Couldn't save the download quota",
"downloadQuotaReset": "Couldn't reset the download quota",
"job": {
"pause": "Couldn't pause the download",
"resume": "Couldn't resume the download",
"cancel": "Couldn't cancel the download",
"delete": "Couldn't delete the download",
"redownload": "Couldn't start the download again"
},
"removeShared": "Couldn't remove the shared item",
"downloadDetails": "Couldn't save the download's details",
"enqueueDownload": "Couldn't queue the download",
"downloadProfileSave": "Couldn't save the download profile",
"downloadProfileDelete": "Couldn't delete the download profile",
"downloadCookiesRemove": "Couldn't remove those cookies",
"notifRead": "Couldn't mark the notification as read",
"notifReadAll": "Couldn't mark the notifications as read",
"notifDismiss": "Couldn't dismiss the notification",
"notifClear": "Couldn't clear the notifications",
"createPlaylist": "Couldn't create the playlist",
"schedulerRun": "Couldn't start the job",
"schedulerRunAll": "Couldn't start the jobs",
"maintenanceBatch": "Couldn't save the maintenance batch size",
"purgeDiscovery": "Couldn't clear the discovery data",
"plexWatchLink": "Couldn't change the Plex watch-state sync",
"plexWatchImport": "Couldn't import the watch state from Plex",
"shareLinkDownload": "Couldn't change whether the link allows downloading",
"shareLinkRevoke": "Couldn't revoke the link",
"shareLinkPassword": "Couldn't change the link's password",
"syncPause": "Couldn't pause syncing",
"syncResume": "Couldn't resume syncing",
"prefs": "Couldn't save your settings",
"deleteAccount": "Couldn't delete your account",
"videoState": "Couldn't change the video's state",
"videoReset": "Couldn't reset the video",
"watchLaterAdd": "Couldn't add it to Watch later",
"watchLaterRemove": "Couldn't remove it from Watch later",
"clearSearch": "Couldn't clear the search results"
},
"ok": "OK",
"offline": {
"title": "Connection lost",
"body": "Couldn't reach the server — it may be restarting. This notice will clear once the connection is back."
},
"boundary": {
"title": "Something went wrong.",
"subtitle": "The app hit an unexpected error.",
"reload": "Reload",
"notifTitle": "Something broke",
"notifMessage": "Unexpected error"
},
"youtube": {
"quota": "Today's YouTube budget for this instance is spent. It resets at midnight Pacific time — try again then.",
"reconnect": "Google no longer accepts this account's YouTube connection. Sign out and sign in with Google again to reconnect it.",
"unavailable": "YouTube didn't accept that just now. Please try again."
}
}