feat(design): the Copy rule — names, verbs, dates and units (E28 S3g)
The owner's picks (all the recommended options) become DESIGN.md's Copy chapter and a sweep of both languages (742 values, no key drift): - One name per feature: the rail's label, which may shorten it (Alerts -> Notifications, Fiókok -> Felhasználók, Download Center -> Downloads, Channel manager -> Channels); one "sync from YouTube" verb. - Four verbs, four meanings (Delete / Remove / Dismiss / Discard, and their Hungarian pairs), checked against what each action does. - Sentence case, the app's places capitalised; "…" on a command that asks first (a popover or form title got its own key without it); one-sentence messages without a stop or a tick, "Couldn't …"; curly quotes. - Dates only from lib/format.ts, in the UI language: formatDateTime names the month and stops at the minute (it printed "9/27/2026, 8:30:14 AM"), formatDateTimeSec for the log, the audit and the recorder; ui/RelativeTime pairs "3d ago" with the exact minute on hover. local/date-format refuses toLocale*String and Intl date formatters elsewhere. - Units from Intl, short (formatUnit): runtimes, totals, the Scheduler countdown, the stats range, the player's tap skip. "2h 13m" was English in both languages. - src/i18n/copyRule.test.ts holds the machine-readable part (quotes, "...", ticks, bare unit letters).
This commit is contained in:
@@ -42,7 +42,7 @@
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Notifications",
|
||||
"sound": "Sound on alerts",
|
||||
"sound": "Sound on notifications",
|
||||
"soundHint": "Play a short tone when a notification needs your attention (e.g. errors, prompts).",
|
||||
"autoDismiss": "Auto-dismiss toasts",
|
||||
"autoDismissHint": "When off, pop-up toasts stay until you close them. When on, they fade after the set time; one with a button (Undo) stays at least 8 seconds.",
|
||||
@@ -65,7 +65,7 @@
|
||||
"writeEnableHint": "Lets Siftlode unsubscribe from channels on YouTube for you. Optional — skip it to stay read-only.",
|
||||
"granted": "Granted",
|
||||
"enable": "Enable",
|
||||
"enableHint": "Redirects to Google to grant the permission. Google shows an 'unverified app' notice — that's expected; click Advanced → Go to Siftlode.",
|
||||
"enableHint": "Redirects to Google to grant the permission. Google shows an “unverified app” notice — that's expected; click Advanced → Go to Siftlode.",
|
||||
"walkMeThrough": "Walk me through setup",
|
||||
"dangerZone": "Danger zone",
|
||||
"deleteHint": "Permanently delete your account and all your data — subscriptions, tags, watch history, playlists and settings. This can't be undone.",
|
||||
@@ -73,7 +73,7 @@
|
||||
"deleteTitle": "Delete your account?",
|
||||
"deleteConfirm": "This permanently erases your account and all your data (subscriptions, tags, watch/saved/hidden state, playlists, settings). It can't be undone.",
|
||||
"deleteConfirmButton": "Delete everything",
|
||||
"demoNotice": "This is the shared demo account. It has no YouTube connection — you can browse the whole shared library, filter and sort it, build playlists and try things out, but nothing touches a real YouTube account.",
|
||||
"demoNotice": "This is the shared demo account. It has no YouTube connection — you can browse the whole shared Library, filter and sort it, build playlists and try things out, but nothing touches a real YouTube account.",
|
||||
"signInMethods": "Sign-in methods",
|
||||
"googleLink": {
|
||||
"title": "Google account",
|
||||
@@ -81,13 +81,13 @@
|
||||
"connectedHint": "Your Google account is linked. You can sign in with Google and grant YouTube access below.",
|
||||
"connectHint": "Link a Google account to sign in with Google and to enable YouTube access for your Feed.",
|
||||
"connect": "Connect Google",
|
||||
"linked": "Google account linked.",
|
||||
"conflict": "That Google account is already linked to a different Siftlode account.",
|
||||
"linked": "Google account linked",
|
||||
"conflict": "That Google account is already linked to a different Siftlode account",
|
||||
"mismatch": "That's a different Google account than the one already linked here. Sign in with the linked one.",
|
||||
"error": "Couldn't link the Google account. Please try again.",
|
||||
"signedInAs": "Signed in with Google as"
|
||||
},
|
||||
"googleCancelled": "Google sign-in was cancelled.",
|
||||
"googleCancelled": "Google sign-in was cancelled",
|
||||
"password": {
|
||||
"title": "Password",
|
||||
"setHint": "A password is set. You can sign in with your email and password.",
|
||||
@@ -98,8 +98,8 @@
|
||||
"new": "New password (min. 10 characters)",
|
||||
"save": "Save password",
|
||||
"saving": "Saving…",
|
||||
"saved": "Password updated for {{email}}.",
|
||||
"failed": "Couldn't update the password."
|
||||
"saved": "Password updated for {{email}}",
|
||||
"failed": "Couldn't update the password"
|
||||
},
|
||||
"sessions": {
|
||||
"title": "Active sessions",
|
||||
@@ -107,7 +107,7 @@
|
||||
"action": "Log out other sessions",
|
||||
"confirmTitle": "Log out other sessions?",
|
||||
"confirmBody": "This signs you out of every other browser and device. You'll stay signed in here.",
|
||||
"done": "Signed out of all other sessions.",
|
||||
"done": "Signed out of all other sessions",
|
||||
"failed": "Couldn't sign out other sessions. Please try again."
|
||||
}
|
||||
},
|
||||
@@ -116,21 +116,21 @@
|
||||
"intro": "Some sites (e.g. a private Facebook group you belong to) only let logged-in members view a video. Paste your browser cookies for a site here and your downloads from it will use your login. Cookies are encrypted, kept private to your account, and only ever sent to the matching site.",
|
||||
"configured": "Set · updated {{when}}",
|
||||
"notSet": "Not set",
|
||||
"set": "Set cookies",
|
||||
"update": "Update",
|
||||
"remove": "Remove",
|
||||
"set": "Set cookies…",
|
||||
"update": "Update…",
|
||||
"remove": "Delete",
|
||||
"save": "Save",
|
||||
"cancel": "Cancel",
|
||||
"saving": "Saving…",
|
||||
"placeholder": "Paste the contents of your cookies.txt (Netscape format) here",
|
||||
"help": "Export a cookies.txt for this site with a browser extension, then paste it here. It's write-only — we never show it back.",
|
||||
"saved": "Cookies saved.",
|
||||
"removed": "Cookies removed.",
|
||||
"failed": "Couldn't save those cookies.",
|
||||
"removeConfirmTitle": "Remove cookies?",
|
||||
"saved": "Cookies saved",
|
||||
"removed": "Cookies deleted",
|
||||
"failed": "Couldn't save those cookies",
|
||||
"removeConfirmTitle": "Delete cookies?",
|
||||
"removeConfirmBody": "Downloads from this site will stop using your login.",
|
||||
"removeConfirmAction": "Remove",
|
||||
"loadError": "Couldn't load your download authentication settings."
|
||||
"removeConfirmAction": "Delete",
|
||||
"loadError": "Couldn't load your download authentication settings"
|
||||
},
|
||||
"demo": {
|
||||
"title": "Demo access",
|
||||
@@ -160,14 +160,14 @@
|
||||
"add": "Add",
|
||||
"decided": "{{count}} decided",
|
||||
"approved": "Approved {{email}} — they can sign in now",
|
||||
"approveFailed": "Approve failed",
|
||||
"denyFailed": "Deny failed",
|
||||
"approveFailed": "Couldn't approve the request",
|
||||
"denyFailed": "Couldn't deny the request",
|
||||
"addedToWhitelist": "{{email}} added to the whitelist",
|
||||
"inviteHint": "Send them an invitation. Adding an address never mails anyone — this does.",
|
||||
"invitedAt": "Invited {{time}}. Sending again will mail them a second time.",
|
||||
"inviteLabel": "Send an invitation to {{email}}",
|
||||
"invited": "Invitation sent to {{email}}.",
|
||||
"inviteFailed": "Couldn't send that invitation.",
|
||||
"invited": "Invitation sent to {{email}}",
|
||||
"inviteFailed": "Couldn't send that invitation",
|
||||
"inviteTitle": "Send invitation?",
|
||||
"inviteConfirm": "Email {{email}} to say their address is whitelisted and Siftlode is open for them.",
|
||||
"inviteConfirmAgain": "You already invited {{email}} on {{time}}. Sending now writes to them a second time.",
|
||||
@@ -188,11 +188,11 @@
|
||||
"deleteTitle": "Delete whitelist entry?",
|
||||
"deleteConfirm": "Forget {{email}}? Siftlode drops the record, so anyone at that address would have to ask again.",
|
||||
"deleteHasAccount": "Someone has registered on this address — manage it under Users & roles, where deleting the account removes this entry too.",
|
||||
"deleted": "Whitelist entry removed.",
|
||||
"deleteFailed": "Could not remove the entry.",
|
||||
"emailOff": "Email sending is not configured, so nobody gets a verification link and no request reaches you by email. Watch this list and your inbox instead, and fix it under Configuration → Email / SMTP.",
|
||||
"deletedStillAllowed": "Entry removed, but this address is still allow-listed by the server's configuration, so it keeps access. Remove it from ALLOWED_EMAILS / ADMIN_EMAILS to change that.",
|
||||
"deleteConfirmStillAllowed": "Forget {{email}}? Careful: this address is also allow-listed in the server's configuration (ALLOWED_EMAILS / ADMIN_EMAILS), so removing this row will NOT take its access away — and an ADMIN_EMAILS address is made an admin again on its next Google sign-in."
|
||||
"deleted": "Whitelist entry deleted",
|
||||
"deleteFailed": "Couldn't delete the entry",
|
||||
"emailOff": "Email sending is not configured, so nobody gets a verification link and no request reaches you by email. Watch this list and your Notifications instead, and fix it under Configuration → Email / SMTP.",
|
||||
"deletedStillAllowed": "Entry deleted, but this address is still allow-listed by the server's configuration, so it keeps access. Remove it from ALLOWED_EMAILS / ADMIN_EMAILS to change that.",
|
||||
"deleteConfirmStillAllowed": "Forget {{email}}? Careful: this address is also allow-listed in the server's configuration (ALLOWED_EMAILS / ADMIN_EMAILS), so deleting this row will NOT take its access away — and an ADMIN_EMAILS address is made an admin again on its next Google sign-in."
|
||||
},
|
||||
"diagnostics": {
|
||||
"title": "Logging level",
|
||||
@@ -215,15 +215,13 @@
|
||||
"server_one": "The Siftlode server receives this too and keeps it for {{count}} day, so the problem can be tracked down.",
|
||||
"server_other": "The Siftlode server receives this too and keeps it for {{count}} days, so the problem can be tracked down.",
|
||||
"never": "Passwords, tokens, email addresses and the content of your messages are never included.",
|
||||
"lapse": "After 24 hours it goes back to Basic by itself.",
|
||||
"lapse": "After 24 hours it goes back to “Basic” by itself.",
|
||||
"policy": "Privacy policy",
|
||||
"cancel": "Cancel",
|
||||
"confirm": "Turn on for 24 hours"
|
||||
},
|
||||
"status": "{{level}} logging · back to Basic in {{time}}",
|
||||
"hoursMinutes": "{{h}} h {{m}} min",
|
||||
"minutes": "{{m}} min",
|
||||
"revert": "Back to Basic now",
|
||||
"status": "{{level}} logging · back to “Basic” in {{time}}",
|
||||
"revert": "Back to “Basic” now",
|
||||
"demo": "The demo account is shared by several people, so detailed logging can't be turned on here.",
|
||||
"failed": "Couldn't change the logging level"
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user