mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-11 09:53:32 +03:00
6a057fad99
We want to allow admin users to trigger a retry of failed emails without having to go through the unpublish/republish dance. - fixed resource identifier in email permissions migration so email permissions are added correctly - added new email permissions migration so that beta releases can be upgraded without rollback (will be a no-op for any non-beta upgrades) - added `/emails/:id/retry/` canary Admin API endpoint - follows same URL pattern as theme activation - only triggers mega service retry endpoint if the email has a `'failed'` status
666 lines
35 KiB
JSON
666 lines
35 KiB
JSON
{
|
||
"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}"
|
||
}
|
||
},
|
||
"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": {
|
||
"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.",
|
||
"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"
|
||
},
|
||
"email": {
|
||
"emailNotFound": "Email not found.",
|
||
"retryNotAllowed": "Only failed emails can be retried"
|
||
},
|
||
"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"
|
||
},
|
||
"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}'."
|
||
},
|
||
"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}."
|
||
},
|
||
"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"
|
||
},
|
||
"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/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."
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|