fix: I18n string update (#13588)

* i18n string updates (issue #9210)

* change offHand to offHandCapitalized

* added removeTasks to challenge.json

* added hairBangs back to character.json

* added hairBangs back to character.json

* more hairBangs nonsense

* added hairBangs to hair-settings.vue, removed same from character.json

* changed levelUp to levelup in levelUp.vue and achievements.json

* fix duplicate string values

* fixed different strings with same content in different files

* updated test/api/v3 and test/api/v4 with messageTaskNotFound

* Delete POST-tasks_taskId_checklist_itemId_score.test.js

File got copied to a new directory, doesn't need to be here.

* fix: userID token in patrons.vue and heroes.vue

* removed: unused clock of code

* Restored eggsItemType to inventory.json

Co-authored-by: Sabe Jones <sabrecat@gmail.com>
This commit is contained in:
Natalie L 2021-11-04 17:33:08 -04:00 committed by GitHub
parent 56ac23bea6
commit 5d87c2af13
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
70 changed files with 116 additions and 151 deletions

View file

@ -14,7 +14,7 @@ describe('GET /shops/backgrounds', () => {
const shop = await user.get('/shops/backgrounds');
expect(shop.identifier).to.equal('backgroundShop');
expect(shop.text).to.eql(t('backgroundShop'));
expect(shop.notes).to.eql(t('backgroundShopText'));
expect(shop.notes).to.eql(t('backgroundShop'));
expect(shop.imageName).to.equal('background_shop');
expect(shop.sets).to.be.an('array');

View file

@ -31,7 +31,7 @@ describe('DELETE /tasks/:id', () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
@ -41,7 +41,7 @@ describe('DELETE /tasks/:id', () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
});
@ -123,7 +123,7 @@ describe('DELETE /tasks/:id', () => {
await expect(user.del('/tasks/550e8400-e29b-41d4-a716-446655440000')).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
@ -137,7 +137,7 @@ describe('DELETE /tasks/:id', () => {
await expect(user.del(`/tasks/${anotherUsersTask._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -47,7 +47,7 @@ describe('GET /tasks/:taskId', () => {
await expect(user.get(`/tasks/${generateUUID()}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
@ -68,7 +68,7 @@ describe('GET /tasks/:taskId', () => {
await expect(anotherUser.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
});

View file

@ -21,7 +21,7 @@ describe('GET /tasks/:id', () => {
await expect(user.get(`/tasks/${dummyId}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
});
@ -63,7 +63,7 @@ describe('GET /tasks/:id', () => {
await expect(anotherUser.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
});
@ -118,7 +118,7 @@ describe('GET /tasks/:id', () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
});
@ -163,7 +163,7 @@ describe('GET /tasks/:id', () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
});

View file

@ -23,7 +23,7 @@ describe('POST /tasks/:taskId/move/to/:position', () => {
await expect(user.post(`/tasks/${generateUUID()}/move/to/1`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -80,7 +80,7 @@ describe('POST /tasks/unlink-all/:challengeId', () => {
await expect(user.get(`/tasks/${daily._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -65,7 +65,7 @@ describe('POST /tasks/unlink-one/:taskId', () => {
.to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -22,7 +22,7 @@ describe('DELETE /tasks/:taskId/checklist/:itemId', () => {
await expect(user.del(`/tasks/${generateUUID()}/checklist/${generateUUID()}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -31,7 +31,7 @@ describe('DELETE /tasks/:id', () => {
await expect(user.del(`/tasks/${generateUUID()}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
@ -51,7 +51,7 @@ describe('DELETE /tasks/:id', () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
@ -93,7 +93,7 @@ describe('DELETE /tasks/:id', () => {
await expect(anotherUser.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
@ -111,7 +111,7 @@ describe('DELETE /tasks/:id', () => {
await expect(anotherUser.get(`/tasks/${anotherUsersNewChallengeTaskID}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
});

View file

@ -24,7 +24,7 @@ describe('POST /tasks/:taskId/checklist/', () => {
})).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -37,7 +37,7 @@ describe('PUT /tasks/:id', () => {
})).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -137,7 +137,7 @@ describe('PUT /tasks/:taskId/checklist/:itemId', () => {
await expect(user.put(`/tasks/${generateUUID()}/checklist/${generateUUID()}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -70,7 +70,7 @@ describe('DELETE /tasks/:taskId/checklist/:itemId', () => {
await expect(user.del(`/tasks/${generateUUID()}/checklist/${generateUUID()}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -88,7 +88,7 @@ describe('POST /tasks/:taskId/checklist/', () => {
})).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
});

View file

@ -80,7 +80,7 @@ describe('POST /tasks/:taskId/checklist/:itemId/score', () => {
await expect(user.post(`/tasks/${generateUUID()}/checklist/${generateUUID()}/score`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -88,7 +88,7 @@ describe('PUT /tasks/:taskId/checklist/:itemId', () => {
await expect(user.put(`/tasks/${generateUUID()}/checklist/${generateUUID()}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -45,7 +45,7 @@ describe('Groups DELETE /tasks/:id', () => {
.to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
@ -60,7 +60,7 @@ describe('Groups DELETE /tasks/:id', () => {
.to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -38,7 +38,7 @@ describe('POST /tasks/:id/approve/:userId', () => {
.to.eventually.be.rejected.and.to.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -38,7 +38,7 @@ describe('POST /tasks/:id/needs-work/:userId', () => {
.to.eventually.be.rejected.and.to.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -42,7 +42,7 @@ describe('POST /tasks/:taskId/assign/:memberId', () => {
.to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -44,7 +44,7 @@ describe('POST /tasks/:taskId/unassign/:memberId', () => {
.to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -65,7 +65,7 @@ describe('DELETE group /tasks/:taskId/checklist/:itemId', () => {
await expect(user.del(`/tasks/${generateUUID()}/checklist/${generateUUID()}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -80,7 +80,7 @@ describe('POST group /tasks/:taskId/checklist/', () => {
})).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});
});

View file

@ -74,7 +74,7 @@ describe('PUT group /tasks/:taskId/checklist/:itemId', () => {
await expect(user.put(`/tasks/${generateUUID()}/checklist/${generateUUID()}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -116,7 +116,7 @@ describe('POST /user/class/cast/:spellId', () => {
.to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -27,7 +27,7 @@ describe('POST /user/reset', () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
expect(user.tasksOrder.habits).to.be.empty;
@ -45,7 +45,7 @@ describe('POST /user/reset', () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
expect(user.tasksOrder.dailys).to.be.empty;
@ -63,7 +63,7 @@ describe('POST /user/reset', () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
expect(user.tasksOrder.todos).to.be.empty;
@ -81,7 +81,7 @@ describe('POST /user/reset', () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
expect(user.tasksOrder.rewards).to.be.empty;

View file

@ -101,7 +101,7 @@ describe('POST /user/class/cast/:spellId', () => {
.to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
});

View file

@ -27,7 +27,7 @@ describe('POST /user/reset', () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
expect(user.tasksOrder.habits).to.be.empty;
@ -45,7 +45,7 @@ describe('POST /user/reset', () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
expect(user.tasksOrder.dailys).to.be.empty;
@ -63,7 +63,7 @@ describe('POST /user/reset', () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
expect(user.tasksOrder.todos).to.be.empty;
@ -81,7 +81,7 @@ describe('POST /user/reset', () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
message: t('messageTaskNotFound'),
});
expect(user.tasksOrder.rewards).to.be.empty;

View file

@ -52,7 +52,7 @@
class="btn btn-primary btn-lg flex-column"
@click="ready()"
>
{{ $t('imReady') }}
{{ $t('enterHabitica') }}
</button>
</div>
<div class="col-3"></div>

View file

@ -100,7 +100,7 @@
<span v-if="isLeader || isAdmin">
<b-dropdown
class="create-dropdown select-list"
:text="$t('addTaskToChallenge')"
:text="$t('addTask')"
:variant="'success'"
>
<b-dropdown-item

View file

@ -12,13 +12,13 @@
class="btn btn-primary"
@click="leaveChallenge('keep')"
>
{{ $t('keepThem') }}
{{ $t('keepTasks') }}
</button>
<button
class="btn btn-danger"
@click="leaveChallenge('remove-all')"
>
{{ $t('removeThem') }}
{{ $t('removeTasks') }}
</button>
</div>
</div>

View file

@ -42,7 +42,7 @@
{{ $t('noChallengeTitle') }}
</h2>
<p v-once>
{{ $t('challengeDescription1') }}
{{ $t('challengeDetails') }}
</p>
<p v-once>
{{ $t('challengeDescription2') }}

View file

@ -64,7 +64,7 @@
>
<button
class="btn btn-secondary form-control"
:value="$t('createGroupPlan')"
:value="$t('create')"
@click="createGroup()"
></button>
</div>
@ -74,7 +74,7 @@
:disabled="!newGroupIsReady"
@click="createGroup()"
>
{{ $t('createGroupPlan') }}
{{ $t('create') }}
</button>
</div>
</div>

View file

@ -64,7 +64,7 @@
target="create-task-btn"
placement="bottom"
>
{{ $t('addTaskToGroupPlan') }}
{{ $t('create') }}
</b-tooltip>
</div>
</div>

View file

@ -28,7 +28,7 @@ b-dropdown(:text="$t('sort')", right=true)
class="svg-icon positive-icon"
v-html="icons.positiveIcon"
></div>
<span v-once>{{ $t('createGuild2') }}</span>
<span v-once>{{ $t('create') }}</span>
</button>
</div>
</div>

View file

@ -222,7 +222,7 @@
>
<button
class="btn btn-secondary form-control"
:value="$t('createGroupPlan')"
:value="$t('create')"
@click="createGroup()"
></button>
</div>
@ -232,7 +232,7 @@
:disabled="!newGroupIsReady"
@click="createGroup()"
>
{{ $t('createGroupPlan') }}
{{ $t('create') }}
</button>
</div>
</div>

View file

@ -26,7 +26,7 @@
class="svg-icon positive-icon"
v-html="icons.positiveIcon"
></div>
<span v-once>{{ $t('createGuild2') }}</span>
<span v-once>{{ $t('create') }}</span>
</button>
<!-- @TODO: Add when we implement recent activity
.float-rightspan.dropdown-label {{ $t('sortBy') }}

View file

@ -11,7 +11,7 @@
<close-icon @click="close()" />
</div>
<h2 class="text-center textCondensed">
{{ selectMode ? $t('selectQuest') : $t('questDetailsTitle') }}
{{ selectMode ? $t('selectQuest') : $t('questDetails') }}
</h2>
<div
v-if="selectMode"
@ -103,7 +103,7 @@
:disabled="!Boolean(selectedQuest) || loading"
@click="questInit()"
>
{{ $t('inviteToPartyOrQuest') }}
{{ $t('inviteParty') }}
</button>
</div>
<div

View file

@ -1,5 +1,5 @@
<template>
<sidebar-section :title="$t('questDetailsTitle')">
<sidebar-section :title="$t('questDetails')">
<div
v-if="!onPendingQuest && !onActiveQuest"
class="row no-quest-section"

View file

@ -321,7 +321,7 @@
v-once
to="/static/community-guidelines"
>
{{ $t('communityGuidelinesLink') }}
{{ $t('communityGuidelines') }}
</router-link>
</li>
<li>

View file

@ -217,7 +217,7 @@
<tr>
<th>{{ $t('name') }}</th>
<th v-if="user.contributor && user.contributor.admin">
{{ $t('UUID') }}
{{ $t('userId') }}
</th>
<th>{{ $t('contribLevel') }}</th>
<th>{{ $t('title') }}</th>

View file

@ -10,7 +10,7 @@
<tr>
<th>{{ $t('name') }}</th>
<th v-if="user.contributor.admin">
{{ $t('UUID') }}
{{ $t('userId') }}
</th>
<th>{{ $t('backerTier') }}</th>
</tr>

View file

@ -320,13 +320,13 @@
class="topbar-dropdown-item dropdown-item"
to="/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a"
>
{{ $t('askAQuestion') }}
{{ $t('askQuestion') }}
</router-link>
<a
class="topbar-dropdown-item dropdown-item"
href="https://docs.google.com/forms/d/e/1FAIpQLScPhrwq_7P1C6PTrI3lbvTsvqGyTNnGzp1ugi1Ml0PFee_p5g/viewform?usp=sf_link"
target="_blank"
>{{ $t('requestAF') }}</a>
>{{ $t('requestFeature') }}</a>
<a
class="topbar-dropdown-item dropdown-item"
href="https://habitica.fandom.com/wiki/Contributing_to_Habitica"

View file

@ -357,10 +357,10 @@ export default {
groupBy: 'type', // or 'class'
gearTypesToStrings: Object.freeze({ // TODO use content.itemList?
weapon: i18n.t('weaponCapitalized'),
shield: i18n.t('offhandCapitalized'),
shield: i18n.t('offHandCapitalized'),
head: i18n.t('headgearCapitalized'),
armor: i18n.t('armorCapitalized'),
headAccessory: i18n.t('headAccessoryCapitalized'),
headAccessory: i18n.t('headAccessory'),
eyewear: i18n.t('eyewear'),
body: i18n.t('body'),
back: i18n.t('back'),

View file

@ -21,7 +21,7 @@
v-else
>{{ $t('sendGiftCost', {cost: gift.gems.amount / 4}) }}</span>
</div>
{{ $t('gemsPopoverTitle') }}
{{ $t('gems') }}
</h3>
<div class="panel-body">
<div class="d-flex mb-3">

View file

@ -41,7 +41,7 @@
<a
target="_blank"
:href="`https://oldgods.net/habitica/habitrpg_user_data_display.html?uuid=` + user._id"
>{{ $t('dataTool') }}</a>
>{{ $t('dataDisplayTool') }}</a>
<br>
{{ $t('dataToolDesc') }}
</li>

View file

@ -17,7 +17,7 @@
<close-icon @click="hideDialog()" />
</div>
<h2 class="text-center textCondensed">
{{ $t('questDetailsTitle') }}
{{ $t('questDetails') }}
</h2>
<div
v-if="item != null"

View file

@ -399,10 +399,10 @@ export default {
gearTypesToStrings: Object.freeze({ // TODO use content.itemList?
weapon: i18n.t('weaponCapitalized'),
shield: i18n.t('offhandCapitalized'),
shield: i18n.t('offHandCapitalized'),
head: i18n.t('headgearCapitalized'),
armor: i18n.t('armorCapitalized'),
headAccessory: i18n.t('headAccessoryCapitalized'),
headAccessory: i18n.t('headAccessory'),
body: i18n.t('body'),
back: i18n.t('back'),
eyewear: i18n.t('eyewear'),

View file

@ -123,7 +123,7 @@
class="btn btn-primary pull-right"
@click="playButtonClick()"
>
{{ $t('playButtonFull') }}
{{ $t('enterHabitica') }}
</button>
</div>
<router-link

View file

@ -36,13 +36,13 @@
class="btn btn-primary"
@click="unlink('keep-all')"
>
{{ $t('keepThem') }}
{{ $t('keepTasks') }}
</button>
<button
class="btn btn-danger"
@click="unlink('remove-all')"
>
{{ $t('removeThem') }}
{{ $t('removeTasks') }}
</button>
</div>
</div>
@ -53,23 +53,16 @@
class="btn btn-primary"
@click="unlink('keep-all')"
>
{{ $t('keepThem') }}
{{ $t('keepTasks') }}
</button>
<button
class="btn btn-danger"
@click="unlink('remove-all')"
>
{{ $t('removeThem') }}
{{ $t('removeTasks') }}
</button>
</div>
</div>
<!-- @TODO: I ported this over, but do we use it anymore?-->
<!--div(v-if='brokenChallengeTask.challenge.broken
=== "UNSUBSCRIBED"')p {{ $t('unsubChallenge') }}
p
a(@click="unlink('keep-all')") {{ $t('keepThem') }}
| &nbsp;|&nbsp;
a(@click="unlink('remove-all')") {{ $t('removeThem') }}-->
</div>
</b-modal>
</template>

View file

@ -49,7 +49,7 @@
v-if="tagsType.key !== 'groups' && !editingTags"
class="d-block"
@click="editTags(tagsType.key)"
>{{ $t('editTags2') }}</a>
>{{ $t('editTagsText') }}</a>
</div>
<div class="tags-list container">
<div
@ -197,7 +197,7 @@
target="create-task-btn"
placement="bottom"
>
{{ $t('addTaskToUser') }}
{{ $t('addTask') }}
</b-tooltip>
</div>
</div>

View file

@ -357,7 +357,7 @@ export default {
body: this.$t('bodyAccess'),
weapon: this.$t('mainHand'),
_skip: 'skip',
shield: this.$t('offHand'),
shield: this.$t('offHandCapitalized'),
},
allocateStatsList: {

View file

@ -58,7 +58,7 @@ export default {
orphan: true,
intro: this.$t('tourTavernPage'),
final: true,
proceed: this.$t('tourAwesome'),
proceed: this.$t('awesome'),
hideNavigation: true,
},
]],

View file

@ -2,7 +2,6 @@
"backgrounds": "Backgrounds",
"background": "Background",
"backgroundShop": "Background Shop",
"backgroundShopText": "Background Shop",
"noBackground": "No Background Selected",
"backgrounds062014": "SET 1: Released June 2014",

View file

@ -5,9 +5,8 @@
"brokenTask": "Broken Challenge Link: this task was part of a challenge, but has been removed from it. What would you like to do?",
"keepIt": "Keep It",
"removeIt": "Remove It",
"removeTasks": "Remove Tasks",
"brokenChallenge": "Broken Challenge Link: this task was part of a challenge, but the challenge (or group) has been deleted. What to do with the orphan tasks?",
"keepThem": "Keep Tasks",
"removeThem": "Remove Tasks",
"challengeCompleted": "This challenge has been completed, and the winner was <span class=\"badge\"><%- user %></span>! What to do with the orphan tasks?",
"unsubChallenge": "Broken Challenge Link: this task was part of a challenge, but you have unsubscribed from the challenge. What to do with the orphan tasks?",
"challenges": "Challenges",
@ -24,7 +23,6 @@
"createChallenge": "Create Challenge",
"createChallengeAddTasks": "Add Challenge Tasks",
"createChallengeCloneTasks": "Clone Challenge Tasks",
"addTaskToChallenge": "Add Task",
"challengeTag": "Tag Name",
"prize": "Prize",
"publicChallengesTitle": "Public Challenges",
@ -32,7 +30,6 @@
"by": "by",
"participants": "<%= membercount %> Participants",
"join": "Join",
"exportChallengeCSV": "Export to CSV",
"challengeCreated": "Challenge created",
"sureDelCha": "Are you sure you want to delete this challenge?",
"keepTasks": "Keep Tasks",
@ -60,7 +57,6 @@
"myChallenges": "My Challenges",
"findChallenges": "Discover Challenges",
"noChallengeTitle": "You don't have any Challenges.",
"challengeDescription1": "Challenges are community events in which players compete and earn prizes by completing a group of related tasks.",
"challengeDescription2": "Find recommended Challenges based on your interests, browse Habitica's public Challenges, or create your own Challenges.",
"noChallengeMatchFilters": "We couldn't find any matching Challenges.",
"createdBy": "Created By",

View file

@ -27,7 +27,6 @@
"color": "Color",
"hair": "Hair",
"bangs": "Bangs",
"hairBangs": "Bangs",
"glasses": "Glasses",
"hairSet1": "Hairstyle Set 1",
"hairSet2": "Hairstyle Set 2",
@ -87,7 +86,6 @@
"allocateIntPop": "Add a Point to Intelligence",
"noMoreAllocate": "Now that you've hit level 100, you won't gain any more Stat Points. You can continue leveling up, or start a new adventure at level 1 by using the <a href='https://habitica.fandom.com/wiki/Orb_of_Rebirth' target='_blank'>Orb of Rebirth</a>!",
"stats": "Stats",
"achievs": "Achievements",
"strength": "Strength",
"strText": "Strength increases the chance of random \"critical hits\" and the Gold, Experience, and drop chance boost from them. It also helps deal damage to boss monsters.",
"constitution": "Constitution",

View file

@ -30,7 +30,6 @@
"contribLevel": "Contrib Tier",
"hallContributors": "Hall of Contributors",
"hallPatrons": "Hall of Patrons",
"UUID": "User ID",
"noAdminAccess": "You don't have admin access.",
"userNotFound": "User not found.",
"invalidUUID": "UUID must be valid",

View file

@ -58,7 +58,7 @@
"setNewPass": "Set New Password",
"password": "Password",
"playButton": "Play",
"playButtonFull": "Enter Habitica",
"enterHabitica": "Enter Habitica",
"presskit": "Press Kit",
"presskitText": "Thanks for your interest in Habitica! The following images can be used for articles or videos about Habitica. For more information, please contact us at <%= pressEnquiryEmail %>.",
"pkQuestion1": "What inspired Habitica? How did it start?",
@ -83,8 +83,6 @@
"pkBoss": "Bosses",
"pkSamples": "Sample Screens",
"pkWebsite": "Website",
"pkiOS": "iOS",
"pkAndroid": "Android",
"privacy": "Privacy Policy",
"register": "Register",
"school": "School",

View file

@ -1957,7 +1957,7 @@
"headArmoireBlackFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a bold black color. Increases Constitution, Perception, and Strength by <%= attrs %> each. Enchanted Armoire: Black Loungewear Set (Item 1 of 3).",
"offhand": "off-hand item",
"offhandCapitalized": "Off-Hand Item",
"offHandCapitalized": "Off-Hand Item",
"shieldBase0Text": "No Off-Hand Equipment",
"shieldBase0Notes": "No shield or other off-hand item.",
@ -2320,7 +2320,6 @@
"shieldArmoireSoftBlackPillowNotes": "The brave warrior packs a pillow for any expedition. Guard yourself from tiresome tasks... even while you nap. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Black Loungewear Set (Item 3 of 3).",
"back": "Back Accessory",
"backCapitalized": "Back Accessory",
"backBase0Text": "No Back Accessory",
"backBase0Notes": "No Back Accessory.",
"animalTails": "Animal Tails",
@ -2414,7 +2413,6 @@
"backWolfTailNotes": "This tail makes you look like a loyal wolf! Confers no benefit.",
"body": "Body Accessory",
"bodyCapitalized": "Body Accessory",
"bodyBase0Text": "No Body Accessory",
"bodyBase0Notes": "No Body Accessory.",
@ -2470,8 +2468,7 @@
"bodyArmoireClownsBowtieText": "Clown's Bow-Tie",
"bodyArmoireClownsBowtieNotes": "A nice bow-tie is no joking matter, even for a clown. Increases Strength, Intelligence, Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Clown Set (Item 5 of 5).",
"headAccessory": "head accessory",
"headAccessoryCapitalized": "Head Accessory",
"headAccessory": "Head Accessory",
"accessories": "Accessories",
"animalEars": "Animal Ears",
@ -2588,7 +2585,6 @@
"headAccessoryArmoireGogglesOfBookbindingNotes": "These goggles will help you zero in on any task, large or small! Increases Perception by <%= per %>. Enchanted Armoire: Bookbinder Set (Item 1 of 4).",
"eyewear": "Eyewear",
"eyewearCapitalized": "Eyewear",
"eyewearBase0Text": "No Eyewear",
"eyewearBase0Notes": "No Eyewear.",

View file

@ -49,7 +49,6 @@
"notEnoughGems": "Not enough Gems",
"alreadyHave": "Whoops! You already have this item. No need to buy it again!",
"delete": "Delete",
"gemsPopoverTitle": "Gems",
"gems": "Gems",
"needMoreGems": "Need More Gems?",
"needMoreGemsInfo": "Purchase Gems now, or become a subscriber to buy Gems with Gold, get monthly mystery items, enjoy increased drop caps and more!",
@ -201,5 +200,6 @@
"selected": "Selected",
"howManyToBuy": "How many would you like to buy?",
"contactForm": "Contact the Moderation Team",
"loadEarlierMessages": "Load Earlier Messages"
"loadEarlierMessages": "Load Earlier Messages",
"askQuestion": "Ask a Question"
}

View file

@ -5,26 +5,21 @@
"innCheckOutBannerShort": "You are checked into the Inn.",
"resumeDamage": "Resume Damage",
"helpfulLinks": "Helpful Links",
"communityGuidelinesLink": "Community Guidelines",
"lookingForGroup": "Looking for Group (Party Wanted) Posts",
"dataDisplayTool": "Data Display Tool",
"requestFeature": "Request a Feature",
"askAQuestion": "Ask a Question",
"askQuestionGuild": "Ask a Question (Habitica Help guild)",
"contributing": "Contributing",
"faq": "FAQ",
"tutorial": "Tutorial",
"glossary": "<a target='_blank' href='https://habitica.fandom.com/wiki/Glossary'>Glossary</a>",
"wiki": "Wiki",
"requestAF": "Request a Feature",
"dataTool": "Data Display Tool",
"resources": "Resources",
"communityGuidelines": "Community Guidelines",
"bannedWordUsed": "Oops! Looks like this post contains a swearword, religious oath, or reference to an addictive substance or adult topic (<%= swearWordsUsed %>). Habitica has users from all backgrounds, so we keep our chat very clean. Feel free to edit your message so you can post it!",
"bannedSlurUsed": "Your post contained inappropriate language, and your chat privileges have been revoked.",
"party": "Party",
"usernameCopied": "Username copied to clipboard.",
"createGroupPlan": "Create",
"create": "Create",
"userId": "User ID",
"invite": "Invite",
@ -55,7 +50,6 @@
"search": "Search",
"publicGuilds": "Public Guilds",
"createGuild": "Create Guild",
"createGuild2": "Create",
"guild": "Guild",
"guilds": "Guilds",
"sureKick": "Do you really want to remove this member from the Party/Guild?",
@ -237,7 +231,6 @@
"userMustBeMember": "User must be a member",
"userIsNotManager": "User is not manager",
"canOnlyApproveTaskOnce": "This task has already been approved.",
"addTaskToGroupPlan": "Create",
"joinedGuild": "Joined a Guild",
"joinedGuildText": "Ventured into the social side of Habitica by joining a Guild!",
"badAmountOfGemsToPurchase": "Amount must be at least 1.",
@ -304,7 +297,6 @@
"wantToJoinPartyTitle": "Want to join a Party?",
"wantToJoinPartyDescription": "Give your username to a friend who already has a Party, or head to the <a href='/groups/guild/f2db2a7f-13c5-454d-b3ee-ea1f5089e601'>Party Wanted Guild</a> to meet potential comrades!",
"copy": "Copy",
"inviteToPartyOrQuest": "Invite Party to Quest",
"questOwnerRewards": "Quest Owner Rewards",
"updateParty": "Update Party",
"upgradeToGroup": "Upgrade to Group",

View file

@ -116,7 +116,6 @@
"tourEquipmentPage": "This is where your Equipment is stored! Your Battle Gear affects your Stats. If you want to show different Equipment on your avatar without changing your Stats, click \"Enable Costume.\"",
"equipmentAlreadyOwned": "You already own that piece of equipment",
"tourOkay": "Okay!",
"tourAwesome": "Awesome!",
"tourSplendid": "Splendid!",
"welcomeToHabit": "Welcome to Habitica!",
"welcome1": "Create a basic avatar.",
@ -125,7 +124,6 @@
"welcome2notes": "How well you do on your real-life tasks will control how well you do in the game!",
"welcome3": "Progress in life and the game!",
"welcome3notes": "As you improve your life, your avatar will level up and unlock pets, quests, equipment, and more!",
"imReady": "Enter Habitica",
"limitedOffer": "Available until <%= date %>",
"limitedAvailabilityDays": "Available for <%= days %>d <%= hours %>h <%= minutes %>m",
"limitedAvailabilityHours": "Available for <%= hours %>h <%= minutes %>m",

View file

@ -41,7 +41,6 @@
"questConfirm": "Are you sure you want to start this Quest? Not all Party members have accepted the Quest invite. Quests start automatically after all members respond to the invite.",
"sureCancel": "Are you sure you want to cancel this Quest? Canceling the Quest will cancel all accepted and pending invitations. The Quest will be returned to the owner's inventory.",
"sureAbort": "Are you sure you want to cancel this Quest? All progress will be lost. The Quest will be returned to the owner's inventory.",
"bossRageTitle": "Rage",
"bossRageDescription": "When this bar fills, the boss will unleash a special attack!",
"selectQuest": "Select Quest",
"startQuest": "Start Quest",

View file

@ -7,7 +7,6 @@
"addATitle": "Add a title",
"editATask": "Edit <%= type %>",
"createTask": "Create <%= type %>",
"addTaskToUser": "Add Task",
"scheduled": "Scheduled",
"theseAreYourTasks": "These are your <%= taskType %>",
"habit": "Habit",
@ -72,9 +71,8 @@
"silver": "Silver (100 silver = 1 gold)",
"price": "Price",
"tags": "Tags",
"editTags": "Edit",
"newTag": "New Tag",
"editTags2": "Edit Tags",
"editTagsText": "Edit Tags",
"toRequired": "You must supply a \"to\" property",
"startDate": "Start Date",
"streaks": "Streak Achievements",
@ -96,7 +94,6 @@
"taskToTop": "To top",
"taskToBottom": "To bottom",
"taskAliasAlreadyUsed": "Task alias already used on another task.",
"taskNotFound": "Task not found.",
"invalidTaskType": "Task type must be one of \"habit\", \"daily\", \"todo\", \"reward\".",
"invalidTasksType": "Task type must be one of \"habits\", \"dailys\", \"todos\", \"rewards\".",
"invalidTasksTypeExtra": "Task type must be one of \"habits\", \"dailys\", \"todos\", \"rewards\", \"completedTodos\".",

View file

@ -3861,7 +3861,7 @@ each(quests, (v, key) => {
});
if (b.rage) {
defaults(b.rage, {
title: t('bossRageTitle'),
title: t('rage'),
description: t('bossRageDescription'),
});
}

View file

@ -135,7 +135,7 @@ api.getBackgroundShopItems = {
const resObject = {
identifier: 'backgroundShop',
text: res.t('backgroundShop'),
notes: res.t('backgroundShopText'),
notes: res.t('backgroundShop'),
imageName: 'background_shop',
sets: shops.getBackgroundShopSets(user, req.language),
};

View file

@ -511,27 +511,27 @@ api.getTask = {
const task = await Tasks.Task.findByIdOrAlias(taskId, user._id);
if (!task) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
} else if (task.group.id && !task.userId) {
// @TODO: Abstract this access snippet
const fields = requiredGroupFields.concat(' managers');
const group = await Group.getGroup({ user, groupId: task.group.id, fields });
if (!group) throw new NotFound(res.t('taskNotFound'));
if (!group) throw new NotFound(res.t('messageTaskNotFound'));
const isNotGroupLeader = group.leader !== user._id;
if (!group.isMember(user) && isNotGroupLeader) throw new NotFound(res.t('taskNotFound'));
if (!group.isMember(user) && isNotGroupLeader) throw new NotFound(res.t('messageTaskNotFound'));
// If the task belongs to a challenge make sure the user has rights (leader, admin or members)
} else if (task.challenge.id && !task.userId) {
const challenge = await Challenge.findOne({ _id: task.challenge.id }).select('leader').exec();
// @TODO: Abstract this access snippet
if (!challenge) throw new NotFound(res.t('taskNotFound'));
if (!challenge) throw new NotFound(res.t('messageTaskNotFound'));
if (!challenge.canModify(user) && !challenge.isMember(user)) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
}
// If the task is owned by a user make it's the current one
} else if (task.userId !== user._id) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
}
res.respond(200, task);
@ -607,14 +607,14 @@ api.updateTask = {
const { taskId } = req.params;
const task = await Tasks.Task.findByIdOrAlias(taskId, user._id);
if (!task) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
}
const group = await getGroupFromTaskAndUser(task, user);
const challenge = await getChallengeFromTask(task);
// Verify that the user can modify the task.
if (!task) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
} else if (task.group.id && !task.userId) {
// If the task is in a group and only modifying `collapseChecklist`,
// the modification should be allowed.
@ -825,7 +825,7 @@ api.moveTask = {
const task = await Tasks.Task.findByIdOrAlias(taskId, user._id);
if (!task) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
}
const group = await getGroupFromTaskAndUser(task, user);
@ -913,7 +913,7 @@ api.addChecklistItem = {
const task = await Tasks.Task.findByIdOrAlias(taskId, user._id);
if (!task) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
}
const group = await getGroupFromTaskAndUser(task, user);
@ -965,7 +965,7 @@ api.scoreCheckListItem = {
const { taskId } = req.params;
const task = await Tasks.Task.findByIdOrAlias(taskId, user._id, { userId: user._id });
if (!task) throw new NotFound(res.t('taskNotFound'));
if (!task) throw new NotFound(res.t('messageTaskNotFound'));
if (task.type !== 'daily' && task.type !== 'todo') throw new BadRequest(res.t('checklistOnlyDailyTodo'));
const item = _.find(task.checklist, { id: req.params.itemId });
@ -1021,7 +1021,7 @@ api.updateChecklistItem = {
const task = await Tasks.Task.findByIdOrAlias(taskId, user._id);
if (!task) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
}
const group = await getGroupFromTaskAndUser(task, user);
@ -1085,7 +1085,7 @@ api.removeChecklistItem = {
const task = await Tasks.Task.findByIdOrAlias(taskId, user._id);
if (!task) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
}
const group = await getGroupFromTaskAndUser(task, user);
@ -1150,7 +1150,7 @@ api.addTagToTask = {
const { taskId } = req.params;
const task = await Tasks.Task.findByIdOrAlias(taskId, user._id, { userId: user._id });
if (!task) throw new NotFound(res.t('taskNotFound'));
if (!task) throw new NotFound(res.t('messageTaskNotFound'));
const { tagId } = req.params;
const alreadyTagged = task.tags.indexOf(tagId) !== -1;
@ -1206,7 +1206,7 @@ api.removeTagFromTask = {
const { taskId } = req.params;
const task = await Tasks.Task.findByIdOrAlias(taskId, user._id, { userId: user._id });
if (!task) throw new NotFound(res.t('taskNotFound'));
if (!task) throw new NotFound(res.t('messageTaskNotFound'));
const hasTag = removeFromArray(task.tags, req.params.tagId);
if (!hasTag) throw new NotFound(res.t('tagNotFound'));
@ -1320,7 +1320,7 @@ api.unlinkOneTask = {
const task = await Tasks.Task.findByIdOrAlias(taskId, user._id, { userId: user._id });
if (!task) throw new NotFound(res.t('taskNotFound'));
if (!task) throw new NotFound(res.t('messageTaskNotFound'));
if (!task.challenge.id) throw new BadRequest(res.t('cantOnlyUnlinkChalTask'));
if (!task.challenge.broken) throw new BadRequest(res.t('cantOnlyUnlinkChalTask'));
@ -1418,7 +1418,7 @@ api.deleteTask = {
const task = await Tasks.Task.findByIdOrAlias(taskId, user._id);
if (!task) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
}
const group = await getGroupFromTaskAndUser(task, user);
const challenge = await getChallengeFromTask(task);

View file

@ -144,7 +144,7 @@ api.groupMoveTask = {
const to = Number(req.params.position);
if (!task) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
}
if (task.type === 'todo' && task.completed) throw new BadRequest(res.t('cantMoveCompletedTodo'));
@ -197,7 +197,7 @@ api.assignTask = {
const task = await Tasks.Task.findByIdOrAlias(taskId, user._id);
if (!task) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
}
if (!task.group.id) {
@ -272,7 +272,7 @@ api.unassignTask = {
const task = await Tasks.Task.findByIdOrAlias(taskId, user._id);
if (!task) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
}
if (!task.group.id) {
@ -332,7 +332,7 @@ api.approveTask = {
}).exec();
if (!task) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
}
const fields = requiredGroupFields.concat(' managers');
@ -440,7 +440,7 @@ api.taskNeedsWork = {
]);
if (!task) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
}
const fields = requiredGroupFields.concat(' managers');

View file

@ -24,7 +24,7 @@ async function castTaskSpell (res, req, targetId, user, spell, quantity = 1) {
_id: targetId,
userId: user._id,
}).exec();
if (!task) throw new NotFound(res.t('taskNotFound'));
if (!task) throw new NotFound(res.t('messageTaskNotFound'));
if (task.challenge.id) throw new BadRequest(res.t('challengeTasksNoCast'));
if (task.group.id) throw new BadRequest(res.t('groupTasksNoCast'));

View file

@ -262,7 +262,7 @@ async function getChallengeFromTask (task) {
function verifyTaskModification (task, user, group, challenge, res) {
if (!task) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
} else if (task.group.id && !task.userId) {
if (!group) throw new NotFound(res.t('groupNotFound'));
if (canNotEditTasks(group, user)) throw new NotAuthorized(res.t('onlyGroupLeaderCanEditTasks'));
@ -274,7 +274,7 @@ function verifyTaskModification (task, user, group, challenge, res) {
// If the task is owned by a user make it's the current one
} else if (task.userId !== user._id) {
throw new NotFound(res.t('taskNotFound'));
throw new NotFound(res.t('messageTaskNotFound'));
}
}
@ -474,7 +474,7 @@ export async function scoreTasks (user, taskScorings, req, res) {
}
});
if (Object.keys(tasks).length === 0) throw new NotFound(res.t('taskNotFound'));
if (Object.keys(tasks).length === 0) throw new NotFound(res.t('messageTaskNotFound'));
// Score each task separately to make sure changes to user._tmp don't overlap.
// scoreTask is an async function but the only async operation happens when a group task