Ghost/core/server/translations/en.json
Kevin Ansfield 3e228072ba
Added ability to install themes directly from GitHub (#12635)
refs https://github.com/TryGhost/Ghost/issues/12608

- adds `admin/canary/themes/install` endpoint to the Admin API
  - requires two query params. `source` must be set to "github". `ref` should refer to a GitHub repo in the format "{org}/{repo}"
  - downloads zip archive for the repo from github
  - runs downloaded zip through the same process as uploaded zips
2021-02-12 09:19:17 +00:00

734 lines
38 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"common": {
"mail": {
"title": "Ghost at {domain}"
},
"seeLinkForInstructions": "See {link} for instructions.",
"time": {
"seconds": "seconds"
},
"api": {
"authentication": {
"sampleBlogDescription": "Thoughts, stories and ideas.",
"mail": {
"resetPassword": "Reset Password",
"resetPasswordRequired": "Reset Password",
"checkEmailForInstructions": "Check your email for further instructions.",
"passwordChanged": "Password changed successfully.",
"invitationAccepted": "Invitation accepted.",
"yourNewGhostBlog": "Your New Ghost Site"
}
},
"mail": {
"testGhostEmail": "Test Ghost Email"
},
"users": {
"mail": {
"invitedByName": "{invitedByName} has invited you to join {blogName}"
}
},
"actions": {
"images": {
"upload": "upload image"
}
}
}
},
"errors": {
"middleware": {
"api": {
"versionMismatch": "Client request for {clientVersion} does not match server version {serverVersion}."
},
"auth": {
"clientCredentialsNotProvided": "Client credentials were not provided",
"clientCredentialsNotValid": "Client credentials were not valid",
"forInformationRead": "For information on how to fix this, please read {url}.",
"unknownOrigin": "Could not determine origin of request. Please ensure an Origin or Referrer header is present.",
"mismatchedOrigin": "Request made from incorrect origin. Expected '{expected}' received '{actual}'.",
"missingUserIDForSession": "Cannot create session without user id.",
"accessDenied": "Access denied.",
"pleaseSignIn": "Please Sign In",
"authorizationFailed": "Authorization failed",
"missingContentMemberOrIntegration": "Unable to determine the authenticated member or integration. Check the supplied Content API Key and ensure cookies are being passed through if member auth is failing.",
"missingAdminUserOrIntegration": "Unable to determine the authenticated user or integration. Check that cookies are being passed through if using session authentication.",
"adminApiKeyMissing": "Admin API Token missing kid header claim.",
"unknownAdminApiKey": "Unknown Admin API Key",
"unknownContentApiKey": "Unknown Content API Key",
"adminApiKidMissing": "Admin API kid missing.",
"invalidApiKeyType": "Invalid API Key type",
"invalidRequest": "Invalid Request",
"invalidToken": "Invalid token",
"invalidTokenWithMessage": "Invalid token: {message}",
"incorrectAuthHeaderFormat": "Authorization header format is \"Authorization: Ghost [token]\""
},
"privateblogging": {
"wrongPassword": "Wrong password"
},
"spamprevention": {
"tooManyAttempts": "Too many attempts.",
"noUsername": "No username.",
"noPassword": "No password entered",
"tooManySigninAttempts": {
"error": "Only {rateSigninAttempts} tries per IP address every {rateSigninPeriod} seconds.",
"context": "Too many login attempts."
},
"tryAgainLater": " Please try again later",
"waitOneHour": " Please wait 1 hour.",
"noEmail": "No email.",
"forgottenPasswordEmail": {
"error": "Only {rfa} forgotten password attempts per email every {rfp} seconds.",
"context": "Forgotten password reset attempt failed"
},
"forgottenPasswordIp": {
"error": "Only {rfa} tries per IP address every {rfp} seconds.",
"context": "Forgotten password reset attempt failed"
}
},
"themehandler": {
"missingTheme": "The currently active theme \"{theme}\" is missing.",
"invalidTheme": "The currently active theme \"{theme}\" is invalid.",
"themeHasErrors": "The currently active theme \"{theme}\" has errors, but will still work.",
"activateFailed": "Unable to activate the theme \"{theme}\"."
},
"redirects": {
"register": "Could not register custom redirects."
}
},
"utils": {
"parsepackagejson": {
"couldNotReadPackage": "Could not read package.json file",
"nameOrVersionMissing": "\"name\" or \"version\" is missing from theme package.json file.",
"willBeRequired": "This will be required in future. Please see {url}",
"themeFileIsMalformed": "Theme package.json file is malformed"
},
"blogIcon": {
"error": "Could not fetch icon dimensions."
},
"images": {
"invalidDimensions": "Could not fetch image dimensions."
},
"redirectsWrongFormat": "Incorrect redirects file format."
},
"config": {
"couldNotLocateConfigFile": {
"error": "Could not locate a configuration file.",
"help": "Please check your deployment for config.js or config.example.js."
},
"couldNotOpenForReading": {
"error": "Could not open {file} for read.",
"help": "Please check your deployment for config.js or config.example.js."
},
"couldNotOpenForWriting": {
"error": "Could not open {file} for write.",
"help": "Please check your deployment for config.js or config.example.js."
},
"invalidUrlInConfig": {
"error": "invalid site url",
"description": "Your site url in config.js is invalid.",
"help": "Please make sure this is a valid url before restarting"
},
"urlCannotContainGhostSubdir": {
"error": "ghost subdirectory not allowed",
"description": "Your site url in config.js cannot contain a subdirectory called ghost.",
"help": "Please rename the subdirectory before restarting"
},
"urlCannotContainPrivateSubdir": {
"error": "private subdirectory not allowed",
"description": "Your site url in config.js cannot contain a subdirectory called private.",
"help": "Please rename the subdirectory before restarting"
},
"dbConfigInvalid": {
"error": "invalid database configuration",
"description": "Your database configuration in config.js is invalid.",
"help": "Please make sure this is a valid Bookshelf database configuration"
},
"deprecatedProperty": {
"error": "The configuration property [{property}] has been deprecated.",
"explanation": "This will be removed in a future version, please update your config.js file.",
"help": "Please check {url} for the most up-to-date example."
},
"invalidServerValues": {
"error": "invalid server configuration",
"description": "Your server values (socket, or host and port) in config.js are invalid.",
"help": "Please provide them before restarting."
}
},
"general": {
"maintenance": "Site is currently undergoing maintenance, please wait a moment then retry.",
"maintenanceUrlService": "Site is starting up, please wait a moment then retry.",
"requiredOnFuture": "This will be required in future. Please see {link}",
"internalError": "Something went wrong.",
"jsonParse": "Could not parse JSON: {context}."
},
"httpServer": {
"addressInUse": {
"error": "(EADDRINUSE) Cannot start Ghost.",
"context": "Port {port} is already in use by another program.",
"help": "Is another Ghost instance already running?"
},
"otherError": {
"error": "(Code: {errorNumber})",
"context": "There was an error starting your server.",
"help": "Please use the error code above to search for a solution."
}
},
"mail": {
"incompleteMessageData": {
"error": "Incomplete message data."
},
"failedSendingEmail": {
"error": "Failed to send email."
},
"noMailServerAtAddress": {
"error": " No mail server found at {domain}."
},
"reason": " Reason: {reason}."
},
"models": {
"general": {
"sql": "Could not understand request."
},
"invite": {
"notEnoughPermission": "You do not have permission to perform this action"
},
"post": {
"postNotFound": "Post not found.",
"untitled": "(Untitled)",
"valueCannotBeBlank": "Value in {key} cannot be blank.",
"isAlreadyPublished": "Your post is already published, please reload your page.",
"expectedPublishedAtInFuture": "Date must be at least {cannotScheduleAPostBeforeInMinutes} minutes in the future.",
"noUserFound": "No user found",
"notEnoughPermission": "You do not have permission to perform this action",
"tagUpdates": {
"error": "Unable to save tags.",
"help": "Your post was saved, but your tags were not updated."
}
},
"role": {
"roleNotFound": "Role not found",
"notEnoughPermission": "You do not have permission to perform this action"
},
"settings": {
"valueCannotBeBlank": "Value in [settings.key] cannot be blank.",
"unableToFindSetting": "Unable to find setting to update: {key}",
"unableToFindDefaultSetting": "Unable to find default setting: {key}"
},
"user": {
"missingContext": "missing context",
"onlyOneRolePerUserSupported": "Only one role per user is supported at the moment.",
"methodDoesNotSupportOwnerRole": "This method does not support assigning the owner role",
"passwordDoesNotComplyLength": "Your password must be at least {minLength} characters long.",
"passwordDoesNotComplySecurity": "Sorry, you cannot use an insecure password.",
"notEnoughPermission": "You do not have permission to perform this action",
"noUserWithEnteredEmailAddr": "There is no user with that email address.",
"userIsInactive": "The user with that email address is inactive.",
"userUpdateError": {
"emailIsAlreadyInUse": "Email is already in use",
"context": "Error thrown from user update during login",
"help": "Visit and save your profile after logging in to check for problems."
},
"incorrectPassword": "Your password is incorrect.",
"accountSuspended": "Your account was suspended.",
"newPasswordsDoNotMatch": "Your new passwords do not match",
"passwordRequiredForOperation": "Password is required for this operation",
"expiredToken": "Expired token",
"tokenLocked": "Token locked",
"invalidToken": "Invalid token",
"userNotFound": "User not found",
"ownerNotFound": "Owner not found",
"onlyOwnerCanTransferOwnerRole": "Only owners are able to transfer the owner role.",
"onlyAdmCanBeAssignedOwnerRole": "Only administrators can be assigned the owner role.",
"onlyActiveAdmCanBeAssignedOwnerRole": "Only active administrators can be assigned the owner role."
},
"api_key": {
"apiKeyNotFound": "API Key not found"
},
"email": {
"emailNotFound": "Email not found.",
"retryNotAllowed": "Only failed emails can be retried"
},
"member": {
"memberAlreadyExists": {
"message": "Member already exists",
"context": "Attempting to {action} member with existing email address."
}
},
"member_stripe_customer": {
"customerAlreadyExists": {
"message": "Stripe customer already exists",
"context": "Attempting to add Stripe customer with existing Stripe customer id"
}
},
"stripe_customer_subscription": {
"subscriptionAlreadyExists": {
"message": "Stripe customer subscription already exists",
"context": "Attempting to add Stripe customer subscription with existing Stripe customer"
}
},
"base": {
"index": {
"missingContext": "missing context"
},
"token": {
"noUserFound": "No user found",
"tokenNotFound": "Token not found"
},
"invalidDate": "Date format for `{key}` is invalid."
},
"plugins": {
"filter": {
"errorParsing": "Error parsing filter",
"forInformationRead": "For more information on how to use filter, see {url}"
}
}
},
"permissions": {
"noActionsMapFound": {
"error": "No actions map found, ensure you have loaded permissions into database and then call permissions.init() before use."
},
"applyStatusRules": {
"error": "You do not have permission to retrieve {docName} with that status"
},
"noPermissionToAction": "You do not have permission to perform this action"
},
"updateCheck": {
"checkingForUpdatesFailed": {
"error": "Checking for updates failed, your site will continue to function.",
"help": "If you get this error repeatedly, please seek help from {url}."
},
"unableToDecodeUpdateResponse": {
"error": "Unable to decode update response"
}
},
"api": {
"common": {
"notImplemented": "The server does not support the functionality required to fulfill the request."
},
"authentication": {
"setupUnableToRun": "Database missing fixture data. Please reset database and try again.",
"setupMustBeCompleted": "Setup must be completed before making this request.",
"noEmailProvided": "No email provided.",
"noTokenProvided": "No token provided.",
"noPasswordProvided": "No password provided.",
"noNameProvided": "No name provided.",
"invalidEmailReceived": "The server did not receive a valid email",
"setupAlreadyCompleted": "Setup has already been completed.",
"unableToSendWelcomeEmail": "Unable to send welcome email, your site will continue to function.",
"checkEmailConfigInstructions": "Please see {url} for instructions on configuring email.",
"notTheBlogOwner": "You are not the site owner."
},
"passwordReset": {
"expired": {
"message": "Cannot reset password.",
"context": "Password reset link expired.",
"help": "Request a new password reset via the login form."
},
"invalidToken": {
"message": "Cannot reset password.",
"context": "Password reset link has already been used.",
"help": "Request a new password reset via the login form."
},
"corruptedToken": {
"message": "Cannot reset password.",
"context": "Invalid password reset link.",
"help": "Check if password reset link has been fully copied or request new password reset via the login form."
}
},
"configuration": {
"invalidKey": "Invalid key"
},
"db": {
"missingFile": "Please select a database file to import.",
"invalidFile": "Unsupported file. Please try any of the following formats: {extensions}",
"noPermissionToExportData": "You do not have permission to export data (no rights).",
"noPermissionToImportData": "You do not have permission to import data (no rights)."
},
"mail": {
"noPermissionToSendEmail": "You do not have permission to send mail.",
"cannotFindCurrentUser": "Could not find the current user"
},
"notifications": {
"noPermissionToBrowseNotif": "You do not have permission to browse notifications.",
"noPermissionToAddNotif": "You do not have permission to add notifications.",
"noPermissionToDestroyNotif": "You do not have permission to destroy notifications.",
"noPermissionToDismissNotif": "You do not have permission to dismiss this notification.",
"notificationDoesNotExist": "Notification does not exist."
},
"posts": {
"postNotFound": "Post not found."
},
"authors": {
"notFound": "Author not found."
},
"pages": {
"pageNotFound": "Page not found."
},
"job": {
"notFound": "Job not found.",
"publishInThePast": "Use the force flag to publish a post in the past."
},
"redirects": {
"missingFile": "Please select a JSON file.",
"invalidFile": "Please select a valid JSON file to import.",
"yamlParse": "YAML input cannot be a plain string. Check the format of your YAML file."
},
"resource": {
"resourceNotFound": "{resource} not found."
},
"routes": {
"missingFile": "Please select a YAML file.",
"invalidFile": "Please select a valid YAML file to import."
},
"settings": {
"problemFindingSetting": "Problem finding setting: {key}",
"accessCoreSettingFromExtReq": "Attempted to access core setting from external request",
"invalidEmailReceived": "Please send a valid email",
"activeThemeSetViaAPI": {
"error": "Attempted to change active_theme via settings API",
"help": "Please activate theme via the themes API endpoints instead"
},
"invalidJsonInLabs": "Error: Invalid JSON in settings.labs",
"labsColumnCouldNotBeParsed": "The column with key \"labs\" could not be parsed as JSON",
"tryUpdatingLabs": "Please try updating a setting on the labs page, or manually editing your DB",
"noPermissionToEditSettings": "You do not have permission to edit settings.",
"noPermissionToReadSettings": "You do not have permission to read settings."
},
"slugs": {
"couldNotGenerateSlug": "Could not generate slug.",
"unknownSlugType": "Unknown slug type '{type}'."
},
"members": {
"memberNotFound": "Member not found.",
"stripeNotConnected": {
"message": "Missing Stripe connection.",
"context": "Attempting to import members with Stripe data when there is no Stripe account connected.",
"help": "You need to connect to Stripe to import Stripe customers. "
},
"stripeCustomerNotFound": {
"context": "Missing Stripe customer.",
"help": "Make sure youre connected to the correct Stripe Account."
},
"duplicateStripeCustomerIds": {
"message": "Duplicate Stripe ID",
"context": "Attempting to import members with duplicate Stripe customer ids.",
"help": "Remove duplicate Stripe customer IDs from the CSV and re-run the import."
}
},
"tags": {
"tagNotFound": "Tag not found."
},
"labels": {
"labelNotFound": "Label not found.",
"labelAlreadyExists": "Label already exists"
},
"themes": {
"noPermissionToBrowseThemes": "You do not have permission to browse themes.",
"noPermissionToEditThemes": "You do not have permission to edit themes.",
"themeDoesNotExist": "Theme does not exist.",
"invalidTheme": "Theme is not compatible or contains errors.",
"invalidThemeName": "Please select a valid theme.",
"missingFile": "Please select a theme.",
"invalidFile": "Please select a valid zip file.",
"overrideCasper": "Please rename your zip, it's not allowed to override the default casper theme.",
"destroyCasper": "Deleting the default casper theme is not allowed.",
"destroyActive": "Deleting the active theme is not allowed.",
"repoDoesNotExist": "Supplied GitHub theme does not exist or is inaccessible"
},
"images": {
"missingFile": "Please select an image.",
"invalidFile": "Please select a valid image.",
"isNotSquare": "Please select a valid image file with square dimensions."
},
"icons": {
"missingFile": "Please select an icon.",
"invalidFile": "Icon must be a square .ico or .png file between 60px 1,000px, under 100kb.",
"couldNotGetSize": "Couldn/'t get icon dimensions"
},
"users": {
"userNotFound": "User not found.",
"cannotChangeOwnRole": "You cannot change your own role.",
"cannotChangeStatus": "You cannot change your own status.",
"cannotChangeOwnersRole": "Cannot change Owner's role",
"noPermissionToEditUser": "You do not have permission to edit this user",
"noPermissionToAddUser": "You do not have permission to add this user",
"noEmailProvided": "No email provided.",
"userAlreadyRegistered": "User is already registered.",
"noPermissionToDestroyUser": "You do not have permission to destroy this user.",
"noPermissionToChangeUsersPwd": "You do not have permission to change the password for this user"
},
"utils": {
"noPermissionToCall": "You do not have permission to {method} {docName}",
"noRootKeyProvided": "No root key ('{docName}') provided.",
"invalidStructure": "No valid object structure provided for: {key}",
"invalidIdProvided": "Invalid id provided."
},
"invites": {
"inviteEmailAlreadyExist": {
"message": "Could not create an account, email is already in use.",
"context": "Attempting to create an account with existing email address.",
"help": "Use different email address to register your account."
},
"inviteNotFound": "Invite not found.",
"inviteExpired": "Invite is expired.",
"emailIsRequired": "E-Mail is required.",
"roleIsRequired": "Role is required",
"roleNotFound": "Role not found",
"errorSendingEmail": {
"error": "Error sending email: {message}",
"help": "Please check your email settings and resend the invitation."
},
"notAllowedToInviteOwner": "Not allowed to invite an owner user.",
"notAllowedToInvite": "Not allowed to invite this role."
},
"webhooks": {
"noPermissionToEdit": {
"message": "You do not have permission to {method} this webhook.",
"context": "You may only {method} webhooks that belong to the authenticated integration. Check the supplied Admin API Key."
},
"noIntegrationIdProvided": {
"context": "You may only create webhooks with 'integration_id' when using session authentication."
},
"nonExistingIntegrationIdProvided": {
"context": "'integration_id' value does not match any existing integration.",
"help": "Provide the 'integration_id' of an existing integration."
},
"webhookAlreadyExists": "Target URL has already been used for this event."
},
"oembed": {
"noUrlProvided": "No url provided.",
"insufficientMetadata": "URL contains insufficient metadata.",
"unknownProvider": "No provider found for supplied URL."
},
"userMessages": {
"BookshelfRelationsError": "Database error, cannot {action}.",
"InternalServerError": "Internal server error, cannot {action}.",
"IncorrectUsageError": "Incorrect usage error, cannot {action}.",
"NotFoundError": "Resource not found error, cannot {action}.",
"BadRequestError": "Request not understood error, cannot {action}.",
"UnauthorizedError": "Authorisation error, cannot {action}.",
"NoPermissionError": "Permission error, cannot {action}.",
"ValidationError": "Validation error, cannot {action}.",
"UnsupportedMediaTypeError": "Unsupported media error, cannot {action}.",
"TooManyRequestsError": "Too many requests error, cannot {action}.",
"MaintenanceError": "Server down for maintenance, cannot {action}.",
"MethodNotAllowedError": "Method not allowed, cannot {action}.",
"RequestEntityTooLargeError": "Request too large, cannot {action}.",
"TokenRevocationError": "Token is not available, cannot {action}.",
"VersionMismatchError": "Version mismatch error, cannot {action}.",
"DataExportError": "Error exporting content.",
"DataImportError": "Duplicated entry, cannot save {action}.",
"DatabaseVersionError": "Database version compatibility error, cannot {action}.",
"EmailError": "Error sending email!",
"ThemeValidationError": "Theme validation error, cannot {action}.",
"HostLimitError": "Host Limit error, cannot {action}.",
"DisabledFeatureError": "Theme validation error, the {{{helperName}}} helper is not available. Cannot {action}.",
"UpdateCollisionError": "Saving failed! Someone else is editing this post."
},
"snippets": {
"snippetNotFound": "Snippet not found.",
"snippetAlreadyExists": "Snippet already exists"
}
},
"data": {
"export": {
"errorExportingData": "Error exporting data"
},
"import": {
"dataImporter": {
"unableToFindOwner": "Unable to find an owner"
},
"index": {
"duplicateEntryFound": "Duplicate entry found. Multiple values of '{value}' found for {offendingProperty}."
},
"utils": {
"dataLinkedToUnknownUser": "Attempting to import data linked to unknown user id {userToMap}"
}
},
"importer": {
"index": {
"couldNotCleanUpFile": {
"error": "Import could not clean up file ",
"context": "Your site will continue to work as expected"
},
"unsupportedRoonExport": "Your zip file looks like an old format Roon export, please re-export your Roon blog and try again.",
"noContentToImport": "Zip did not include any content to import.",
"invalidZipStructure": "Invalid zip file structure.",
"invalidZipFileBaseDirectory": "Invalid zip file: base directory read failed",
"zipContainsMultipleDataFormats": "Zip file contains multiple data formats. Please split up and import separately."
},
"handlers": {
"json": {
"invalidJsonFormat": "Invalid JSON format, expected `{ db: [exportedData] }`",
"apiDbImportContent": "API DB import content",
"checkImportJsonIsValid": "check that the import file is valid JSON.",
"failedToParseImportJson": "Failed to parse the import JSON file."
}
}
}
},
"services": {
"ping": {
"requestFailed": {
"error": "The {service} service was unable to send a ping request, your site will continue to function.",
"help": "If you get this error repeatedly, please seek help on {url}."
}
},
"settings": {
"yaml": {
"error": "Could not parse {file}: {context}.",
"help": "Check your {file} file for typos and fix the named issues.",
"validate": "The following definition \"{at}\" is invalid: {reason}"
},
"loader": "Error trying to load YAML setting for {setting} from '{path}'.",
"ensureSettings": "Error trying to access settings files in {path}."
},
"mega": {
"requestFailed": {
"error": "The email service was unable to send an email batch."
}
}
},
"errors": {
"noMessageSupplied": "no message supplied",
"error": "\nERROR:",
"warning": "\nWarning:",
"anErrorOccurred": "An error occurred",
"unknownErrorOccurred": "An unknown error occurred.",
"unknownError": "Unknown Error",
"unknownApiError": "Unknown API Error",
"databaseIsReadOnly": "Your database is in read only mode. Visitors can read your site, but you can't log in or add posts.",
"checkDatabase": "Check your database file and make sure that file owner and permissions are correct.",
"notEnoughPermission": "You do not have permission to perform this action",
"errorWhilstRenderingError": "Error whilst rendering error page",
"errorTemplateHasError": "Error template has an error",
"oopsErrorTemplateHasError": "Oops, seems there is an error in the error template.",
"encounteredError": "Encountered the error: ",
"whilstTryingToRender": "whilst trying to render an error page for the error: ",
"renderingErrorPage": "Rendering Error Page",
"caughtProcessingError": "Ghost caught a processing error in the middleware layer.",
"imageNotFound": "Image not found",
"imageNotFoundWithRef": "Image not found: {img}",
"cannotReadImage": "Could not read image: {img}",
"pageNotFound": "Page not found",
"resourceNotFound": "Resource not found"
}
},
"warnings": {
"index": {
"usingDirectMethodToSendEmail": "Ghost is attempting to use a direct method to send email. \nIt is recommended that you explicitly configure an email service.",
"unableToSendEmail": "Ghost is currently unable to send email."
},
"helpers": {
"helperNotAvailable": "The \\{\\{{helperName}\\}\\} helper is not available.",
"flagMustBeEnabled": "The {flagName} flag must be enabled in labs if you wish to use the \\{\\{{helperName}\\}\\} helper.",
"seeLink": "See {url}",
"mustBeCalledAsBlock": "The \\{\\{{helperName}\\}\\} helper must be called as a block. E.g. \\{\\{#{helperName}\\}\\} \\{\\{/{helperName}\\}\\}",
"asset": {
"pathIsRequired": "The \\{\\{asset\\}\\} helper must be passed a path"
},
"cancel_link": {
"invalidData": "The \\{\\{cancel_link\\}\\} helper was used outside of a subscription context. See https://ghost.org/docs/themes/members/#cancel-links."
},
"foreach": {
"iteratorNeeded": "Need to pass an iterator to #foreach"
},
"get": {
"invalidResource": "Invalid resource given to get helper"
},
"has": {
"invalidAttribute": "Invalid or no attribute given to has helper"
},
"index": {
"missingHelper": "Missing helper: '{arg}'"
},
"is": {
"invalidAttribute": "Invalid or no attribute given to is helper"
},
"link": {
"hrefIsRequired": "The \\{\\{#link\\}\\}\\{\\{/link\\}\\} helper requires an href=\"\" attribute."
},
"link_class": {
"forIsRequired": "The \\{\\{link_class\\}\\} helper requires a for=\"\" attribute."
},
"navigation": {
"invalidData": "navigation data is not an object or is a function",
"valuesMustBeDefined": "All values must be defined for label, url and current",
"valuesMustBeString": "Invalid value, Url and Label must be strings"
},
"page_url": {
"isDeprecated": "Warning: pageUrl is deprecated, please use page_url instead\nThe helper pageUrl has been replaced with page_url in Ghost 0.4.2, and will be removed entirely in Ghost 0.6\nIn your theme's pagination.hbs file, pageUrl should be renamed to page_url"
},
"pagination": {
"invalidData": "The \\{\\{pagination\\}\\} helper was used outside of a paginated context. See https://ghost.org/docs/themes/helpers/pagination/.",
"valuesMustBeDefined": "All values must be defined for page, pages, limit and total",
"nextPrevValuesMustBeNumeric": "Invalid value, Next/Prev must be a number",
"valuesMustBeNumeric": "Invalid value, check page, pages, limit and total are numbers"
},
"plural": {
"valuesMustBeDefined": "All values must be defined for empty, singular and plural"
},
"price": {
"attrIsRequired": "Attribute is required e.g. \\{\\{price plan.amount\\}\\}",
"attrMustBeNumeric": "Attribute value should be a number"
},
"img_url": {
"attrIsRequired": "Attribute is required e.g. \\{\\{img_url feature_image\\}\\}",
"attrIsUnknown": "Attribute passed to \\{\\{img_url\\}\\} is unknown"
},
"template": {
"templateNotFound": "Template {name} not found."
}
}
},
"notices": {
"index": {
"welcomeToGhost": "Welcome to Ghost."
},
"httpServer": {
"cantTouchThis": "Can't touch this",
"ghostIsRunning": "Ghost is running...",
"yourBlogIsAvailableOn": "Your site is now available on {url}",
"ctrlCToShutDown": "Ctrl+C to shut down",
"ghostIsRunningIn": "Ghost is running in {env}...",
"listeningOn": "Listening on: {host}:{port}",
"urlConfiguredAs": "Url configured as: {url}",
"ghostIsShuttingDown": "Ghost is shutting down",
"ghostHasShutdown": "Ghost has shut down",
"yourBlogIsNowOffline": "Your site is now offline",
"ghostWasRunningFor": "Ghost was running for"
},
"mail": {
"messageSent": "Message sent. Double check inbox and spam folder!"
},
"api": {
"users": {
"pwdChangedSuccessfully": "Password changed successfully."
}
},
"data": {
"fixtures": {
"jQueryRemoved": "jQuery has been removed from Ghost core and is now being loaded from the jQuery Foundation's CDN."
},
"utils": {
"index": {
"noSupportForDatabase": "No support for database client {client}"
}
},
"validation": {
"index": {
"valueCannotBeBlank": "Value in [{tableName}.{columnKey}] cannot be blank.",
"valueMustBeBoolean": "Value in [{tableName}.{columnKey}] must be one of true, false, 0 or 1.",
"valueExceedsMaxLength": "Value in [{tableName}.{columnKey}] exceeds maximum length of {maxlength} characters.",
"valueIsNotInteger": "Value in [{tableName}.{columnKey}] is not an integer.",
"themeCannotBeActivated": "{themeName} cannot be activated because it is not currently installed.",
"validationFailed": "Validation ({validationName}) failed for {key}",
"schemaValidationFailed": "Validation failed for '{key}'.",
"validationFailedTypes": {
"isLength": "Value in [{tableName}.{key}] exceeds maximum length of {max} characters."
}
}
}
}
}
}