diff --git a/common/locales/en/api-v3.json b/common/locales/en/api-v3.json
deleted file mode 100644
index 24760767f6..0000000000
--- a/common/locales/en/api-v3.json
+++ /dev/null
@@ -1,178 +0,0 @@
-{
- "missingAuthHeaders": "Missing authentication headers.",
- "missingAuthParams": "Missing authentication parameters.",
- "missingUsernameEmail": "Missing username or email.",
- "missingEmail": "Missing email.",
- "missingUsername": "Missing username.",
- "missingPassword": "Missing password.",
- "missingNewPassword": "Missing newPassword.",
- "wrongPassword": "Wrong password.",
- "notAnEmail": "Invalid email address.",
- "emailTaken": "Email already taken.",
- "newEmailRequired": "The newEmail body parameter is required.",
- "usernameTaken": "Username already taken.",
- "passwordConfirmationMatch": "Password confirmation doesn't match password.",
- "invalidLoginCredentials": "Incorrect username / email and / or password.",
- "passwordReset": "If we have your email on file, your password reset link has been sent to your email.",
- "passwordResetEmailSubject": "Password Reset for Habitica",
- "passwordResetEmailText": "Password for <%= username %> has been reset to <%= newPassword %> . Important! Both username and password are case-sensitive -- you must enter both exactly as shown here. We recommend copying and pasting both instead of typing them. Log in at <%= baseUrl %>. After you have logged in, head to <%= baseUrl %>/#/options/settings/settings and change your password.",
- "passwordResetEmailHtml": "Password for <%= username %> has been reset to <%= newPassword %>.
Important! Both username and password are case-sensitive -- you must enter both exactly as shown here. We recommend copying and pasting both instead of typing them.
Log in at <%= baseUrl %>. After you have logged in, head to <%= baseUrl %>/#/options/settings/settings and change your password.",
- "invalidLoginCredentialsLong": "Uh-oh - your username or password is incorrect.\n- Make sure your username or email is typed correctly.\n- You may have signed up with Facebook, not email. Double-check by trying Facebook login.\n- If you forgot your password, click \"Forgot Password\".",
- "invalidCredentials": "User not found with given auth credentials.",
- "accountSuspended": "Account has been suspended, please contact leslie@habitica.com with your UUID \"<%= userId %>\" for assistance.",
- "onlyFbSupported": "Only Facebook supported currently.",
- "cantDetachFb": "Account lacks another authentication method, can't detach Facebook.",
- "onlySocialAttachLocal": "Local auth can only be added to a social account.",
- "invalidReqParams": "Invalid request parameters.",
- "memberIdRequired": "\"member\" must be a valid UUID.",
- "heroIdRequired": "\"heroId\" must be a valid UUID.",
- "taskIdRequired": "\"taskId\" must be a valid UUID.",
- "taskNotFound": "Task not found.",
- "invalidTaskType": "Task type must be one of \"habit\", \"daily\", \"todo\", \"reward\".",
- "cantDeleteChallengeTasks": "A task belonging to a challenge can't be deleted.",
- "checklistOnlyDailyTodo": "Checklists are supported only on dailies and todos",
- "checklistItemNotFound": "No checklist item was found with given id.",
- "itemIdRequired": "\"itemId\" must be a valid UUID.",
- "tagNotFound": "No tag item was found with given id.",
- "tagIdRequired": "\"tagId\" must be a valid UUID corresponding to a tag belonging to the user.",
- "positionRequired": "\"position\" is required and must be a number.",
- "cantMoveCompletedTodo": "Can't move a completed todo.",
- "directionUpDown": "\"direction\" is required and must be 'up' or 'down'",
- "alreadyTagged": "The task is already tagged with given tag.",
- "groupIdRequired": "\"groupId\" must be a valid UUID",
- "groupNotFound": "Group not found.",
- "groupTypesRequired": "You must supply a valid \"type\" query string.",
- "questLeaderCannotLeaveGroup": "You cannot leave your party when you have started a quest. Abort the quest first.",
- "cannotLeaveWhileActiveQuest": "You cannot leave party during an active quest. Please leave the quest first.",
- "onlyLeaderCanRemoveMember": "Only group leader can remove a member!",
- "memberCannotRemoveYourself": "You cannot remove yourself!",
- "groupMemberNotFound": "User not found among group's members",
- "challengeMemberNotFound": "User not found among challenge's members",
- "mustBeGroupMember": "Must be member of the group.",
- "keepOrRemoveAll": "req.query.keep must be either \"keep-all\" or \"remove-all\"",
- "keepOrRemove": "req.query.keep must be either \"keep\" or \"remove\"",
- "canOnlyInviteEmailUuid": "Can only invite using uuids or emails.",
- "inviteMissingEmail": "Missing email address in invite.",
- "onlyGroupLeaderChal": "Only the group leader can create challenges",
- "tavChalsMinPrize": "Prize must be at least 1 Gem for Tavern challenges.",
- "cantAfford": "You can't afford this prize. Purchase more gems or lower the prize amount.",
- "challengeIdRequired": "\"challengeId\" must be a valid UUID.",
- "winnerIdRequired": "\"winnerId\" must be a valid UUID.",
- "challengeNotFound": "Challenge not found.",
- "onlyLeaderDeleteChal": "Only the challenge leader can delete it.",
- "onlyLeaderUpdateChal": "Only the challenge leader can update it.",
- "winnerNotFound": "Winner with id \"<%= userId %>\" not found or not part of the challenge.",
- "noCompletedTodosChallenge": "\"includeComepletedTodos\" is not supported when fetching a challenge tasks.",
- "userTasksNoChallengeId": "When \"tasksOwner\" is \"user\" \"challengeId\" can't be passed.",
- "onlyChalLeaderEditTasks": "Tasks belonging to a challenge can only be edited by the leader.",
- "userAlreadyInChallenge": "User is already participating in this challenge.",
- "invalidTasksOwner": "\"tasksOwner\" must be \"user\" or \"challenge\".",
- "partyMustbePrivate": "Parties must be private",
- "userAlreadyInGroup": "User already in that group.",
- "userAlreadyInvitedToGroup": "User already invited to that group.",
- "userAlreadyPendingInvitation": "User already pending invitation.",
- "userAlreadyInAParty": "User already in a party.",
- "userWithIDNotFound": "User with id \"<%= userId %>\" not found.",
- "userHasNoLocalRegistration": "User does not have a local registration (username, email, password).",
- "uuidsMustBeAnArray": "UUIDs invites must be a an Array.",
- "emailsMustBeAnArray": "Email invites must be a an Array.",
- "canOnlyInviteMaxInvites": "You can only invite \"<%= maxInvites %>\" at a time",
- "cantOnlyUnlinkChalTask": "Only broken challenges tasks can be unlinked.",
- "onlyCreatorOrAdminCanDeleteChat": "Not authorized to delete this message!",
- "questInviteNotFound": "No quest invitation found.",
- "guildQuestsNotSupported": "Guilds cannot be invited on quests.",
- "questNotFound": "Quest \"<%= key %>\" not found.",
- "questNotOwned": "You don't own that quest scroll.",
- "questNotGoldPurchasable": "Quest \"<%= key %>\" is not a Gold-purchasable quest.",
- "questLevelTooHigh": "You must be level <%= level %> to begin this quest.",
- "questAlreadyUnderway": "Your party is already on a quest. Try again when the current quest has ended.",
- "questAlreadyAccepted": "You already accepted the quest invitation.",
- "noActiveQuestToLeave": "No active quest to leave",
- "questLeaderCannotLeaveQuest": "Quest leader cannot leave quest",
- "notPartOfQuest": "You are not part of the quest",
- "noActiveQuestToAbort": "There is no active quest to abort.",
- "onlyLeaderAbortQuest": "Only the group or quest leader can abort a quest.",
- "questAlreadyRejected": "You already rejected the quest invitation.",
- "cantCancelActiveQuest": "You can not cancel an active quest, use the abort functionality.",
- "onlyLeaderCancelQuest": "Only the group or quest leader can cancel the quest.",
- "questInvitationDoesNotExist": "No quest invitation has been sent out yet.",
- "questNotPending": "There is no quest to start.",
- "questOrGroupLeaderOnlyStartQuest": "Only the quest leader or group leader can force start the quest",
- "noAdminAccess": "You don't have admin access.",
- "pageMustBeNumber": "req.query.page must be a number",
- "missingUnsubscriptionCode": "Missing unsubscription code.",
- "missingSubscription": "User does not have a plan subscription",
- "missingSubscriptionCode": "Missing subscription code. Possible values: basic_earned, basic_3mo, basic_6mo, google_6mo, basic_12mo.",
- "userNotFound": "User not found.",
- "spellNotFound": "Spell \"<%= spellId %>\" not found.",
- "partyNotFound": "Party not found",
- "targetIdUUID": "\"targetId\" must be a valid UUID.",
- "invalidUUID": "UUID must be valid",
- "challengeTasksNoCast": "Casting a spell on challenge tasks is not supported.",
- "spellNotOwned": "You don't own this spell.",
- "spellLevelTooHigh": "You must be level <%= level %> to use this spell.",
- "invalidAttribute": "\"<%= attr %>\" is not a valid attribute.",
- "notEnoughAttrPoints": "You don't have enough attribute points.",
- "missingKeyParam": "\"req.params.key\" is required.",
- "mysterySetNotFound": "Mystery set not found, or set already owned.",
- "itemNotFound": "Item \"<%= key %>\" not found.",
- "cannotBuyItem": "You can't buy this item.",
- "missingTypeKeyEquip": "\"key\" and \"type\" are required parameters.",
- "missingPetFoodFeed": "\"pet\" and \"food\" are required parameters.",
- "invalidPetName": "Invalid pet name supplied.",
- "missingEggHatchingPotionHatch": "\"egg\" and \"hatchingPotion\" are required parameters.",
- "invalidTypeEquip": "\"type\" must be one of 'equipped', 'pet', 'mount', 'costume'.",
- "cannotDeleteActiveAccount": "You have an active subscription, cancel your plan before deleting your account.",
- "messageRequired": "A message is required.",
- "toUserIDRequired": "A User ID is required",
- "gemAmountRequired": "A number of gems is required",
- "notAuthorizedToSendMessageToThisUser": "Can't send message to this user.",
- "privateMessageGiftIntro": "Hello <%= receiverName %>, <%= senderName %> has sent you ",
- "privateMessageGiftGemsMessage": "<%= gemAmount %> gems! ",
- "privateMessageGiftSubscriptionMessage": "<%= numberOfMonths %> months of subscription! ",
- "cannotSendGemsToYourself": "Cannot send gems to yourself. Try a subscription instead.",
- "badAmountOfGemsToSend": "Amount must be within 1 and your current number of gems.",
- "mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.",
- "typeRequired": "Type is required",
- "keyRequired": "Key is required",
- "mustSubscribeToPurchaseGems": "Must subscribe to purchase gems with GP",
- "reachedGoldToGemCap": "You've reached the Gold=>Gem conversion cap <%= convCap %> for this month. We have this to prevent abuse / farming. The cap will reset within the first three days of next month.",
- "notAccteptedType": "Type must be in [eggs, hatchingPotions, food, quests, gear]",
- "contentKeyNotFound": "Key not found for Content <%= type %>",
- "plusOneGem": "+1 Gem",
- "notAllowedHourglass": "Pet/Mount not available for purchase with Mystic Hourglass.",
- "readCard": "<%= cardType %> has been read",
- "cardTypeRequired": "Card type required",
- "cardTypeNotAllowed": "Unkown card type.",
- "mysteryItemIsEmpty": "Mystery items are empty",
- "mysteryItemOpened": "Mystery item opened.",
- "invalidCoupon": "Invalid coupon code.",
- "couponUsed": "Coupon code already used.",
- "noSudoAccess": "You don't have sudo access.",
- "couponCodeRequired": "The coupon code is required.",
- "eventRequired": "\"req.params.event\" is required.",
- "countRequired": "\"req.query.count\" is required.",
- "invalidUrl": "invalid url",
- "invalidEnabled": "the \"enabled\" parameter should be a boolean",
- "petsReleased": "Pets released.",
- "mountsAndPetsReleased": "Mounts and pets released",
- "mountsReleased": "Mounts released",
- "typeNotSellable": "Type is not sellable. Must be one of the following <%= acceptedTypes %>",
- "userItemsKeyNotFound": "Key not found for user.items <%= type %>",
- "pathRequired": "Path string is required",
- "unlocked": "Items have been unlocked",
- "alreadyUnlocked": "Full set already unlocked.",
- "alreadyUnlockedPart": "Full set already partially unlocked.",
- "cannotRevive": "Cannot revive if not dead",
- "rebirthComplete": "You have been reborn!",
- "petNotOwned": "You do not own this pet.",
- "regIdRequired": "RegId is required",
- "pushDeviceAdded": "Push device added successfully",
- "pushDeviceAlreadyAdded": "The user already has the push device",
- "lvl10ChangeClass": "To change class you must be at least level 10.",
- "equipmentAlreadyOwned": "You already own that piece of equipment",
- "pmsMarkedRead": "Your private messages have been marked as read",
- "paymentNotSuccessful": "The payment was not successful",
- "planNotActive": "The plan hasn't activated yet (due to a PayPal bug). It will begin <%= nextBillingDate %>, after which you can cancel to retain your full benefits",
- "cancelingSubscription": "Canceling the subscription"
-}
diff --git a/common/locales/en/challenge.json b/common/locales/en/challenge.json
index d82085f1c1..cffe8c4a38 100644
--- a/common/locales/en/challenge.json
+++ b/common/locales/en/challenge.json
@@ -63,5 +63,20 @@
"congratulations": "Congratulations!",
"hurray": "Hurray!",
"noChallengeOwner": "no owner",
- "noChallengeOwnerPopover": "This challenge does not have an owner because the person who created the challenge deleted their account."
+ "noChallengeOwnerPopover": "This challenge does not have an owner because the person who created the challenge deleted their account.",
+ "challengeMemberNotFound": "User not found among challenge's members",
+ "onlyGroupLeaderChal": "Only the group leader can create challenges",
+ "tavChalsMinPrize": "Prize must be at least 1 Gem for Tavern challenges.",
+ "cantAfford": "You can't afford this prize. Purchase more gems or lower the prize amount.",
+ "challengeIdRequired": "\"challengeId\" must be a valid UUID.",
+ "winnerIdRequired": "\"winnerId\" must be a valid UUID.",
+ "challengeNotFound": "Challenge not found.",
+ "onlyLeaderDeleteChal": "Only the challenge leader can delete it.",
+ "onlyLeaderUpdateChal": "Only the challenge leader can update it.",
+ "winnerNotFound": "Winner with id \"<%= userId %>\" not found or not part of the challenge.",
+ "noCompletedTodosChallenge": "\"includeComepletedTodos\" is not supported when fetching a challenge tasks.",
+ "userTasksNoChallengeId": "When \"tasksOwner\" is \"user\" \"challengeId\" can't be passed.",
+ "onlyChalLeaderEditTasks": "Tasks belonging to a challenge can only be edited by the leader.",
+ "userAlreadyInChallenge": "User is already participating in this challenge.",
+ "cantOnlyUnlinkChalTask": "Only broken challenges tasks can be unlinked."
}
diff --git a/common/locales/en/character.json b/common/locales/en/character.json
index 0cd4e854cb..50e3022b0c 100644
--- a/common/locales/en/character.json
+++ b/common/locales/en/character.json
@@ -110,6 +110,7 @@
"mage": "Mage",
"mystery": "Mystery",
"changeClass": "Change Class, Refund Attribute Points",
+ "lvl10ChangeClass": "To change class you must be at least level 10.",
"levelPopover": "Each level earns you one point to assign to an attribute of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options.",
"unallocated": "Unallocated Attribute Points",
"haveUnallocated": "You have <%= points %> unallocated Attribute Point(s)",
@@ -165,5 +166,7 @@
"int": "INT",
"showQuickAllocation": "Show stat allocation",
"hideQuickAllocation": "Hide stat allocation",
- "quickAllocationLevelPopover": "Each level earns you one point to assign to an attribute of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User -> Stats."
+ "quickAllocationLevelPopover": "Each level earns you one point to assign to an attribute of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User -> Stats.",
+ "invalidAttribute": "\"<%= attr %>\" is not a valid attribute.",
+ "notEnoughAttrPoints": "You don't have enough attribute points."
}
diff --git a/common/locales/en/content.json b/common/locales/en/content.json
index 6d73ff4c3c..ce73ded316 100644
--- a/common/locales/en/content.json
+++ b/common/locales/en/content.json
@@ -223,5 +223,4 @@
"foodSaddleNotes": "Instantly raises one of your pets into a mount.",
"foodNotes": "Feed this to a pet and it may grow into a sturdy steed."
-
}
diff --git a/common/locales/en/contrib.json b/common/locales/en/contrib.json
index f309618458..9ce0473f3c 100644
--- a/common/locales/en/contrib.json
+++ b/common/locales/en/contrib.json
@@ -35,8 +35,12 @@
"hallContributors": "Hall of Contributors",
"hallPatrons": "Hall of Patrons",
"rewardUser": "Reward User",
- "UUID": "UUID",
+ "UUID": "User ID",
"loadUser": "Load User",
+ "noAdminAccess": "You don't have admin access.",
+ "pageMustBeNumber": "req.query.page must be a number",
+ "userNotFound": "User not found.",
+ "invalidUUID": "UUID must be valid",
"title": "Title",
"moreDetails": "More details (1-7)",
"moreDetails2": "more details (8-9)",
diff --git a/common/locales/en/death.json b/common/locales/en/death.json
index dc131e74f2..b6723981f2 100644
--- a/common/locales/en/death.json
+++ b/common/locales/en/death.json
@@ -12,6 +12,6 @@
"losingHealthQuickly": "Losing Health quickly?",
"lowHealthTips3": "Incomplete Dailies hurt you overnight, so be careful not to add too many at first!",
"lowHealthTips4": "If a Daily isn't due on a certain day, you can disable it by clicking the pencil icon.",
- "goodLuck": "Good luck!"
+ "goodLuck": "Good luck!",
+ "cannotRevive": "Cannot revive if not dead"
}
-
diff --git a/common/locales/en/front.json b/common/locales/en/front.json
index 6ef64a0d07..74591fa39b 100644
--- a/common/locales/en/front.json
+++ b/common/locales/en/front.json
@@ -225,5 +225,32 @@
"altAttrWebstorm": "WebStorm",
"altAttrGithub": "GitHub",
"altAttrTrello": "Trello",
- "altAttrSlack": "Slack"
+ "altAttrSlack": "Slack",
+ "missingAuthHeaders": "Missing authentication headers.",
+ "missingAuthParams": "Missing authentication parameters.",
+ "missingUsernameEmail": "Missing username or email.",
+ "missingEmail": "Missing email.",
+ "missingUsername": "Missing username.",
+ "missingPassword": "Missing password.",
+ "missingNewPassword": "Missing new password.",
+ "wrongPassword": "Wrong password.",
+ "notAnEmail": "Invalid email address.",
+ "emailTaken": "Email address is already used in an account.",
+ "newEmailRequired": "Missing new email address.",
+ "usernameTaken": "Username already taken.",
+ "passwordConfirmationMatch": "Password confirmation doesn't match password.",
+ "invalidLoginCredentials": "Incorrect username and/or email and/or password.",
+ "passwordReset": "If we have your email on file, your password reset link has been sent to your email.",
+ "passwordResetEmailSubject": "Password Reset for Habitica",
+ "passwordResetEmailText": "Password for <%= username %> has been reset to <%= newPassword %> . Important! Both username and password are case-sensitive -- you must enter both exactly as shown here. We recommend copying and pasting both instead of typing them. Log in at <%= baseUrl %>. After you have logged in, head to <%= baseUrl %>/#/options/settings/settings and change your password.",
+ "passwordResetEmailHtml": "Password for <%= username %> has been reset to <%= newPassword %>.
Important! Both username and password are case-sensitive -- you must enter both exactly as shown here. We recommend copying and pasting both instead of typing them.
Log in at <%= baseUrl %>. After you have logged in, head to <%= baseUrl %>/#/options/settings/settings and change your password.",
+ "invalidLoginCredentialsLong": "Uh-oh - your username or password is incorrect.\n- Make sure your username or email is typed correctly.\n- You may have signed up with Facebook, not email. Double-check by trying Facebook login.\n- If you forgot your password, click \"Forgot Password\".",
+ "invalidCredentials": "There is no account that uses those credentials.",
+ "accountSuspended": "Account has been suspended, please contact leslie@habitica.com with your User ID \"<%= userId %>\" for assistance.",
+ "onlyFbSupported": "Only Facebook is supported currently.",
+ "cantDetachFb": "Account lacks another authentication method, can't detach Facebook.",
+ "onlySocialAttachLocal": "Local authentication can be added to only a social account.",
+ "invalidReqParams": "Invalid request parameters.",
+ "memberIdRequired": "\"member\" must be a valid UUID.",
+ "heroIdRequired": "\"heroId\" must be a valid UUID."
}
diff --git a/common/locales/en/groups.json b/common/locales/en/groups.json
index 901c813d96..4d8ea0716c 100644
--- a/common/locales/en/groups.json
+++ b/common/locales/en/groups.json
@@ -92,6 +92,7 @@
"send": "Send",
"messageSentAlert": "Message sent",
"pmHeading": "Private message to <%= name %>",
+ "pmsMarkedRead": "Your private messages have been marked as read",
"clearAll": "Delete All Messages",
"confirmDeleteAllMessages": "Are you sure you want to delete all messages in your inbox? Other users will still see messages you have sent to them.",
"optOutPopover": "Don't like private messages? Click to completely opt out",
@@ -99,6 +100,15 @@
"unblock": "Un-block",
"pm-reply": "Send a reply",
"inbox": "Inbox",
+ "messageRequired": "A message is required.",
+ "toUserIDRequired": "A User ID is required",
+ "gemAmountRequired": "A number of gems is required",
+ "notAuthorizedToSendMessageToThisUser": "Can't send message to this user.",
+ "privateMessageGiftIntro": "Hello <%= receiverName %>, <%= senderName %> has sent you ",
+ "privateMessageGiftGemsMessage": "<%= gemAmount %> gems! ",
+ "privateMessageGiftSubscriptionMessage": "<%= numberOfMonths %> months of subscription! ",
+ "cannotSendGemsToYourself": "Cannot send gems to yourself. Try a subscription instead.",
+ "badAmountOfGemsToSend": "Amount must be within 1 and your current number of gems.",
"abuseFlag": "Report violation of Community Guidelines",
"abuseFlagModalHeading": "Report <%= name %> for violation?",
"abuseFlagModalBody": "Are you sure you want to report this post? You should ONLY report a post that violates the <%= firstLinkStart %>Community Guidelines<%= linkEnd %> and/or <%= secondLinkStart %>Terms of Service<%= linkEnd %>. Inappropriately reporting a post is a violation of the Community Guidelines and may give you an infraction. Appropriate reasons to flag a post include but are not limited to: