{ "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", "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}" } }, "clients": { "clientNotFound": "Client not found" }, "actions": { "images": { "upload": "upload image" } } } }, "errors": { "apps": { "appWillNotBeLoaded": { "error": "The app will not be loaded", "help": "Check with the app creator, or read the app documentation for more details on app requirements" }, "noActivateMethodLoadingApp": { "error": "Error loading app named {name}; no activate() method defined." }, "mustProvideAppName": { "error": "Must provide an app name for api context" } }, "middleware": { "api": { "versionMismatch": "Client request for {clientVersion} does not match server version {serverVersion}." }, "auth": { "publicAPIDisabled": { "error": "Permission error! Public API is disabled.", "context": "Please enable the deprecated v0.1 Public API or switch to using the v2 Content API." }, "clientAuthenticationFailed": "Client Authentication Failed", "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", "invalidToken": "Invalid token", "invalidTokenWithMessage": "Invalid token: {message}", "incorrectAuthHeaderFormat": "Authorization header format is \"Authorization: Ghost [token]\"" }, "oauth": { "invalidClient": "Invalid client.", "invalidRefreshToken": "Invalid refresh token.", "refreshTokenExpired": "Refresh token expired." }, "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." }, "subscriber": { "notEnoughPermission": "You do not have permission to perform this action" }, "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.", "accountLocked": "Your account is locked. Please reset your password to log in again by clicking the \"Forgotten password?\" link!", "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" }, "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": { "invalidTokenStructure": "Invalid token structure", "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.", "notLoggedIn": "You are not logged in.", "notTheBlogOwner": "You are not the site owner.", "invalidTokenTypeHint": "Invalid token_type_hint given.", "invalidTokenProvided": "Invalid token provided", "tokenRevocationFailed": "Token revocation failed" }, "clients": { "clientNotFound": "Client not found." }, "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." }, "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", "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}'." }, "subscribers": { "missingFile": "Please select a csv.", "invalidFile": "Please select a valid CSV file to import.", "subscriberNotFound": "Subscriber not found.", "subscriberAlreadyExists": "Email address is already subscribed." }, "members": { "memberNotFound": "Member not found.", "memberAlreadyExists": "Email address is already member." }, "tags": { "tagNotFound": "Tag not found." }, "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." }, "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": { "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": { "webhookAlreadyExists": "Target URL has already been used for this event." }, "oembed": { "noUrlProvided": "No url provided.", "unknownProvider": "No provider found for supplied URL." }, "userMessages": { "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}.", "DisabledFeatureError": "Theme validation error, the {{{helperName}}} helper is not available. Cannot {action}.", "UpdateCollisionError": "Saving failed! Someone else is editing this post." } }, "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}." } }, "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}\\}\\}", "foreach": { "iteratorNeeded": "Need to pass an iterator to #foreach" }, "get": { "invalidResource": "Invalid resource given to get helper", "apiRequired": { "message": "The \\{\\{#get\\}\\} helper requires your theme to have API access.", "context": "Please enable the v2 API via your theme's package.json file." } }, "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" }, "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/api/handlebars-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" }, "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}", "ghostHasShutdown": "Ghost has shut down", "yourBlogIsNowOffline": "Your site is now offline", "ghostWasRunningFor": "Ghost was running for", "ghostIsClosingConnections": "Ghost is closing connections" }, "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." } } } } } }