Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions ghost/i18n/generate-context.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,13 @@ const CONTEXT_FILE = './locales/context.json';
process.exit(1);
}

const emptyKeys = Object.entries(orderedContext).filter(([, value]) => value === '').map(([key]) => key);
if (process.env.CI && emptyKeys.length > 0) {
const keyList = emptyKeys.map(k => ' - "' + k + '"').join('\n');
// eslint-disable-next-line no-console
console.error('context.json has ' + emptyKeys.length + ' key(s) with empty descriptions. Every translation key must have a context description for translators:\n' + keyList);
process.exit(1);
}

await fs.writeFile(CONTEXT_FILE, newContent);
})();
66 changes: 33 additions & 33 deletions ghost/i18n/locales/context.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
"(save {highestYearlyDiscount}%)": "Appears in portal next to the yearly plan selector",
"+1 (123) 456-7890": "Placeholder for phone number input field",
"1 comment": "Comment count displayed above the comments section in case there is only one",
"1 month": "",
"1 month free": "",
"1 month": "Duration label used in Portal offer descriptions for single-month free trials",
"1 month free": "Retention offer label in Portal for a single free month trial when a member tries to cancel",
"Access your RSS feeds": "Default description text for the Transistor podcast integration in Portal",
"Account": "A label in Portal for your account area",
"Account details updated successfully": "Popover message in Portal",
Expand All @@ -26,7 +26,7 @@
"Become a member of {publication} to start commenting.": "Call to action in the comments app",
"Become a paid member of {publication} to start commenting.": "Call to action in the comments app",
"Become a paid member of {site} to get access to all premium content.": "Call to action for paid content",
"Before you go": "",
"Before you go": "Heading for the retention offer modal shown in Portal when a member tries to cancel their subscription",
"Best": "Text appears in the sorting selector for comments",
"Billing info & receipts": "Title in Portal for the section which links to Stripe's billing portal",
"Black Friday": "An example offer name",
Expand All @@ -47,10 +47,10 @@
"Choose your newsletters": "A title for a screen where members can choose which email newsletters to receive",
"Click here to retry": "A link to retry the login process",
"Close": "A button to close or dismiss portal and other UI components",
"Code": "",
"Code": "Aria-label for the verification code input field on the Portal magic link page",
"Comment": "Button text to post your comment, on smaller devices",
"Comment preferences updated.": "Shown when a user changes preferences in Portal",
"Commenting disabled": "",
"Commenting disabled": "Heading shown in the comments UI when a member's commenting privileges have been disabled",
"Comments": "A title for the comments section on a post",
"Complete signup for {siteTitle}!": "Magic link email",
"Complete your profile": "Title of the modal to edit your expertise in the comments app",
Expand All @@ -67,7 +67,7 @@
"Contact support": "Button to send an email to support",
"Continue": "Continue button",
"Continue subscription": "Button to continue a (cancelled) paid subscription",
"Could not create Stripe billing portal session": "",
"Could not create Stripe billing portal session": "Error message when the Stripe billing portal session fails to initialize",
"Could not create Stripe checkout session": "An error message indicating a problem with Stripe",
"Could not sign in. Login link expired.": "Message when a login link has expired",
"Could not update email! Invalid link.": "Message when an email update link is invalid",
Expand All @@ -93,11 +93,11 @@
"Emails": "A label for a list of emails",
"Emails disabled": "Title for a message in portal telling members that they are not receiving emails, due to repeated delivery failures to their address",
"Ends {offerEndDate}": "Portal - label for an offer that ends on a specific date",
"Enjoy a free month on us.": "",
"Enjoy a free month on us. You won't be charged until {newBillingDate}.": "",
"Enjoy {amountOff} off forever.": "",
"Enjoy {months} free months on us.": "",
"Enjoy {months} free months on us. You won't be charged until {newBillingDate}.": "",
"Enjoy a free month on us.": "Retention offer message in Portal for a single free month when the next billing date is unknown",
"Enjoy a free month on us. You won't be charged until {newBillingDate}.": "Retention offer message in Portal for a single free month. {newBillingDate} is the date the member will next be charged",
"Enjoy {amountOff} off forever.": "Retention offer message in Portal for a perpetual discount. {amountOff} is the discount amount",
"Enjoy {months} free months on us.": "Retention offer message in Portal for multiple free months when the next billing date is unknown",
"Enjoy {months} free months on us. You won't be charged until {newBillingDate}.": "Retention offer message in Portal for multiple free months. {newBillingDate} is the date the member will next be charged",
"Enter code above": "Portal - error message when OTC code isn't filled in",
"Enter your email address": "Error message when an email address is missing",
"Enter your name": "Placeholder input when editing your name in the comments app in the expertise dialog",
Expand All @@ -107,17 +107,17 @@
"Failed to cancel subscription, please try again": "error message",
"Failed to log in, please try again": "error message",
"Failed to log out, please try again": "error message",
"Failed to open billing portal, please try again": "",
"Failed to open billing portal, please try again": "Error notification in Portal when the Stripe billing portal fails to open",
"Failed to process checkout, please try again": "error message",
"Failed to send magic link email": "error message",
"Failed to send verification email": "error message",
"Failed to sign up, please try again": "error message",
"Failed to update account data": "error message",
"Failed to update account details": "error message",
"Failed to update billing information, please try again": "",
"Failed to update billing information, please try again": "Error notification in Portal when billing information update fails",
"Failed to update newsletter settings": "error message",
"Failed to update subscription, please try again": "error message",
"Failed to verify code, please try again": "",
"Failed to verify code, please try again": "Error message in Portal when OTC verification code validation fails",
"For security verification, enter the code below to sign in to {siteTitle}:": "Device verification email",
"For your security, the link will expire in 24 hours time.": "Descriptive text in emails about authentication links",
"Forever": "Label for a discounted price which has no expiry date",
Expand Down Expand Up @@ -152,7 +152,7 @@
"In the event a permanent failure is received when attempting to send a newsletter, emails will be disabled on the account.": "Paragraph in the email suppression FAQ",
"In your email client add {senderEmail} to your contacts list. This signals to your mail provider that emails sent from this address should be trusted.": "Email receiving FAQ",
"Invalid email address": "Error message when a provided email address is invalid",
"Invalid verification code": "",
"Invalid verification code": "Error message in Portal when an incorrect OTC verification code is entered",
"Jamie Larson": "An unisex name of a person we use in examples",
"Join the discussion": "Placeholder value of the comments input box",
"Just now": "Time indication when a comment has been posted 'just now'",
Expand Down Expand Up @@ -180,7 +180,7 @@
"Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "A paragraph in the email suppression FAQ",
"No matches found": "Shown in search when 0 results",
"No member exists with this e-mail address.": "Shown when trying to sign in.",
"No thanks, I want to cancel": "",
"No thanks, I want to cancel": "Button in the Portal retention offer modal to decline the offer and proceed with subscription cancellation",
"Not receiving emails?": "A link in portal to take members to an FAQ area about what to do if you're not receiving emails",
"Now check your email!": "A confirmation message after logging in or signing up",
"Oldest": "Text appears in the sorting selector for comments",
Expand All @@ -198,8 +198,8 @@
"Open Yahoo Mail": "Shown on signup and signin if your email is detected as Yahoo Mail",
"Open email": "Shown on signup and signin if your email is detected, but we don't know which provider",
"Open iCloud Mail": "Shown on signup and signin if your email is detected as iCloud Mail",
"Or use this link to securely sign in": "",
"Or, skip the code and sign in directly": "",
"Or use this link to securely sign in": "Text in plain-text signin emails, shown before the magic link URL as an alternative to the OTC code",
"Or, skip the code and sign in directly": "Text in HTML signin emails between the OTC code and the direct signin button",
"Permanent failure (bounce)": "A section title in the email suppression FAQ",
"Phone number": "Label for phone number input",
"Plan": "Label for the default subscription plan",
Expand All @@ -226,8 +226,8 @@
"Resume subscription": "Button in the canceled subscription banner on the Portal account page to resume a canceled subscription",
"Retry": "When something goes wrong, this link allows people to re-attempt the same action",
"Save": "A button to save",
"Save {amountOff} on your next billing cycle. Then {currency}{originalPrice}/{cadence}.": "",
"Save {amountOff} on your next {durationInMonths} billing cycles. Then {currency}{originalPrice}/{cadence}.": "",
"Save {amountOff} on your next billing cycle. Then {currency}{originalPrice}/{cadence}.": "Retention offer in Portal for a single-cycle discount. Shows the discount and the regular price that follows",
"Save {amountOff} on your next {durationInMonths} billing cycles. Then {currency}{originalPrice}/{cadence}.": "Retention offer in Portal for a multi-cycle discount. Shows the discount, duration, and the regular price that follows",
"Search posts, tags and authors": "Search placeholder text",
"Secure sign in link for {siteTitle}": "Magic link email",
"See you soon!": "A sign-off/ending to a signup email",
Expand All @@ -245,9 +245,9 @@
"Show more results": "Link shown if there are additional search results available",
"Show {amount} more replies": "Button text to load more replies in the comments app",
"Sign in": "A button to sign in",
"Sign in now": "",
"Sign in now": "Button text in signin email for the direct magic link signin button",
"Sign in to {siteTitle}": "Magic link email",
"Sign in to {siteTitle} with code {otc}": "",
"Sign in to {siteTitle} with code {otc}": "Subject line for signin emails that include an OTC verification code",
"Sign in verification": "Magic link email",
"Sign out": "A button to sign out",
"Sign up": "A button to sign up",
Expand Down Expand Up @@ -299,7 +299,7 @@
"This email address will not be used.": "This is in the footer of signup verification emails, and comes right after 'If you did not make this request, you can simply delete this message.'",
"This message was sent from {siteDomain} to {email}.": "Text in the footer of emails, e.g. reply to comments notifications",
"This site is invite-only, contact the owner for access.": "A message on the member login screen indicating that a site is not-open to public signups",
"This site is not accepting donations at the moment.": "",
"This site is not accepting donations at the moment.": "Error message shown on the Portal support/donations page when donations are disabled",
"This site is not accepting payments at the moment.": "An error message shown when a tips or donations link is opened but the site has donations disabled",
"This site only accepts paid members.": "error message for sign-up",
"To complete signup, click the confirmation link in your inbox. If it doesn't arrive within 3 minutes, check your spam folder!": "A confirmation message displayed during the signup process, indicating that the person signing up needs to go and check their email - and reminding them to check their spam folder, too",
Expand Down Expand Up @@ -327,17 +327,17 @@
"Upgrade to continue reading.": "Appears in the call to action",
"Verification link sent, check your inbox": "Instruction to check email for recommendation verification",
"Verify your email address is correct": "A section title in the email receiving FAQ",
"Verifying...": "",
"Verifying...": "Loading text on the Portal magic link page while a verification code is being validated",
"View comments": "Link text in comment email to view the comments",
"View in admin": "",
"View in admin": "Context menu item in the comments UI that opens a comment in the Ghost admin panel",
"View in browser": "Link in the newsletter header taking the user to the website",
"View plans": "A button to view available plans",
"We couldn't unsubscribe you as the email address was not found. Please contact the site owner.": "An error message when an unsubscribe link is clicked, but we don't have any record of the address being unsubscribed. Probably because the email address on the account has been changed.",
"We'd hate to see you leave. How about a special offer to stay?": "",
"We'd hate to see you leave. How about a special offer to stay?": "Default description text in the Portal retention offer modal shown when a member tries to cancel",
"Welcome back to {siteTitle}!": "Popup when a member logs in",
"Welcome back to {siteTitle}! Your verification code is {otc}.": "",
"Welcome back to {siteTitle}! Your verification code is {otc}.": "Email preheader text in signin emails that include an OTC verification code",
"Welcome back!": "A message when a user has logged in successfully",
"Welcome back! Here's your code to sign in to {siteTitle}": "",
"Welcome back! Here's your code to sign in to {siteTitle}": "Heading in signin emails displayed above the OTC verification code",
"Welcome back! Use this link to securely sign in to your {siteTitle} account:": "Magic link email",
"Welcome back, {name}!": "Popup when a member logs in",
"Welcome to {siteTitle}": "Shown in recommendations section of Portal",
Expand All @@ -350,7 +350,7 @@
"You are receiving this because you are a <strong>%%{status}%% subscriber</strong> to {site}.": "Shown at the bottom of the newsletter. Status will be one of free/paid/trialing/complimentary - see those strings below.",
"You can also copy & paste this URL into your browser:": "Descriptive text displayed underneath the buttons in login/signup emails, right before authentication URLs which can be copy/pasted",
"You can unsubscribe from these notifications at {profileUrl}.": "Footer text in comments email to manage notification preferences for users",
"You can't post comments in this publication.": "",
"You can't post comments in this publication.": "Message in the comments UI when a member's commenting privileges have been disabled and no support email is configured",
"You currently have a free membership, upgrade to a paid subscription for full access.": "A message indicating that the member is using a free subcription, and could access more content with a paid subscription",
"You have been successfully resubscribed": "A confirmation message when a member has had emails turned off, but they have been successfully turned back on",
"You just tried to access your account from a new device.": "Device verification (forthcoming)",
Expand Down Expand Up @@ -380,15 +380,15 @@
"Your verification code for {siteTitle}": "Device verification email",
"complimentary": "Will be substituted into status for 'You are receiving this because you are a <strong>%%{status}%% subscriber</strong> to {site}.'",
"edited": "label for an edited comment",
"for more information.": "",
"for more information.": "Fragment following the 'Contact support' link in comments UI when commenting is disabled. Note: this is a sentence fragment and should be merged into a single key in a future update",
"free": "Will be substituted into status for 'You are receiving this because you are a <strong>%%{status}%% subscriber</strong> to {site}.'",
"jamie@example.com": "Placeholder for email input field",
"month": "the subscription interval (monthly), following the /",
"paid": "Will be substituted into status for 'You are receiving this because you are a <strong>%%{status}%% subscriber</strong> to {site}.'",
"removed": "label for removed comment",
"trialing": "Will be substituted into status for 'You are receiving this because you are a <strong>%%{status}%% subscriber</strong> to {site}.'",
"year": "the subscription interval (monthly), following the /",
"your inbox": "",
"your inbox": "Fallback text shown on the Portal magic link page when the member's email address is not available, e.g. 'Check your inbox'",
"{amount} characters left": "shown in comments editor",
"{amount} comments": "shown in the comments app",
"{amount} days free": "Portal - label for a free trial that lasts a specific number of days",
Expand All @@ -404,7 +404,7 @@
"{memberEmail} will no longer receive emails when someone replies to your comments.": "Shown when a member unsubscribes from comment replies",
"{memberEmail} will no longer receive this newsletter.": "Shown when a member unsubscribes from a newsletter",
"{memberEmail} will no longer receive {newsletterName} newsletter.": "Shown when a member unsubscribes from a newsletter",
"{months} months": "",
"{months} months free": "",
"{months} months": "Duration label used in Portal offer descriptions for multi-month free trials",
"{months} months free": "Retention offer label in Portal for multiple free months when a member tries to cancel",
"{trialDays} days free": "Portal - label for a free trial that lasts a specific number of days"
}
Loading