- link/upgrade OAuth cancel now redirects to /?link=cancelled (a channel App.tsx surfaces as a toast) instead of the pre-auth /?login=oauth_cancelled banner a signed-in user never sees; a plain sign-in cancel is unchanged - the login banner (suspended / oauth_cancelled) is now state, cleared on the first deliberate action like the verify banner — no more stale lingering - add a "Didn't get the verification email?" resend entry on the sign-in screen so a never-arrived verification mail isn't a dead end (was only reachable from the expired-link banner) - unit-test _oauth_redirect_uri (dev-host derive, unknown-host fallback, prod ignores the Host header — the injection guard) - collapse the 5-deep title/button ternaries into Record<Mode,string> maps
87 lines
4.2 KiB
JSON
87 lines
4.2 KiB
JSON
{
|
|
"hero": {
|
|
"title": "Your YouTube subscriptions, the way a feed should work.",
|
|
"subtitle": "Every upload from the channels you follow in one clean, filterable feed — no algorithm deciding what you see, and no Shorts or livestream noise unless you want it.",
|
|
"trust": "Self-hosted and private. Sign in with email, or continue with Google."
|
|
},
|
|
"openSource": {
|
|
"title": "Free and open source",
|
|
"body": "Siftlode's code is public — see how it works, run your own private instance, or open an issue.",
|
|
"link": "View the source"
|
|
},
|
|
"preview": {
|
|
"feed": "The feed — filter by channel, language, topic, length and date.",
|
|
"channels": "Channel manager",
|
|
"playlists": "Playlists"
|
|
},
|
|
"features": {
|
|
"heading": "Why Siftlode",
|
|
"readable": {
|
|
"title": "Your subscriptions, actually readable",
|
|
"body": "Sort and filter by channel, tag, language, topic, length or date, and save your setups as views. You decide what surfaces, not an algorithm."
|
|
},
|
|
"neverMiss": {
|
|
"title": "Never miss an upload",
|
|
"body": "Every video from every channel lands in one feed; Shorts and livestreams stay tucked away by default."
|
|
},
|
|
"search": {
|
|
"title": "Search all of YouTube",
|
|
"body": "Search YouTube right from your feed — results play, save and add to playlists like any other video."
|
|
},
|
|
"playlists": {
|
|
"title": "Playlists that sync both ways",
|
|
"body": "Build playlists locally and keep them in two-way sync with YouTube."
|
|
},
|
|
"player": {
|
|
"title": "Watch in-app, resume anywhere",
|
|
"body": "An in-app player picks up each video exactly where you left off — no recommendation rabbit-hole."
|
|
},
|
|
"private": {
|
|
"title": "Self-hosted and private",
|
|
"body": "Run it yourself, multi-user, in English and Hungarian. Your data stays yours."
|
|
}
|
|
},
|
|
"auth": {
|
|
"signinTitle": "Sign in",
|
|
"createTitle": "Create your account",
|
|
"forgotTitle": "Reset your password",
|
|
"resetTitle": "Set a new password",
|
|
"email": "Email",
|
|
"password": "Password",
|
|
"newPassword": "New password (min {{min}} characters)",
|
|
"invalidEmail": "Enter a valid email address.",
|
|
"weakPassword": "Password must be at least {{min}} characters.",
|
|
"genericError": "Something went wrong. Please try again.",
|
|
"working": "Please wait…",
|
|
"signinButton": "Sign in",
|
|
"createButton": "Create account",
|
|
"forgotButton": "Send reset link",
|
|
"resetButton": "Set password",
|
|
"resendButton": "Resend verification",
|
|
"resendTitle": "Resend verification email",
|
|
"resendLink": "Didn't get the verification email?",
|
|
"createLink": "Create an account",
|
|
"forgotLink": "Forgot password?",
|
|
"backToSignin": "Back to sign in",
|
|
"or": "or",
|
|
"google": "Continue with Google",
|
|
"tryDemo": "Try the demo",
|
|
"demoHint": "Enter an email that's been enabled for the demo account.",
|
|
"demoEmail": "Demo email",
|
|
"demoEnter": "Enter",
|
|
"demoDenied": "That email isn't enabled for the demo. Ask the admin to add it.",
|
|
"registerDone": "Almost there — check your email for a verification link. After you confirm it, an admin approves your account before you can sign in.",
|
|
"forgotDone": "If that email has an account, we've sent a reset link. Check your inbox.",
|
|
"resetDone": "Your password has been set — you can sign in now.",
|
|
"verifyOk": "Email confirmed. Once an admin approves your account, you can sign in.",
|
|
"verifyInvalid": "That verification link is invalid or has expired.",
|
|
"resendCta": "Send a new link",
|
|
"resendDone": "If that email has an unverified account, we've sent a new verification link. Check your inbox.",
|
|
"oauthCancelled": "Google sign-in was cancelled. You can try again or use email and password.",
|
|
"accessRequested": "Thanks — we recorded your request. An admin will review it.",
|
|
"accessDenied": "That account isn't approved for this instance yet — register below or ask the admin for access.",
|
|
"suspended": "This account has been suspended and can't sign in. If you think this is a mistake, contact the operator (check your email for details).",
|
|
"deleted": "Your account and all its data were permanently deleted. We've emailed you a confirmation."
|
|
}
|
|
}
|