mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 06:37:23 +01:00
Compare commits
43 Commits
v5.37.2
...
fiz/fix-or
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
39cad77f7d | ||
|
|
9a1fb18959 | ||
|
|
876d5a67d6 | ||
|
|
3078af8f2a | ||
|
|
dad1440138 | ||
|
|
12773d539e | ||
|
|
ae4130b108 | ||
|
|
ad0614282e | ||
|
|
2ea0b64603 | ||
|
|
bd1aa1e417 | ||
|
|
5a7704aed7 | ||
|
|
7c49b845d6 | ||
|
|
1ee172139d | ||
|
|
6447b9ab4b | ||
|
|
5c414099d9 | ||
|
|
5e8e1179aa | ||
|
|
7e86a62624 | ||
|
|
1ba9dda0ed | ||
|
|
2feadd6125 | ||
|
|
227e5ceaa8 | ||
|
|
f77ab5a3ab | ||
|
|
1916faf647 | ||
|
|
80ecb5cef1 | ||
|
|
75c36e6622 | ||
|
|
78330c975a | ||
|
|
95266f6cb3 | ||
|
|
e9b2c1b51a | ||
|
|
2a2bea07ab | ||
|
|
ea60ddbf4c | ||
|
|
1c2ca0e478 | ||
|
|
ef2b7eb928 | ||
|
|
3d16387a61 | ||
|
|
93b7770eaa | ||
|
|
a9f84d3307 | ||
|
|
efe0b3cd9e | ||
|
|
96731da380 | ||
|
|
0c5dd5d8b5 | ||
|
|
2f943a22e6 | ||
|
|
666184d7e4 | ||
|
|
17d22dda3f | ||
|
|
d1a18c121d | ||
|
|
98a6535dc3 | ||
|
|
9948e8ee44 |
Submodule habitica-images updated: 992d838120...aa72332019
76
package-lock.json
generated
76
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "habitica",
|
"name": "habitica",
|
||||||
"version": "5.37.2",
|
"version": "5.38.2",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "habitica",
|
"name": "habitica",
|
||||||
"version": "5.37.2",
|
"version": "5.38.2",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "^7.22.10",
|
"@babel/core": "^7.22.10",
|
||||||
@@ -59,7 +59,6 @@
|
|||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"nconf": "^0.12.1",
|
"nconf": "^0.12.1",
|
||||||
"node-gcm": "^1.0.5",
|
"node-gcm": "^1.0.5",
|
||||||
"nodemon": "^3.1.9",
|
|
||||||
"on-headers": "^1.0.2",
|
"on-headers": "^1.0.2",
|
||||||
"passport": "^0.5.3",
|
"passport": "^0.5.3",
|
||||||
"passport-facebook": "^3.0.0",
|
"passport-facebook": "^3.0.0",
|
||||||
@@ -16011,55 +16010,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
|
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
|
||||||
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
|
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
|
||||||
},
|
},
|
||||||
"node_modules/nodemon": {
|
|
||||||
"version": "3.1.10",
|
|
||||||
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz",
|
|
||||||
"integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==",
|
|
||||||
"dependencies": {
|
|
||||||
"chokidar": "^3.5.2",
|
|
||||||
"debug": "^4",
|
|
||||||
"ignore-by-default": "^1.0.1",
|
|
||||||
"minimatch": "^3.1.2",
|
|
||||||
"pstree.remy": "^1.1.8",
|
|
||||||
"semver": "^7.5.3",
|
|
||||||
"simple-update-notifier": "^2.0.0",
|
|
||||||
"supports-color": "^5.5.0",
|
|
||||||
"touch": "^3.1.0",
|
|
||||||
"undefsafe": "^2.0.5"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"nodemon": "bin/nodemon.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"type": "opencollective",
|
|
||||||
"url": "https://opencollective.com/nodemon"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/nodemon/node_modules/semver": {
|
|
||||||
"version": "7.7.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
|
||||||
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
|
|
||||||
"bin": {
|
|
||||||
"semver": "bin/semver.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/nodemon/node_modules/supports-color": {
|
|
||||||
"version": "5.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
|
||||||
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
|
||||||
"dependencies": {
|
|
||||||
"has-flag": "^3.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/noop-logger": {
|
"node_modules/noop-logger": {
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
|
||||||
@@ -19423,28 +19373,6 @@
|
|||||||
"is-arrayish": "^0.3.1"
|
"is-arrayish": "^0.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/simple-update-notifier": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
|
|
||||||
"dependencies": {
|
|
||||||
"semver": "^7.5.3"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/simple-update-notifier/node_modules/semver": {
|
|
||||||
"version": "7.7.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
|
||||||
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
|
|
||||||
"bin": {
|
|
||||||
"semver": "bin/semver.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/sinon": {
|
"node_modules/sinon": {
|
||||||
"version": "15.2.0",
|
"version": "15.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/sinon/-/sinon-15.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/sinon/-/sinon-15.2.0.tgz",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "habitica",
|
"name": "habitica",
|
||||||
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
|
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
|
||||||
"version": "5.37.2",
|
"version": "5.38.2",
|
||||||
"main": "./website/server/index.js",
|
"main": "./website/server/index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "^7.22.10",
|
"@babel/core": "^7.22.10",
|
||||||
@@ -106,8 +106,8 @@
|
|||||||
"start": "node --watch ./website/server/index.js",
|
"start": "node --watch ./website/server/index.js",
|
||||||
"start:simple": "node ./website/server/index.js",
|
"start:simple": "node ./website/server/index.js",
|
||||||
"debug": "node --watch --inspect ./website/server/index.js",
|
"debug": "node --watch --inspect ./website/server/index.js",
|
||||||
"mongo:dev": "run-rs -v 5.0.23 -l ubuntu1804 --keep --dbpath mongodb-data --number 1 --quiet",
|
"mongo:dev": "run-rs -v 7.0.23 -l ubuntu2404 --keep --dbpath mongodb-data --number 1 --quiet",
|
||||||
"mongo:test": "run-rs -v 5.0.23 -l ubuntu1804 --keep --dbpath mongodb-data-testing --number 1 --quiet",
|
"mongo:test": "run-rs -v 7.0.23 -l ubuntu2404 --keep --dbpath mongodb-data-testing --number 1 --quiet",
|
||||||
"postinstall": "git config --global url.\"https://\".insteadOf git:// && gulp build && cd website/client && npm install",
|
"postinstall": "git config --global url.\"https://\".insteadOf git:// && gulp build && cd website/client && npm install",
|
||||||
"apidoc": "gulp apidoc",
|
"apidoc": "gulp apidoc",
|
||||||
"heroku-postbuild": ".heroku/report_deploy.sh"
|
"heroku-postbuild": ".heroku/report_deploy.sh"
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
|
import nconf from 'nconf';
|
||||||
|
import requireAgain from 'require-again';
|
||||||
import {
|
import {
|
||||||
generateRes,
|
generateRes,
|
||||||
generateReq,
|
generateReq,
|
||||||
} from '../../../helpers/api-unit.helper';
|
} from '../../../helpers/api-unit.helper';
|
||||||
import { authWithHeaders as authWithHeadersFactory } from '../../../../website/server/middlewares/auth';
|
|
||||||
|
const authPath = '../../../../website/server/middlewares/auth';
|
||||||
|
|
||||||
describe('auth middleware', () => {
|
describe('auth middleware', () => {
|
||||||
let res; let req; let
|
let res; let req; let
|
||||||
@@ -16,6 +19,7 @@ describe('auth middleware', () => {
|
|||||||
|
|
||||||
describe('auth with headers', () => {
|
describe('auth with headers', () => {
|
||||||
it('allows to specify a list of user field that we do not want to load', done => {
|
it('allows to specify a list of user field that we do not want to load', done => {
|
||||||
|
const authWithHeadersFactory = requireAgain(authPath).authWithHeaders;
|
||||||
const authWithHeaders = authWithHeadersFactory({
|
const authWithHeaders = authWithHeadersFactory({
|
||||||
userFieldsToExclude: ['items'],
|
userFieldsToExclude: ['items'],
|
||||||
});
|
});
|
||||||
@@ -35,6 +39,7 @@ describe('auth middleware', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('makes sure some fields are always included', done => {
|
it('makes sure some fields are always included', done => {
|
||||||
|
const authWithHeadersFactory = requireAgain(authPath).authWithHeaders;
|
||||||
const authWithHeaders = authWithHeadersFactory({
|
const authWithHeaders = authWithHeadersFactory({
|
||||||
userFieldsToExclude: [
|
userFieldsToExclude: [
|
||||||
'items', 'auth.timestamps',
|
'items', 'auth.timestamps',
|
||||||
@@ -62,6 +67,7 @@ describe('auth middleware', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('errors with InvalidCredentialsError and code when token is wrong', done => {
|
it('errors with InvalidCredentialsError and code when token is wrong', done => {
|
||||||
|
const authWithHeadersFactory = requireAgain(authPath).authWithHeaders;
|
||||||
const authWithHeaders = authWithHeadersFactory({ userFieldsToExclude: [] });
|
const authWithHeaders = authWithHeadersFactory({ userFieldsToExclude: [] });
|
||||||
|
|
||||||
req.headers['x-api-user'] = user._id;
|
req.headers['x-api-user'] = user._id;
|
||||||
@@ -75,5 +81,41 @@ describe('auth middleware', () => {
|
|||||||
return done();
|
return done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('when ENFORCE_CLIENT_HEADER is true', () => {
|
||||||
|
let authFactory;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
sandbox.stub(nconf, 'get').withArgs('ENFORCE_CLIENT_HEADER').returns('true');
|
||||||
|
authFactory = requireAgain(authPath).authWithHeaders;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('errors with missingClientHeader when x-client header is not present', done => {
|
||||||
|
const authWithHeaders = authFactory({ userFieldsToExclude: [] });
|
||||||
|
|
||||||
|
req.headers['x-api-user'] = user._id;
|
||||||
|
req.headers['x-api-key'] = user;
|
||||||
|
authWithHeaders(req, res, err => {
|
||||||
|
expect(err).to.exist;
|
||||||
|
expect(err.name).to.equal('BadRequest');
|
||||||
|
expect(err.message).to.equal(res.t('missingClientHeader'));
|
||||||
|
return done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('allows request to pass when x-client header is present', done => {
|
||||||
|
const authWithHeaders = authFactory({ userFieldsToExclude: [] });
|
||||||
|
|
||||||
|
req.headers['x-api-user'] = user._id;
|
||||||
|
req.headers['x-api-key'] = user.apiToken;
|
||||||
|
req.headers['x-client'] = 'habitica-web';
|
||||||
|
|
||||||
|
authWithHeaders(req, res, err => {
|
||||||
|
if (err) return done(err);
|
||||||
|
expect(res.locals.user).to.exist;
|
||||||
|
return done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
206
test/api/unit/middlewares/blocker.test.js
Normal file
206
test/api/unit/middlewares/blocker.test.js
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
import nconf from 'nconf';
|
||||||
|
import requireAgain from 'require-again';
|
||||||
|
import {
|
||||||
|
generateRes,
|
||||||
|
generateReq,
|
||||||
|
generateNext,
|
||||||
|
} from '../../../helpers/api-unit.helper';
|
||||||
|
import { Forbidden } from '../../../../website/server/libs/errors';
|
||||||
|
import { apiError } from '../../../../website/server/libs/apiError';
|
||||||
|
import { model as Blocker } from '../../../../website/server/models/blocker';
|
||||||
|
|
||||||
|
function checkIPBlockedErrorThrown (next) {
|
||||||
|
expect(next).to.have.been.calledOnce;
|
||||||
|
const calledWith = next.getCall(0).args;
|
||||||
|
expect(calledWith[0].message).to.equal(apiError('ipAddressBlocked'));
|
||||||
|
expect(calledWith[0] instanceof Forbidden).to.equal(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkClientBlockedErrorThrown (next) {
|
||||||
|
expect(next).to.have.been.calledOnce;
|
||||||
|
const calledWith = next.getCall(0).args;
|
||||||
|
expect(calledWith[0].message).to.equal(apiError('clientBlocked'));
|
||||||
|
expect(calledWith[0] instanceof Forbidden).to.equal(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkErrorNotThrown (next) {
|
||||||
|
expect(next).to.have.been.calledOnce;
|
||||||
|
const calledWith = next.getCall(0).args;
|
||||||
|
expect(typeof calledWith[0] === 'undefined').to.equal(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('Blocker middleware', () => {
|
||||||
|
const pathToBlocker = '../../../../website/server/middlewares/blocker';
|
||||||
|
|
||||||
|
let res; let req; let next;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
res = generateRes();
|
||||||
|
req = generateReq();
|
||||||
|
next = generateNext();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Blocking IPs', () => {
|
||||||
|
it('is disabled when the env var is not defined', () => {
|
||||||
|
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns(undefined);
|
||||||
|
const attachBlocker = requireAgain(pathToBlocker).default;
|
||||||
|
attachBlocker(req, res, next);
|
||||||
|
|
||||||
|
checkErrorNotThrown(next);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('is disabled when the env var is an empty string', () => {
|
||||||
|
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns('');
|
||||||
|
const attachBlocker = requireAgain(pathToBlocker).default;
|
||||||
|
attachBlocker(req, res, next);
|
||||||
|
|
||||||
|
checkErrorNotThrown(next);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('is disabled when the env var contains comma separated empty strings', () => {
|
||||||
|
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns(' , , ');
|
||||||
|
const attachBlocker = requireAgain(pathToBlocker).default;
|
||||||
|
attachBlocker(req, res, next);
|
||||||
|
|
||||||
|
checkErrorNotThrown(next);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not throw when the ip does not match', () => {
|
||||||
|
req.ip = '192.168.1.1';
|
||||||
|
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns('192.168.1.2');
|
||||||
|
const attachBlocker = requireAgain(pathToBlocker).default;
|
||||||
|
attachBlocker(req, res, next);
|
||||||
|
|
||||||
|
checkErrorNotThrown(next);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not throw when the blocker IP does not match', async () => {
|
||||||
|
req.ip = '192.168.1.1';
|
||||||
|
sandbox.stub(Blocker, 'watchBlockers').returns({
|
||||||
|
on: (event, callback) => {
|
||||||
|
if (event === 'change') {
|
||||||
|
callback({ operation: 'add', blocker: { type: 'ipaddress', area: 'full', value: '192.168.1.2' } });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const attachBlocker = requireAgain(pathToBlocker).default;
|
||||||
|
attachBlocker(req, res, next);
|
||||||
|
|
||||||
|
checkErrorNotThrown(next);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not throw when a client is blocked', async () => {
|
||||||
|
sandbox.stub(Blocker, 'watchBlockers').returns({
|
||||||
|
on: (event, callback) => {
|
||||||
|
if (event === 'change') {
|
||||||
|
callback({ operation: 'add', blocker: { type: 'client', area: 'full', value: '192.168.1.1' } });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const attachBlocker = requireAgain(pathToBlocker).default;
|
||||||
|
attachBlocker(req, res, next);
|
||||||
|
|
||||||
|
checkErrorNotThrown(next);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws when the blocker IP is blocked', async () => {
|
||||||
|
req.ip = '192.168.1.1';
|
||||||
|
sandbox.stub(Blocker, 'watchBlockers').returns({
|
||||||
|
on: (event, callback) => {
|
||||||
|
if (event === 'change') {
|
||||||
|
callback({ operation: 'add', blocker: { type: 'ipaddress', area: 'full', value: '192.168.1.1' } });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const attachBlocker = requireAgain(pathToBlocker).default;
|
||||||
|
attachBlocker(req, res, next);
|
||||||
|
|
||||||
|
checkIPBlockedErrorThrown(next);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws when the ip is blocked', () => {
|
||||||
|
req.ip = '192.168.1.1';
|
||||||
|
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns('192.168.1.1');
|
||||||
|
const attachBlocker = requireAgain(pathToBlocker).default;
|
||||||
|
attachBlocker(req, res, next);
|
||||||
|
|
||||||
|
checkIPBlockedErrorThrown(next);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Blocking clients', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns('');
|
||||||
|
req.headers['x-client'] = 'test-client';
|
||||||
|
});
|
||||||
|
it('is disabled when no clients are blocked', () => {
|
||||||
|
const attachBlocker = requireAgain(pathToBlocker).default;
|
||||||
|
attachBlocker(req, res, next);
|
||||||
|
|
||||||
|
checkErrorNotThrown(next);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not throw when the client does not match', async () => {
|
||||||
|
sandbox.stub(Blocker, 'watchBlockers').returns({
|
||||||
|
on: (event, callback) => {
|
||||||
|
if (event === 'change') {
|
||||||
|
callback({ operation: 'add', blocker: { type: 'client', area: 'full', value: 'another-client' } });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const attachBlocker = requireAgain(pathToBlocker).default;
|
||||||
|
attachBlocker(req, res, next);
|
||||||
|
|
||||||
|
checkErrorNotThrown(next);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws when the client is blocked', async () => {
|
||||||
|
sandbox.stub(Blocker, 'watchBlockers').returns({
|
||||||
|
on: (event, callback) => {
|
||||||
|
if (event === 'change') {
|
||||||
|
callback({ operation: 'add', blocker: { type: 'client', area: 'full', value: 'test-client' } });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const attachBlocker = requireAgain(pathToBlocker).default;
|
||||||
|
attachBlocker(req, res, next);
|
||||||
|
|
||||||
|
checkClientBlockedErrorThrown(next);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not throw when an ip is blocked', async () => {
|
||||||
|
sandbox.stub(Blocker, 'watchBlockers').returns({
|
||||||
|
on: (event, callback) => {
|
||||||
|
if (event === 'change') {
|
||||||
|
callback({ operation: 'add', blocker: { type: 'ipaddress', area: 'full', value: 'test-client' } });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const attachBlocker = requireAgain(pathToBlocker).default;
|
||||||
|
attachBlocker(req, res, next);
|
||||||
|
|
||||||
|
checkErrorNotThrown(next);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('updates the list when data changes', async () => {
|
||||||
|
let blockCallback;
|
||||||
|
sandbox.stub(Blocker, 'watchBlockers').returns({
|
||||||
|
on: (event, callback) => {
|
||||||
|
blockCallback = callback;
|
||||||
|
if (event === 'change') {
|
||||||
|
callback({ operation: 'add', blocker: { type: 'client', area: 'full', value: 'another-client' } });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const attachBlocker = requireAgain(pathToBlocker).default;
|
||||||
|
attachBlocker(req, res, next);
|
||||||
|
checkErrorNotThrown(next);
|
||||||
|
blockCallback({ operation: 'add', blocker: { type: 'client', area: 'full', value: 'test-client' } });
|
||||||
|
attachBlocker(req, res, next);
|
||||||
|
expect(next).to.have.been.calledTwice;
|
||||||
|
const calledWith = next.getCall(1).args;
|
||||||
|
expect(calledWith[0].message).to.equal(apiError('clientBlocked'));
|
||||||
|
expect(calledWith[0] instanceof Forbidden).to.equal(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
import nconf from 'nconf';
|
|
||||||
import requireAgain from 'require-again';
|
|
||||||
import {
|
|
||||||
generateRes,
|
|
||||||
generateReq,
|
|
||||||
generateNext,
|
|
||||||
} from '../../../helpers/api-unit.helper';
|
|
||||||
import { Forbidden } from '../../../../website/server/libs/errors';
|
|
||||||
import { apiError } from '../../../../website/server/libs/apiError';
|
|
||||||
|
|
||||||
function checkErrorThrown (next) {
|
|
||||||
expect(next).to.have.been.calledOnce;
|
|
||||||
const calledWith = next.getCall(0).args;
|
|
||||||
expect(calledWith[0].message).to.equal(apiError('ipAddressBlocked'));
|
|
||||||
expect(calledWith[0] instanceof Forbidden).to.equal(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkErrorNotThrown (next) {
|
|
||||||
expect(next).to.have.been.calledOnce;
|
|
||||||
const calledWith = next.getCall(0).args;
|
|
||||||
expect(typeof calledWith[0] === 'undefined').to.equal(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
describe('ipBlocker middleware', () => {
|
|
||||||
const pathToIpBlocker = '../../../../website/server/middlewares/ipBlocker';
|
|
||||||
|
|
||||||
let res; let req; let next;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
res = generateRes();
|
|
||||||
req = generateReq();
|
|
||||||
next = generateNext();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('is disabled when the env var is not defined', () => {
|
|
||||||
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns(undefined);
|
|
||||||
const attachIpBlocker = requireAgain(pathToIpBlocker).default;
|
|
||||||
attachIpBlocker(req, res, next);
|
|
||||||
|
|
||||||
checkErrorNotThrown(next);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('is disabled when the env var is an empty string', () => {
|
|
||||||
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns('');
|
|
||||||
const attachIpBlocker = requireAgain(pathToIpBlocker).default;
|
|
||||||
attachIpBlocker(req, res, next);
|
|
||||||
|
|
||||||
checkErrorNotThrown(next);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('is disabled when the env var contains comma separated empty strings', () => {
|
|
||||||
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns(' , , ');
|
|
||||||
const attachIpBlocker = requireAgain(pathToIpBlocker).default;
|
|
||||||
attachIpBlocker(req, res, next);
|
|
||||||
|
|
||||||
checkErrorNotThrown(next);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('does not throw when the ip does not match', () => {
|
|
||||||
req.ip = '192.168.1.1';
|
|
||||||
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns('192.168.1.2');
|
|
||||||
const attachIpBlocker = requireAgain(pathToIpBlocker).default;
|
|
||||||
attachIpBlocker(req, res, next);
|
|
||||||
|
|
||||||
checkErrorNotThrown(next);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('throws when the ip is blocked', () => {
|
|
||||||
req.ip = '192.168.1.1';
|
|
||||||
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns('192.168.1.1');
|
|
||||||
const attachIpBlocker = requireAgain(pathToIpBlocker).default;
|
|
||||||
attachIpBlocker(req, res, next);
|
|
||||||
|
|
||||||
checkErrorThrown(next);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,9 +1,13 @@
|
|||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
import requireAgain from 'require-again';
|
||||||
import { model as User } from '../../../../website/server/models/user';
|
import { model as User } from '../../../../website/server/models/user';
|
||||||
import { model as NewsPost } from '../../../../website/server/models/newsPost';
|
import { model as NewsPost } from '../../../../website/server/models/newsPost';
|
||||||
import { model as Group } from '../../../../website/server/models/group';
|
import { model as Group } from '../../../../website/server/models/group';
|
||||||
|
import { model as Blocker } from '../../../../website/server/models/blocker';
|
||||||
import common from '../../../../website/common';
|
import common from '../../../../website/common';
|
||||||
|
|
||||||
|
const pathToUserSchema = '../../../../website/server/models/user/schema';
|
||||||
|
|
||||||
describe('User Model', () => {
|
describe('User Model', () => {
|
||||||
describe('.toJSON()', () => {
|
describe('.toJSON()', () => {
|
||||||
it('keeps user._tmp when calling .toJSON', () => {
|
it('keeps user._tmp when calling .toJSON', () => {
|
||||||
@@ -912,4 +916,73 @@ describe('User Model', () => {
|
|||||||
expect(user.toJSON().flags.newStuff).to.equal(true);
|
expect(user.toJSON().flags.newStuff).to.equal(true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('validates email', () => {
|
||||||
|
it('does not throw an error for a valid email', () => {
|
||||||
|
const user = new User();
|
||||||
|
user.auth.local.email = 'hello@example.com';
|
||||||
|
const errors = user.validateSync();
|
||||||
|
expect(errors.errors['auth.local.email']).to.not.exist;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws an error if email is not valid', () => {
|
||||||
|
const user = new User();
|
||||||
|
user.auth.local.email = 'invalid-email';
|
||||||
|
const errors = user.validateSync();
|
||||||
|
expect(errors.errors['auth.local.email'].message).to.equal(common.i18n.t('invalidEmail'));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws an error if email is using a restricted domain', () => {
|
||||||
|
const user = new User();
|
||||||
|
user.auth.local.email = 'scammer@habitica.com';
|
||||||
|
const errors = user.validateSync();
|
||||||
|
expect(errors.errors['auth.local.email'].message).to.equal(common.i18n.t('invalidEmailDomain', { domains: 'habitica.com, habitrpg.com' }));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws an error if email was blocked specifically', () => {
|
||||||
|
sandbox.stub(Blocker, 'watchBlockers').returns({
|
||||||
|
on: (event, callback) => {
|
||||||
|
callback({ operation: 'add', blocker: { type: 'email', area: 'full', value: 'blocked@example.com' } });
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const schema = requireAgain(pathToUserSchema).UserSchema;
|
||||||
|
const valid = schema.paths['auth.local.email'].options.validate.every(v => v.validator('blocked@example.com'));
|
||||||
|
expect(valid).to.equal(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws an error if email domain was blocked', () => {
|
||||||
|
sandbox.stub(Blocker, 'watchBlockers').returns({
|
||||||
|
on: (event, callback) => {
|
||||||
|
callback({ operation: 'add', blocker: { type: 'email', area: 'full', value: '@example.com' } });
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const schema = requireAgain(pathToUserSchema).UserSchema;
|
||||||
|
const valid = schema.paths['auth.local.email'].options.validate.every(v => v.validator('blocked@example.com'));
|
||||||
|
expect(valid).to.equal(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws an error if user portion of email was blocked', () => {
|
||||||
|
sandbox.stub(Blocker, 'watchBlockers').returns({
|
||||||
|
on: (event, callback) => {
|
||||||
|
callback({ operation: 'add', blocker: { type: 'email', area: 'full', value: 'blocked@' } });
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const schema = requireAgain(pathToUserSchema).UserSchema;
|
||||||
|
const valid = schema.paths['auth.local.email'].options.validate.every(v => v.validator('blocked@example.com'));
|
||||||
|
expect(valid).to.equal(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not throw an error if email is not blocked', () => {
|
||||||
|
sandbox.stub(Blocker, 'watchBlockers').returns({
|
||||||
|
on: (event, callback) => {
|
||||||
|
callback({ operation: 'add', blocker: { type: 'email', area: 'full', value: '@example.com' } });
|
||||||
|
callback({ operation: 'add', blocker: { type: 'email', area: 'full', value: 'blocked@' } });
|
||||||
|
callback({ operation: 'add', blocker: { type: 'email', area: 'full', value: 'bad@test.com' } });
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const schema = requireAgain(pathToUserSchema).UserSchema;
|
||||||
|
const valid = schema.paths['auth.local.email'].options.validate.every(v => v.validator('good@test.com'));
|
||||||
|
expect(valid).to.equal(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -209,6 +209,9 @@ export default {
|
|||||||
return response;
|
return response;
|
||||||
}, error => { // Set up Error interceptors
|
}, error => { // Set up Error interceptors
|
||||||
if (error.response.status >= 400) {
|
if (error.response.status >= 400) {
|
||||||
|
if (!error.response) {
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
const isBanned = this.checkForBannedUser(error);
|
const isBanned = this.checkForBannedUser(error);
|
||||||
if (isBanned === true) return null; // eslint-disable-line consistent-return
|
if (isBanned === true) return null; // eslint-disable-line consistent-return
|
||||||
|
|
||||||
|
|||||||
@@ -177,7 +177,7 @@
|
|||||||
height: 96px;
|
height: 96px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Mount_Head_Gryphon-Gryphatrice, .Mount_Body_Gryphon-Gryphatrice {
|
.Mount_Head_Gryphon-Gryphatrice, .Mount_Body_Gryphon-Gryphatrice, .Mount_Head_Dragon-Hydra, .Mount_Body_Dragon-Hydra {
|
||||||
width: 135px;
|
width: 135px;
|
||||||
height: 135px;
|
height: 135px;
|
||||||
}
|
}
|
||||||
@@ -190,6 +190,14 @@
|
|||||||
background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Mount-Body-Gryphatrice.gif") no-repeat;
|
background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Mount-Body-Gryphatrice.gif") no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.Mount_Head_Dragon-Hydra {
|
||||||
|
background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Head_Dragon-Hydra.gif") no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Mount_Body_Dragon-Hydra {
|
||||||
|
background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Body_Dragon-Hydra.gif") no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
.background_airship, .background_clocktower, .background_steamworks {
|
.background_airship, .background_clocktower, .background_steamworks {
|
||||||
width: 141px;
|
width: 141px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
|
|||||||
@@ -2191,6 +2191,11 @@
|
|||||||
width: 141px;
|
width: 141px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
|
.background_sunny_street_with_shops {
|
||||||
|
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_sunny_street_with_shops.png');
|
||||||
|
width: 141px;
|
||||||
|
height: 147px;
|
||||||
|
}
|
||||||
.background_sunset_meadow {
|
.background_sunset_meadow {
|
||||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_sunset_meadow.png');
|
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_sunset_meadow.png');
|
||||||
width: 141px;
|
width: 141px;
|
||||||
@@ -29900,6 +29905,11 @@
|
|||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
|
.broad_armor_armoire_redWaistcoat {
|
||||||
|
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_redWaistcoat.png');
|
||||||
|
width: 114px;
|
||||||
|
height: 90px;
|
||||||
|
}
|
||||||
.broad_armor_armoire_robeOfDiamonds {
|
.broad_armor_armoire_robeOfDiamonds {
|
||||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_robeOfDiamonds.png');
|
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_robeOfDiamonds.png');
|
||||||
width: 114px;
|
width: 114px;
|
||||||
@@ -30535,6 +30545,11 @@
|
|||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
|
.head_armoire_redNewsieHat {
|
||||||
|
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_redNewsieHat.png');
|
||||||
|
width: 114px;
|
||||||
|
height: 90px;
|
||||||
|
}
|
||||||
.head_armoire_regalCrown {
|
.head_armoire_regalCrown {
|
||||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_regalCrown.png');
|
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_regalCrown.png');
|
||||||
width: 114px;
|
width: 114px;
|
||||||
@@ -31475,6 +31490,11 @@
|
|||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
|
.slim_armor_armoire_redWaistcoat {
|
||||||
|
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_redWaistcoat.png');
|
||||||
|
width: 114px;
|
||||||
|
height: 90px;
|
||||||
|
}
|
||||||
.slim_armor_armoire_robeOfDiamonds {
|
.slim_armor_armoire_robeOfDiamonds {
|
||||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_robeOfDiamonds.png');
|
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_robeOfDiamonds.png');
|
||||||
width: 114px;
|
width: 114px;
|
||||||
@@ -35635,6 +35655,16 @@
|
|||||||
width: 114px;
|
width: 114px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
|
.shield_mystery_202508 {
|
||||||
|
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_mystery_202508.png');
|
||||||
|
width: 117px;
|
||||||
|
height: 120px;
|
||||||
|
}
|
||||||
|
.weapon_mystery_202508 {
|
||||||
|
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_mystery_202508.png');
|
||||||
|
width: 117px;
|
||||||
|
height: 120px;
|
||||||
|
}
|
||||||
.broad_armor_mystery_301404 {
|
.broad_armor_mystery_301404 {
|
||||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_301404.png');
|
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_301404.png');
|
||||||
width: 90px;
|
width: 90px;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="row standard-page col-12 d-flex justify-content-center">
|
<div class="row standard-page col-12 d-flex justify-content-center">
|
||||||
<div class="admin-panel-content">
|
<div class="admin-panel-content">
|
||||||
<h1>Admin Panel</h1>
|
<h1>{{ $t("adminPanel") }}</h1>
|
||||||
<form
|
<form
|
||||||
class="form-inline"
|
class="form-inline"
|
||||||
@submit.prevent="searchUsers(userIdentifier)"
|
@submit.prevent="searchUsers(userIdentifier)"
|
||||||
@@ -72,7 +72,7 @@ export default {
|
|||||||
},
|
},
|
||||||
mounted () {
|
mounted () {
|
||||||
this.$store.dispatch('common:setTitle', {
|
this.$store.dispatch('common:setTitle', {
|
||||||
section: 'Admin Panel',
|
section: this.$t('adminPanel'),
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import VueRouter from 'vue-router';
|
import VueRouter from 'vue-router';
|
||||||
import { mapState } from '@/libs/store';
|
import { mapState } from '@/libs/store';
|
||||||
import LoadingSpinner from '../ui/loadingSpinner';
|
import LoadingSpinner from '../../ui/loadingSpinner';
|
||||||
|
|
||||||
const { isNavigationFailure, NavigationFailureType } = VueRouter;
|
const { isNavigationFailure, NavigationFailureType } = VueRouter;
|
||||||
|
|
||||||
@@ -38,12 +38,17 @@
|
|||||||
>
|
>
|
||||||
<div class="custom-control custom-checkbox">
|
<div class="custom-control custom-checkbox">
|
||||||
<input
|
<input
|
||||||
|
:id="permission.key"
|
||||||
v-model="hero.permissions[permission.key]"
|
v-model="hero.permissions[permission.key]"
|
||||||
:disabled="!hasPermission(user, permission.key)"
|
:disabled="!hasPermission(user, permission.key)
|
||||||
|
|| (hero.permissions.fullAccess && permission.key !== 'fullAccess')"
|
||||||
class="custom-control-input"
|
class="custom-control-input"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
>
|
>
|
||||||
<label class="custom-control-label">
|
<label
|
||||||
|
class="custom-control-label"
|
||||||
|
:for="permission.key"
|
||||||
|
>
|
||||||
{{ permission.name }}<br>
|
{{ permission.name }}<br>
|
||||||
<small class="text-secondary">{{ permission.description }}</small>
|
<small class="text-secondary">{{ permission.description }}</small>
|
||||||
</label>
|
</label>
|
||||||
@@ -124,7 +129,10 @@
|
|||||||
value="Save"
|
value="Save"
|
||||||
class="btn btn-primary mt-1"
|
class="btn btn-primary mt-1"
|
||||||
>
|
>
|
||||||
<b v-if="hasUnsavedChanges" class="text-warning float-right">
|
<b
|
||||||
|
v-if="hasUnsavedChanges"
|
||||||
|
class="text-warning float-right"
|
||||||
|
>
|
||||||
Unsaved changes
|
Unsaved changes
|
||||||
</b>
|
</b>
|
||||||
</div>
|
</div>
|
||||||
@@ -147,7 +155,7 @@ import markdownDirective from '@/directives/markdown';
|
|||||||
import saveHero from '../mixins/saveHero';
|
import saveHero from '../mixins/saveHero';
|
||||||
|
|
||||||
import { mapState } from '@/libs/store';
|
import { mapState } from '@/libs/store';
|
||||||
import { userStateMixin } from '../../../mixins/userState';
|
import { userStateMixin } from '../../../../mixins/userState';
|
||||||
|
|
||||||
const permissionList = [
|
const permissionList = [
|
||||||
{
|
{
|
||||||
@@ -175,6 +183,11 @@ const permissionList = [
|
|||||||
name: 'Challenge Admin',
|
name: 'Challenge Admin',
|
||||||
description: 'Can create official habitica challenges and admin all challenges',
|
description: 'Can create official habitica challenges and admin all challenges',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: 'accessControl',
|
||||||
|
name: 'Access Control',
|
||||||
|
description: 'Can manage IP-Address, Client and E-Mail blockers',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
key: 'coupons',
|
key: 'coupons',
|
||||||
name: 'Coupon Creator',
|
name: 'Coupon Creator',
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
|
|
||||||
<contributor-details
|
<contributor-details
|
||||||
:hero="hero"
|
:hero="hero"
|
||||||
:hasUnsavedChanges="hasUnsavedChanges(
|
:has-unsaved-changes="hasUnsavedChanges(
|
||||||
[hero.contributor, unModifiedHero.contributor],
|
[hero.contributor, unModifiedHero.contributor],
|
||||||
[hero.permissions, unModifiedHero.permissions],
|
[hero.permissions, unModifiedHero.permissions],
|
||||||
[hero.secret, unModifiedHero.secret],
|
[hero.secret, unModifiedHero.secret],
|
||||||
@@ -149,7 +149,7 @@ import Achievements from './achievements.vue';
|
|||||||
import UserHistory from './userHistory.vue';
|
import UserHistory from './userHistory.vue';
|
||||||
import Stats from './stats.vue';
|
import Stats from './stats.vue';
|
||||||
|
|
||||||
import { userStateMixin } from '../../../mixins/userState';
|
import { userStateMixin } from '../../../../mixins/userState';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@@ -55,7 +55,9 @@
|
|||||||
<strong class="col-sm-9 col-form-label">
|
<strong class="col-sm-9 col-form-label">
|
||||||
<span v-if="userIsPartyLeader">User is the party leader</span>
|
<span v-if="userIsPartyLeader">User is the party leader</span>
|
||||||
<span v-else>Party leader is
|
<span v-else>Party leader is
|
||||||
<router-link :to="{'name': 'userProfile', 'params': {'userId': groupPartyData.leader}}">
|
<router-link
|
||||||
|
:to="{'name': 'userProfile', 'params': {'userId': groupPartyData.leader}}"
|
||||||
|
>
|
||||||
{{ groupPartyData.leader }}
|
{{ groupPartyData.leader }}
|
||||||
</router-link>
|
</router-link>
|
||||||
</span>
|
</span>
|
||||||
@@ -63,7 +65,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="btn btn-danger"
|
class="btn btn-danger"
|
||||||
@click="removeFromParty()">Remove from Party</div>
|
@click="removeFromParty()"
|
||||||
|
>
|
||||||
|
Remove from Party
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<strong v-else>User is not in a party.</strong>
|
<strong v-else>User is not in a party.</strong>
|
||||||
<div class="subsection-start">
|
<div class="subsection-start">
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<form @submit.prevent="saveHero({hero: {
|
<form
|
||||||
|
@submit.prevent="saveHero({hero: {
|
||||||
_id: hero._id,
|
_id: hero._id,
|
||||||
flags: hero.flags,
|
flags: hero.flags,
|
||||||
balance: hero.balance,
|
balance: hero.balance,
|
||||||
auth: hero.auth,
|
auth: hero.auth,
|
||||||
secret: hero.secret,
|
secret: hero.secret,
|
||||||
}, msg: 'Privileges or Gems or Moderation Notes'})">
|
}, msg: 'Privileges or Gems or Moderation Notes'})"
|
||||||
|
>
|
||||||
<div class="card mt-2">
|
<div class="card mt-2">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h3
|
<h3
|
||||||
@@ -14,7 +16,10 @@
|
|||||||
@click="expand = !expand"
|
@click="expand = !expand"
|
||||||
>
|
>
|
||||||
Privileges, Gem Balance
|
Privileges, Gem Balance
|
||||||
<b v-if="hasUnsavedChanges && !expand" class="text-warning float-right">
|
<b
|
||||||
|
v-if="hasUnsavedChanges && !expand"
|
||||||
|
class="text-warning float-right"
|
||||||
|
>
|
||||||
Unsaved changes
|
Unsaved changes
|
||||||
</b>
|
</b>
|
||||||
</h3>
|
</h3>
|
||||||
@@ -133,7 +138,10 @@
|
|||||||
value="Save"
|
value="Save"
|
||||||
class="btn btn-primary mt-1"
|
class="btn btn-primary mt-1"
|
||||||
>
|
>
|
||||||
<b v-if="hasUnsavedChanges" class="text-warning float-right">
|
<b
|
||||||
|
v-if="hasUnsavedChanges"
|
||||||
|
class="text-warning float-right"
|
||||||
|
>
|
||||||
Unsaved changes
|
Unsaved changes
|
||||||
</b>
|
</b>
|
||||||
</div>
|
</div>
|
||||||
@@ -8,7 +8,10 @@
|
|||||||
@click="expand = !expand"
|
@click="expand = !expand"
|
||||||
>
|
>
|
||||||
Stats
|
Stats
|
||||||
<b v-if="hasUnsavedChanges && !expand" class="text-warning float-right">
|
<b
|
||||||
|
v-if="hasUnsavedChanges && !expand"
|
||||||
|
class="text-warning float-right"
|
||||||
|
>
|
||||||
Unsaved changes
|
Unsaved changes
|
||||||
</b>
|
</b>
|
||||||
</h3>
|
</h3>
|
||||||
@@ -18,33 +21,38 @@
|
|||||||
class="card-body"
|
class="card-body"
|
||||||
>
|
>
|
||||||
<stats-row
|
<stats-row
|
||||||
|
v-model="hero.stats.hp"
|
||||||
label="Health"
|
label="Health"
|
||||||
color="red-label"
|
color="red-label"
|
||||||
:max="maxHealth"
|
:max="maxHealth"
|
||||||
v-model="hero.stats.hp" />
|
/>
|
||||||
<stats-row
|
<stats-row
|
||||||
|
v-model="hero.stats.exp"
|
||||||
label="Experience"
|
label="Experience"
|
||||||
color="yellow-label"
|
color="yellow-label"
|
||||||
min="0"
|
min="0"
|
||||||
:max="maxFieldHardCap"
|
:max="maxFieldHardCap"
|
||||||
v-model="hero.stats.exp" />
|
/>
|
||||||
<stats-row
|
<stats-row
|
||||||
|
v-model="hero.stats.mp"
|
||||||
label="Mana"
|
label="Mana"
|
||||||
color="blue-label"
|
color="blue-label"
|
||||||
min="0"
|
min="0"
|
||||||
:max="maxFieldHardCap"
|
:max="maxFieldHardCap"
|
||||||
v-model="hero.stats.mp" />
|
/>
|
||||||
<stats-row
|
<stats-row
|
||||||
|
v-model="hero.stats.lvl"
|
||||||
label="Level"
|
label="Level"
|
||||||
step="1"
|
step="1"
|
||||||
min="0"
|
min="0"
|
||||||
:max="maxLevelHardCap"
|
:max="maxLevelHardCap"
|
||||||
v-model="hero.stats.lvl" />
|
/>
|
||||||
<stats-row
|
<stats-row
|
||||||
|
v-model="hero.stats.gp"
|
||||||
label="Gold"
|
label="Gold"
|
||||||
min="0"
|
min="0"
|
||||||
:max="maxFieldHardCap"
|
:max="maxFieldHardCap"
|
||||||
v-model="hero.stats.gp" />
|
/>
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-3 col-form-label">Selected Class</label>
|
<label class="col-sm-3 col-form-label">Selected Class</label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
@@ -54,10 +62,18 @@
|
|||||||
class="form-control"
|
class="form-control"
|
||||||
:disabled="hero.stats.lvl < 10"
|
:disabled="hero.stats.lvl < 10"
|
||||||
>
|
>
|
||||||
<option value="warrior">Warrior</option>
|
<option value="warrior">
|
||||||
<option value="wizard">Mage</option>
|
Warrior
|
||||||
<option value="healer">Healer</option>
|
</option>
|
||||||
<option value="rogue">Rogue</option>
|
<option value="wizard">
|
||||||
|
Mage
|
||||||
|
</option>
|
||||||
|
<option value="healer">
|
||||||
|
Healer
|
||||||
|
</option>
|
||||||
|
<option value="rogue">
|
||||||
|
Rogue
|
||||||
|
</option>
|
||||||
</select>
|
</select>
|
||||||
<small>
|
<small>
|
||||||
When changing class, players usually need stat points deallocated as well.
|
When changing class, players usually need stat points deallocated as well.
|
||||||
@@ -67,50 +83,59 @@
|
|||||||
|
|
||||||
<h3>Stat Points</h3>
|
<h3>Stat Points</h3>
|
||||||
<stats-row
|
<stats-row
|
||||||
|
v-model="hero.stats.points"
|
||||||
label="Unallocated"
|
label="Unallocated"
|
||||||
min="0"
|
min="0"
|
||||||
step="1"
|
step="1"
|
||||||
:max="maxStatPoints"
|
:max="maxStatPoints"
|
||||||
v-model="hero.stats.points" />
|
/>
|
||||||
<stats-row
|
<stats-row
|
||||||
|
v-model="hero.stats.str"
|
||||||
label="Strength"
|
label="Strength"
|
||||||
color="red-label"
|
color="red-label"
|
||||||
min="0"
|
min="0"
|
||||||
:max="maxStatPoints"
|
:max="maxStatPoints"
|
||||||
step="1"
|
step="1"
|
||||||
v-model="hero.stats.str" />
|
/>
|
||||||
<stats-row
|
<stats-row
|
||||||
|
v-model="hero.stats.int"
|
||||||
label="Intelligence"
|
label="Intelligence"
|
||||||
color="blue-label"
|
color="blue-label"
|
||||||
min="0"
|
min="0"
|
||||||
:max="maxStatPoints"
|
:max="maxStatPoints"
|
||||||
step="1"
|
step="1"
|
||||||
v-model="hero.stats.int" />
|
/>
|
||||||
<stats-row
|
<stats-row
|
||||||
|
v-model="hero.stats.per"
|
||||||
label="Perception"
|
label="Perception"
|
||||||
color="purple-label"
|
color="purple-label"
|
||||||
min="0"
|
min="0"
|
||||||
:max="maxStatPoints"
|
:max="maxStatPoints"
|
||||||
step="1"
|
step="1"
|
||||||
v-model="hero.stats.per" />
|
/>
|
||||||
<stats-row
|
<stats-row
|
||||||
|
v-model="hero.stats.con"
|
||||||
label="Constitution"
|
label="Constitution"
|
||||||
color="yellow-label"
|
color="yellow-label"
|
||||||
min="0"
|
min="0"
|
||||||
:max="maxStatPoints"
|
:max="maxStatPoints"
|
||||||
step="1"
|
step="1"
|
||||||
v-model="hero.stats.con" />
|
/>
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<div class="offset-sm-3 col-sm-9">
|
<div class="offset-sm-3 col-sm-9">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="btn btn-warning btn-sm"
|
class="btn btn-warning btn-sm"
|
||||||
@click="deallocateStatPoints">
|
@click="deallocateStatPoints"
|
||||||
|
>
|
||||||
Deallocate all stat points
|
Deallocate all stat points
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row" v-if="statPointsIncorrect">
|
<div
|
||||||
|
v-if="statPointsIncorrect"
|
||||||
|
class="form-group row"
|
||||||
|
>
|
||||||
<div class="offset-sm-3 col-sm-9 text-danger">
|
<div class="offset-sm-3 col-sm-9 text-danger">
|
||||||
Error: Sum of stat points should equal the users level
|
Error: Sum of stat points should equal the users level
|
||||||
</div>
|
</div>
|
||||||
@@ -118,35 +143,40 @@
|
|||||||
|
|
||||||
<h3>Buffs</h3>
|
<h3>Buffs</h3>
|
||||||
<stats-row
|
<stats-row
|
||||||
|
v-model="hero.stats.buffs.str"
|
||||||
label="Strength"
|
label="Strength"
|
||||||
color="red-label"
|
color="red-label"
|
||||||
min="0"
|
min="0"
|
||||||
step="1"
|
step="1"
|
||||||
v-model="hero.stats.buffs.str" />
|
/>
|
||||||
<stats-row
|
<stats-row
|
||||||
|
v-model="hero.stats.buffs.int"
|
||||||
label="Intelligence"
|
label="Intelligence"
|
||||||
color="blue-label"
|
color="blue-label"
|
||||||
min="0"
|
min="0"
|
||||||
step="1"
|
step="1"
|
||||||
v-model="hero.stats.buffs.int" />
|
/>
|
||||||
<stats-row
|
<stats-row
|
||||||
|
v-model="hero.stats.buffs.per"
|
||||||
label="Perception"
|
label="Perception"
|
||||||
color="purple-label"
|
color="purple-label"
|
||||||
min="0"
|
min="0"
|
||||||
step="1"
|
step="1"
|
||||||
v-model="hero.stats.buffs.per" />
|
/>
|
||||||
<stats-row
|
<stats-row
|
||||||
|
v-model="hero.stats.buffs.con"
|
||||||
label="Constitution"
|
label="Constitution"
|
||||||
color="yellow-label"
|
color="yellow-label"
|
||||||
min="0"
|
min="0"
|
||||||
step="1"
|
step="1"
|
||||||
v-model="hero.stats.buffs.con" />
|
/>
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<div class="offset-sm-3 col-sm-9">
|
<div class="offset-sm-3 col-sm-9">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="btn btn-warning btn-sm"
|
class="btn btn-warning btn-sm"
|
||||||
@click="resetBuffs">
|
@click="resetBuffs"
|
||||||
|
>
|
||||||
Reset Buffs
|
Reset Buffs
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -161,7 +191,10 @@
|
|||||||
value="Save"
|
value="Save"
|
||||||
class="btn btn-primary mt-1"
|
class="btn btn-primary mt-1"
|
||||||
>
|
>
|
||||||
<b v-if="hasUnsavedChanges" class="text-warning float-right">
|
<b
|
||||||
|
v-if="hasUnsavedChanges"
|
||||||
|
class="text-warning float-right"
|
||||||
|
>
|
||||||
Unsaved changes
|
Unsaved changes
|
||||||
</b>
|
</b>
|
||||||
</div>
|
</div>
|
||||||
@@ -189,7 +222,7 @@ import markdownDirective from '@/directives/markdown';
|
|||||||
import saveHero from '../mixins/saveHero';
|
import saveHero from '../mixins/saveHero';
|
||||||
|
|
||||||
import { mapState } from '@/libs/store';
|
import { mapState } from '@/libs/store';
|
||||||
import { userStateMixin } from '../../../mixins/userState';
|
import { userStateMixin } from '../../../../mixins/userState';
|
||||||
|
|
||||||
import StatsRow from './stats-row';
|
import StatsRow from './stats-row';
|
||||||
|
|
||||||
@@ -6,14 +6,19 @@
|
|||||||
}, msg: 'Subscription Perks' })"
|
}, msg: 'Subscription Perks' })"
|
||||||
>
|
>
|
||||||
<div class="card mt-2">
|
<div class="card mt-2">
|
||||||
<div class="card-header"
|
<div
|
||||||
@click="expand = !expand">
|
class="card-header"
|
||||||
|
@click="expand = !expand"
|
||||||
|
>
|
||||||
<h3
|
<h3
|
||||||
class="mb-0 mt-0"
|
class="mb-0 mt-0"
|
||||||
:class="{ 'open': expand }"
|
:class="{ 'open': expand }"
|
||||||
>
|
>
|
||||||
Subscription, Monthly Perks
|
Subscription, Monthly Perks
|
||||||
<b v-if="hasUnsavedChanges && !expand" class="text-warning float-right">
|
<b
|
||||||
|
v-if="hasUnsavedChanges && !expand"
|
||||||
|
class="text-warning float-right"
|
||||||
|
>
|
||||||
Unsaved changes
|
Unsaved changes
|
||||||
</b>
|
</b>
|
||||||
</h3>
|
</h3>
|
||||||
@@ -29,10 +34,11 @@
|
|||||||
Payment method:
|
Payment method:
|
||||||
</label>
|
</label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<input v-model="hero.purchased.plan.paymentMethod"
|
<input
|
||||||
|
v-if="!isRegularPaymentMethod"
|
||||||
|
v-model="hero.purchased.plan.paymentMethod"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
type="text"
|
type="text"
|
||||||
v-if="!isRegularPaymentMethod"
|
|
||||||
>
|
>
|
||||||
<select
|
<select
|
||||||
v-else
|
v-else
|
||||||
@@ -40,14 +46,30 @@
|
|||||||
class="form-control"
|
class="form-control"
|
||||||
type="text"
|
type="text"
|
||||||
>
|
>
|
||||||
<option value="groupPlan">Group Plan</option>
|
<option value="groupPlan">
|
||||||
<option value="Stripe">Stripe</option>
|
Group Plan
|
||||||
<option value="Apple">Apple</option>
|
</option>
|
||||||
<option value="Google">Google</option>
|
<option value="Stripe">
|
||||||
<option value="Amazon Payments">Amazon</option>
|
Stripe
|
||||||
<option value="PayPal">PayPal</option>
|
</option>
|
||||||
<option value="Gift">Gift</option>
|
<option value="Apple">
|
||||||
<option value="">Clear out</option>
|
Apple
|
||||||
|
</option>
|
||||||
|
<option value="Google">
|
||||||
|
Google
|
||||||
|
</option>
|
||||||
|
<option value="Amazon Payments">
|
||||||
|
Amazon
|
||||||
|
</option>
|
||||||
|
<option value="PayPal">
|
||||||
|
PayPal
|
||||||
|
</option>
|
||||||
|
<option value="Gift">
|
||||||
|
Gift
|
||||||
|
</option>
|
||||||
|
<option value="">
|
||||||
|
Clear out
|
||||||
|
</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -58,10 +80,11 @@
|
|||||||
Payment schedule:
|
Payment schedule:
|
||||||
</label>
|
</label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<input v-model="hero.purchased.plan.planId"
|
<input
|
||||||
|
v-if="!isRegularPlanId"
|
||||||
|
v-model="hero.purchased.plan.planId"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
type="text"
|
type="text"
|
||||||
v-if="!isRegularPlanId"
|
|
||||||
>
|
>
|
||||||
<select
|
<select
|
||||||
v-else
|
v-else
|
||||||
@@ -69,13 +92,27 @@
|
|||||||
class="form-control"
|
class="form-control"
|
||||||
type="text"
|
type="text"
|
||||||
>
|
>
|
||||||
<option value="basic_earned">Monthly recurring</option>
|
<option value="basic_earned">
|
||||||
<option value="basic_3mo">3 Months recurring</option>
|
Monthly recurring
|
||||||
<option value="basic_6mo">6 Months recurring</option>
|
</option>
|
||||||
<option value="basic_12mo">12 Months recurring</option>
|
<option value="basic_3mo">
|
||||||
<option value="group_monthly">Group Plan (legacy)</option>
|
3 Months recurring
|
||||||
<option value="group_plan_auto">Group Plan (auto)</option>
|
</option>
|
||||||
<option value="">Clear out</option>
|
<option value="basic_6mo">
|
||||||
|
6 Months recurring
|
||||||
|
</option>
|
||||||
|
<option value="basic_12mo">
|
||||||
|
12 Months recurring
|
||||||
|
</option>
|
||||||
|
<option value="group_monthly">
|
||||||
|
Group Plan (legacy)
|
||||||
|
</option>
|
||||||
|
<option value="group_plan_auto">
|
||||||
|
Group Plan (auto)
|
||||||
|
</option>
|
||||||
|
<option value="">
|
||||||
|
Clear out
|
||||||
|
</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -93,27 +130,31 @@
|
|||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row"
|
<div
|
||||||
v-if="hero.purchased.plan.planId === 'group_plan_auto'">
|
v-if="hero.purchased.plan.planId === 'group_plan_auto'"
|
||||||
|
class="form-group row"
|
||||||
|
>
|
||||||
<label class="col-sm-3 col-form-label">
|
<label class="col-sm-3 col-form-label">
|
||||||
Group Plan Memberships:
|
Group Plan Memberships:
|
||||||
</label>
|
</label>
|
||||||
<div class="col-sm-9 col-form-label">
|
<div class="col-sm-9 col-form-label">
|
||||||
<loading-spinner
|
<loading-spinner
|
||||||
v-if="!groupPlans"
|
v-if="!groupPlans"
|
||||||
dark-color=true
|
dark-color="true"
|
||||||
/>
|
/>
|
||||||
<b
|
<b
|
||||||
v-else-if="groupPlans.length === 0"
|
v-else-if="groupPlans.length === 0"
|
||||||
class="text-danger col-form-label"
|
class="text-danger col-form-label"
|
||||||
>User is not part of an active group plan!</b>
|
>User is not part of an active group plan!</b>
|
||||||
<div
|
<div
|
||||||
v-else
|
|
||||||
v-for="group in groupPlans"
|
v-for="group in groupPlans"
|
||||||
|
v-else
|
||||||
:key="group._id"
|
:key="group._id"
|
||||||
class="card mb-2">
|
class="card mb-2"
|
||||||
|
>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h6 class="card-title">{{ group.name }}
|
<h6 class="card-title">
|
||||||
|
{{ group.name }}
|
||||||
<small class="float-right">{{ group._id }}</small>
|
<small class="float-right">{{ group._id }}</small>
|
||||||
</h6>
|
</h6>
|
||||||
<p class="card-text">
|
<p class="card-text">
|
||||||
@@ -122,7 +163,10 @@
|
|||||||
v-if="group.leader !== hero._id"
|
v-if="group.leader !== hero._id"
|
||||||
@click="switchUser(group.leader)"
|
@click="switchUser(group.leader)"
|
||||||
>{{ group.leader }}</a>
|
>{{ group.leader }}</a>
|
||||||
<strong v-else class="text-success">This user</strong>
|
<strong
|
||||||
|
v-else
|
||||||
|
class="text-success"
|
||||||
|
>This user</strong>
|
||||||
</p>
|
</p>
|
||||||
<p class="card-text">
|
<p class="card-text">
|
||||||
<strong>Members: </strong> {{ group.memberCount }}
|
<strong>Members: </strong> {{ group.memberCount }}
|
||||||
@@ -190,16 +234,21 @@
|
|||||||
<strong class="input-group-text">
|
<strong class="input-group-text">
|
||||||
{{ dateFormat(hero.purchased.plan.dateTerminated) }}
|
{{ dateFormat(hero.purchased.plan.dateTerminated) }}
|
||||||
</strong>
|
</strong>
|
||||||
<a class="btn btn-danger"
|
<a
|
||||||
href="#"
|
v-if="!hero.purchased.plan.dateTerminated && hero.purchased.plan.planId"
|
||||||
v-b-modal.sub_termination_modal
|
v-b-modal.sub_termination_modal
|
||||||
v-if="!hero.purchased.plan.dateTerminated && hero.purchased.plan.planId">
|
class="btn btn-danger"
|
||||||
|
href="#"
|
||||||
|
>
|
||||||
Terminate
|
Terminate
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<small v-if="!hero.purchased.plan.dateTerminated
|
<small
|
||||||
&& hero.purchased.plan.planId" class="text-success">
|
v-if="!hero.purchased.plan.dateTerminated
|
||||||
|
&& hero.purchased.plan.planId"
|
||||||
|
class="text-success"
|
||||||
|
>
|
||||||
The subscription does not have a termination date and is active.
|
The subscription does not have a termination date and is active.
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
@@ -235,9 +284,11 @@
|
|||||||
step="any"
|
step="any"
|
||||||
>
|
>
|
||||||
<div class="input-group-append">
|
<div class="input-group-append">
|
||||||
<a class="btn btn-warning"
|
<a
|
||||||
|
v-if="hero.purchased.plan.dateTerminated && hero.purchased.plan.extraMonths > 0"
|
||||||
|
class="btn btn-warning"
|
||||||
@click="applyExtraMonths"
|
@click="applyExtraMonths"
|
||||||
v-if="hero.purchased.plan.dateTerminated && hero.purchased.plan.extraMonths > 0">
|
>
|
||||||
Apply Credit
|
Apply Credit
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -339,19 +390,24 @@
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row"
|
<div
|
||||||
v-if="!isConvertingToGroupPlan && hero.purchased.plan.planId !== 'group_plan_auto'">
|
v-if="!isConvertingToGroupPlan && hero.purchased.plan.planId !== 'group_plan_auto'"
|
||||||
|
class="form-group row"
|
||||||
|
>
|
||||||
<div class="offset-sm-3 col-sm-9">
|
<div class="offset-sm-3 col-sm-9">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="btn btn-secondary btn-sm"
|
class="btn btn-secondary btn-sm"
|
||||||
@click="beginGroupPlanConvert">
|
@click="beginGroupPlanConvert"
|
||||||
|
>
|
||||||
Begin converting to group plan subscription
|
Begin converting to group plan subscription
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row"
|
<div
|
||||||
v-if="isConvertingToGroupPlan">
|
v-if="isConvertingToGroupPlan"
|
||||||
|
class="form-group row"
|
||||||
|
>
|
||||||
<label class="col-sm-3 col-form-label">
|
<label class="col-sm-3 col-form-label">
|
||||||
Group Plan group ID:
|
Group Plan group ID:
|
||||||
</label>
|
</label>
|
||||||
@@ -374,25 +430,40 @@
|
|||||||
class="btn btn-primary mt-1"
|
class="btn btn-primary mt-1"
|
||||||
@click="saveClicked"
|
@click="saveClicked"
|
||||||
>
|
>
|
||||||
<b v-if="hasUnsavedChanges" class="text-warning float-right">
|
<b
|
||||||
|
v-if="hasUnsavedChanges"
|
||||||
|
class="text-warning float-right"
|
||||||
|
>
|
||||||
Unsaved changes
|
Unsaved changes
|
||||||
</b>
|
</b>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<b-modal id="sub_termination_modal" title="Set Termination Date">
|
<b-modal
|
||||||
|
id="sub_termination_modal"
|
||||||
|
title="Set Termination Date"
|
||||||
|
>
|
||||||
<p>
|
<p>
|
||||||
You can set the sub benefit termination date to today or to the last
|
You can set the sub benefit termination date to today or to the last
|
||||||
day of the current billing cycle. Any extra subscription credit will
|
day of the current billing cycle. Any extra subscription credit will
|
||||||
then be processed and automatically added onto the selected date.
|
then be processed and automatically added onto the selected date.
|
||||||
</p>
|
</p>
|
||||||
<template #modal-footer>
|
<template #modal-footer>
|
||||||
<div class="mt-3 btn btn-secondary" @click="$bvModal.hide('sub_termination_modal')">
|
<div
|
||||||
|
class="mt-3 btn btn-secondary"
|
||||||
|
@click="$bvModal.hide('sub_termination_modal')"
|
||||||
|
>
|
||||||
Close
|
Close
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-3 btn btn-danger" @click="terminateSubscription()">
|
<div
|
||||||
|
class="mt-3 btn btn-danger"
|
||||||
|
@click="terminateSubscription()"
|
||||||
|
>
|
||||||
Set to Today
|
Set to Today
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-3 btn btn-danger" @click="terminateSubscription(todayWithRemainingCycle)">
|
<div
|
||||||
|
class="mt-3 btn btn-danger"
|
||||||
|
@click="terminateSubscription(todayWithRemainingCycle)"
|
||||||
|
>
|
||||||
Set to {{ todayWithRemainingCycle.utc().format('MM/DD/YYYY') }}
|
Set to {{ todayWithRemainingCycle.utc().format('MM/DD/YYYY') }}
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -420,15 +491,15 @@
|
|||||||
import isUUID from 'validator/es/lib/isUUID';
|
import isUUID from 'validator/es/lib/isUUID';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import { getPlanContext } from '@/../../common/script/cron';
|
import { getPlanContext } from '@/../../common/script/cron';
|
||||||
|
import subscriptionBlocks from '@/../../common/script/content/subscriptionBlocks';
|
||||||
import saveHero from '../mixins/saveHero';
|
import saveHero from '../mixins/saveHero';
|
||||||
import subscriptionBlocks from '../../../../../common/script/content/subscriptionBlocks';
|
|
||||||
import LoadingSpinner from '@/components/ui/loadingSpinner';
|
import LoadingSpinner from '@/components/ui/loadingSpinner';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
mixins: [saveHero],
|
|
||||||
components: {
|
components: {
|
||||||
LoadingSpinner,
|
LoadingSpinner,
|
||||||
},
|
},
|
||||||
|
mixins: [saveHero],
|
||||||
props: {
|
props: {
|
||||||
hero: {
|
hero: {
|
||||||
type: Object,
|
type: Object,
|
||||||
@@ -22,8 +22,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import PurchaseHistoryTable from '../../ui/purchaseHistoryTable.vue';
|
import PurchaseHistoryTable from '../../../ui/purchaseHistoryTable.vue';
|
||||||
import { userStateMixin } from '../../../mixins/userState';
|
import { userStateMixin } from '../../../../mixins/userState';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import { userStateMixin } from '../../../mixins/userState';
|
import { userStateMixin } from '../../../../mixins/userState';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
filters: {
|
filters: {
|
||||||
@@ -13,7 +13,10 @@
|
|||||||
@click="expand = !expand"
|
@click="expand = !expand"
|
||||||
>
|
>
|
||||||
User Profile
|
User Profile
|
||||||
<b v-if="hasUnsavedChanges && !expand" class="text-warning float-right">
|
<b
|
||||||
|
v-if="hasUnsavedChanges && !expand"
|
||||||
|
class="text-warning float-right"
|
||||||
|
>
|
||||||
Unsaved changes
|
Unsaved changes
|
||||||
</b>
|
</b>
|
||||||
</h3>
|
</h3>
|
||||||
@@ -66,7 +69,10 @@
|
|||||||
value="Save"
|
value="Save"
|
||||||
class="btn btn-primary mt-1"
|
class="btn btn-primary mt-1"
|
||||||
>
|
>
|
||||||
<b v-if="hasUnsavedChanges" class="text-warning float-right">
|
<b
|
||||||
|
v-if="hasUnsavedChanges"
|
||||||
|
class="text-warning float-right"
|
||||||
|
>
|
||||||
Unsaved changes
|
Unsaved changes
|
||||||
</b>
|
</b>
|
||||||
</div>
|
</div>
|
||||||
@@ -86,7 +92,7 @@ import markdownDirective from '@/directives/markdown';
|
|||||||
import saveHero from '../mixins/saveHero';
|
import saveHero from '../mixins/saveHero';
|
||||||
|
|
||||||
import { mapState } from '@/libs/store';
|
import { mapState } from '@/libs/store';
|
||||||
import { userStateMixin } from '../../../mixins/userState';
|
import { userStateMixin } from '../../../../mixins/userState';
|
||||||
|
|
||||||
function resetData (self) {
|
function resetData (self) {
|
||||||
self.expand = false;
|
self.expand = false;
|
||||||
133
website/client/src/components/admin/blocker/blocker_form.vue
Normal file
133
website/client/src/components/admin/blocker/blocker_form.vue
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
<template>
|
||||||
|
<div style="display: contents">
|
||||||
|
<td>
|
||||||
|
<select
|
||||||
|
v-model="blocker.type"
|
||||||
|
class="form-control"
|
||||||
|
@change="onTypeChanged"
|
||||||
|
>
|
||||||
|
<option value="ipaddress">
|
||||||
|
IP-Address
|
||||||
|
</option>
|
||||||
|
<option value="client">
|
||||||
|
Client Identifier
|
||||||
|
</option>
|
||||||
|
<option value="email">
|
||||||
|
E-Mail
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select
|
||||||
|
v-model="blocker.area"
|
||||||
|
class="form-control"
|
||||||
|
>
|
||||||
|
<option value="full">
|
||||||
|
Full
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input
|
||||||
|
v-model="blocker.value"
|
||||||
|
class="form-control"
|
||||||
|
autocorrect="off"
|
||||||
|
autocapitalize="off"
|
||||||
|
:class="{ 'is-invalid input-invalid': !isValid }"
|
||||||
|
@input="validateValue"
|
||||||
|
>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input
|
||||||
|
v-model="blocker.reason"
|
||||||
|
class="form-control"
|
||||||
|
>
|
||||||
|
</td>
|
||||||
|
<td
|
||||||
|
colspan="3"
|
||||||
|
class="text-right"
|
||||||
|
>
|
||||||
|
<button
|
||||||
|
class="btn btn-primary mr-2"
|
||||||
|
:disabled="!isValid"
|
||||||
|
:class="{ disabled: !isValid }"
|
||||||
|
@click="$emit('save', blocker)"
|
||||||
|
>
|
||||||
|
<span>Save</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
class="btn btn-danger"
|
||||||
|
@click="$emit('cancel')"
|
||||||
|
>
|
||||||
|
<span>Cancel</span>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.btn-primary.disabled {
|
||||||
|
background: #4F2A93;
|
||||||
|
color: white;
|
||||||
|
cursor: not-allowed;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import isIP from 'validator/es/lib/isIP';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'BlockerForm',
|
||||||
|
props: {
|
||||||
|
isNew: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
blocker: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({
|
||||||
|
type: '',
|
||||||
|
area: '',
|
||||||
|
value: '',
|
||||||
|
reason: '',
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
isValid: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.validateValue();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onTypeChanged () {
|
||||||
|
if (this.blocker.type === 'email') {
|
||||||
|
this.blocker.area = 'full';
|
||||||
|
}
|
||||||
|
this.validateValue();
|
||||||
|
},
|
||||||
|
validateValue () {
|
||||||
|
if (this.blocker.type === 'ipaddress') {
|
||||||
|
this.validateValueAsIpAddress();
|
||||||
|
} else if (this.blocker.type === 'client') {
|
||||||
|
this.validateValueAsClient();
|
||||||
|
} else if (this.blocker.type === 'email') {
|
||||||
|
this.validateValueAsEmail();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
validateValueAsEmail () {
|
||||||
|
const emailRegex = /^([a-zA-Z0-9._%+-]*)@(?:[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})?$/;
|
||||||
|
this.isValid = emailRegex.test(this.blocker.value) && this.blocker.value.length > 3;
|
||||||
|
},
|
||||||
|
validateValueAsIpAddress () {
|
||||||
|
this.isValid = isIP(this.blocker.value);
|
||||||
|
},
|
||||||
|
validateValueAsClient () {
|
||||||
|
this.isValid = this.blocker.value.length > 0;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
238
website/client/src/components/admin/blocker/index.vue
Normal file
238
website/client/src/components/admin/blocker/index.vue
Normal file
@@ -0,0 +1,238 @@
|
|||||||
|
<template>
|
||||||
|
<div class="row standard-page col-12 d-flex justify-content-center">
|
||||||
|
<div class="blocker-content">
|
||||||
|
<h1>
|
||||||
|
Blockers
|
||||||
|
<button
|
||||||
|
class="btn btn-primary float-right"
|
||||||
|
@click="showCreateForm = true"
|
||||||
|
>
|
||||||
|
Create
|
||||||
|
</button>
|
||||||
|
</h1>
|
||||||
|
<table class="table table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Type <span
|
||||||
|
id="type_tooltip"
|
||||||
|
class="info-icon"
|
||||||
|
>?</span>
|
||||||
|
<b-tooltip
|
||||||
|
target="type_tooltip"
|
||||||
|
>
|
||||||
|
<b>IP-Address</b> - Block access for a specific IP-Address
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<b>Client</b> - Block access for a client based on the "x-client" header.
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<b>E-Mail</b> - Blocks e-mails from being used for signup.
|
||||||
|
</b-tooltip>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Area <span
|
||||||
|
id="area_tooltip"
|
||||||
|
class="info-icon"
|
||||||
|
>?</span>
|
||||||
|
<b-tooltip
|
||||||
|
target="area_tooltip"
|
||||||
|
>
|
||||||
|
<b>Full</b> - Block access to the entire site.
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<b>Payments</b> - Block access to any payment related functionality.
|
||||||
|
</b-tooltip>
|
||||||
|
</th>
|
||||||
|
<th>Value</th>
|
||||||
|
<th>Reason</th>
|
||||||
|
<th>Source</th>
|
||||||
|
<th>Created at</th>
|
||||||
|
<th class="btncol"></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr v-if="showCreateForm">
|
||||||
|
<BlockerForm
|
||||||
|
:is-new="true"
|
||||||
|
:blocker="newBlocker"
|
||||||
|
@save="createBlocker"
|
||||||
|
@cancel="showCreateForm = false"
|
||||||
|
/>
|
||||||
|
</tr>
|
||||||
|
<tr
|
||||||
|
v-for="blocker in blockers"
|
||||||
|
:key="blocker._id"
|
||||||
|
>
|
||||||
|
<BlockerForm
|
||||||
|
v-if="blocker._id === editedBlockerId"
|
||||||
|
:blocker="blocker"
|
||||||
|
@save="saveBlocker(blocker)"
|
||||||
|
@cancel="editedBlockerId = null"
|
||||||
|
/>
|
||||||
|
<template v-else>
|
||||||
|
<td>{{ getTypeName(blocker.type) }}</td>
|
||||||
|
<td>{{ getAreaName(blocker.area) }}</td>
|
||||||
|
<td>{{ blocker.value }}</td>
|
||||||
|
<td>{{ blocker.reason || "--" }}</td>
|
||||||
|
<td>{{ blocker.blockSource }}</td>
|
||||||
|
<td>{{ blocker.createdAt }}</td>
|
||||||
|
<td>
|
||||||
|
<button
|
||||||
|
class="btn btn-primary mr-2"
|
||||||
|
@click="editBlocker(blocker._id)"
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
v-once
|
||||||
|
class="svg-icon icon-16"
|
||||||
|
v-html="icons.editIcon"
|
||||||
|
></span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
class="btn btn-danger"
|
||||||
|
@click="deleteBlocker(blocker._id)"
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
v-once
|
||||||
|
class="svg-icon icon-16"
|
||||||
|
v-html="icons.deleteIcon"
|
||||||
|
></span>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</template>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import '@/assets/scss/colors.scss';
|
||||||
|
|
||||||
|
.blocker-content {
|
||||||
|
flex: 0 0 100%;
|
||||||
|
max-width: 1200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
padding: 0.4rem 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btncol {
|
||||||
|
width: 123px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-icon {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: $purple-400;
|
||||||
|
cursor: pointer;
|
||||||
|
margin-left: 0.5rem;
|
||||||
|
background-color: $gray-500;
|
||||||
|
padding: 0.1rem 0.3rem;
|
||||||
|
border-radius: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-icon:hover {
|
||||||
|
background-color: $purple-400;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapState } from '@/libs/store';
|
||||||
|
|
||||||
|
import editIcon from '@/assets/svg/edit.svg?raw';
|
||||||
|
import deleteIcon from '@/assets/svg/delete.svg?raw';
|
||||||
|
import BlockerForm from './blocker_form.vue';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
BlockerForm,
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
showCreateForm: false,
|
||||||
|
newBlocker: {
|
||||||
|
type: '',
|
||||||
|
area: 'full',
|
||||||
|
value: '',
|
||||||
|
reason: '',
|
||||||
|
},
|
||||||
|
blockers: [],
|
||||||
|
editedBlockerId: null,
|
||||||
|
icons: Object.freeze({
|
||||||
|
editIcon,
|
||||||
|
deleteIcon,
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState({ user: 'user.data' }),
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.$store.dispatch('common:setTitle', {
|
||||||
|
section: this.$t('siteBlockers'),
|
||||||
|
});
|
||||||
|
this.loadBlockers();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async loadBlockers () {
|
||||||
|
this.blockers = await this.$store.dispatch('blockers:getBlockers');
|
||||||
|
},
|
||||||
|
editBlocker (id) {
|
||||||
|
this.editedBlockerId = id;
|
||||||
|
},
|
||||||
|
async saveBlocker (blocker) {
|
||||||
|
await this.$store.dispatch('blockers:updateBlocker', { blocker });
|
||||||
|
this.editedBlockerId = null;
|
||||||
|
this.loadBlockers();
|
||||||
|
},
|
||||||
|
async deleteBlocker (blockerId) {
|
||||||
|
if (!window.confirm('Are you sure you want to delete this blocker?')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await this.$store.dispatch('blockers:deleteBlocker', { blockerId });
|
||||||
|
this.loadBlockers();
|
||||||
|
},
|
||||||
|
async createBlocker (blocker) {
|
||||||
|
await this.$store.dispatch('blockers:createBlocker', { blocker });
|
||||||
|
this.showCreateForm = false;
|
||||||
|
this.newBlocker = {
|
||||||
|
type: '',
|
||||||
|
area: 'full',
|
||||||
|
value: '',
|
||||||
|
reason: '',
|
||||||
|
};
|
||||||
|
this.loadBlockers();
|
||||||
|
},
|
||||||
|
|
||||||
|
getTypeName (type) {
|
||||||
|
switch (type) {
|
||||||
|
case 'ipaddress':
|
||||||
|
return 'IP-Address';
|
||||||
|
case 'email':
|
||||||
|
return 'E-Mail';
|
||||||
|
case 'client':
|
||||||
|
return 'Client Identifier';
|
||||||
|
default:
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getAreaName (area) {
|
||||||
|
switch (area) {
|
||||||
|
case 'full':
|
||||||
|
return 'Full';
|
||||||
|
case 'payments':
|
||||||
|
return 'Payments';
|
||||||
|
default:
|
||||||
|
return area;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
40
website/client/src/components/admin/container.vue
Normal file
40
website/client/src/components/admin/container.vue
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<template>
|
||||||
|
<div class="row">
|
||||||
|
<secondary-menu class="col-12">
|
||||||
|
<router-link
|
||||||
|
v-if="hasPermission(user, 'userSupport')"
|
||||||
|
class="nav-link"
|
||||||
|
:to="{name: 'adminPanel'}"
|
||||||
|
>
|
||||||
|
{{ $t('adminPanel') }}
|
||||||
|
</router-link>
|
||||||
|
<router-link
|
||||||
|
v-if="hasPermission(user, 'accessControl')"
|
||||||
|
class="nav-link"
|
||||||
|
:to="{name: 'blockers'}"
|
||||||
|
>
|
||||||
|
{{ $t('siteBlockers') }}
|
||||||
|
</router-link>
|
||||||
|
</secondary-menu><div class="col-12">
|
||||||
|
<router-view />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapState } from '@/libs/store';
|
||||||
|
import SecondaryMenu from '@/components/secondaryMenu';
|
||||||
|
import { userStateMixin } from '../../mixins/userState';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
SecondaryMenu,
|
||||||
|
},
|
||||||
|
mixins: [
|
||||||
|
userStateMixin,
|
||||||
|
],
|
||||||
|
computed: {
|
||||||
|
...mapState({ user: 'user.data' }),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
@@ -276,9 +276,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="time-travel"
|
|
||||||
v-if="TIME_TRAVEL_ENABLED && user?.permissions?.fullAccess"
|
v-if="TIME_TRAVEL_ENABLED && user?.permissions?.fullAccess"
|
||||||
:key="lastTimeJump"
|
:key="lastTimeJump"
|
||||||
|
class="time-travel"
|
||||||
>
|
>
|
||||||
<a
|
<a
|
||||||
class="btn btn-secondary mr-1"
|
class="btn btn-secondary mr-1"
|
||||||
|
|||||||
@@ -227,7 +227,8 @@
|
|||||||
<div class="quest-icon">
|
<div class="quest-icon">
|
||||||
<Sprite
|
<Sprite
|
||||||
class="quest"
|
class="quest"
|
||||||
:image-name="`inventory_quest_scroll_${questData.key}`" />
|
:image-name="`inventory_quest_scroll_${questData.key}`"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -286,7 +286,7 @@
|
|||||||
:to="{ name: 'adminPanelUser',
|
:to="{ name: 'adminPanelUser',
|
||||||
params: { userIdentifier: hero._id } }"
|
params: { userIdentifier: hero._id } }"
|
||||||
>
|
>
|
||||||
admin panel
|
{{ $t("adminPanel") }}
|
||||||
</router-link>
|
</router-link>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -295,14 +295,6 @@
|
|||||||
{{ $t('help') }}
|
{{ $t('help') }}
|
||||||
</router-link>
|
</router-link>
|
||||||
<div class="topbar-dropdown">
|
<div class="topbar-dropdown">
|
||||||
<router-link
|
|
||||||
v-if="user.permissions.fullAccess ||
|
|
||||||
user.permissions.userSupport"
|
|
||||||
class="topbar-dropdown-item dropdown-item"
|
|
||||||
:to="{name: 'adminPanel'}"
|
|
||||||
>
|
|
||||||
Admin Panel
|
|
||||||
</router-link>
|
|
||||||
<router-link
|
<router-link
|
||||||
class="topbar-dropdown-item dropdown-item"
|
class="topbar-dropdown-item dropdown-item"
|
||||||
:to="{name: 'faq'}"
|
:to="{name: 'faq'}"
|
||||||
@@ -336,6 +328,61 @@
|
|||||||
>{{ $t('requestFeature') }}</a>
|
>{{ $t('requestFeature') }}</a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
<li
|
||||||
|
v-if="hasElevatedPrivileges"
|
||||||
|
class="topbar-item droppable"
|
||||||
|
:class="{
|
||||||
|
'active': $route.path.startsWith('/admin')}"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="chevron rotate"
|
||||||
|
@click="dropdownMobile($event)"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
v-once
|
||||||
|
class="chevron-icon-down"
|
||||||
|
v-html="icons.chevronDown"
|
||||||
|
></div>
|
||||||
|
</div>
|
||||||
|
<router-link
|
||||||
|
v-if="hasPermission(user, 'userSupport')"
|
||||||
|
class="nav-link"
|
||||||
|
:to="{name: 'adminPanel'}"
|
||||||
|
>
|
||||||
|
{{ $t('admin') }}
|
||||||
|
</router-link>
|
||||||
|
<a
|
||||||
|
v-else
|
||||||
|
href="#"
|
||||||
|
class="nav-link"
|
||||||
|
>
|
||||||
|
{{ $t('admin') }}
|
||||||
|
</a>
|
||||||
|
<div class="topbar-dropdown">
|
||||||
|
<router-link
|
||||||
|
v-if="hasPermission(user, 'userSupport')"
|
||||||
|
class="topbar-dropdown-item dropdown-item"
|
||||||
|
:to="{name: 'adminPanel'}"
|
||||||
|
>
|
||||||
|
{{ $t("adminPanel") }}
|
||||||
|
</router-link>
|
||||||
|
<router-link
|
||||||
|
v-if="hasPermission(user, 'accessControl')"
|
||||||
|
class="topbar-dropdown-item dropdown-item"
|
||||||
|
:to="{name: 'blockers'}"
|
||||||
|
>
|
||||||
|
{{ $t("siteBlockers") }}
|
||||||
|
</router-link>
|
||||||
|
<a
|
||||||
|
v-if="hasPermission(user, 'news')"
|
||||||
|
class="topbar-dropdown-item dropdown-item"
|
||||||
|
target="_blank"
|
||||||
|
href="https://panel.habitica.com"
|
||||||
|
>
|
||||||
|
{{ $t('newsroom') }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
</b-navbar-nav>
|
</b-navbar-nav>
|
||||||
<div class="currency-tray form-inline">
|
<div class="currency-tray form-inline">
|
||||||
<div
|
<div
|
||||||
@@ -757,6 +804,7 @@ import selectUserModal from '@/components/payments/selectUserModal';
|
|||||||
import sync from '@/mixins/sync';
|
import sync from '@/mixins/sync';
|
||||||
import userDropdown from './userDropdown';
|
import userDropdown from './userDropdown';
|
||||||
import reportBug from '@/mixins/reportBug.js';
|
import reportBug from '@/mixins/reportBug.js';
|
||||||
|
import { userStateMixin } from '../../mixins/userState';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@@ -769,7 +817,7 @@ export default {
|
|||||||
selectUserModal,
|
selectUserModal,
|
||||||
userDropdown,
|
userDropdown,
|
||||||
},
|
},
|
||||||
mixins: [sync, reportBug],
|
mixins: [sync, reportBug, userStateMixin],
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
isUserDropdownOpen: false,
|
isUserDropdownOpen: false,
|
||||||
@@ -802,6 +850,12 @@ export default {
|
|||||||
params: { groupId: this.groupPlans[0]._id },
|
params: { groupId: this.groupPlans[0]._id },
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
hasElevatedPrivileges () {
|
||||||
|
return this.user.permissions.fullAccess
|
||||||
|
|| this.user.permissions.userSupport
|
||||||
|
|| this.user.permissions.accessControl
|
||||||
|
|| this.user.permissions.news;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
async mounted () {
|
async mounted () {
|
||||||
await this.getUserGroupPlans();
|
await this.getUserGroupPlans();
|
||||||
|
|||||||
@@ -15,7 +15,8 @@
|
|||||||
<Sprite
|
<Sprite
|
||||||
slot="icon"
|
slot="icon"
|
||||||
class="mt-3"
|
class="mt-3"
|
||||||
:image-name="notification.data.icon" />
|
:image-name="notification.data.icon"
|
||||||
|
/>
|
||||||
</base-notification>
|
</base-notification>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
></div>
|
></div>
|
||||||
<Sprite
|
<Sprite
|
||||||
slot="icon"
|
slot="icon"
|
||||||
:image-name="mysteryClass" />
|
:image-name="mysteryClass"
|
||||||
|
/>
|
||||||
</base-notification>
|
</base-notification>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -81,9 +81,10 @@ import moment from 'moment';
|
|||||||
import habiticaMarkdown from 'habitica-markdown';
|
import habiticaMarkdown from 'habitica-markdown';
|
||||||
import { mapState } from '@/libs/store';
|
import { mapState } from '@/libs/store';
|
||||||
import seasonalNPC from '@/mixins/seasonalNPC';
|
import seasonalNPC from '@/mixins/seasonalNPC';
|
||||||
|
import { userStateMixin } from '../../mixins/userState';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
mixins: [seasonalNPC],
|
mixins: [seasonalNPC, userStateMixin],
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
posts: [],
|
posts: [],
|
||||||
@@ -107,7 +108,7 @@ export default {
|
|||||||
if (lastPublishedPost) this.posts.push(lastPublishedPost);
|
if (lastPublishedPost) this.posts.push(lastPublishedPost);
|
||||||
|
|
||||||
// If the user is authorized, show any draft
|
// If the user is authorized, show any draft
|
||||||
if (this.user && (this.user.permissions.news || this.user.permissions.fullAccess)) {
|
if (this.user && (this.hasPermission(this.user, 'news'))) {
|
||||||
this.posts.unshift(
|
this.posts.unshift(
|
||||||
...postsFromServer
|
...postsFromServer
|
||||||
.filter(p => !p.published || moment().isBefore(p.publishDate)),
|
.filter(p => !p.published || moment().isBefore(p.publishDate)),
|
||||||
|
|||||||
@@ -851,7 +851,7 @@ export default {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (this.genericPurchase) {
|
if (this.genericPurchase) {
|
||||||
this.makeGenericPurchase(this.item, 'buyModal', this.selectedAmountToBuy);
|
await this.makeGenericPurchase(this.item, 'buyModal', this.selectedAmountToBuy);
|
||||||
await this.purchased(this.item.text);
|
await this.purchased(this.item.text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,7 +154,8 @@
|
|||||||
</template>
|
</template>
|
||||||
</itemRows>
|
</itemRows>
|
||||||
</div>
|
</div>
|
||||||
</div><buyQuestModal
|
</div>
|
||||||
|
<buyQuestModal
|
||||||
:item="selectedItemToBuy || {}"
|
:item="selectedItemToBuy || {}"
|
||||||
:price-type="selectedItemToBuy ? selectedItemToBuy.currency : ''"
|
:price-type="selectedItemToBuy ? selectedItemToBuy.currency : ''"
|
||||||
:with-pin="true"
|
:with-pin="true"
|
||||||
|
|||||||
@@ -7,10 +7,15 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 mb-5 mb-md-0">
|
<div class="col-12 mb-5 mb-md-0">
|
||||||
<img :src="makeUrl('features_taskboard.png')" class="img-fluid">
|
<img
|
||||||
|
:src="makeUrl('features_taskboard.png')"
|
||||||
|
class="img-fluid"
|
||||||
|
>
|
||||||
<h2>{{ $t('marketing1Lead1Title') }}</h2>
|
<h2>{{ $t('marketing1Lead1Title') }}</h2>
|
||||||
<div class="row justify-content-md-center">
|
<div class="row justify-content-md-center">
|
||||||
<p class="col col-lg-8 col-xl-6 margin-auto description">{{ $t('marketing1Lead1') }}</p>
|
<p class="col col-lg-8 col-xl-6 margin-auto description">
|
||||||
|
{{ $t('marketing1Lead1') }}
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -18,12 +23,16 @@
|
|||||||
<div class="col-md-6 mb-5 mb-md-0">
|
<div class="col-md-6 mb-5 mb-md-0">
|
||||||
<img :src="makeUrl('features_gear.png')">
|
<img :src="makeUrl('features_gear.png')">
|
||||||
<h2>{{ $t('marketing1Lead2Title') }}</h2>
|
<h2>{{ $t('marketing1Lead2Title') }}</h2>
|
||||||
<p class="description">{{ $t('marketing1Lead2') }}</p>
|
<p class="description">
|
||||||
|
{{ $t('marketing1Lead2') }}
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6 mb-5 mb-md-0">
|
<div class="col-md-6 mb-5 mb-md-0">
|
||||||
<img :src="makeUrl('features_items.png')">
|
<img :src="makeUrl('features_items.png')">
|
||||||
<h2>{{ $t('marketing1Lead3Title') }}</h2>
|
<h2>{{ $t('marketing1Lead3Title') }}</h2>
|
||||||
<p class="description">{{ $t('marketing1Lead3') }}</p>
|
<p class="description">
|
||||||
|
{{ $t('marketing1Lead3') }}
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
@@ -35,19 +44,26 @@
|
|||||||
<div class="row mb-5">
|
<div class="row mb-5">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<h2>{{ $t('marketing2Lead1Title') }}</h2>
|
<h2>{{ $t('marketing2Lead1Title') }}</h2>
|
||||||
<p class="description">{{ $t('marketing2Lead1') }}</p>
|
<p class="description">
|
||||||
|
{{ $t('marketing2Lead1') }}
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6 mb-5 mb-md-0">
|
<div class="col-md-6 mb-5 mb-md-0">
|
||||||
<img :src="makeUrl('features_monsters.png')">
|
<img :src="makeUrl('features_monsters.png')">
|
||||||
<h2>{{ $t('marketing2Lead2Title') }}</h2>
|
<h2>{{ $t('marketing2Lead2Title') }}</h2>
|
||||||
<p class="description" v-markdown="$t('marketing2Lead2')"></p>
|
<p
|
||||||
|
v-markdown="$t('marketing2Lead2')"
|
||||||
|
class="description"
|
||||||
|
></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6 mb-5 mb-md-0">
|
<div class="col-md-6 mb-5 mb-md-0">
|
||||||
<img :src="makeUrl('features_challenges.png')">
|
<img :src="makeUrl('features_challenges.png')">
|
||||||
<h2>{{ $t('marketing2Lead3Title') }}</h2>
|
<h2>{{ $t('marketing2Lead3Title') }}</h2>
|
||||||
<p class="description">{{ $t('marketing2Lead3') }}</p>
|
<p class="description">
|
||||||
|
{{ $t('marketing2Lead3') }}
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
@@ -60,12 +76,18 @@
|
|||||||
<div class="col-md-6 mb-5 mb-md-0">
|
<div class="col-md-6 mb-5 mb-md-0">
|
||||||
<img :src="makeUrl('features_mobile.png')">
|
<img :src="makeUrl('features_mobile.png')">
|
||||||
<h2>{{ $t('marketing3Lead1Title') }}</h2>
|
<h2>{{ $t('marketing3Lead1Title') }}</h2>
|
||||||
<p class="description" v-markdown="$t('marketing3Lead1')"></p>
|
<p
|
||||||
|
v-markdown="$t('marketing3Lead1')"
|
||||||
|
class="description"
|
||||||
|
></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6 mb-5 mb-md-0">
|
<div class="col-md-6 mb-5 mb-md-0">
|
||||||
<img :src="makeUrl('features_opensource.png')">
|
<img :src="makeUrl('features_opensource.png')">
|
||||||
<h2>{{ $t('marketing3Lead2Title') }}</h2>
|
<h2>{{ $t('marketing3Lead2Title') }}</h2>
|
||||||
<p class="description" v-markdown="$t('marketing3Lead2')"></p>
|
<p
|
||||||
|
v-markdown="$t('marketing3Lead2')"
|
||||||
|
class="description"
|
||||||
|
></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
@@ -80,7 +102,9 @@
|
|||||||
<img src="@/assets/images/marketing/education.png">
|
<img src="@/assets/images/marketing/education.png">
|
||||||
<div class="media-body">
|
<div class="media-body">
|
||||||
<h2>{{ $t('marketing4Lead1Title') }}</h2>
|
<h2>{{ $t('marketing4Lead1Title') }}</h2>
|
||||||
<p class="description">{{ $t('marketing4Lead1') }}</p>
|
<p class="description">
|
||||||
|
{{ $t('marketing4Lead1') }}
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -89,7 +113,9 @@
|
|||||||
<img src="@/assets/images/marketing/wellness.png">
|
<img src="@/assets/images/marketing/wellness.png">
|
||||||
<div class="media-body">
|
<div class="media-body">
|
||||||
<h2>{{ $t('marketing4Lead2Title') }}</h2>
|
<h2>{{ $t('marketing4Lead2Title') }}</h2>
|
||||||
<p class="description">{{ $t('marketing4Lead2') }}</p>
|
<p class="description">
|
||||||
|
{{ $t('marketing4Lead2') }}
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
class="balance-info"
|
class="balance-info"
|
||||||
:currency-needed="currencyNeeded"
|
:currency-needed="currencyNeeded"
|
||||||
:amount-needed="amountNeeded"
|
:amount-needed="amountNeeded"
|
||||||
:neededCurrencyOnly="true"
|
:needed-currency-only="true"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -19,16 +19,12 @@ const HallPage = () => import(/* webpackChunkName: "hall" */'@/components/hall/i
|
|||||||
const PatronsPage = () => import(/* webpackChunkName: "hall" */'@/components/hall/patrons');
|
const PatronsPage = () => import(/* webpackChunkName: "hall" */'@/components/hall/patrons');
|
||||||
const HeroesPage = () => import(/* webpackChunkName: "hall" */'@/components/hall/heroes');
|
const HeroesPage = () => import(/* webpackChunkName: "hall" */'@/components/hall/heroes');
|
||||||
|
|
||||||
// Admin Panel
|
// Admin Pages
|
||||||
const AdminPanelPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin-panel');
|
const AdminContainerPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/container');
|
||||||
const AdminPanelUserPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin-panel/user-support');
|
const AdminPanelPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/admin-panel');
|
||||||
const AdminPanelSearchPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin-panel/search');
|
const AdminPanelUserPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/admin-panel/user-support');
|
||||||
|
const AdminPanelSearchPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/admin-panel/search');
|
||||||
// Except for tasks that are always loaded all the other main level
|
const BlockerPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/blocker');
|
||||||
// All the main level
|
|
||||||
// components are loaded in separate webpack chunks.
|
|
||||||
// See https://webpack.js.org/guides/code-splitting-async/
|
|
||||||
// for docs
|
|
||||||
|
|
||||||
// Tasks
|
// Tasks
|
||||||
const UserTasks = () => import(/* webpackChunkName: "userTasks" */'@/components/tasks/user');
|
const UserTasks = () => import(/* webpackChunkName: "userTasks" */'@/components/tasks/user');
|
||||||
@@ -183,9 +179,20 @@ const router = new VueRouter({
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
name: 'adminSection',
|
||||||
|
path: '/admin',
|
||||||
|
component: AdminContainerPage,
|
||||||
|
meta: {
|
||||||
|
privilegeNeeded: [ // any one of these is enough to give access
|
||||||
|
'userSupport',
|
||||||
|
'accessControl',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
children: [
|
||||||
{
|
{
|
||||||
name: 'adminPanel',
|
name: 'adminPanel',
|
||||||
path: '/admin-panel',
|
path: 'panel',
|
||||||
component: AdminPanelPage,
|
component: AdminPanelPage,
|
||||||
meta: {
|
meta: {
|
||||||
privilegeNeeded: [ // any one of these is enough to give access
|
privilegeNeeded: [ // any one of these is enough to give access
|
||||||
@@ -215,6 +222,18 @@ const router = new VueRouter({
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'blockers',
|
||||||
|
path: 'blockers',
|
||||||
|
component: BlockerPage,
|
||||||
|
meta: {
|
||||||
|
privilegeNeeded: [ // any one of these is enough to give access
|
||||||
|
'accessControl',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
|
||||||
// Only used to handle some redirects
|
// Only used to handle some redirects
|
||||||
// See router.beforeEach
|
// See router.beforeEach
|
||||||
|
|||||||
19
website/client/src/store/actions/blockers.js
Normal file
19
website/client/src/store/actions/blockers.js
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
|
export async function getBlockers () {
|
||||||
|
const response = await axios.get('/api/v4/admin/blockers');
|
||||||
|
return response.data.data;
|
||||||
|
}
|
||||||
|
export async function createBlocker (store, payload) {
|
||||||
|
const response = await axios.post('/api/v4/admin/blockers', payload.blocker);
|
||||||
|
return response.data.data;
|
||||||
|
}
|
||||||
|
export async function updateBlocker (store, payload) {
|
||||||
|
const response = await axios.put(`/api/v4/admin/blockers/${payload.blocker._id}`, payload.blocker);
|
||||||
|
return response.data.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function deleteBlocker (store, payload) {
|
||||||
|
const response = await axios.delete(`/api/v4/admin/blockers/${payload.blockerId}`);
|
||||||
|
return response.data.data;
|
||||||
|
}
|
||||||
@@ -20,6 +20,7 @@ import * as worldState from './worldState';
|
|||||||
import * as news from './news';
|
import * as news from './news';
|
||||||
import * as analytics from './analytics';
|
import * as analytics from './analytics';
|
||||||
import * as faq from './faq';
|
import * as faq from './faq';
|
||||||
|
import * as blockers from './blockers';
|
||||||
|
|
||||||
// Actions should be named as 'actionName' and can be accessed as 'namespace:actionName'
|
// Actions should be named as 'actionName' and can be accessed as 'namespace:actionName'
|
||||||
// Example: fetch in user.js -> 'user:fetch'
|
// Example: fetch in user.js -> 'user:fetch'
|
||||||
@@ -45,6 +46,7 @@ const actions = flattenAndNamespace({
|
|||||||
news,
|
news,
|
||||||
analytics,
|
analytics,
|
||||||
faq,
|
faq,
|
||||||
|
blockers,
|
||||||
});
|
});
|
||||||
|
|
||||||
export default actions;
|
export default actions;
|
||||||
|
|||||||
@@ -909,5 +909,8 @@
|
|||||||
"backgroundSummerSeashoreNotes": "Erwisch eine Welle an einem Sommer Meeresstrand.",
|
"backgroundSummerSeashoreNotes": "Erwisch eine Welle an einem Sommer Meeresstrand.",
|
||||||
"backgrounds072025": "SET 134: Veröffentlicht im Juli 2025",
|
"backgrounds072025": "SET 134: Veröffentlicht im Juli 2025",
|
||||||
"backgroundSirensLairText": "Höhle der Sirene",
|
"backgroundSirensLairText": "Höhle der Sirene",
|
||||||
"backgroundSirensLairNotes": "Wage es, in die Höhle einer Sirene zu tauchen."
|
"backgroundSirensLairNotes": "Wage es, in die Höhle einer Sirene zu tauchen.",
|
||||||
|
"backgrounds082025": "SET 135: Veröffentlicht im August 2025",
|
||||||
|
"backgroundSunnyStreetWithShopsText": "Sonnige Straße mit Läden",
|
||||||
|
"backgroundSunnyStreetWithShopsNotes": "Genieße den Anblick und die Geräusche einer sonnigen Straße mit Läden."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -129,8 +129,8 @@
|
|||||||
"healerText": "Heiler stehen Schaden unbeeindruckt gegenüber und erweitern diesen Schutz auf Andere. Verpasste Tagesaufgaben und schlechte Angewohnheiten schaden ihnen nicht viel und sie haben Mittel und Wege Lebenspunkte wiederherzustellen. Spiele einen Heiler, wenn Du gerne Anderen in einer Party hilfst, oder wenn es Dich besonders reizt, dem Tod durch harte Arbeit zu entkommen!",
|
"healerText": "Heiler stehen Schaden unbeeindruckt gegenüber und erweitern diesen Schutz auf Andere. Verpasste Tagesaufgaben und schlechte Angewohnheiten schaden ihnen nicht viel und sie haben Mittel und Wege Lebenspunkte wiederherzustellen. Spiele einen Heiler, wenn Du gerne Anderen in einer Party hilfst, oder wenn es Dich besonders reizt, dem Tod durch harte Arbeit zu entkommen!",
|
||||||
"optOutOfClasses": "Später entscheiden",
|
"optOutOfClasses": "Später entscheiden",
|
||||||
"chooseClass": "Wähle Deine Klasse",
|
"chooseClass": "Wähle Deine Klasse",
|
||||||
"chooseClassLearnMarkdown": "[Erfahre mehr über Habiticas Klassensystem](https://habitica.fandom.com/de/wiki/Klassen)",
|
"chooseClassLearnMarkdown": "[Erfahre mehr über Habiticas Klassensystem](/static/faq#what-classes)",
|
||||||
"optOutOfClassesText": "Keine Lust auf Klassen oder Du möchtest Dich später entscheiden? Brich jetzt ab und werde ein Krieger ohne Spezialfähigkeiten. Du kannst Dich im Wiki über das Klassensystem informieren und Deine Klasse jederzeit unter Benutzer Icon -> Statuswerte aktivieren.",
|
"optOutOfClassesText": "Noch nicht bereit zu wählen? Keine Eile! Wenn du ablehnst, kannst du zu jeder Klasse in <a href='/static/faq#what-classes' target='_blank'>unseren FAQ</a> nachlesen und in den Einstellungen das Klassen-System aktivieren, wenn du bereit bist.",
|
||||||
"selectClass": "Wähle <%= heroClass %>",
|
"selectClass": "Wähle <%= heroClass %>",
|
||||||
"select": "Auswählen",
|
"select": "Auswählen",
|
||||||
"stealth": "Schleichen",
|
"stealth": "Schleichen",
|
||||||
|
|||||||
@@ -40,10 +40,10 @@
|
|||||||
"backerTier": "Trägerstufe",
|
"backerTier": "Trägerstufe",
|
||||||
"playerTiers": "Spielerstufen",
|
"playerTiers": "Spielerstufen",
|
||||||
"tier": "Level",
|
"tier": "Level",
|
||||||
"conRewardsURL": "https://habitica.fandom.com/wiki/Contributor_Rewards",
|
"conRewardsURL": "https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica#contributor-tier-rewards",
|
||||||
"surveysSingle": "Half Habitica zu wachsen, entweder durch das Ausfüllen einer Umfrage oder durch große Hilfe beim Testen. Danke!",
|
"surveysSingle": "Half Habitica zu wachsen, entweder durch das Ausfüllen einer Umfrage oder durch große Hilfe beim Testen. Danke!",
|
||||||
"surveysMultiple": "Hat Habitica an <%= count %> Gelegenheiten geholfen zu wachsen, entweder durch Ausfüllen eines Fragebogens oder durch große Hilfe beim Testen. Danke!",
|
"surveysMultiple": "Hat Habitica an <%= count %> Gelegenheiten geholfen zu wachsen, entweder durch Ausfüllen eines Fragebogens oder durch große Hilfe beim Testen. Danke!",
|
||||||
"blurbHallPatrons": "Dies ist die Halle der Schirmherren, in der wir die edlen Abenteurer ehren, die Habiticas ursprüngliche Kickstarter-Kampagne unterstützt haben. Wir danken ihnen für die Hilfe Habitica zum Leben zu erwecken!",
|
"blurbHallPatrons": "Dies ist die Halle der Schirmherren, in der wir die edlen Abenteurer ehren, die Habiticas ursprüngliche Kickstarter-Kampagne unterstützt haben. Wir danken ihnen für die Hilfe Habitica zum Leben zu erwecken!",
|
||||||
"blurbHallContributors": "Dies ist die Halle der Mitwirkenden, in der Open-Source-Unterstützer von Habitica geehrt werden. Durch Code, Kunst, Musik, Schreiben, oder auch nur Hilfsbereitschaft haben sie <a href='https://habitica.fandom.com/wiki/Contributor_Rewards' target='_blank'> Edelsteine, exklusive Ausrüstung</a> und <a href='https://habitica.fandom.com/wiki/Contributor_Titles' target='_blank'>angesehene Titel</a> verdient. Auch Du kannst Habitica unterstützen! <a href='https://habitica.fandom.com/wiki/Contributing_to_Habitica' target='_blank'> Hier erfährst Du mehr dazu.</a>",
|
"blurbHallContributors": "Dies ist die Halle der Mitwirkenden, in der Open-Source-Unterstützer von Habitica geehrt werden. Durch Code, Kunst, Musik, Schreiben, oder auch nur Hilfsbereitschaft haben sie <a href='https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica#contributor-tier-rewards' target='_blank'> Edelsteine, exklusive Ausrüstung</a> und <a href='https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica#contributor-tiers' target='_blank'>angesehene Titel</a> verdient. Auch Du kannst Habitica unterstützen! <a href='https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica' target='_blank'> Hier erfährst Du mehr dazu.</a>",
|
||||||
"noPrivAccess": "Du besitzt nicht die erforderlichen Berechtigungen."
|
"noPrivAccess": "Du besitzt nicht die erforderlichen Berechtigungen."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"webFaqAnswer31": "Wenn du eine Aufgabe erfüllst und HP verlierst, obwohl du das nicht hättest tun sollen, kam es zu einer Verzögerung, während der Server die auf anderen Plattformen vorgenommenen Änderungen synchronisiert hat. Wenn du zum Beispiel Gold oder Mana verwendest oder HP in der mobilen App verlierst und dann eine Aufgabe auf der Website erledigst, bestätigt der Server lediglich, dass alles synchronisiert ist.",
|
"webFaqAnswer31": "Wenn du eine Aufgabe erfüllst und HP verlierst, obwohl du das nicht hättest tun sollen, kam es zu einer Verzögerung, während der Server die auf anderen Plattformen vorgenommenen Änderungen synchronisiert hat. Wenn du zum Beispiel Gold oder Mana verwendest oder HP in der mobilen App verlierst und dann eine Aufgabe auf der Website erledigst, bestätigt der Server lediglich, dass alles synchronisiert ist.",
|
||||||
"webFaqAnswer49": "Wenn Du Habitica mit anderen erleben möchtest, aber keine anderen Spieler kennst, ist die Suche nach einer Party die beste Option! Wenn Du bereits andere Spieler kennst, die eine Party haben, kannst Du deinen @Benutzernamen mit ihnen teilen, um eingeladen zu werden. Alternativ kannst Du auch eine neue Gruppe erstellen und sie mit ihrem @Nutzernamen oder ihrer E-Mail-Adresse einladen.\n\nUm eine Party zu erstellen oder zu suchen, wähle \"Party\" im Navigationsmenü und wähle dann die Option, die Dir am besten gefällt.",
|
"webFaqAnswer49": "Wenn Du Habitica mit anderen erleben möchtest, aber keine anderen Spieler kennst, ist die Suche nach einer Party die beste Option! Wenn Du bereits andere Spieler kennst, die eine Party haben, kannst Du deinen @Benutzernamen mit ihnen teilen, um eingeladen zu werden. Alternativ kannst Du auch eine neue Gruppe erstellen und sie mit ihrem @Nutzernamen oder ihrer E-Mail-Adresse einladen.\n\nUm eine Party zu erstellen oder zu suchen, wähle \"Party\" im Navigationsmenü und wähle dann die Option, die Dir am besten gefällt.",
|
||||||
"webFaqAnswer62": "Gruppenpläne bieten dir die einzigartige Möglichkeit, anderen Mitgliedern deines Gruppenplans gemeinsame Aufgaben zuzuweisen. Wenn eine gemeinsame Aufgabe einem Mitglied zugewiesen wird, können andere Mitglieder sie nicht mehr erledigen.\n\nDu kannst eine Aufgabe auch mehreren Mitgliedern zuweisen. Wenn sich zum Beispiel alle Mitglieder die Zähne putzen müssen, erstellst du eine Aufgabe und weist sie jedem Mitglied zu. Jedes Mitglied kann die Aufgabe erledigen und sich seine individuelle Belohnung verdienen. Die Hauptaufgabe wird als erledigt angezeigt, sobald alle Mitglieder sie erledigt haben.",
|
"webFaqAnswer62": "Gruppenpläne bieten dir die einzigartige Möglichkeit, anderen Mitgliedern deines Gruppenplans gemeinsame Aufgaben zuzuweisen. Wenn eine gemeinsame Aufgabe einem Mitglied zugewiesen wird, können andere Mitglieder sie nicht mehr erledigen.\n\nDu kannst eine Aufgabe auch mehreren Mitgliedern zuweisen. Wenn sich zum Beispiel alle Mitglieder die Zähne putzen müssen, erstellst du eine Aufgabe und weist sie jedem Mitglied zu. Jedes Mitglied kann die Aufgabe erledigen und sich seine individuelle Belohnung verdienen. Die Hauptaufgabe wird als erledigt angezeigt, sobald alle Mitglieder sie erledigt haben.",
|
||||||
"webFaqAnswer32": "Alle Spieler beginnen in der Klasse des Kriegers, bis sie Stufe 10 erreicht haben. Sobald du Stufe 10 erreichst, hast du die Wahl, eine neue Klasse zu wählen oder als Krieger weiterzuspielen.\n\nJede Klasse verfügt über unterschiedliche Ausrüstungen und Fertigkeiten. Wenn du dich nicht für eine Klasse entscheiden möchtest, kannst du \"Abbrechen\" wählen. Wenn du dich später doch entscheidest, kannst du das Klassensystem in den Einstellungen wieder aktivieren.\n\nWenn Du Deine Klasse nach Level 10 noch einmal ändern möchtest, kannst Du die Sphäre der Wiedergeburt hierfür nutzen. Die Sphäre der Wiedergeburt ist mit Level 50 auf demMarktplatz für 6 Edelsteine verfügbar und mit Level 100 bekommst Du sie umsonst.\n\nAlternativ kannst Du Deine Klasse jederzeit in den Einstellungen für 3 Edelsteine ändern. Dies wird Dein Level nicht wie die Sphäre der Wiedergeburt zurücksetzen, aber es erlaubt Dir, die Fertigkeits-Punkte, die Du beim Leveln gesammelt hast, Deiner neuen Klasse zuzuordnen.",
|
"webFaqAnswer32": "Alle Spieler beginnen in der Klasse des Kriegers, bis sie Stufe 10 erreicht haben. Sobald du Stufe 10 erreichst, hast du die Wahl, eine neue Klasse zu wählen oder als Krieger weiterzuspielen.\n\nJede Klasse verfügt über unterschiedliche Ausrüstungen und Fertigkeiten. Wenn du dich nicht für eine Klasse entscheiden möchtest, kannst du \"Abbrechen\" wählen. Du kannst das Klassensystem in den Einstellungen jederzeit wieder aktivieren.\n\nWenn du deine Klasse nach Level 10 noch einmal ändern möchtest, kannst du die Sphäre der Wiedergeburt hierfür nutzen. Die Sphäre der Wiedergeburt ist mit Level 50 auf dem Marktplatz für 6 Edelsteine verfügbar und mit Level 100 bekommst du sie umsonst.\n\nAlternativ kannst du deine Klasse jederzeit in den Einstellungen für 3 Edelsteine ändern. Dies wird dein Level nicht wie die Sphäre der Wiedergeburt zurücksetzen, aber es erlaubt dir, die Fähigkeitspunkte, die du beim Leveln gesammelt hast, deiner neuen Klasse zuzuordnen.",
|
||||||
"sunsetFaqPara14": "<strong>Linguists</strong><br />Wir freuen uns auch weiterhin über Hilfe bei der Übersetzung der Apps und der Website und werden für qualifizierte Beiträge nach wie vor Beitragsstufen vergeben. Die Methode, mit der wir Übersetzungen annehmen, wird sich jedoch ändern. Wir möchten unsere Ressourcen auf die Unterstützung einer bestimmten Auswahl von Sprachen für alle Plattformen konzentrieren. Um dies zu erreichen, werden wir die Anzahl der für Übersetzungen verfügbaren Sprachen reduzieren. Zuvor nicht fertiggestellte Sprachen werden in Github archiviert. Wir hoffen, dass diese Änderung das plattformübergreifende Habitica-Erlebnis konsistenter macht. Sie können unsere aktuellsten Richtlinien für das Übersetzungsverfahren auf unserer Website lesen <a href='https://translate.habitica.com/projects/habitica/#information'>Übersetzungswebsite</a>.",
|
"sunsetFaqPara14": "<strong>Linguists</strong><br />Wir freuen uns auch weiterhin über Hilfe bei der Übersetzung der Apps und der Website und werden für qualifizierte Beiträge nach wie vor Beitragsstufen vergeben. Die Methode, mit der wir Übersetzungen annehmen, wird sich jedoch ändern. Wir möchten unsere Ressourcen auf die Unterstützung einer bestimmten Auswahl von Sprachen für alle Plattformen konzentrieren. Um dies zu erreichen, werden wir die Anzahl der für Übersetzungen verfügbaren Sprachen reduzieren. Zuvor nicht fertiggestellte Sprachen werden in Github archiviert. Wir hoffen, dass diese Änderung das plattformübergreifende Habitica-Erlebnis konsistenter macht. Sie können unsere aktuellsten Richtlinien für das Übersetzungsverfahren auf unserer Website lesen <a href='https://translate.habitica.com/projects/habitica/#information'>Übersetzungswebsite</a>.",
|
||||||
"webFaqAnswer34": "Haustiere mögen Futter, das zu ihrer Farbe passt. Basis-Tiere sind die Ausnahme, aber alle Basis-Tiere mögen den gleichen Gegenstand. Im Folgenden siehst du, welche Nahrungsmittel jedes Haustier mag:\n\n * Basistiere mögen Fleisch\n * Weiße Haustiere mögen Milch\n * Wüstenhaustiere mögen Kartoffeln\n * Rote Haustiere mögen Erdbeeren\n * Schattentiere mögen Schokolade\n * Skelett-Tiere mögen Fisch\n * Zombie-Tiere mögen verdorbenes Fleisch\n * Zuckerwatte rosa Haustiere mögen rosa Zuckerwatte\n * Zuckerwatte blaue Haustiere mögen blaue Zuckerwatte\n * Goldene Haustiere mögen Honig",
|
"webFaqAnswer34": "Haustiere mögen Futter, das zu ihrer Farbe passt. Basis-Tiere sind die Ausnahme, aber alle Basis-Tiere mögen den gleichen Gegenstand. Im Folgenden siehst du, welche Nahrungsmittel jedes Haustier mag:\n\n * Basistiere mögen Fleisch\n * Weiße Haustiere mögen Milch\n * Wüstenhaustiere mögen Kartoffeln\n * Rote Haustiere mögen Erdbeeren\n * Schattentiere mögen Schokolade\n * Skelett-Tiere mögen Fisch\n * Zombie-Tiere mögen verdorbenes Fleisch\n * Zuckerwatte rosa Haustiere mögen rosa Zuckerwatte\n * Zuckerwatte blaue Haustiere mögen blaue Zuckerwatte\n * Goldene Haustiere mögen Honig",
|
||||||
"webFaqAnswer35": "Sobald du dein Haustier genug gefüttert hast, um es zu einem Reittier zu machen, musst du diese Art von Haustier erneut ausbrüten, um es in deinem Stall zu haben.\n\nUm Reittiere in den mobilen Apps zu sehen:\n\n * Wähle im Menü \"Haustiere & Reittiere\" und wechseln zur Registerkarte \"Reittiere\".\n\nSo zeigst du Reittiere auf der Website an:\n\n * Wähle im Menü \"Inventar\" die Option \"Haustiere und Reittiere\" und scrollen nach unten zum Abschnitt \"Reittiere\"",
|
"webFaqAnswer35": "Sobald du dein Haustier genug gefüttert hast, um es zu einem Reittier zu machen, musst du diese Art von Haustier erneut ausbrüten, um es in deinem Stall zu haben.\n\nUm Reittiere in den mobilen Apps zu sehen:\n\n * Wähle im Menü \"Haustiere & Reittiere\" und wechseln zur Registerkarte \"Reittiere\".\n\nSo zeigst du Reittiere auf der Website an:\n\n * Wähle im Menü \"Inventar\" die Option \"Haustiere und Reittiere\" und scrollen nach unten zum Abschnitt \"Reittiere\"",
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
"sunsetFaqPara4": "Um die Zeit zu feiern, die wir erlebt haben, werden wir jedem ein Veteranen-Haustier schenken, während wir uns in diese neue Ära begeben. Für unsere großartigen Mitwirkenden werden wir außerdem ein spezielles Ausrüstungsset verschicken, um ihre harte Arbeit in den Habitica-Communities zu würdigen.",
|
"sunsetFaqPara4": "Um die Zeit zu feiern, die wir erlebt haben, werden wir jedem ein Veteranen-Haustier schenken, während wir uns in diese neue Ära begeben. Für unsere großartigen Mitwirkenden werden wir außerdem ein spezielles Ausrüstungsset verschicken, um ihre harte Arbeit in den Habitica-Communities zu würdigen.",
|
||||||
"sunsetFaqPara6": "Der Service für Tavernen sowie öffentliche und private Gilden endet und diese Räume werden am <strong>August 8, 2023</strong> aus Habitica entfernt.",
|
"sunsetFaqPara6": "Der Service für Tavernen sowie öffentliche und private Gilden endet und diese Räume werden am <strong>August 8, 2023</strong> aus Habitica entfernt.",
|
||||||
"sunsetFaqList1": "Der Hauptzweck von Habitica ist es, Motivation durch ein gamifiziertes Aufgabenmanagement zu schaffen. Gilden und Tavernen werden von einem unverhältnismäßig kleinen Prozentsatz unserer Spielerbasis genutzt. Die Mehrheit der Spieler nutzt externe Dienste, die in erster Linie für soziale Interaktion gedacht sind und absichtlich mit Blick auf diese Anwendungsfälle entwickelt und gepflegt werden.",
|
"sunsetFaqList1": "Der Hauptzweck von Habitica ist es, Motivation durch ein gamifiziertes Aufgabenmanagement zu schaffen. Gilden und Tavernen werden von einem unverhältnismäßig kleinen Prozentsatz unserer Spielerbasis genutzt. Die Mehrheit der Spieler nutzt externe Dienste, die in erster Linie für soziale Interaktion gedacht sind und absichtlich mit Blick auf diese Anwendungsfälle entwickelt und gepflegt werden.",
|
||||||
"sunsetFaqList2": "Die neuen Online-Sicherheitsgesetze erfordern ein Maß an aktiver Inhaltskontrolle für öffentliche Bereiche, das Habitica in der Vergangenheit nicht geboten hat. Die Investition in die Funktionen, die diese neuen Vorschriften erfordern würden, würde dazu führen, dass unsere begrenzten Ressourcen in Teile von Habitica umgeleitet werden, die die große Mehrheit der Spieler nie berührt.",
|
"sunsetFaqList2": "Die neuen Online-Sicherheitsgesetze erfordern ein Maß an aktiver Inhaltskontrolle für öffentliche Bereiche, das Habitica in der Vergangenheit nicht geboten hat. Die Investition in die Funktionen, die diese neuen Vorschriften erfordern würden, würde dazu führen, dass unsere begrenzten Ressourcen in Teile von Habitica umgeleitet werden, welche die große Mehrheit der Spieler nie berührt.",
|
||||||
"sunsetFaqList3": "Es ist uns wichtig, der ständig wachsenden internationalen Spielerbasis von Habitica weiterhin einen weltweiten Zugang zu bieten. Die Entfernung dieser Dienste ermöglicht es uns, dieses Ziel weiter zu verfolgen, ohne den Zugang in Regionen einschränken zu müssen, in denen eine aktivere Kontrolle der Inhalte erforderlich ist, als wir sie bieten können.",
|
"sunsetFaqList3": "Es ist uns wichtig, der ständig wachsenden internationalen Spielerbasis von Habitica weiterhin einen weltweiten Zugang zu bieten. Die Entfernung dieser Dienste ermöglicht es uns, dieses Ziel weiter zu verfolgen, ohne den Zugang in Regionen einschränken zu müssen, in denen eine aktivere Kontrolle der Inhalte erforderlich ist, als wir sie bieten können.",
|
||||||
"sunsetFaqPara7": "Partys und Gruppenpläne werden beibehalten und behalten ihre Chatbereiche. Du wirst auch weiterhin private Nachrichten senden können.",
|
"sunsetFaqPara7": "Partys und Gruppenpläne werden beibehalten und behalten ihre Chatbereiche. Du wirst auch weiterhin private Nachrichten senden können.",
|
||||||
"sunsetFaqPara12": "Als Open-Source-Projekt begrüßen und fördern wir viele Arten von Beiträgen. Um unsere Wertschätzung zu zeigen, werden wir das heroische Ausrüstungsset an alle Spieler schicken, die vor dem <strong>1. August 2023</strong>eine Beitragsstufe haben. Wenn die Tavernen- und Gilden-Dienste enden, wird es auch bei den Beiträgen einige Änderungen geben. Im Folgenden erfährst du mehr über den jeweiligen Plan für die einzelnen Typen.",
|
"sunsetFaqPara12": "Als Open-Source-Projekt begrüßen und fördern wir viele Arten von Beiträgen. Um unsere Wertschätzung zu zeigen, werden wir das heroische Ausrüstungsset an alle Spieler schicken, die vor dem <strong>1. August 2023</strong>eine Beitragsstufe haben. Wenn die Tavernen- und Gilden-Dienste enden, wird es auch bei den Beiträgen einige Änderungen geben. Im Folgenden erfährst du mehr über den jeweiligen Plan für die einzelnen Typen.",
|
||||||
@@ -243,5 +243,5 @@
|
|||||||
"subscriptionDetail470": "Gruppenabonnentenvorteile verhalten sich genauso wie die eines wiederkehrenden 1-Monats-Abonnements. Du erhältst eine Mystische Sanduhr am Anfang jedes Monats und die Anzahl an Edelsteinen, die du jeden Monat auf dem Marktplatz kaufen kannst, wird sich erhöhen bis zu einem Limit von 50.",
|
"subscriptionDetail470": "Gruppenabonnentenvorteile verhalten sich genauso wie die eines wiederkehrenden 1-Monats-Abonnements. Du erhältst eine Mystische Sanduhr am Anfang jedes Monats und die Anzahl an Edelsteinen, die du jeden Monat auf dem Marktplatz kaufen kannst, wird sich erhöhen bis zu einem Limit von 50.",
|
||||||
"subscriptionPara3": "Wir hoffen, dass dieser neue Rhythmus besser vorhersagbar ist, mehr Zugang zur fantastischen Gegenstandauswahl im Laden des Zeitreisenden ermöglicht und noch mehr Motivation bietet, jeden Monat Fortschritte an deinen Aufgaben zu machen!",
|
"subscriptionPara3": "Wir hoffen, dass dieser neue Rhythmus besser vorhersagbar ist, mehr Zugang zur fantastischen Gegenstandauswahl im Laden des Zeitreisenden ermöglicht und noch mehr Motivation bietet, jeden Monat Fortschritte an deinen Aufgaben zu machen!",
|
||||||
"faqQuestion67": "Was sind die Klassen in Habitica?",
|
"faqQuestion67": "Was sind die Klassen in Habitica?",
|
||||||
"webFaqAnswer67": "Klassen sind verschiedene Rollen, die dein Charakter spielen kann. Jede Klasse bietet ihre eigene Reihe von einzigartigen Vorteilen und Fähigkeiten beim Aufsteigen auf höhere Level. Diese Fähigkeiten können das Bearbeiten deiner Aufgaben ergänzen oder dabei helfen, deine Party beim Abschließen von Quests zu unterstützen.\n\nDeine Klasse bestimmt auch, welche Ausrüstung für dich in den Belohnungen, im Marktplatz und im Jahreszeitenmarkt zum Kauf erhältlich ist.\n\nHier ist eine Zusammenfassung jeder Klasse, um dir dabei zu helfen, diejenige zu wählen, welche am besten zu deinem Spielstil passt:\n#### **Krieger**\n* Krieger verursachen hohen Schaden bei Bossen und haben eine hohe Chance für kritische Treffer beim Abschließen von Aufgaben, was dich mit extra Erfahrung und Gold belohnt.\n* Stärke ist ihr primäres Attribut, welches den Schaden erhöht, den sie verursachen.\n* Ausdauer ist ihr sekundäres Attribut, welches den Schaden verringert, den sie erhalten.\n* Die Fähigkeiten der Krieger erhöhen die Ausdauer und Stärke der Party Kameraden.\n* Erwäge, einen Krieger zu spielen, wenn du es liebst, Bosse zu bekämpfen und auch ein wenig Schutz möchtest, wenn du gelegentlich Aufgaben versäumst.\n#### **Heiler**\n* Heiler haben eine starke Verteidigung und können sich selbst, sowie die Party Kameraden, heilen.\n* Ausdauer ist ihr primäres Attribut, welches ihre Heilungen verstärkt und den Schaden, den sie erhalten, verringert.\n* Intelligenz ist ihr sekundäres Attribut, welches ihr Mana und ihre Erfahrung erhöht.\n* Die Fähigkeiten der Heiler bewirken, dass ihre Aufgaben weniger rot werden und erhöhen die Ausdauer der Party Kameraden.\n* Erwäge, einen Heiler zu spielen, wenn du oft Aufgaben versäumst, und die Fähigkeit benötigst, dich selbst und deine Party Kameraden zu heilen. Heiler erreichen schnell neue Level.\n#### **Magier**\n* Magier gewinnen schnell neue Level und viel Mana, und verursachen Schaden bei Bossen in Quests.\n* Intelligenz ist ihr primäres Attribut, welches ihr Mana und ihre Erfahrung erhöht.\n* Wahrnehmung ist ihr sekundäres Attribut, welches ihr gefundenes Gold und ihre gefundenen Gegenstände vermehrt.\n* Die Fähigkeiten der Magier bewirken, dass ihre Aufgaben Strähnen eingefroren werden, stellen das Mana ihrer Party Kameraden wieder her, und erhöhen ihre Intelligenz.\n* Erwäge, einen Magier zu spielen, wenn du durch das schnelle Erreichen neuer Level und das Beisteuern von Schaden in Boss Quests motiviert wirst.\n#### **Schurke**\n* Schurken bekommen die meisten erbeuteten Gegenstände und das meiste Gold beim Erledigen von Aufgaben, und haben eine höhere Chance, kritische Treffer zu erzielen, was ihnen noch mehr Erfahrung und Gold beschert.\n* Wahrnehmung ist ihr primäres Attribut, welches ihr gefundenes Gold und ihre gefundenen Gegenstände vermehrt.\n* Stärke ist ihr sekundäres Attribut, welches den Schaden erhöht, den sie verursachen.\n* Die Fähigkeiten der Schurken helfen ihnen, versäumten Tagesaufgaben auszuweichen, Gold zu klauen, und die Wahrnehmung ihrer Party Kameraden zu erhöhen.\n* Erwäge, einen Schurken zu spielen, wenn du durch Belohnungen sehr motiviert wirst."
|
"webFaqAnswer67": "Klassen sind verschiedene Rollen, die dein Charakter spielen kann. Jede Klasse bietet ihre eigene Reihe von einzigartigen Vorteilen und Fähigkeiten beim Aufsteigen auf höhere Level. Diese Fähigkeiten können das Bearbeiten deiner Aufgaben ergänzen oder dabei helfen, deine Party beim Abschließen von Quests zu unterstützen.\n\nDeine Klasse bestimmt auch, welche Ausrüstung für dich in den Belohnungen, im Marktplatz und im Jahreszeitenmarkt zum Kauf erhältlich ist.\n\nHier ist eine Zusammenfassung jeder Klasse, um dir dabei zu helfen, diejenige zu wählen, welche am besten zu deinem Spielstil passt:\n#### **Krieger**\n* Die Krieger verursachen hohen Schaden bei Bossen und haben eine hohe Chance für kritische Treffer beim Abschließen von Aufgaben, was dich mit extra Erfahrung und Gold belohnt.\n* Stärke ist ihr primäres Attribut, welches den Schaden erhöht, den sie verursachen.\n* Ausdauer ist ihr sekundäres Attribut, welches den Schaden verringert, den sie erhalten.\n* Die Fähigkeiten der Krieger erhöhen die Ausdauer und Stärke der Gruppenmitglieder.\n* Erwäge, einen Krieger zu spielen, wenn du es liebst, Bosse zu bekämpfen und auch ein wenig Schutz möchtest, wenn du gelegentlich Aufgaben versäumst.\n#### **Heiler**\n* Die Heiler haben eine starke Verteidigung und können sich selbst, sowie Gruppenmitglieder, heilen.\n* Ausdauer ist ihr primäres Attribut, welches ihre Heilungen verstärkt und den Schaden, den sie erhalten, verringert.\n* Intelligenz ist ihr sekundäres Attribut, welches ihr Mana und ihre Erfahrung erhöht.\n* Die Fähigkeiten der Heiler bewirken, dass ihre Aufgaben weniger rot werden und erhöhen die Ausdauer der Gruppenmitglieder.\n* Erwäge, einen Heiler zu spielen, wenn du oft Aufgaben versäumst, und die Fähigkeit benötigst, dich selbst und deine Gruppenmitglieder zu heilen. Heiler erreichen schnell neue Level.\n#### **Magier**\n* Die Magier gewinnen schnell neue Level und viel Mana, und verursachen Schaden bei Bossen in Quests.\n* Intelligenz ist ihr primäres Attribut, welches ihr Mana und ihre Erfahrung erhöht.\n* Wahrnehmung ist ihr sekundäres Attribut, welches ihr gefundenes Gold und ihre gefundenen Gegenstände vermehrt.\n* Die Fähigkeiten der Magier bewirken, dass ihre Aufgaben Strähnen eingefroren werden, stellen das Mana ihrer Gruppenmitglieder wieder her, und erhöhen ihre Intelligenz.\n* Erwäge, einen Magier zu spielen, wenn du durch das schnelle Erreichen neuer Level und das Beisteuern von Schaden in Boss Quests motiviert wirst.\n#### **Schurke**\n* Die Schurken bekommen die meisten erbeuteten Gegenstände und das meiste Gold beim Erledigen von Aufgaben und haben eine höhere Chance, kritische Treffer zu erzielen, was ihnen noch mehr Erfahrung und Gold beschert.\n* Wahrnehmung ist ihr primäres Attribut, welches ihr gefundenes Gold und ihre gefundenen Gegenstände vermehrt.\n* Stärke ist ihr sekundäres Attribut, welches den Schaden erhöht, den sie verursachen.\n* Die Fähigkeiten der Schurken helfen ihnen, versäumten Tagesaufgaben auszuweichen, Gold zu klauen und die Wahrnehmung ihrer Gruppenmitglieder zu erhöhen.\n* Erwäge, einen Schurken zu spielen, wenn du durch Belohnungen sehr motiviert wirst."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,26 +25,26 @@
|
|||||||
"invalidEmail": "Um das Passwort zurückzusetzen, ist eine gültige E-Mail-Adresse notwendig.",
|
"invalidEmail": "Um das Passwort zurückzusetzen, ist eine gültige E-Mail-Adresse notwendig.",
|
||||||
"login": "Anmelden",
|
"login": "Anmelden",
|
||||||
"logout": "Abmelden",
|
"logout": "Abmelden",
|
||||||
"marketing1Header": "Verbessere spielerisch Deinen Lebensstil mit Habitica",
|
"marketing1Header": "Verbessere deine Gewohnheiten mit jedem Level!",
|
||||||
"marketing1Lead1Title": "Mache dein Leben zum Spiel",
|
"marketing1Lead1Title": "Mache dein Leben zum Spiel",
|
||||||
"marketing1Lead1": "Habitica ist die perfekte App, für alle die Probleme mit to-do Listen haben. Wir verwenden bekannte Spiel-Mechaniken wie Belohnungen mit Gold und ExP und Gegenstände, die dir helfen dich produktiver zu fühlen und dein Erfolgserlebnis zu steigern, wenn du Aufgaben vollendest. Je besser Du Dich dabei anstellst, umso weiter kommst Du im Spiel.",
|
"marketing1Lead1": "Habitica ist die perfekte App, für alle die Probleme mit ToDo-Listen haben. Wir verwenden bekannte Spiel-Mechaniken wie Belohnungen in Gold, XP und Gegenstände, die dir dabei helfen, dich produktiver zu fühlen und dein Erfolgserlebnis zu steigern, wenn du Aufgaben vollendest. Je besser Du Dich dabei anstellst, umso weiter kommst Du im Spiel.",
|
||||||
"marketing1Lead2Title": "Rüsten dich mit Stil aus",
|
"marketing1Lead2Title": "Rüsten dich mit Stil aus",
|
||||||
"marketing1Lead2": "Sammele Schwerter, Rüstungen und vieles mehr mit Gold, welches du beim Vollenden von Aufgaben verdienst. Mit hunderten von Stücken, die du sammeln und auswählen kannst, werden dir nie Kombinationen zum Ausprobieren ausgehen. Optimiere deine Statistik , Style oder beides zusammen! ",
|
"marketing1Lead2": "Sammele Schwerter, Rüstungen und vieles mehr mit Gold, welches du beim Vollenden von Aufgaben verdienst. Mit hunderten von Ausrüstungsstücken, die du sammeln und auswählen kannst, werden dir nie Kombinationen zum Ausprobieren ausgehen. Optimiere deine Statistik, deinen Style oder beides zusammen! ",
|
||||||
"marketing1Lead3Title": "Verdiene Belohnungen für deine Bemühungen",
|
"marketing1Lead3Title": "Verdiene Belohnungen für deine Bemühungen",
|
||||||
"marketing1Lead3": "Etwas zu haben, auf das man sich freuen kann, kann den Unterschied ausmachen, ob man eine Aufgabe erledigt, oder ob sie einen wochenlang quält. Wenn das Leben keine Belohnung bietet, ist Habitica für dich da! Du wirst für jede Aufgabe belohnt, aber Überraschungen gibt es an jeder Ecke - also mach weiter so! ",
|
"marketing1Lead3": "Etwas zu haben, auf das man sich freuen kann, mag den Unterschied ausmachen, ob man eine Aufgabe erledigt oder ob sie einen wochenlang quält. Wenn das Leben keine Belohnung bietet ist Habitica für dich da! Du wirst für jede Aufgabe belohnt, aber Überraschungen gibt es an jeder Ecke - also mach weiter so! ",
|
||||||
"marketing2Header": "Messe Dich mit Freunden",
|
"marketing2Header": "Schließe dich mit Freunden zusammen",
|
||||||
"marketing2Lead1Title": "Soziale Produktivität",
|
"marketing2Lead1Title": "Soziale Produktivität",
|
||||||
"marketing2Lead1": "Hole dir einen Motivationsschub, indem du mit anderen zusammenarbeitest, konkurrierst und interagierst! Habitica wurde entwickelt, um den effektivsten Teil eines jeden Selbstverbesserungsprogramms zu nutzen: soziale Verantwortung.",
|
"marketing2Lead1": "Hole dir einen Motivationsschub, indem du mit anderen zusammenarbeitest, konkurrierst und interagierst! Habitica wurde entwickelt, um den effektivsten Teil eines jeden Selbstverbesserungsprogramms zu nutzen: soziale Verantwortung.",
|
||||||
"marketing2Lead2Title": "Bekämpfe Monster in Quests.",
|
"marketing2Lead2Title": "Bekämpfe Monster in Quests",
|
||||||
"marketing2Lead2": "Nimm eine unserer Hunderte von Quests mit einer Gruppe von Freunden an, um sich ins Getümmel zu stürzen. Die Monster der Quests bringen deine Verantwortlichkeit auf die Spitze. Wenn du vergisst, Zahnseide zu benutzen, schadet das allen!",
|
"marketing2Lead2": "Nimm dich einer unserer hunderten von Quests mit einer Gruppe von Freunden an, um dich ins Getümmel zu stürzen. Die Monster der Quests bringen deine Verantwortlichkeit auf die Spitze. Wenn du vergisst, Zahnseide zu benutzen, schadet das allen!",
|
||||||
"marketing2Lead3Title": "Fordert einander heraus",
|
"marketing2Lead3Title": "Fordert einander heraus",
|
||||||
"marketing2Lead3": "Nimm an Herausforderungen teil, die von unserer Community erstellt wurden, und erhalte kuratierte Aufgabenlisten, die deinen Interessen und Zielen entsprechen. Gib dein Bestes, um den Edelsteinpreis für den Gewinner zu erhalten!",
|
"marketing2Lead3": "Nimm an Herausforderungen teil, die von unserer Community erstellt wurden und erhalte zusammengestellte Aufgabenlisten, die deinen Interessen und Zielen entsprechen. Gib dein Bestes dabei, um den Edelsteinpreis zu wetteifern, der dem Gewinner verliehen wird!",
|
||||||
"marketing3Header": "Apps und Erweiterungen",
|
"marketing3Header": "Weitere Möglichkeiten, Habitica zu nutzen",
|
||||||
"marketing3Lead1": "Du kannst Habitica auf deinem Android- oder iOS-Gerät nutzen, um Aufgaben überall abzuhaken. Schau dir unsere preisgekrönten Apps an, um einen neuen Ansatz zur Erledigung von Aufgaben zu finden.",
|
"marketing3Lead1": "Du kannst Habitica auf deinem Android- oder iOS-Gerät nutzen, um Aufgaben überall abzuhaken. Schau dir unsere preisgekrönten Apps an, um einen neuen Ansatz zur Erledigung von Aufgaben zu finden.",
|
||||||
"marketing3Lead2Title": "Open-Source community",
|
"marketing3Lead2Title": "Open-Source Community",
|
||||||
"marketing3Lead2": "Wir sind stolz darauf, ein Open-Source-Projekt zu sein, das Beiträge von unserer engagierten Community begrüßt. Passe Habitica deinen eigenen Bedürfnissen an oder trage dazu bei, die Erfahrung aller Spieler auf der ganzen Welt zu verbessern. Besuche uns auf [GitHub](https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica), um mehr zu erfahren!",
|
"marketing3Lead2": "Wir sind stolz darauf, ein Open-Source-Projekt zu sein, das Beiträge von unserer engagierten Community begrüßt. Passe Habitica deinen eigenen Bedürfnissen an oder trage dazu bei, die Erfahrung aller Spieler auf der ganzen Welt zu verbessern. Besuche uns auf [GitHub](https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica), um mehr zu erfahren!",
|
||||||
"marketing4Header": "Mehr als nur Hausarbeit",
|
"marketing4Header": "Mehr als nur Hausarbeit",
|
||||||
"marketing4Lead1": "Die Bildung ist einer der besten Orte für ein wenig Gamification! Durchbrich die Monotonie der täglichen Klassenarbeit, indem du ein paar Spiele in den Mix einbaust. Mit Habitica kannst du auf unterhaltsame Weise die Hausaufgaben verfolgen, Herausforderungen im Klassenzimmer schaffen und dein SchülerInnen mit ihren Erfolgen angeben lassen.",
|
"marketing4Lead1": "Unterricht ist einer der besten Bereiche für ein wenig Gamification! Durchbrich die Monotonie der täglichen Klassenarbeit, indem du ein paar Spiele in einbaust. Mit Habitica kannst du auf unterhaltsame Weise die Hausaufgaben verfolgen, Herausforderungen im Klassenzimmer schaffen und deine SchülerInnen mit ihren Erfolgen angeben lassen.",
|
||||||
"marketing4Lead1Title": "Gamification in der Bildung",
|
"marketing4Lead1Title": "Gamification in der Bildung",
|
||||||
"marketing4Lead2": "Der Aufbau eines gesünderen Lebensstils kann leicht zu einem überwältigenden Unterfangen werden. Habitica hilft dir dabei, alle Aspekte deiner Fitnessziele zu verfolgen, mit flexibler Zeitplanung und Intensität, um dich dort abzuholen, wo du gerade bist. Habe also etwas Spaß, während du auf deine Gesundheit hinarbeitest!",
|
"marketing4Lead2": "Der Aufbau eines gesünderen Lebensstils kann leicht zu einem überwältigenden Unterfangen werden. Habitica hilft dir dabei, alle Aspekte deiner Fitnessziele zu verfolgen, mit flexibler Zeitplanung und Intensität, um dich dort abzuholen, wo du gerade bist. Habe also etwas Spaß, während du auf deine Gesundheit hinarbeitest!",
|
||||||
"marketing4Lead2Title": "Gamification von Gesundheit und Erholung",
|
"marketing4Lead2Title": "Gamification von Gesundheit und Erholung",
|
||||||
@@ -111,7 +111,7 @@
|
|||||||
"missingPassword": "Fehlendes Passwort.",
|
"missingPassword": "Fehlendes Passwort.",
|
||||||
"missingNewPassword": "Fehlendes neues Passwort.",
|
"missingNewPassword": "Fehlendes neues Passwort.",
|
||||||
"invalidEmailDomain": "Du kannst E-Mails mit den folgenden Domains nicht registrieren: <%= domains %>",
|
"invalidEmailDomain": "Du kannst E-Mails mit den folgenden Domains nicht registrieren: <%= domains %>",
|
||||||
"wrongPassword": "Das Passwort ist falsch. Wenn Du Dein Passwort vergessen hast, klicke auf „Passwort vergessen“.",
|
"wrongPassword": "Das Passwort ist falsch. Wenn Du Dein Passwort vergessen hast, klicke auf „Passwort vergessen“",
|
||||||
"incorrectDeletePhrase": "Bitte gebe <%= magicWord %> in Großbuchstaben ein, um Dein Konto zu löschen.",
|
"incorrectDeletePhrase": "Bitte gebe <%= magicWord %> in Großbuchstaben ein, um Dein Konto zu löschen.",
|
||||||
"notAnEmail": "Ungültige E-Mail-Adresse.",
|
"notAnEmail": "Ungültige E-Mail-Adresse.",
|
||||||
"emailTaken": "Diese E-Mail-Adresse wird bereits von einem Konto verwendet.",
|
"emailTaken": "Diese E-Mail-Adresse wird bereits von einem Konto verwendet.",
|
||||||
@@ -182,5 +182,6 @@
|
|||||||
"incorrectResetPhrase": "Bitte tippe <%= magicWord %> in Großbuchstaben um deinen Account zurückzusetzen.",
|
"incorrectResetPhrase": "Bitte tippe <%= magicWord %> in Großbuchstaben um deinen Account zurückzusetzen.",
|
||||||
"translateHabitica": "Habitica übersetzen",
|
"translateHabitica": "Habitica übersetzen",
|
||||||
"marketing3Lead1Title": "Android & iOS Apps",
|
"marketing3Lead1Title": "Android & iOS Apps",
|
||||||
"marketing4Lead3Button": "Starte noch heute"
|
"marketing4Lead3Button": "Starte noch heute",
|
||||||
|
"emailBlockedRegistration": "Diese E-Mail ist für die Registrierung blockiert. Wenn du denkst, dass das ein Fehler ist, kontaktiere uns bitte unter admin@habitica.com."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2485,7 +2485,7 @@
|
|||||||
"weaponSpecialWinter2022HealerText": "Kristallklarer Zauberstab aus Eis",
|
"weaponSpecialWinter2022HealerText": "Kristallklarer Zauberstab aus Eis",
|
||||||
"weaponSpecialWinter2022HealerNotes": "Berühre einen Freund mit diesem Werkzeug aus festgefrorenem Wasser am Nacken, und er wird aus dem Sessel springen! Aber sich danach auch besser fühlen. Hoffentlich. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2021–2022 Winterausrüstung.",
|
"weaponSpecialWinter2022HealerNotes": "Berühre einen Freund mit diesem Werkzeug aus festgefrorenem Wasser am Nacken, und er wird aus dem Sessel springen! Aber sich danach auch besser fühlen. Hoffentlich. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2021–2022 Winterausrüstung.",
|
||||||
"armorSpecialWinter2022RogueText": "Strahlende Explosion",
|
"armorSpecialWinter2022RogueText": "Strahlende Explosion",
|
||||||
"armorSpecialWinter2022WarriorText": "Samtiger Strumpf",
|
"armorSpecialWinter2022WarriorText": "Flauschiger Strumpf",
|
||||||
"armorSpecialWinter2022MageText": "Granatapfel-Schutzrüstung",
|
"armorSpecialWinter2022MageText": "Granatapfel-Schutzrüstung",
|
||||||
"armorSpecialWinter2022HealerText": "Kristallklare Rüstung aus Eis",
|
"armorSpecialWinter2022HealerText": "Kristallklare Rüstung aus Eis",
|
||||||
"armorSpecialWinter2022HealerNotes": "Gleite wie auf Schlittschuhen knapp über dem Boden – eine ätherisch-glitzernde Gestalt, gekommen, um Geduld und Gelassenheit zu verbreiten. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2021–2022 Winterausrüstung.",
|
"armorSpecialWinter2022HealerNotes": "Gleite wie auf Schlittschuhen knapp über dem Boden – eine ätherisch-glitzernde Gestalt, gekommen, um Geduld und Gelassenheit zu verbreiten. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2021–2022 Winterausrüstung.",
|
||||||
@@ -2494,7 +2494,7 @@
|
|||||||
"headSpecialWinter2022MageText": "Granatapfelhelm",
|
"headSpecialWinter2022MageText": "Granatapfelhelm",
|
||||||
"headSpecialWinter2022HealerText": "Kristallklare Krone aus Eis",
|
"headSpecialWinter2022HealerText": "Kristallklare Krone aus Eis",
|
||||||
"weaponSpecialWinter2022RogueText": "Sternschnuppenfeuerwerk",
|
"weaponSpecialWinter2022RogueText": "Sternschnuppenfeuerwerk",
|
||||||
"armorSpecialWinter2022RogueNotes": "Wenn sie Sterne sehen, sehen sie Dich nicht! Ja, lass uns das so sagen. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2021–2022 Winterausrüstung.",
|
"armorSpecialWinter2022RogueNotes": "Wenn sie Sterne sehen, dann werden sie dich nicht sehen! Ja, lass es uns so machen. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2021–2022 Winterausrüstung.",
|
||||||
"armorSpecialWinter2022WarriorNotes": "Wer sagt, dass Du es nicht geborgen und gemütlich haben kannst, während Du mit alltäglichen Aufgaben kämpfst? Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2021–2022 Winterausrüstung.",
|
"armorSpecialWinter2022WarriorNotes": "Wer sagt, dass Du es nicht geborgen und gemütlich haben kannst, während Du mit alltäglichen Aufgaben kämpfst? Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2021–2022 Winterausrüstung.",
|
||||||
"armorSpecialWinter2022MageNotes": "Wenn Du Dich näherst, müssen sich Deine Feinde sich vor Fruchtsaft-Flecken in Acht nehmen! Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2021–2022 Winterausrüstung.",
|
"armorSpecialWinter2022MageNotes": "Wenn Du Dich näherst, müssen sich Deine Feinde sich vor Fruchtsaft-Flecken in Acht nehmen! Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2021–2022 Winterausrüstung.",
|
||||||
"headSpecialWinter2022RogueText": "Donnerndes Finale",
|
"headSpecialWinter2022RogueText": "Donnerndes Finale",
|
||||||
@@ -2708,7 +2708,7 @@
|
|||||||
"weaponSpecialWinter2023RogueText": "Grüne Satin Schärpe",
|
"weaponSpecialWinter2023RogueText": "Grüne Satin Schärpe",
|
||||||
"weaponSpecialWinter2023WarriorText": "Stoßzahn Speer",
|
"weaponSpecialWinter2023WarriorText": "Stoßzahn Speer",
|
||||||
"weaponSpecialSpring2023MageText": "Mondstein Magie",
|
"weaponSpecialSpring2023MageText": "Mondstein Magie",
|
||||||
"weaponSpecialSpring2023MageNotes": "Je stärker ihr Glühen, desto größer ist ihre Macht. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2023 Frühlingsausrüstung.",
|
"weaponSpecialSpring2023MageNotes": "Je stärker ihr Glühen, desto größer ist ihre Macht. Erhöht Intelligenz um <%= int %> und Wahrnehmung um <%= per %>. Limitierte Ausgabe 2023 Frühlingsausrüstung.",
|
||||||
"weaponSpecialSpring2023HealerText": "Lilien Pollen",
|
"weaponSpecialSpring2023HealerText": "Lilien Pollen",
|
||||||
"weaponSpecialSummer2023WarriorText": "Wasserelementar-Schwert",
|
"weaponSpecialSummer2023WarriorText": "Wasserelementar-Schwert",
|
||||||
"weaponSpecialSummer2023MageText": "Fisch",
|
"weaponSpecialSummer2023MageText": "Fisch",
|
||||||
@@ -2945,8 +2945,8 @@
|
|||||||
"armorArmoireHattersSuitNotes": "Dein Outfit ist nicht vollständig ohne deine grüne Glücks-Fliege. Trage dies zu deinem nächsten verrückten Teekränzchen. Oder angenehmen Teekränzchen. Oder begeisterten Teekränzchen. Oder... Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Hutmacher-Set (Gegenstand 2 von 4).",
|
"armorArmoireHattersSuitNotes": "Dein Outfit ist nicht vollständig ohne deine grüne Glücks-Fliege. Trage dies zu deinem nächsten verrückten Teekränzchen. Oder angenehmen Teekränzchen. Oder begeisterten Teekränzchen. Oder... Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Hutmacher-Set (Gegenstand 2 von 4).",
|
||||||
"armorArmoireBlueStripedSwimsuitNotes": "Was könnte spannender sein als Seemonster am Strand zu bekämpfen? Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Strand-Set (Gegenstand 2 von 4).",
|
"armorArmoireBlueStripedSwimsuitNotes": "Was könnte spannender sein als Seemonster am Strand zu bekämpfen? Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Strand-Set (Gegenstand 2 von 4).",
|
||||||
"armorArmoireSchoolUniformPantsNotes": "Ob du nun eine Schule für magische Zauberer, Drachenreiter, Ballsportspieler, kreative Künstler oder Mitglieder einer Organisation, die zu geheim ist, um sie hier aufzuzählen, besuchst, du wirst mit dieser Uniform gut dazu passen. Erhöht Intelligenz um <%= int %>.Verzauberter Schrank: Schuluniform-Set (Gegenstand 2 von 4).",
|
"armorArmoireSchoolUniformPantsNotes": "Ob du nun eine Schule für magische Zauberer, Drachenreiter, Ballsportspieler, kreative Künstler oder Mitglieder einer Organisation, die zu geheim ist, um sie hier aufzuzählen, besuchst, du wirst mit dieser Uniform gut dazu passen. Erhöht Intelligenz um <%= int %>.Verzauberter Schrank: Schuluniform-Set (Gegenstand 2 von 4).",
|
||||||
"armorArmoireGreenFluffTrimmedCoatNotes": "Sagen erzählen, dass einmal in einer Generation ein Mantel daherkommt, der der wärmste und bequemste von allen ist. Sein Flausch ist außergewöhnlich und seine Knöpfe sind sogar von fäustlingsumhüllten Händen handhabbar. Das ist dieser Mantel hier. Erhöht Stärke und Intelligenz um jeweils <%= attrs %>. Verzauberter Schrank: Fallenstellerhut-Set (Gegenstand 2 von 2).",
|
"armorArmoireGreenFluffTrimmedCoatNotes": "Sagen erzählen, dass einmal in einer Generation ein Mantel daherkommt, welcher der wärmste und bequemste von allen ist. Sein Flausch ist außergewöhnlich und seine Knöpfe sind sogar von fäustlingsumhüllten Händen handhabbar. Das ist dieser Mantel hier. Erhöht Stärke und Intelligenz um jeweils <%= attrs %>. Verzauberter Schrank: Fallenstellerhut-Set (Gegenstand 2 von 2).",
|
||||||
"armorArmoireSoftWhiteSuitNotes": "Weiß ist eine friedvolle Farbe. Ob du nun ein strahlend weißes Bettlaken oder eine Decke aus frischgefallenem Schnee betrachtest, du wirst einen klaren und vorbereiteten Geist haben. Erhöht Ausdauer um <% con %> und Wahrnehmung um <%= per %>. Verzauberter Schrank: Weiße Lounge-Kleidung (Gegenstand 2 von 3).",
|
"armorArmoireSoftWhiteSuitNotes": "Weiß ist eine friedvolle Farbe. Ob du nun ein strahlend weißes Bettlaken oder eine Decke aus frischgefallenem Schnee betrachtest, du wirst einen klaren und vorbereiteten Geist haben. Erhöht Ausdauer um <%= con %> und Wahrnehmung um <%= per %>. Verzauberter Schrank: Weißes Lounge-Kleidungsset (Gegenstand 2 von 3).",
|
||||||
"armorArmoireCorsairsCoatAndCapeText": "Mantel und Umhang des Korsaren",
|
"armorArmoireCorsairsCoatAndCapeText": "Mantel und Umhang des Korsaren",
|
||||||
"armorArmoireSmileyShirtNotes": "Weil du glücklich bist! Zeig der Welt, dass du heute den ganzen Tag lächelst. Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Optimisten-Set (Gegenstand 1 von 4).",
|
"armorArmoireSmileyShirtNotes": "Weil du glücklich bist! Zeig der Welt, dass du heute den ganzen Tag lächelst. Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Optimisten-Set (Gegenstand 1 von 4).",
|
||||||
"armorArmoireYellowStripedSwimsuitText": "Gelb gestreifter Badeanzug",
|
"armorArmoireYellowStripedSwimsuitText": "Gelb gestreifter Badeanzug",
|
||||||
@@ -2954,7 +2954,7 @@
|
|||||||
"armorArmoireGreenFluffTrimmedCoatText": "Mantel mit grünem Flauschband",
|
"armorArmoireGreenFluffTrimmedCoatText": "Mantel mit grünem Flauschband",
|
||||||
"armorArmoireSchoolUniformSkirtText": "Schuluniform mit Rock",
|
"armorArmoireSchoolUniformSkirtText": "Schuluniform mit Rock",
|
||||||
"armorArmoireHattersSuitText": "Anzug des Hutmachers",
|
"armorArmoireHattersSuitText": "Anzug des Hutmachers",
|
||||||
"armorArmoireKarateGiText": "Karate Gi",
|
"armorArmoireKarateGiText": "Karategi",
|
||||||
"armorArmoireKarateGiNotes": "Diese leichte Karate-Uniform ist perfekt für Training oder Wettbewerbe. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Karate-Set (Gegenstand 1 von 10).",
|
"armorArmoireKarateGiNotes": "Diese leichte Karate-Uniform ist perfekt für Training oder Wettbewerbe. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Karate-Set (Gegenstand 1 von 10).",
|
||||||
"weaponArmoireStormKnightAxeText": "Axt des Sturmritters",
|
"weaponArmoireStormKnightAxeText": "Axt des Sturmritters",
|
||||||
"weaponArmoireStormKnightAxeNotes": "Sammle deine Wut und schlage wie ein Donnerschlag zu! Erhöht Stärke um <%= str %>. Verzauberter Schrank: Sturmritter-Set (Gegenstand 3 von 3)",
|
"weaponArmoireStormKnightAxeNotes": "Sammle deine Wut und schlage wie ein Donnerschlag zu! Erhöht Stärke um <%= str %>. Verzauberter Schrank: Sturmritter-Set (Gegenstand 3 von 3)",
|
||||||
@@ -3084,7 +3084,7 @@
|
|||||||
"headSpecialWinter2025HealerText": "Lichterketten-Wirrwarr",
|
"headSpecialWinter2025HealerText": "Lichterketten-Wirrwarr",
|
||||||
"headMystery202402Notes": "Diese hübsche rosa Mähne ist das perfekte Accessoire für den Februar und darüber hinaus. Gewährt keinen Attributbonus. Februar 2024 Abonnentengegenstand.",
|
"headMystery202402Notes": "Diese hübsche rosa Mähne ist das perfekte Accessoire für den Februar und darüber hinaus. Gewährt keinen Attributbonus. Februar 2024 Abonnentengegenstand.",
|
||||||
"headMystery202402Text": "Paradiesisches Rosa Haar",
|
"headMystery202402Text": "Paradiesisches Rosa Haar",
|
||||||
"headMystery202301Notes": "Dein Gehör wird so scharf sein, dass du das Hereinbrechen des Morgens und das Glitzern des Taus hören wirst. Gewährt keinen Attributbonus. Jänner 2023 Abonnentengegenstand.",
|
"headMystery202301Notes": "Dein Gehör wird so scharf sein, dass du das Hereinbrechen des Morgens und das Glitzern des Taus hören wirst. Gewährt keinen Attributbonus. Januar 2023 Abonnentengegenstand.",
|
||||||
"headMystery202304Text": "Tiptop Teekannen-Deckel",
|
"headMystery202304Text": "Tiptop Teekannen-Deckel",
|
||||||
"headMystery202304Notes": "Dieser Helm gewährt dir Immuni-Tee-t. April 2023 Abonnentengegenstand.",
|
"headMystery202304Notes": "Dieser Helm gewährt dir Immuni-Tee-t. April 2023 Abonnentengegenstand.",
|
||||||
"headMystery202310Text": "Narrenkappe",
|
"headMystery202310Text": "Narrenkappe",
|
||||||
@@ -3295,7 +3295,7 @@
|
|||||||
"shieldSpecialSpring2025RogueText": "Kristallspitzen-Flegel",
|
"shieldSpecialSpring2025RogueText": "Kristallspitzen-Flegel",
|
||||||
"shieldSpecialSpring2025RogueNotes": "Du kannst den Kristall nutzen, um eine produktive Zukunft für dich weiszusagen. Nutze die Gelegenheit und spring vorwärts! Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2025 Frühlingsausrüstung.",
|
"shieldSpecialSpring2025RogueNotes": "Du kannst den Kristall nutzen, um eine produktive Zukunft für dich weiszusagen. Nutze die Gelegenheit und spring vorwärts! Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2025 Frühlingsausrüstung.",
|
||||||
"shieldSpecialSpring2025HealerText": "Plumeria Schild",
|
"shieldSpecialSpring2025HealerText": "Plumeria Schild",
|
||||||
"shieldSpecialSpring2025HealerNotes": "Du kannst dieses spezielle Blütenblatt verwenden, um Güte zu sammeln oder um negative Gedanken wegzuschnipsen. Nutze die Gelegenheit und spring vorwärts! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2025 Ausrüstung.",
|
"shieldSpecialSpring2025HealerNotes": "Du kannst dieses spezielle Blütenblatt verwenden, um Güte zu sammeln oder um negative Gedanken wegzuschnipsen. Nutze die Gelegenheit und spring vorwärts! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2025 Frühlingsausrüstung.",
|
||||||
"shieldSpecialSpring2025WarriorText": "Sonnenstrahl Schild",
|
"shieldSpecialSpring2025WarriorText": "Sonnenstrahl Schild",
|
||||||
"shieldSpecialSpring2025WarriorNotes": "Du kannst deine Gegner für den Moment blenden, wenn die Sonne diesen Schild genau richtig trifft. Nutze den Vorteil und spring vorwärts! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2025 Frühlingsausrüstung.",
|
"shieldSpecialSpring2025WarriorNotes": "Du kannst deine Gegner für den Moment blenden, wenn die Sonne diesen Schild genau richtig trifft. Nutze den Vorteil und spring vorwärts! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2025 Frühlingsausrüstung.",
|
||||||
"shieldArmoireSpringPetalUchiwaNotes": "Dieser tragbare Fächer mit schönem Blütenmuster bewirkt eine leichte Brise nur für dich, wenn das Wetter wärmer wird. Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Frühlingsblüten Set (Gegenstand 2 von 2).",
|
"shieldArmoireSpringPetalUchiwaNotes": "Dieser tragbare Fächer mit schönem Blütenmuster bewirkt eine leichte Brise nur für dich, wenn das Wetter wärmer wird. Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Frühlingsblüten Set (Gegenstand 2 von 2).",
|
||||||
@@ -3342,10 +3342,10 @@
|
|||||||
"armorSpecialSummer2025MageNotes": "Dieser Anzug hat nicht nur atemberaubende Farben, sondern ermöglicht dir auch, anmutig durch's Wasser zu gleiten. Schwimmen oder Tanzen - du hast die Wahl! Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe Sommerausrüstung 2025.",
|
"armorSpecialSummer2025MageNotes": "Dieser Anzug hat nicht nur atemberaubende Farben, sondern ermöglicht dir auch, anmutig durch's Wasser zu gleiten. Schwimmen oder Tanzen - du hast die Wahl! Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe Sommerausrüstung 2025.",
|
||||||
"armorArmoireBeekeepersSuitText": "Imkeranzug",
|
"armorArmoireBeekeepersSuitText": "Imkeranzug",
|
||||||
"armorArmoireBeekeepersSuitNotes": "Schütze dich, während du nach deinen fleißigen Hummeln schaust. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Imker Set (Gegenstand 2 von 4)",
|
"armorArmoireBeekeepersSuitNotes": "Schütze dich, während du nach deinen fleißigen Hummeln schaust. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Imker Set (Gegenstand 2 von 4)",
|
||||||
"headSpecialSummer2025RogueNotes": "Deine Sehkraft wird sich verbessern, sobald Du diese Maske aufsetzt. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe Sommerausrüstung 2025.",
|
"headSpecialSummer2025RogueNotes": "Deine Sehkraft wird sich verbessern sobald Du diese Maske aufsetzt. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe Sommer 2025 Ausrüstung.",
|
||||||
"weaponSpecialSummer2025MageText": "Zweigkoralle",
|
"weaponSpecialSummer2025MageText": "Zweigkoralle",
|
||||||
"weaponSpecialSummer2025MageNotes": "Verzweige dich mit deinen Talenten und Fähigkeiten, um eine Reihe von verschiedenen Aufgaben anzugreifen. Erhöht Intelligenz um <%= int %> und Wahrnehmung um <%= per %>. Limitierte Ausgabe Sommerausrüstung 2025",
|
"weaponSpecialSummer2025MageNotes": "Verzweige dich mit deinen Talenten und Fähigkeiten, um eine Reihe von verschiedenen Aufgaben anzugreifen. Erhöht Intelligenz um <%= int %> und Wahrnehmung um <%= per %>. Limitierte Ausgabe Sommerausrüstung 2025",
|
||||||
"headSpecialSummer2025WarriorText": "Jakobsmuschel Helm",
|
"headSpecialSummer2025WarriorText": "Kammmuschelhelm",
|
||||||
"headSpecialSummer2025WarriorNotes": "Undurchdringlich und perfekt zugespitzt wird dich dieser Helm sogar vor Seesternen beschützen. Erhöht Stärke um <%= str %>. Limitierte Ausgabe Sommerausrüstung 2025.",
|
"headSpecialSummer2025WarriorNotes": "Undurchdringlich und perfekt zugespitzt wird dich dieser Helm sogar vor Seesternen beschützen. Erhöht Stärke um <%= str %>. Limitierte Ausgabe Sommerausrüstung 2025.",
|
||||||
"headSpecialSummer2025RogueText": "Tintenfischmaske",
|
"headSpecialSummer2025RogueText": "Tintenfischmaske",
|
||||||
"headSpecialSummer2025HealerText": "Ruderschnecken Helm",
|
"headSpecialSummer2025HealerText": "Ruderschnecken Helm",
|
||||||
@@ -3355,5 +3355,25 @@
|
|||||||
"headMystery202507Notes": "Umgedrehte Mützen sind immer noch cool, oder? Gewährt keinen Attributbonus. Juli 2025 Abonnentengegenstand.",
|
"headMystery202507Notes": "Umgedrehte Mützen sind immer noch cool, oder? Gewährt keinen Attributbonus. Juli 2025 Abonnentengegenstand.",
|
||||||
"headMystery202507Text": "Draufgängerische Skater Mütze",
|
"headMystery202507Text": "Draufgängerische Skater Mütze",
|
||||||
"armorArmoireFlyFishingWadersText": "Fliegenfischerhose",
|
"armorArmoireFlyFishingWadersText": "Fliegenfischerhose",
|
||||||
"armorArmoireFlyFishingWadersNotes": "Halte dich vollkommen warm und trocken, wenn du in einen Bach, Teich, See oder Fluß watest. Erhöht Stärke und Ausdauer um jeweils <%= attrs %>. Verzauberter Schrank: Fliegenfischer Set (Gegenstand 2 von 3)"
|
"armorArmoireFlyFishingWadersNotes": "Halte dich vollkommen warm und trocken, wenn du in einen Bach, Teich, See oder Fluß watest. Erhöht Stärke und Ausdauer um jeweils <%= attrs %>. Verzauberter Schrank: Fliegenfischer Set (Gegenstand 2 von 3)",
|
||||||
|
"headArmoireBeekeepersHatText": "Imkerhut und Schleier",
|
||||||
|
"headArmoireBeekeepersHatNotes": "Schützt dein Gesicht, während Du dich um Deine brummenden Kumpels kümmerst. Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Bienenzüchter-Set (Gegenstand 1 von 4)",
|
||||||
|
"shieldSpecialSummer2025WarriorText": "Jakobsmuschelschild",
|
||||||
|
"shieldSpecialSummer2025WarriorNotes": "Die Farben sind schön, aber der Kamm ist gefährlich. Feinde, nehmt euch in Acht! Erhöht die Konstitution um <%= con %>. Limitierte Edition Sommer 2025 Ausrüstung.",
|
||||||
|
"headArmoireFlyFishingHatText": "Fliegenfischerhut",
|
||||||
|
"headArmoireFlyFishingHatNotes": "Mit breiter Krempe und Platz für einen Ersatzköder. Du solltest nicht ohne diese Schönheit zum Fliegenfischen gehen. Erhöht Stärke und Wahrnehmung jeweils um <%= attrs %>. Verzauberter Schrank: Fliegenfischer-Set (Gegenstand 1 von 3)",
|
||||||
|
"shieldArmoireFlyFishingRodNotes": "Hänge einen Köder an diese lange, flexible Rute und Fische werden ihn jedes Mal mit einem Insekt verwechseln. Erhöht Stärke und Intelligenz um jeweils <%= attrs %>. Verzauberter Schrank: Fliegenfischer-Set (Gegenstand 3 von 3)",
|
||||||
|
"backMystery202506Text": "Sonnenschein-Aureole",
|
||||||
|
"shieldSpecialSummer2025RogueText": "Tintenfisch-Tentakel",
|
||||||
|
"shieldSpecialSummer2025RogueNotes": "Dieser Tentakel sieht biegsam aus, aber seine Saugnäpfe greifen fest zu. Feinde, passt auf! Erhöht die Stärke um <%= str %>. Limitierte Edition Sommer 2025 Ausrüstung.",
|
||||||
|
"shieldSpecialSummer2025HealerText": "Ruderschnecken-Schild",
|
||||||
|
"shieldSpecialSummer2025HealerNotes": "Dieser Schild sieht einfach aus, aber er hat gesundheitsschädliche Eigenschaften. Feinde, passt auf! Erhöht die Konstitution um <%= con %>. Limitierte Edition Sommer 2025 Ausrüstung.",
|
||||||
|
"shieldArmoireBeekeepersHiveText": "Bienenstock",
|
||||||
|
"shieldArmoireBeekeepersHiveNotes": "Bienenstöcke dienen sowohl als Zuhause als auch als Arbeitsplatz. Vielleicht solltet ihr mit euren Bienen über eine gute Work-Life-Balance sprechen. Erhöht die Stärke um <%= str %>. Verzauberter Schrank: Imker-Set (Gegenstand 4 von 4)",
|
||||||
|
"shieldArmoireFlyFishingRodText": "Fliegenfischer-Rute",
|
||||||
|
"backMystery202507Text": "Draufgängerisches Skateboard",
|
||||||
|
"backMystery202507Notes": "Dein Ross für Bürgersteige und Halfpipes. Gewährt keinen Attributbonus. Juli 2025 Abonnentengegenstand.",
|
||||||
|
"shieldMystery202506Text": "Sonnenschein-Schild",
|
||||||
|
"shieldMystery202506Notes": "Vertreibe die Dunkelheit und lasse deiner Umgebung warme und herzliche Strahlen zuteilwerden wo immer du auch bist. Gewährt keinen Attributbonus. Juni 2025 Abonnentengegenstand.",
|
||||||
|
"backMystery202506Notes": "Trage ein warmes Leuchten mit dir, wenn du deinen täglichen Aufgaben nachgehst. Gewährt keinen Attributbonus. Juni 2025 Abonnentengegenstand."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -189,7 +189,7 @@
|
|||||||
"dismissAll": "Alle entfernen",
|
"dismissAll": "Alle entfernen",
|
||||||
"messages": "Nachrichten",
|
"messages": "Nachrichten",
|
||||||
"emptyMessagesLine1": "Du hast im Moment keine Nachrichten",
|
"emptyMessagesLine1": "Du hast im Moment keine Nachrichten",
|
||||||
"emptyMessagesLine2": "Du kannst anderen eine neue Nachricht schicken, indem Du ihr Profil aufrufst und auf den \"Nachrichten\"-Knopf drückst.",
|
"emptyMessagesLine2": "Sende eine Nachricht, um eine Konversation mit Mitgliedern deiner Gruppe oder anderen Habitica Spielern zu beginnen",
|
||||||
"userSentMessage": "<span class=\"notification-bold\"><%- user %></span> hat Dir eine Nachricht gesendet",
|
"userSentMessage": "<span class=\"notification-bold\"><%- user %></span> hat Dir eine Nachricht gesendet",
|
||||||
"letsgo": "Auf geht's!",
|
"letsgo": "Auf geht's!",
|
||||||
"selected": "Ausgewählt",
|
"selected": "Ausgewählt",
|
||||||
|
|||||||
@@ -79,7 +79,7 @@
|
|||||||
"newBaileyUpdate": "Neues Update von Bailey!",
|
"newBaileyUpdate": "Neues Update von Bailey!",
|
||||||
"tellMeLater": "Erzähl es mir später",
|
"tellMeLater": "Erzähl es mir später",
|
||||||
"dismissAlert": "Als gelesen markieren",
|
"dismissAlert": "Als gelesen markieren",
|
||||||
"donateText3": "Als Open-Source-Projekt ist Habitica auf die Hilfe unserer Benutzer angewiesen. Das Geld, was Du für Edelsteine ausgibst, hilft uns dabei unsere Server am Laufen zu halten, ein paar Mitarbeiter zu bezahlen, neue Features zu entwickeln und unseren ehrenamtlichen Helferlein Anreize zu bieten",
|
"donateText3": "Als Open-Source-Projekt ist Habitica auf die Hilfe unserer Benutzer angewiesen. Das Geld, das Du für Edelsteine ausgibst, hilft uns dabei unsere Server am Laufen zu halten, ein paar Mitarbeiter zu bezahlen, neue Features zu entwickeln und unseren ehrenamtlichen Helferlein Anreize zu bieten",
|
||||||
"card": "Kreditkarte",
|
"card": "Kreditkarte",
|
||||||
"paymentMethods": "Kauf mit",
|
"paymentMethods": "Kauf mit",
|
||||||
"paymentSuccessful": "Die Zahlung war erfolgreich!",
|
"paymentSuccessful": "Die Zahlung war erfolgreich!",
|
||||||
@@ -125,7 +125,7 @@
|
|||||||
"limitedAvailabilityMinutes": "Für <%= minutes %>min <%= seconds %>sek verfügbar",
|
"limitedAvailabilityMinutes": "Für <%= minutes %>min <%= seconds %>sek verfügbar",
|
||||||
"limitedAvailabilityHours": "Für t <%= hours %>std und <%= minutes %>min verfügbar",
|
"limitedAvailabilityHours": "Für t <%= hours %>std und <%= minutes %>min verfügbar",
|
||||||
"limitedAvailabilityDays": "Für <%= days %>t <%= hours %>std und <%= minutes %>min verfügbar",
|
"limitedAvailabilityDays": "Für <%= days %>t <%= hours %>std und <%= minutes %>min verfügbar",
|
||||||
"amountExp": "<%= amount %> Exp",
|
"amountExp": "<%= amount %> XP",
|
||||||
"helpSupportHabitica": "Hilf dabei, Habitica zu unterstützen",
|
"helpSupportHabitica": "Hilf dabei, Habitica zu unterstützen",
|
||||||
"groupsPaymentSubBilling": "Dein nächstes Rechnungsdatum ist <strong><%= renewalDate %></strong>.",
|
"groupsPaymentSubBilling": "Dein nächstes Rechnungsdatum ist <strong><%= renewalDate %></strong>.",
|
||||||
"groupsPaymentAutoRenew": "Dieses Abonnement läuft automatisch weiter, bis es gekündigt wird. Du kannst es im Gruppen-Abrechnungs-Tab kündigen.",
|
"groupsPaymentAutoRenew": "Dieses Abonnement läuft automatisch weiter, bis es gekündigt wird. Du kannst es im Gruppen-Abrechnungs-Tab kündigen.",
|
||||||
|
|||||||
@@ -161,7 +161,7 @@
|
|||||||
"questOwlDropOwlEgg": "Eule (Ei)",
|
"questOwlDropOwlEgg": "Eule (Ei)",
|
||||||
"questOwlUnlockText": "Schaltet den Kauf von Euleneiern auf dem Marktplatz frei",
|
"questOwlUnlockText": "Schaltet den Kauf von Euleneiern auf dem Marktplatz frei",
|
||||||
"questPenguinText": "Der Federvieh-Frost",
|
"questPenguinText": "Der Federvieh-Frost",
|
||||||
"questPenguinNotes": "Obwohl es auf der Südspitze von Habitica ein heißer Sommertag ist, hat eine unnatürliche Kälte den Lively Lake befallen. Man hört das Heulen von starken, eisigen Winden und das Ufer fängt an zuzufrieren. Eisspitzen brechen aus dem Boden und verdrängen Gras und Dreck. @Melynnrose und @Breadstrings rennen zu Dir hinüber.<br><br>\"Hilfe!\" sagt @Melynnrose. \"Wir haben einen riesigen Pinguin hergebracht, um den See zuzufrieren damit wir alle schlittschuhlaufen können, aber uns sind die Fische ausgegangen, mit denen wir ihn gefüttert haben!\"<br><br>\"Er wurde wütend und friert mit seinem Eis-Atem alles zu, was er sieht!\" sagt @Breadstrings. \"Bitte, Du musst ihn überwältigen bevor wir alle von Eis bedeckt sind!\" Sieht aus, als ob Du das Gemüt dieses Pinguins ... etwas <em>abkühlen</em> musst.",
|
"questPenguinNotes": "Obwohl es auf der Südspitze von Habitica ein heißer Sommertag ist, hat eine unnatürliche Kälte den Lively Lake befallen. Man hört das Heulen von starken, eisigen Winden und das Ufer fängt an zuzufrieren. Eisspitzen brechen aus dem Boden und verdrängen Gras und Dreck. @Melynnrose und @Breadstrings rennen zu Dir hinüber.<br><br>\"Hilfe!\" sagt @Melynnrose. \"Wir haben einen riesigen Pinguin hergebracht, um den See zuzufrieren damit wir alle schlittschuhlaufen können, aber uns sind die Fische ausgegangen, mit denen wir ihn gefüttert haben!\"<br><br>\"Er wurde wütend und friert mit seinem Eis-Atem alles zu, was er sieht!\" sagt @Breadstrings. \"Bitte, Du musst ihn überwältigen bevor wir alle von Eis bedeckt sind!\" Sieht aus, als müsstest Du das Gemüt dieses Pinguins ... etwas <em>abkühlen.</em>",
|
||||||
"questPenguinCompletion": "Mit der Niederlage des Pinguins beginnt das Eis zu schmelzen. Der riesige Pinguin setzt sich im Sonnenschein auf den Boden und schlürft einen Eimer Fische herunter. Er gleitet über den See und lässt dabei mit einem leichten Pusten nach unten glattes, glitzerndes Eis entstehen. Was für ein komischer Vogel! \"Es scheint so, als hätte er einige Eier hinterlassen,\" sagt @Painter de Cluster. <br><br>@Rattify lacht. \"Vielleicht werden diese Pinguine ein bisschen ... gechillter sein?\"",
|
"questPenguinCompletion": "Mit der Niederlage des Pinguins beginnt das Eis zu schmelzen. Der riesige Pinguin setzt sich im Sonnenschein auf den Boden und schlürft einen Eimer Fische herunter. Er gleitet über den See und lässt dabei mit einem leichten Pusten nach unten glattes, glitzerndes Eis entstehen. Was für ein komischer Vogel! \"Es scheint so, als hätte er einige Eier hinterlassen,\" sagt @Painter de Cluster. <br><br>@Rattify lacht. \"Vielleicht werden diese Pinguine ein bisschen ... gechillter sein?\"",
|
||||||
"questPenguinBoss": "Frostpinguin",
|
"questPenguinBoss": "Frostpinguin",
|
||||||
"questPenguinDropPenguinEgg": "Pinguin (Ei)",
|
"questPenguinDropPenguinEgg": "Pinguin (Ei)",
|
||||||
@@ -289,7 +289,7 @@
|
|||||||
"questSnakeDropSnakeEgg": "Schlange (Ei)",
|
"questSnakeDropSnakeEgg": "Schlange (Ei)",
|
||||||
"questSnakeUnlockText": "Schaltet den Kauf von Schlangeneiern auf dem Marktplatz frei",
|
"questSnakeUnlockText": "Schaltet den Kauf von Schlangeneiern auf dem Marktplatz frei",
|
||||||
"questUnicornText": "Überzeuge die Einhornkönigin",
|
"questUnicornText": "Überzeuge die Einhornkönigin",
|
||||||
"questUnicornNotes": "Conquest Creek ist völlig verschlammt und zerstört so Habit Citys Frischwasser-Vorräte! Glücklicherweise kennt @Lukreja eine alte Legende, laut welcher das Horn eines Einhorns in der Lage ist selbst das fauleste aller Wasser zu reinigen. Gemeinsam mit Deinem unerschrockenen Führer @UncommonCriminal machst Du Dich auf die Reise durch die, im ewigen Eis verborgenen, Gipfel der Mäandergebirge.\nLetztendlich, auf der eisigen Spitze von Mount Habitica erblickst Du inmitten des funkelnden Schneetreibens die Einhornkönigin höchstselbst.\n\"Dein Gesuch ist überzeugend\", spricht sie. \"Aber zuerst musst Du Dich meiner Hilfe als würdig erweisen!\"",
|
"questUnicornNotes": "Conquest Creek ist völlig verschlammt und zerstört so Habit Citys Frischwasser-Vorräte! Glücklicherweise kennt @Lukreja eine alte Legende, laut welcher das Horn eines Einhorns in der Lage ist selbst das dreckigste Wasser zu reinigen. Gemeinsam mit Deinem unerschrockenen Führer @UncommonCriminal machst Du Dich auf die Reise durch die, im ewigen Eis verborgenen, Gipfel der Mäandergebirge. Schließlich erblickst Du auf der eisigen Spitze von Mount Habitica inmitten des funkelnden Schneetreibens die Einhornkönigin höchstselbst. \"Dein Gesuch ist überzeugend\", spricht sie. \"Aber zuerst musst Du Dich meiner Hilfe als würdig erweisen!\"",
|
||||||
"questUnicornCompletion": "Von Deiner Aufrichtigkeit und Stärke beeindruckt stimmt die Einhornkönigin schließlich Deinem Anliegen zu. Auf Ihrem Rücken reitend fliegt ihr zum Ursprung des Conquest Creek. In dem Moment, als das güldene Horn der Königin das faulige Wasser berührt beginnt ein grell-blaues Licht aus dem Wasser zu steigen. Es blendet so sehr, dass Du nicht anders kannst als Deine Augen zu schließen. Als Du sie einen Augenblick später wieder öffnest ist die Königin verschwunden. Ehe Du darüber nachdenken kannst hörst Du @rosiesullys Freudenschrei: Das Wasser ist nun klar und am Ufer des Flusses erblickst Du drei glänzende Eier.",
|
"questUnicornCompletion": "Von Deiner Aufrichtigkeit und Stärke beeindruckt stimmt die Einhornkönigin schließlich Deinem Anliegen zu. Auf Ihrem Rücken reitend fliegt ihr zum Ursprung des Conquest Creek. In dem Moment, als das güldene Horn der Königin das faulige Wasser berührt beginnt ein grell-blaues Licht aus dem Wasser zu steigen. Es blendet so sehr, dass Du nicht anders kannst als Deine Augen zu schließen. Als Du sie einen Augenblick später wieder öffnest ist die Königin verschwunden. Ehe Du darüber nachdenken kannst hörst Du @rosiesullys Freudenschrei: Das Wasser ist nun klar und am Ufer des Flusses erblickst Du drei glänzende Eier.",
|
||||||
"questUnicornBoss": "Die Einhornkönigin",
|
"questUnicornBoss": "Die Einhornkönigin",
|
||||||
"questUnicornDropUnicornEgg": "Einhorn (Ei)",
|
"questUnicornDropUnicornEgg": "Einhorn (Ei)",
|
||||||
@@ -314,8 +314,8 @@
|
|||||||
"questSnailUnlockText": "Schaltet den Kauf von Schneckeneiern auf dem Marktplatz frei",
|
"questSnailUnlockText": "Schaltet den Kauf von Schneckeneiern auf dem Marktplatz frei",
|
||||||
"questBewilderText": "Der Verwirrer",
|
"questBewilderText": "Der Verwirrer",
|
||||||
"questBewilderNotes": "Die Party beginnt wie jede Andere.<br><br>Die Appetithäppchen sind exzellent, die Musik sorgt für lockere Stimmung und sogar an die tanzenden Elefanten hat man sich gewöhnt. Habiticaner lachen ausgelassen zwischen den ausladenden Blumengestecken, froh um eine Ablenkung von Ihren meist-gehassten Aufgaben, und der April-Scherzkeks wirbelt zwischen ihnen herum, eifrig Scherze und Schabernack treibend.<br><br>Als die Uhr des Mistiflying Uhrturms Mitternacht schlägt, springt der April-Scherzkeks auf die Bühne um eine Rede zu halten.<br><br>\"Freunde! Feinde! Tolerante Bekannte! Leiht mir euer Ohr!\" Als aus ihren Köpfen Tierohren sprießen, kichert die Schar und posiert mit ihren neuen Verkleidungen.<br><br>\"Wie ihr alle wisst,\" fährt der April-Scherzkeks weiter, \"dauern meine verwirrenden Illusionen normalerweise nur einen Tag. Deshalb freue ich mich besonders euch mitzuteilen, dass ich eine Abkürzung gefunden habe, die uns Spaß ohne Ende verspricht, ohne dass wir uns um die mühsame Last unserer Pflichten sorgen müssen. Liebe Habiticaner, ich stelle euch hiermit meinen neuen, magischen Freund vor: den Verwirrer!\"<br><br>Lemoness wird plötzlich bleich und lässt ihre Häppchen fallen. \"Wartet! Traut ihm ni--\"<br><br>Doch schon stürzen Nebelschwaden in den Saal, dick und glitzernd. Sie wirbeln um den April-Scherzkeks und vereinen sich zu verschwommenen Federn und einem langen Hals. The Menge ist sprachlos, während sich vor ihr ein monströser Vogel entfaltet, seine Flügel schimmernd vor lauter Illusionen. Er gibt ein fürchterliches, kreischendes Lachen von sich.<br><br>\"Oh, es ist schon Ewigkeiten her, seit ein Habiticaner töricht genug war, mich herbeizurufen! Wie wundervoll es ist, endlich eine greifbare Form zu haben!\"<br><br>Erschreckt summend fliehen die magischen Bienen von Mistiflying aus der fliegenden Stadt, die aus dem Himmel sackt. Eine nach der anderen verwelken die leuchtenden Frühlingsblumen und schrumpfen weg.<br><br>\"Meine liebsten Freunde, warum so beunruhigt?\" krächzt der Verwirrer, während er mit den Flügeln schlägt. \"Es gibt keinen Grund mehr, euch für eure Belohnungen abzurackern. Ich werde euch alles geben, was ihr euch wünscht!\"<br><br>Ein Münzenschauer stürzt aus dem Himmel und hämmert sich mit brutaler Kraft in den Boden. Die Menge schreit und sucht Deckung. \"Soll das ein Scherz sein?\" ruft Baconsaur, während das Gold Fenster einschlägt und die Schindeln auf den Dächern zerschmettert.<br><br>PainterProphet duckt sich, als Blitze über den Himmel schießen und Nebel die Sonne verdunkelt. \"Nein! Diesmal ist es glaube ich kein Scherz!\"<br><br>Schnell, Habiticaner, lasst diesen Weltboss euch nicht von euren Zielen ablenken! Konzentriert euch auf das, was ihr zu erledigen habt, um Mistiflying zu retten -- und hoffentlich euch selbst.",
|
"questBewilderNotes": "Die Party beginnt wie jede Andere.<br><br>Die Appetithäppchen sind exzellent, die Musik sorgt für lockere Stimmung und sogar an die tanzenden Elefanten hat man sich gewöhnt. Habiticaner lachen ausgelassen zwischen den ausladenden Blumengestecken, froh um eine Ablenkung von Ihren meist-gehassten Aufgaben, und der April-Scherzkeks wirbelt zwischen ihnen herum, eifrig Scherze und Schabernack treibend.<br><br>Als die Uhr des Mistiflying Uhrturms Mitternacht schlägt, springt der April-Scherzkeks auf die Bühne um eine Rede zu halten.<br><br>\"Freunde! Feinde! Tolerante Bekannte! Leiht mir euer Ohr!\" Als aus ihren Köpfen Tierohren sprießen, kichert die Schar und posiert mit ihren neuen Verkleidungen.<br><br>\"Wie ihr alle wisst,\" fährt der April-Scherzkeks weiter, \"dauern meine verwirrenden Illusionen normalerweise nur einen Tag. Deshalb freue ich mich besonders euch mitzuteilen, dass ich eine Abkürzung gefunden habe, die uns Spaß ohne Ende verspricht, ohne dass wir uns um die mühsame Last unserer Pflichten sorgen müssen. Liebe Habiticaner, ich stelle euch hiermit meinen neuen, magischen Freund vor: den Verwirrer!\"<br><br>Lemoness wird plötzlich bleich und lässt ihre Häppchen fallen. \"Wartet! Traut ihm ni--\"<br><br>Doch schon stürzen Nebelschwaden in den Saal, dick und glitzernd. Sie wirbeln um den April-Scherzkeks und vereinen sich zu verschwommenen Federn und einem langen Hals. The Menge ist sprachlos, während sich vor ihr ein monströser Vogel entfaltet, seine Flügel schimmernd vor lauter Illusionen. Er gibt ein fürchterliches, kreischendes Lachen von sich.<br><br>\"Oh, es ist schon Ewigkeiten her, seit ein Habiticaner töricht genug war, mich herbeizurufen! Wie wundervoll es ist, endlich eine greifbare Form zu haben!\"<br><br>Erschreckt summend fliehen die magischen Bienen von Mistiflying aus der fliegenden Stadt, die aus dem Himmel sackt. Eine nach der anderen verwelken die leuchtenden Frühlingsblumen und schrumpfen weg.<br><br>\"Meine liebsten Freunde, warum so beunruhigt?\" krächzt der Verwirrer, während er mit den Flügeln schlägt. \"Es gibt keinen Grund mehr, euch für eure Belohnungen abzurackern. Ich werde euch alles geben, was ihr euch wünscht!\"<br><br>Ein Münzenschauer stürzt aus dem Himmel und hämmert sich mit brutaler Kraft in den Boden. Die Menge schreit und sucht Deckung. \"Soll das ein Scherz sein?\" ruft Baconsaur, während das Gold Fenster einschlägt und die Schindeln auf den Dächern zerschmettert.<br><br>PainterProphet duckt sich, als Blitze über den Himmel schießen und Nebel die Sonne verdunkelt. \"Nein! Diesmal ist es glaube ich kein Scherz!\"<br><br>Schnell, Habiticaner, lasst diesen Weltboss euch nicht von euren Zielen ablenken! Konzentriert euch auf das, was ihr zu erledigen habt, um Mistiflying zu retten -- und hoffentlich euch selbst.",
|
||||||
"questBewilderCompletion": "<strong>Der Verwirrer ist BESIEGT!</strong><br><br>Wir haben es geschafft! Der Verwirrer stößt einen heulenden Schrei aus, windet sich in der Luft und verliert büschelweise Federn. Langsam, nach und nach wickelt er sich zu einer funkelnden Nebelwoke auf. Die enthüllte Sonne durchdingt den Nebel, vertreibt ihn und enthüllt die hustenden, glücklicherweise menschlichen Formen von Matt, Bailey, Alex ... und dem April-Scherzkeks persönlich.<br><br><strong>Mistiflying ist gerettet!</strong><br><br>Der April-Scherzkeks schämt sich immerhin genug, um etwas verlegen dazustehen. \"Oh, ähm,\" sagt er. \"Vielleicht habe ich mich ein wenig ... gehen lassen.\"”<br><br>Die Menschenmenge murrt. Durchnässte Blumen werden auf Gehsteigen angeschwemmt. Irgendwo in der Ferne stürzt ein Dach mit spektakulärem Krachen ein.<br><br>\"Ähm, ja,\" sagt der April-Scherzkeks. \"Also, was ich sagen wollte, es tut mir schrecklich leid.\" Er seufzt schwer. \"Ich vermute mal, es kann doch nicht nur Spaß und Spiel geben. Es kann wohl nicht schaden, sich ab und zu mal auf etwas zu konzentrieren. Vielleicht kann ich ja schon mal den nächsten Aprilscherz vorbereiten.\"<br><br>Redphoenix räuspert sich vielsagend.<br><br>\"Ich meine, den nächsten Frühjahrsputz!\" korrigiert sich der April-Scherzkeks. \"Habt keine Angst, ich werde Habit City rasch wieder blitzblank haben. Niemand ist besser als ich mit dem Doppelmopp.\"<br><br>Ermuntert beginnt die Kapelle zu spielen.<br><br>Es dauert nicht lange bis alles in Habit City wieder seinen normalen Lauf nimmt. Außerdem, jetzt wo der Verwirrer pulverisiert ist, sind die magischen Bienen von Mistiflying wieder eifrig am Werk und schon bald blühen die Blumen und die Stadt schwebt von Neuem.<br><br>Wie die Habiticaner die magischen, flaumigen Bienen knuddeln, beginnen die Augen des April-Scherzkeks zu leuchten. \"Oho, mir kommt eine Idee! Warum haltet ihr euch eigentlich keine dieser flaumigen Bienen als Haustiere und Reittiere? Das ist ein Geschenk, das das Gleichgewicht zwischen harter Arbeit und süßer Belohnung symbolisiert, wenn ich das mal so langweilig und sinnbildlich sagen darf.\" Er zwinkert. \"Und außerdem haben sie keinen Stachel! Narrenehrenwort.\"",
|
"questBewilderCompletion": "<strong>Der Verwirrer ist BESIEGT!</strong><br><br>Wir haben es geschafft! Der Verwirrer stößt einen heulenden Schrei aus, windet sich in der Luft und verliert büschelweise Federn. Langsam, nach und nach wickelt er sich zu einer funkelnden Nebelwoke auf. Die enthüllte Sonne durchdingt den Nebel, vertreibt ihn und enthüllt die hustenden, glücklicherweise menschlichen Formen von Matt, Bailey, Alex ... und dem April-Scherzkeks persönlich.<br><br><strong>Mistiflying ist gerettet!</strong><br><br>Der April-Scherzkeks schämt sich immerhin genug, um etwas verlegen dazustehen. \"Oh, ähm,\" sagt er. \"Vielleicht habe ich mich ein wenig ... gehen lassen.\"”<br><br>Die Menschenmenge murrt. Durchnässte Blumen werden auf Gehsteigen angeschwemmt. Irgendwo in der Ferne stürzt ein Dach mit spektakulärem Krachen ein.<br><br>\"Ähm, ja,\" sagt der April-Scherzkeks. \"Also, was ich sagen wollte, es tut mir schrecklich leid.\" Er seufzt schwer. \"Ich vermute mal, es kann doch nicht nur Spaß und Spiel geben. Es kann wohl nicht schaden, sich ab und zu mal auf etwas zu konzentrieren. Vielleicht kann ich ja schon mal den nächsten Aprilscherz vorbereiten.\"<br><br>Redphoenix räuspert sich vielsagend.<br><br>\"Ich meine, den nächsten Frühjahrsputz!\" korrigiert sich der April-Scherzkeks. \"Habt keine Angst, ich werde Habit City rasch wieder blitzblank haben. Niemand ist besser als ich mit dem Doppelmopp.\"<br><br>Ermuntert beginnt die Kapelle zu spielen.<br><br>Es dauert nicht lange bis alles in Habit City wieder seinen normalen Lauf nimmt. Außerdem, jetzt wo der Verwirrer pulverisiert ist, sind die magischen Bienen von Mistiflying wieder eifrig am Werk und schon bald blühen die Blumen und die Stadt schwebt von Neuem.<br><br>Als die Habiticaner die magischen, flaumigen Bienen knuddeln, beginnen die Augen des April-Scherzkeks zu leuchten. \"Oho, mir kommt eine Idee! Warum haltet ihr euch eigentlich keine dieser flaumigen Bienen als Haustiere und Reittiere? Das ist ein Geschenk, welches das Gleichgewicht zwischen harter Arbeit und süßer Belohnung symbolisiert, wenn ich das mal so langweilig und sinnbildlich sagen darf.\" Er zwinkert. \"Und außerdem haben sie keinen Stachel! Narrenehrenwort.\"",
|
||||||
"questBewilderCompletionChat": "`Der Verwirrer is BESIEGT!`\n\nWir haben es geschafft! Der Verwirrer stößt einen heulenden Schrei aus, windet sich in der Luft und verliert büschelweise Federn. Langsam, nach und nach wickelt er sich zu einer funkelnden Nebelwoke auf. Die enthüllte Sonne durchdingt den Nebel, vertreibt ihn und enthüllt die hustenden, glücklicherweise menschlichen Formen von Matt, Bailey, Alex ... und dem April-Scherzkeks persönlich.\n\n`Mistiflying ist gerettet!`\n\nDer April-Scherzkeks schämt sich immerhin genug, um etwas verlegen dazustehen. \"Oh, ähm,\" sagt er. \"Vielleicht habe ich mich ein wenig ... gehen lassen.\"\n\nDie Menschenmenge murrt. Durchnässte Blumen werden auf Gehsteigen angeschwemmt. Irgendwo in der Ferne stürzt ein Dach mit spektakulärem Krachen ein.\n\n\"Ähm, ja,\" sagt der April-Scherzkeks. \"Also, was ich sagen wollte, es tut mir schrecklich leid.\" Er seufzt schwer. \"Ich vermute mal, es kann doch nicht nur Spaß und Spiel geben. Es kann wohl nicht schaden, sich ab und zu mal auf etwas zu konzentrieren. Vielleicht kann ich ja schon mal den nächsten Aprilscherz vorbereiten.\"\n\nRedphoenix räuspert sich vielsagend.\n\n\"Ich meine, den nächsten Frühjahrsputz!\" korrigiert sich der April-Scherzkeks. \"Habt keine Angst, ich werde Habit City rasch wieder blitzblank haben. Niemand ist besser als ich mit dem Doppelmopp.\"\n\nErmuntert beginnt die Kapelle zu spielen\n\nEs dauert nicht lange bis alles in Habit City wieder seinen normalen Lauf nimmt. Außerdem, jetzt wo der Verwirrer pulverisiert ist, sind die magischen Bienen von Mistiflying wieder eifrig am Werk und schon bald blühen die Blumen und schwebt die Stadt von Neuem.\n\nWie die Habiticaner die magischen, flaumigen Bienen knuddeln, beginnen die Augen des April-Scherzkeks zu leuchten. \"Oho, mir kommt eine Idee! Warum haltet ihr euch eigentlich keine dieser flaumigen Bienen als Haustiere und Reittiere? Das ist ein Geschenk, das das Gleichgewicht zwischen harter Arbeit und süßer Belohnung symbolisiert, wenn ich das mal so langweilig und sinnbildlich sagen darf.\" Er zwinkert. \"Und außerdem haben sie keinen Stachel! Narrenehrenwort.\"",
|
"questBewilderCompletionChat": "`Der Verwirrer is BESIEGT!`\n\nWir haben es geschafft! Der Verwirrer stößt einen heulenden Schrei aus, windet sich in der Luft und verliert büschelweise Federn. Langsam, nach und nach wickelt er sich zu einer funkelnden Nebelwoke auf. Die enthüllte Sonne durchdingt den Nebel, vertreibt ihn und enthüllt die hustenden, glücklicherweise menschlichen Formen von Matt, Bailey, Alex ... und dem April-Scherzkeks persönlich.\n\n`Mistiflying ist gerettet!`\n\nDer April-Scherzkeks schämt sich immerhin genug, um etwas verlegen dazustehen. \"Oh, ähm,\" sagt er. \"Vielleicht habe ich mich ein wenig ... gehen lassen.\"\n\nDie Menschenmenge murrt. Durchnässte Blumen werden auf Gehsteigen angeschwemmt. Irgendwo in der Ferne stürzt ein Dach mit spektakulärem Krachen ein.\n\n\"Ähm, ja,\" sagt der April-Scherzkeks. \"Also, was ich sagen wollte, es tut mir schrecklich leid.\" Er seufzt schwer. \"Ich vermute mal, es kann doch nicht nur Spaß und Spiel geben. Es kann wohl nicht schaden, sich ab und zu mal auf etwas zu konzentrieren. Vielleicht kann ich ja schon mal den nächsten Aprilscherz vorbereiten.\"\n\nRedphoenix räuspert sich vielsagend.\n\n\"Ich meine, den nächsten Frühjahrsputz!\" korrigiert sich der April-Scherzkeks. \"Habt keine Angst, ich werde Habit City rasch wieder blitzblank haben. Niemand ist besser als ich mit dem Doppelmopp.\"\n\nErmuntert beginnt die Kapelle zu spielen\n\nEs dauert nicht lange bis alles in Habit City wieder seinen normalen Lauf nimmt. Außerdem, jetzt wo der Verwirrer pulverisiert ist, sind die magischen Bienen von Mistiflying wieder eifrig am Werk und schon bald blühen die Blumen und schwebt die Stadt von Neuem.\n\nAls die Habiticaner die magischen, flaumigen Bienen knuddeln, beginnen die Augen des April-Scherzkeks zu leuchten. \"Oho, mir kommt eine Idee! Warum haltet ihr euch eigentlich keine dieser flaumigen Bienen als Haustiere und Reittiere? Das ist ein Geschenk, welches das Gleichgewicht zwischen harter Arbeit und süßer Belohnung symbolisiert, wenn ich das mal so langweilig und sinnbildlich sagen darf.\" Er zwinkert. \"Und außerdem haben sie keinen Stachel! Narrenehrenwort.\"",
|
||||||
"questBewilderBossRageTitle": "Betörungsschlag",
|
"questBewilderBossRageTitle": "Betörungsschlag",
|
||||||
"questBewilderBossRageDescription": "Wenn dieser Balken voll ist, wird der Verwirrer seinen Wirrschlag über Habitica entfesseln!",
|
"questBewilderBossRageDescription": "Wenn dieser Balken voll ist, wird der Verwirrer seinen Wirrschlag über Habitica entfesseln!",
|
||||||
"questBewilderDropBumblebeePet": "Magische Biene (Haustier)",
|
"questBewilderDropBumblebeePet": "Magische Biene (Haustier)",
|
||||||
@@ -409,7 +409,7 @@
|
|||||||
"questMoon1CollectShards": "Mondscherben",
|
"questMoon1CollectShards": "Mondscherben",
|
||||||
"questMoon1DropHeadgear": "Mondkriegerhelm (Kopfbedeckung)",
|
"questMoon1DropHeadgear": "Mondkriegerhelm (Kopfbedeckung)",
|
||||||
"questMoon2Text": "Mondkampf, Teil 2: Stoppt den Überschattenden Stress",
|
"questMoon2Text": "Mondkampf, Teil 2: Stoppt den Überschattenden Stress",
|
||||||
"questMoon2Notes": "Nachdem Sie die Splitter untersucht hat, hat @Starsystemic die Seherin schlechte Neuigkeiten: \"Ein altes Monster nähert sich Habitica und überfällt deren Einwohner dabei mit schrecklichem Stress. Ich kann den Schatten aus den Herzen der Leute abziehen und hierherbringen. Dabei wird es seine physische Form annehmen. Ihr müsst es dann besiegen, bevor es sich befreien und erneut ausbreiten kann.\" Du nickst und Sie beginnt ihre Zauberformeln zu sprechen. Tanzende Schatten erfüllen den Raum und schmiegen sich dicht aneinander. Kalte Winde kommen auf und die Dunkelheit verdichtet sich. Der Düsterschatten-Stress erhebt sich vom Boden, grinst wie ein wahrgewordener Albtraum ... und greift an!",
|
"questMoon2Notes": "Nachdem der Untersuchung der Splitter, hat @Starsystemic die Seherin schlechte Neuigkeiten: \"Ein altes Monster nähert sich Habitica und überfällt deren Einwohner dabei mit schrecklichem Stress. Ich kann den Schatten aus den Herzen der Leute abziehen und hierherbringen. Dabei wird es seine physische Form annehmen. Ihr müsst es dann besiegen, bevor es sich befreien und erneut ausbreiten kann.\" Du nickst und Sie beginnt ihre Zauberformeln zu sprechen. Tanzende Schatten erfüllen den Raum und schmiegen sich dicht aneinander. Kalte Winde kommen auf und die Dunkelheit verdichtet sich. Der Düsterschatten-Stress erhebt sich vom Boden, grinst wie ein wahrgewordener Albtraum ... und greift an!",
|
||||||
"questMoon2Completion": "Der Schatten zerbirst in einem dunklen Windstoß, und hinterlässt den Raum heller und Eure Herzen strahlender. Der Stress, der Habitica überdeckte hat nachgelassen, und Ihr könnt alle erleichtert durchatment. Und dennoch, als Ihr nach oben in den Himmel seht, könnt Ihr fühlen, dass es noch nicht vorüber ist: Das Monster weiß, dass jemand seinen Schatten zerstört hat. \"Wir werden in den kommenden Wochen sorgfältig Ausschau halten,\" sagt @Starsystemic, \"und ich werde Euch eine Questschriftrolle schicken, sobald es sich manifestiert.\"",
|
"questMoon2Completion": "Der Schatten zerbirst in einem dunklen Windstoß, und hinterlässt den Raum heller und Eure Herzen strahlender. Der Stress, der Habitica überdeckte hat nachgelassen, und Ihr könnt alle erleichtert durchatment. Und dennoch, als Ihr nach oben in den Himmel seht, könnt Ihr fühlen, dass es noch nicht vorüber ist: Das Monster weiß, dass jemand seinen Schatten zerstört hat. \"Wir werden in den kommenden Wochen sorgfältig Ausschau halten,\" sagt @Starsystemic, \"und ich werde Euch eine Questschriftrolle schicken, sobald es sich manifestiert.\"",
|
||||||
"questMoon2Boss": "Überschattender Stress",
|
"questMoon2Boss": "Überschattender Stress",
|
||||||
"questMoon2DropArmor": "Mondkriegerrüstung (Rüstung)",
|
"questMoon2DropArmor": "Mondkriegerrüstung (Rüstung)",
|
||||||
@@ -473,7 +473,7 @@
|
|||||||
"questButterflyUnlockText": "Schaltet den Kauf von Raupeneiern auf dem Marktplatz frei",
|
"questButterflyUnlockText": "Schaltet den Kauf von Raupeneiern auf dem Marktplatz frei",
|
||||||
"questGroupMayhemMistiflying": "Chaos in Mistiflying",
|
"questGroupMayhemMistiflying": "Chaos in Mistiflying",
|
||||||
"questMayhemMistiflying1Text": "Chaos in Mistiflying, Teil 1: In welchem Mistiflying unter einer schrecklichen Plage leidet",
|
"questMayhemMistiflying1Text": "Chaos in Mistiflying, Teil 1: In welchem Mistiflying unter einer schrecklichen Plage leidet",
|
||||||
"questMayhemMistiflying1Notes": "Obwohl die hiesigen Wahrsager angenehmes Wetter vorhersagten, ist der Wind am Nachmittag extrem böig, so dass Du Deiner Freundin @Kiwibot nur zu gerne in ihr Haus folgst, um dem stürmischen Treiben zu entkommen.<br><br>Keiner von euch hat den April-Scherzkeks erwartet, der am Küchentisch lehnt.<br><br>“Oh, hallo”, sagt er. “Wie schön, euch zu sehen. Darf ich euch etwas von diesem köstlichen Tee anbieten?”<br><br>“Das...” setzt @Kiwibot an. “Das ist MEIN—”<br><br>“Ja, ja, selbstverständlich”, sagt der April-Scherzkeks, und nimmt sich einige Kekse. “Ich dachte nur, ich spring' mal kurz rein, für eine kleine Verschnaufpause vor all den Tornado-beschwörenden Schädeln.” Er nimmt einen beiläufigen Schluck aus seiner Teetasse. “Mistiflying wird übrigens angegriffen.”<br><br>Entsetzt rennst Du mit Deinen Freunden zu den Ställen, um eure schnellsten geflügelten Reittiere zu satteln. Als ihr zu der schwebenden Stadt aufsteigt, könnt ihr einen Schwarm klappernder, fliegender Schädel ausmachen, die die Stadt belagern... und einige haben euch entdeckt!",
|
"questMayhemMistiflying1Notes": "Obwohl die hiesigen Wahrsager angenehmes Wetter vorhersagten, ist der Wind am Nachmittag extrem böig, so dass Du Deiner Freundin @Kiwibot nur zu gerne in ihr Haus folgst, um dem stürmischen Treiben zu entkommen.<br><br>Keiner von euch hat den April-Scherzkeks erwartet, der am Küchentisch lehnt.<br><br>“Oh, hallo”, sagt er. “Wie schön, euch zu sehen. Darf ich euch etwas von diesem köstlichen Tee anbieten?”<br><br>“Das...” setzt @Kiwibot an. “Das ist MEIN—”<br><br>“Ja, ja, selbstverständlich”, sagt der April-Scherzkeks, und nimmt sich einige Kekse. “Ich dachte nur, ich spring' mal kurz rein, für eine kleine Verschnaufpause vor all den Tornado-beschwörenden Schädeln.” Er nimmt einen beiläufigen Schluck aus seiner Teetasse. “Mistiflying wird übrigens angegriffen.”<br><br>Entsetzt rennst Du mit Deinen Freunden zu den Ställen, um eure schnellsten geflügelten Reittiere zu satteln. Als ihr zu der schwebenden Stadt aufsteigt, könnt ihr einen Schwarm klappernder, fliegender Schädel ausmachen, welche die Stadt belagern... und einige haben euch entdeckt!",
|
||||||
"questMayhemMistiflying1Completion": "Der letzte Schädel fällt vom Himmel, ein schimmerndes Bündel aus Regenbogenroben zwischen seinen Kiefern, aber der stetige Wind hat nicht nachgelassen. Hier scheint noch etwas anderes vorzugehen. Und wo ist eigentlich dieser Drückeberger von April-Scherzkeks? Du hebst die Roben auf und fliegst in die Stadt.",
|
"questMayhemMistiflying1Completion": "Der letzte Schädel fällt vom Himmel, ein schimmerndes Bündel aus Regenbogenroben zwischen seinen Kiefern, aber der stetige Wind hat nicht nachgelassen. Hier scheint noch etwas anderes vorzugehen. Und wo ist eigentlich dieser Drückeberger von April-Scherzkeks? Du hebst die Roben auf und fliegst in die Stadt.",
|
||||||
"questMayhemMistiflying1Boss": "Luftschädelschwarm",
|
"questMayhemMistiflying1Boss": "Luftschädelschwarm",
|
||||||
"questMayhemMistiflying1RageTitle": "Schwarmnachwuchs",
|
"questMayhemMistiflying1RageTitle": "Schwarmnachwuchs",
|
||||||
@@ -578,7 +578,7 @@
|
|||||||
"questDysheartenerCompletionChat": "`Der Entmutiger wurde BESIEGT!'`\n\nGemeinsam holen alle in Habitica zu einem letzten Schlag mit ihren Aufgaben aus, und der Entmutiger weicht mit einem bestürzten Kreischen zurück. “Stimmt etwas nicht, Entmutiger?” ruft AnnDeLune mit funkelnden Augen. “Fühlst Du Dich entmutigt?”\n\nGlühend pinke Risse zeigen sich auf dem Panzer des Entmutigers, und er zerbricht mit einer verpuffenden rosa Rauchwolke. Eine Flut von köstlichen Süßigkeiten regnet auf alle hernieder, während sich im ganzen Land ein erneuertes Gefühl von Kraft und Entschlossenheit ausbreitet.\n\nDie Menge jubelt wild, Umarmungen werden ausgetauscht, und die Haustiere kauen glücklich auf ihren verspäteten Valentinsleckerli. Plötzlich liegt Gesang in der Luft, ein fröhlicher Chor ertönt, und funkelnde Silhouetten ziehen über den Himmel.\n\nUnser neu-gewonnener Optimismus hat eine Herde Hippogreifen angelockt! Die anmutigen Kreaturen setzen auf dem Boden auf, sträuben interessiert ihre Federn und tänzeln auf der Stelle. “Wie es aussieht, haben wir neue Freunde gefunden, die uns helfen, nicht zu verzagen, selbst wenn unsere Aufgaben noch so beängstigend sind”, sagt Lemoness.\n\nBeffymaroo hat bereits ihre Arme voll mit gefiederten Plüschbällen. “Vielleicht helfen sie uns, die zerstörten Gebiete Habitica's wieder aufzubauen!”\n\nSummend und singend ziehen die Hippogreifen voran, während alle Habiticaner zusammenarbeiten, um unsere geliebte Heimat wieder aufzubauen.",
|
"questDysheartenerCompletionChat": "`Der Entmutiger wurde BESIEGT!'`\n\nGemeinsam holen alle in Habitica zu einem letzten Schlag mit ihren Aufgaben aus, und der Entmutiger weicht mit einem bestürzten Kreischen zurück. “Stimmt etwas nicht, Entmutiger?” ruft AnnDeLune mit funkelnden Augen. “Fühlst Du Dich entmutigt?”\n\nGlühend pinke Risse zeigen sich auf dem Panzer des Entmutigers, und er zerbricht mit einer verpuffenden rosa Rauchwolke. Eine Flut von köstlichen Süßigkeiten regnet auf alle hernieder, während sich im ganzen Land ein erneuertes Gefühl von Kraft und Entschlossenheit ausbreitet.\n\nDie Menge jubelt wild, Umarmungen werden ausgetauscht, und die Haustiere kauen glücklich auf ihren verspäteten Valentinsleckerli. Plötzlich liegt Gesang in der Luft, ein fröhlicher Chor ertönt, und funkelnde Silhouetten ziehen über den Himmel.\n\nUnser neu-gewonnener Optimismus hat eine Herde Hippogreifen angelockt! Die anmutigen Kreaturen setzen auf dem Boden auf, sträuben interessiert ihre Federn und tänzeln auf der Stelle. “Wie es aussieht, haben wir neue Freunde gefunden, die uns helfen, nicht zu verzagen, selbst wenn unsere Aufgaben noch so beängstigend sind”, sagt Lemoness.\n\nBeffymaroo hat bereits ihre Arme voll mit gefiederten Plüschbällen. “Vielleicht helfen sie uns, die zerstörten Gebiete Habitica's wieder aufzubauen!”\n\nSummend und singend ziehen die Hippogreifen voran, während alle Habiticaner zusammenarbeiten, um unsere geliebte Heimat wieder aufzubauen.",
|
||||||
"questDysheartenerBossRageTitle": "Niederschmetternder Herzschmerz",
|
"questDysheartenerBossRageTitle": "Niederschmetternder Herzschmerz",
|
||||||
"questDysheartenerBossRageDescription": "Die Anzeige für den Raserei-Angriff füllt sich, wenn Habiticaner ihre Tagesaufgaben nicht abhaken. Sobald sie gefüllt ist, wird der Entmutiger seine Niederschmetternde Herzschmerz-Attacke über einem von Habitica's Ladenbesitzern entfesseln, also strengt Euch an und erledigt Eure Aufgaben!",
|
"questDysheartenerBossRageDescription": "Die Anzeige für den Raserei-Angriff füllt sich, wenn Habiticaner ihre Tagesaufgaben nicht abhaken. Sobald sie gefüllt ist, wird der Entmutiger seine Niederschmetternde Herzschmerz-Attacke über einem von Habitica's Ladenbesitzern entfesseln, also strengt Euch an und erledigt Eure Aufgaben!",
|
||||||
"questDysheartenerBossRageSeasonal": "`Der Entmutiger entfesselt NIEDERSCHMETTERNDEN HERZSCHMERZ!`\n\nOh nein! Nachdem er sich an unseren unerledigten Tagesaufgaben gelabt hat, hat der Entmutiger genügend Stärke gesammelt, um seine Niederschmetternde Herzschmerz-Attacke einzusetzen. Mit einem schrillen Aufschrei treffen seine stacheligen Vorderbeine den Pavillon, unter dem der Jahreszeitenmarkt liegt! Die markerschütternde Explosion aus Magie lässt das Holz zersplittern, und die Jahreszeitenzauberin wird bei dem Anblick von Trauer überwältigt.\n\nRasch, lasst uns unsere Tagesaufgaben erledigen, damit das Biest kein weiteres Mal zuschlagen kann!",
|
"questDysheartenerBossRageSeasonal": "`Der Entmutiger entfesselt NIEDERSCHMETTERNDEN HERZSCHMERZ!`\n\nOh nein! Nachdem er sich an unseren unerledigten Tagesaufgaben labte, hat der Entmutiger genügend Stärke gesammelt, um seine Niederschmetternde Herzschmerz-Attacke einzusetzen. Mit einem schrillen Aufschrei treffen seine stacheligen Vorderbeine den Pavillon, unter dem der Jahreszeitenmarkt liegt! Die markerschütternde Explosion aus Magie lässt das Holz zersplittern, und die Jahreszeitenzauberin wird bei dem Anblick von Trauer überwältigt.\n\nRasch, lasst uns unsere Tagesaufgaben erledigen, damit das Biest kein weiteres Mal zuschlagen kann!",
|
||||||
"seasonalShopRageStrikeHeader": "Der Jahreszeitenmarkt wurde angegriffen!",
|
"seasonalShopRageStrikeHeader": "Der Jahreszeitenmarkt wurde angegriffen!",
|
||||||
"seasonalShopRageStrikeLead": "Leslie wurde das Herz gebrochen!",
|
"seasonalShopRageStrikeLead": "Leslie wurde das Herz gebrochen!",
|
||||||
"seasonalShopRageStrikeRecap": "Am 21. Februar war unsere geschätzte Leslie, die Jahreszeitenzauberin, am Boden zerstört, als der Entmutiger den Jahreszeitenmarkt zerstörte. Schnell, erledigt Eure Aufgaben, um das Monster zu bekämpfen und beim Wiederaufbau zu helfen!",
|
"seasonalShopRageStrikeRecap": "Am 21. Februar war unsere geschätzte Leslie, die Jahreszeitenzauberin, am Boden zerstört, als der Entmutiger den Jahreszeitenmarkt zerstörte. Schnell, erledigt Eure Aufgaben, um das Monster zu bekämpfen und beim Wiederaufbau zu helfen!",
|
||||||
@@ -588,7 +588,7 @@
|
|||||||
"questsRageStrikeHeader": "Der Questladen wurde angegriffen!",
|
"questsRageStrikeHeader": "Der Questladen wurde angegriffen!",
|
||||||
"questsRageStrikeLead": "Ian wurde das Herz gebrochen!",
|
"questsRageStrikeLead": "Ian wurde das Herz gebrochen!",
|
||||||
"questsRageStrikeRecap": "Am 6. März war unser wundervoller Ian, der Questmeister, tief erschüttert, als der Entmutiger den Boden rund um den Questladen zerstörte. Schnell, erledigt Eure Aufgaben, um das Monster zu bekämpfen und beim Wiederaufbau zu helfen!",
|
"questsRageStrikeRecap": "Am 6. März war unser wundervoller Ian, der Questmeister, tief erschüttert, als der Entmutiger den Boden rund um den Questladen zerstörte. Schnell, erledigt Eure Aufgaben, um das Monster zu bekämpfen und beim Wiederaufbau zu helfen!",
|
||||||
"questDysheartenerBossRageMarket": "`Der Entmutiger entfesselt NIEDERSCHMETTERNDEN HERZSCHMERZ!`\n\nHilfe! Nachdem er sich an unseren unerledigten Tagesaufgaben gelabt hat, lässt der Entmutiger eine weitere Niederschmetternde Herzschmerz-Attacke los, die die Wände des Markts zerbersten lässt und ihn dem Erboden gleich macht! Unter den herabfallenden Steinen weint Alex der Händler um seine von der Zerstörung betroffenen Waren.\n\nWir dürfen nicht zulassen, dass dies noch einmal passiert! Sorgt dafür, dass alle Eure Tagesaufgaben erledigt werden, bevor der Entmutiger zu seinem letzten Schlag ansetzt.",
|
"questDysheartenerBossRageMarket": "`Der Entmutiger entfesselt NIEDERSCHMETTERNDEN HERZSCHMERZ!`\n\nHilfe! Nachdem er sich an unseren unerledigten Tagesaufgaben gelabt hat, lässt der Entmutiger eine weitere Niederschmetternde Herzschmerz-Attacke los, welche die Wände des Markts zerbersten lässt und ihn dem Erboden gleich macht! Unter den herabfallenden Steinen weint Alex der Händler um seine von der Zerstörung betroffenen Waren.\n\nWir dürfen nicht zulassen, dass dies noch einmal passiert! Sorgt dafür, dass alle Eure Tagesaufgaben erledigt werden, bevor der Entmutiger zu seinem letzten Schlag ansetzt.",
|
||||||
"questDysheartenerBossRageQuests": "`Der Entmutiger entfesselt NIEDERSCHMETTERNDEN HERZSCHMERZ!`\n\nAaaah! Wir haben schon wieder nicht alle Tagesaufgaben erledigt, und der Entmutiger hat genügend Energie für einen letzten Schlag gegen unsere geliebten Ladenbesitzer gesammelt. Die Landschaft um Ian den Questmeister wurde von seiner Niederschmetternden Herzschmerz-Attacke förmlich zerrissen, und Ian bis ins Mark erschüttert von dem schrecklichen Anblick. Wir sind so nah dran, dieses Monster zu besiegen... Beeilt Euch! Gebt jetzt nicht auf!",
|
"questDysheartenerBossRageQuests": "`Der Entmutiger entfesselt NIEDERSCHMETTERNDEN HERZSCHMERZ!`\n\nAaaah! Wir haben schon wieder nicht alle Tagesaufgaben erledigt, und der Entmutiger hat genügend Energie für einen letzten Schlag gegen unsere geliebten Ladenbesitzer gesammelt. Die Landschaft um Ian den Questmeister wurde von seiner Niederschmetternden Herzschmerz-Attacke förmlich zerrissen, und Ian bis ins Mark erschüttert von dem schrecklichen Anblick. Wir sind so nah dran, dieses Monster zu besiegen... Beeilt Euch! Gebt jetzt nicht auf!",
|
||||||
"questDysheartenerDropHippogriffPet": "Hoffnungsfroher Hippogreif (Haustier)",
|
"questDysheartenerDropHippogriffPet": "Hoffnungsfroher Hippogreif (Haustier)",
|
||||||
"questDysheartenerDropHippogriffMount": "Hoffnungsfroher Hippogreif (Reittier)",
|
"questDysheartenerDropHippogriffMount": "Hoffnungsfroher Hippogreif (Reittier)",
|
||||||
@@ -706,7 +706,7 @@
|
|||||||
"questWindupText": "Zähme die zankenden Zahnräder",
|
"questWindupText": "Zähme die zankenden Zahnräder",
|
||||||
"questWindupBoss": "Klangton",
|
"questWindupBoss": "Klangton",
|
||||||
"questWindupCompletion": "Während Du den Attacken ausweichst, fällt Dir etwas seltsames auf: ein gestreifter Messingschwanz ragt aus dem Fahrgestell des Roboters. Du greifst mit einer raschen Hand inmitten des laufenden Robotergetriebes und ziehst... ein zitterndes, aufziehbares Tiger-Junges heraus. Es schmiegt sich an deine Kleidung.<br><br>Der Uhrwerk-Roboter hört umgehend auf um sich zu schlagen und lächelt, seine Zahnräder klicken zurück an ihren Platz. \"Kä-Kä-Kätzchen! Kätzchen in meinem Getriebe!\"<br><br>\"Großartig\", sagt Großmächtig errötend. \"Ich habe hart an diesen Aufzieh-Haustier-Tränken gearbeitet. Ich habe wohl etwas die Übersicht über meine Neuerfindungen verloren. Wisst Ihr, ich habe mein tägliches \"Werkstatt aufräumen\" in letzter Zeit öfter verpasst...\"<br><br>Du folgst dem Bastler und Klangton nach drinnen. Teile, Werkzeug und Tränke bedecken jede Oberfläche. Großmächtig nimmt deine Uhr, doch gibt dir einige Tränke.<br><br>\"Hier, nimm diese. Offensichtlich werden sie bei Dir besser aufgehoben sein!\"",
|
"questWindupCompletion": "Während Du den Attacken ausweichst, fällt Dir etwas seltsames auf: ein gestreifter Messingschwanz ragt aus dem Fahrgestell des Roboters. Du greifst mit einer raschen Hand inmitten des laufenden Robotergetriebes und ziehst... ein zitterndes, aufziehbares Tiger-Junges heraus. Es schmiegt sich an deine Kleidung.<br><br>Der Uhrwerk-Roboter hört umgehend auf um sich zu schlagen und lächelt, seine Zahnräder klicken zurück an ihren Platz. \"Kä-Kä-Kätzchen! Kätzchen in meinem Getriebe!\"<br><br>\"Großartig\", sagt Großmächtig errötend. \"Ich habe hart an diesen Aufzieh-Haustier-Tränken gearbeitet. Ich habe wohl etwas die Übersicht über meine Neuerfindungen verloren. Wisst Ihr, ich habe mein tägliches \"Werkstatt aufräumen\" in letzter Zeit öfter verpasst...\"<br><br>Du folgst dem Bastler und Klangton nach drinnen. Teile, Werkzeug und Tränke bedecken jede Oberfläche. Großmächtig nimmt deine Uhr, doch gibt dir einige Tränke.<br><br>\"Hier, nimm diese. Offensichtlich werden sie bei Dir besser aufgehoben sein!\"",
|
||||||
"questWindupNotes": "*Habit City* ist selten ruhig, doch auf diese missgestimmte Katzenmusik warst Du nicht vorbereitet: Eine Kakophonie aus Knarzen, Quietschen und Kreischen, drang aus dem Laden *Good Timekeeping*, Habiticas bestem Uhrmacher. Du seufzt--Du wolltest doch nur Deine Uhr reparieren lassen. \"Great and Powerful\", oder \"Großmächtig\", wie der Uhrmacher genannt wird, kommt Dir bereits entgegen gestolpert, direkt gefolgt von einem klirrenden Kupfergiganten. <br><br> \"Kä-! Kä-! Kä-!\" klingelt er, die Arme umher werfend. Sein Getriebe malt und quietscht unter Protest.<br><br>\"Mein Roboter \"Klangton\" ist verrückt geworden! Er will mich umbringen!\" kreischt der angeblich mächtige Uhrmacher.<br><br>Sogar mit einer kaputten Uhr weißt Du wann die Zeit reif ist, zu kämpfen. Du stürzt voran, um den panischen Uhrmacher zu beschützen. @Vikte und @a_diamond kommen ebenfalls zur Hilfe!<br><br>\"Kä-! Kä-! Kä-!\", singt Klangton bei jedem Schlag. \"Miau!\"<br><br>Moment mal, war das ein mechanischen Miauen inmitten der mörderischen Monotonie?",
|
"questWindupNotes": "*Habit City* ist selten ruhig, doch auf diese missgestimmte Katzenmusik warst Du nicht vorbereitet: Eine Kakophonie aus Knarzen, Quietschen und Kreischen, drang aus dem Laden *Good Timekeeping*, Habiticas bestem Uhrmacher. Du seufzt--Du wolltest doch nur Deine Uhr reparieren lassen. \"Great and Powerful\", oder \"Der Großmächtige\", wie der Uhrmacher genannt wird, kommt Dir bereits entgegen gestolpert, direkt gefolgt von einem klirrenden Kupfergiganten. <br><br> \"Ki-! Ki-! Ki!\" klingelt er, die Arme umher werfend. Sein Getriebe malt und quietscht unter Protest.<br><br>\"Mein Roboter \"Klangton\" ist verrückt geworden! Er will mich umbringen!\" kreischt der angeblich mächtige Uhrmacher.<br><br>Sogar mit einer kaputten Uhr weißt Du wann die Zeit reif ist, zu kämpfen. Du stürzt voran, um den panischen Uhrmacher zu beschützen. @Vikte und @a_diamond kommen ebenfalls zu Hilfe!<br><br>\"Ki-! Ki-! Ki!\", singt Klangton bei jedem Schlag. \"Miau!\"<br><br>Moment mal, war das ein mechanisches Miauen inmitten der mörderischen Monotonie?",
|
||||||
"questTurquoiseText": "Türkisgrüne Schatzsuchtortur",
|
"questTurquoiseText": "Türkisgrüne Schatzsuchtortur",
|
||||||
"questTurquoiseUnlockText": "Schaltet den Kauf von Türkisen Schlüpfelixieren auf dem Marktplatz frei",
|
"questTurquoiseUnlockText": "Schaltet den Kauf von Türkisen Schlüpfelixieren auf dem Marktplatz frei",
|
||||||
"questTurquoiseDropTurquoisePotion": "Türkises Schlüpfelixier",
|
"questTurquoiseDropTurquoisePotion": "Türkises Schlüpfelixier",
|
||||||
@@ -846,5 +846,19 @@
|
|||||||
"questPlatypusRageDescription": "Diese Leiste füllt sich, wenn Du Deine Tagesaufgaben nicht erfüllst. Wenn sie voll ist, nimmt Das Perfektionisten Schnabeltier deiner Party einige ihrer MP weg!",
|
"questPlatypusRageDescription": "Diese Leiste füllt sich, wenn Du Deine Tagesaufgaben nicht erfüllst. Wenn sie voll ist, nimmt Das Perfektionisten Schnabeltier deiner Party einige ihrer MP weg!",
|
||||||
"questPlatypusRageEffect": "Das Perfektionisten Schnabeltier taucht unter Wasser und spritzt dich naß! Die MP deiner Party sind reduziert!",
|
"questPlatypusRageEffect": "Das Perfektionisten Schnabeltier taucht unter Wasser und spritzt dich naß! Die MP deiner Party sind reduziert!",
|
||||||
"questPlatypusDropPlatypusEgg": "Schnabeltier (Ei)",
|
"questPlatypusDropPlatypusEgg": "Schnabeltier (Ei)",
|
||||||
"questPlatypusUnlockText": "Schält Schnabeltier Eier zum Kauf im Marktplatz frei"
|
"questPlatypusUnlockText": "Schält Schnabeltier Eier zum Kauf im Marktplatz frei",
|
||||||
|
"questOtterNotes": "To-Do-Listen sind großartig! Man kann Stunden damit verbringen, jeden Schritt, den man tun muss, akribisch zu dokumentieren und sich produktiv zu fühlen, ohne diese Dinge tatsächlich zu tun. Deine dreiseitige Liste wird in die Tasche gesteckt. Zeit für einen erfrischenden Spaziergang!<br><br>Du machst dich auf den Weg zum Routinen-Fluss, um einen Spaziergang am Ufer zu machen. Das ist genau das, was Du brauchst, um endlich loszulegen! Zeit, Deine To-Do-Liste hervorzuholen und - ach! Ein Windstoß lässt Dir die Liste aus der Hand und direkt in Richtung Wasser fliegen!<br><br>Kurz bevor das Papier ins Wasser fällt, taucht ein Otterkopf auf und fängt das Blatt ab. Puh! Er hält die Liste in seinen Pfoten und ein schelmisches Grinsen breitet sich auf seinem Gesicht aus... Uh-oh.<br><br>„Hmmm“, summt er und wendet das Papier, um Deine Liste zu lesen. „Sieht aus, als bräuchtest Du Hilfe beim Setzen von Prioritäten.“ Ritsch.<br><br>Der Otter hat gerade Deine sorgfältig erstellte Liste in Stücke gerissen! „Wenn Du das alles erledigen willst, musst Du Dich zuerst entscheiden, was das Wichtigste ist“, sagt er und wirft die Punkte auf Deiner Liste Stück für Stück in den Wind.",
|
||||||
|
"questOtterCompletion": "Als Du es geschafft hast, die Teile Deiner Liste einzufangen, begannst du, sie danach zu sortieren, welche Aufgaben am wichtigsten sind, und hast am Ende einen recht handhabbaren Startpunkt gefunden!<br><br>„Jetzt verstehe ich!“, sagst Du dem Otter, „dieser Quatsch hat mir tatsächlich geholfen, darüber nachzudenken, welche Aufgaben ich priorisieren muss.“<br><br>Der Otter spritzt herum und reibt sich vergnügt die Wangen: „Ich bin froh, dass mein kleiner Plan Dich dazu gebracht hat, anders über Deine Aufgaben nachzudenken.“ Er taucht unter und in der Nähe wieder auf. \"Denke daran, deine Listen machbar zu halten. Belohnungen helfen auch, also nimm die hier!\"",
|
||||||
|
"questPlatypusCompletion": "Nach einem erschöpfenden hin und her von Wasserstrahlen und einigen aufmunternden Worten deinerseits hält das Schnabeltier endlich inne und kommt seufzend an die Oberfläche.<br><br>„Da hast du vielleicht recht. Wenn ich Perfektion verlange, werde ich nie fertig! Ich kann ja immer noch Anpassungen vornehmen. Du scheinst dich mit Perfektionismus auszukennen.“<br><br>Du siehst auf dein durchnässtes Arbeitsblatt. „Ja …“<br><br>„Tut mir leid“, sagt das Schnabeltier. „Als Entschuldigung dafür, dass dein Aufsatz nass geworden ist, nimm bitte ein paar Eier, die ich im Schlamm gefunden habe.“",
|
||||||
|
"questOpalNotes": "Habiticas Gelehrte haben lange nach dem sagenumwobenen magischen Opal-Schlüpfelixier gesucht. Ein Trank, so machtvoll, dass er Haustieren und deren Reittieren eine feurige Farbe und Glanz verleiht wie kein anderer Edelstein oder Edelmetall. Gerüchten zufolge soll die Magie der Opale sogar Planung, Einsicht und Kreativität verbessern. Welchen Auftrieb dir das bei deinen Aufgaben geben würde!<br><br>Nach langem Suchen haben Sie vielleicht endlich die Antwort gefunden. Opalelixiere erfordern rohe Opale, auf welche die magischen Runen von Waage und Merkur geschmiedet werden. Diese antiken Gegenstände können nur an einem Ort gefunden werden … den gefährlichen Ruinen der verlorenen Stadt am Rande der Zeitwüste.<br><br>Du erreichst die Ruinen, nachdem du tagelang auf deinen stärksten Reittier durch das raue und abgelegene Gelände geritten bist. Zwischen den sonnengebleichten und zerbrochenen Steinen siehst du einen hellen Schimmer. Die Suche beginnt!",
|
||||||
|
"questJadeCompletion": "Nach unzähligen Rückschlägen hast du es irgendwie geschafft, den Jadebrocken auf den Gipfel des Berges zu rollen! Die Steinfigur holt dich ein und lächelt. Sie gibt dem Brocken einen leichten Schubs, und du siehst entsetzt zu, wie er wieder nach unten rollt.<br><br>„Warum hast du das gemacht? Jetzt muss das jemand nochmal machen!“, beklagst du dich.<br><br>„Nur weil du etwas mehr als einmal tun musst, heißt das nicht, dass deine Leistungen bedeutungslos sind“, sagt die Steinfigur. „Konzentriere dich jetzt auf das Erreichte und erfreue dich an einer Belohnung!“<br><br>Du schreckst von deiner Couch hoch, als dein Handy auf den Boden fällt. Neben ihm stehen drei Flaschen flüssige Jade! Vielleicht ist es Zeit, das Geschirr von heute abzuwaschen und dann eine Pause einzulegen, um zu sehen, wie diese Tränke bei ein paar Haustier-Eiern wirken …",
|
||||||
|
"questAlpacaNotes": "Die Sonne brennt auf dich hernieder, während du die felsigen Pfade des Mäandergebirges hinaufwanderst. Seit Monaten planst du diese Expedition für deine Freunde und hast jeden Aspekt der Reise recherchiert. Das Gewicht der Vorräte auf deinem Rücken ist so schwer zu tragen, dass sich jeder Schritt eher wie eine Strafe als ein Abenteuer anfühlt.<br><br>Du hörst ein leises Knirschen von Hufen auf dem Pfad hinter dir. Ein flauschiges Alpaka nähert sich mit einem gigantischen Stapel Gepäck auf dem Rücken.<br><br>„Sieht aus, als würdest du dich ganz schön abschleppen, Kumpel, und du trägst nur einen kleinen Rucksack!“, sagt es, als es vorbeigeht.<br><br>„Bei dir sieht es so einfach aus“, seufzst du. „Ich habe diese Reise so lange geplant, aber jetzt, wo wir hier sind, macht es mir nicht mal mehr Spaß …“<br><br>„Lass dich nicht unterkriegen“, schnaubt das Alpaka. „Ich werde dir eine Lektion erteilen, die ich vor langer Zeit gelernt habe!“ Es bockt und plötzlich fliegt ein zusammengerollter Schlafsack auf dich zu! Wie hilft das nochmal?!",
|
||||||
|
"questPlatypusNotes": "Es ist ein wundervoller Tag am Conquest Creek, der durch das Arbeitsblatt in deiner Hand nun doch ziemlich mies wird. Warum werden tolle Abenteuer immer durch Hausaufgaben ruiniert? Nach fünf Fragen zu Fluss-Ökosystemen, musst du dich auch noch mit einem Aufsatz herumschlagen.<br><br>„Beschreiben Sie, wie sich ein Tier an das Leben im Fluss anpassen könnte? Puh, keine Ahnung…“<br><br>Nachdem du 30 Minuten lang hoffnungslos festsitzt und nicht einmal weißt, wie du überhaupt anfangen sollst, hättest du eine Menge frustriert klingendes Platschen am Ufer entlang.<br><br>„Auuh“, blubbert eine Stimme direkt unter der Oberfläche. Ein erschöpft aussehendes Schnabeltier taucht auf. „Dieser Bau will einfach nicht zusammenpassen! Jedes Mal, wenn ich anfange, sieht es einfach falsch aus.“ Es taucht wieder unter die Oberfläche und sein breiter, flacher Schwanz spritzt dir mächtig ins Gesicht.<br><br>„Warte, mach nicht alles kaputt –“, rufst du, als dich ein weiterer Schwall Wasser aus dem Bach trifft. Vielleicht kannst du helfen und dich dabei inspirieren lassen!",
|
||||||
|
"questOpalText": "Die Legende der Obskuren Opale",
|
||||||
|
"questOpalCompletion": "Schließlich findest du, müde und staubig, die letzten Runen und den Opalstein, die du brauchst, um das magische Schlüpfelixier zu schmieden.<br><br>Du beginnst mit dem Schmieden, sobald du wieder in Habiticas Hauptstadt bist. Die Kraft der Runen und Opale erfüllt dein Labor mit Licht in den Farben des Regenbogens! Im Handumdrehen hast du drei Elixiere geschmiedet und freust dich darauf, neue, farbenfrohe Freunde auszubrüten.",
|
||||||
|
"questOpalCollectLibraRunes": "Waage-Rune",
|
||||||
|
"questOpalCollectMercuryRunes": "Merkur-Rune",
|
||||||
|
"questOpalCollectOpalGems": "Opal-Edelstein",
|
||||||
|
"questOpalDropOpalPotion": "Opal-Schlüpfelixier",
|
||||||
|
"questOpalUnlockText": "Schaltet im Markt das Opal-Schlüpfelixier zum Kauf frei"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -116,7 +116,7 @@
|
|||||||
"generate": "Erstelle",
|
"generate": "Erstelle",
|
||||||
"getCodes": "Codes erhalten",
|
"getCodes": "Codes erhalten",
|
||||||
"webhooks": "WebHooks",
|
"webhooks": "WebHooks",
|
||||||
"webhooksInfo": "WebHooks bieten Entwicklern die Möglichkeit, Benachrichtigngen zu erhalten, wenn eine bestimmte Aktion durchgeführt wird, z. B. das Bewerten oder Aktualisieren einer Aufgabe oder das Senden einer Nachricht in einer Gruppe. Indem du einen WebHook erstellst, kannst du Änderungen in Habitica wahrnehmen und Anwendungen entwickeln, die auf diese Änderungen reagieren. <br><br> Weitere Informationen und Beispiele findest Du bei den <a target=\"_blank\" href=\"https://habitica.fandom.com/wiki/Webhooks\">API Docs</a>.",
|
"webhooksInfo": "WebHooks bieten Entwicklern die Möglichkeit, Benachrichtigungen zu erhalten, wenn eine bestimmte Aktion durchgeführt wird, z. B. das Bewerten oder Aktualisieren einer Aufgabe oder das Senden einer Nachricht in einer Gruppe. Indem du einen WebHook erstellst, kannst du Änderungen in Habitica wahrnehmen und Anwendungen entwickeln, die auf diese Änderungen reagieren. <br><br> Weitere Informationen und Beispiele findest Du bei den <a target=\"_blank\" href=\"https://habitica.com/apidoc/#api-Webhook-AddWebhook\">API Docs</a>.",
|
||||||
"enabled": "Aktiviert",
|
"enabled": "Aktiviert",
|
||||||
"webhookURL": "WebHook-URL",
|
"webhookURL": "WebHook-URL",
|
||||||
"invalidUrl": "Ungültige URL",
|
"invalidUrl": "Ungültige URL",
|
||||||
@@ -196,7 +196,7 @@
|
|||||||
"giftSubscriptionRateText": "<strong>$<%= price %> $(USD)</strong> für <strong><%= months %> Monate</strong>",
|
"giftSubscriptionRateText": "<strong>$<%= price %> $(USD)</strong> für <strong><%= months %> Monate</strong>",
|
||||||
"transaction_admin_update_balance": "<b>Admin</b> gegeben",
|
"transaction_admin_update_balance": "<b>Admin</b> gegeben",
|
||||||
"transaction_admin_update_hourglasses": "<b>Admin</b> aktualisiert",
|
"transaction_admin_update_hourglasses": "<b>Admin</b> aktualisiert",
|
||||||
"transaction_create_bank_challenge": "Bankherausforderung <b>erstellt</b>",
|
"transaction_create_bank_challenge": "Bank-Herausforderung <b>erstellt</b>",
|
||||||
"passwordIssueLength": "Passwörter müssen zwischen 8 und 64 Zeichen lang sein.",
|
"passwordIssueLength": "Passwörter müssen zwischen 8 und 64 Zeichen lang sein.",
|
||||||
"timestamp": "Zeitstempel",
|
"timestamp": "Zeitstempel",
|
||||||
"amount": "Menge",
|
"amount": "Menge",
|
||||||
@@ -241,7 +241,7 @@
|
|||||||
"addWebhook": "Webhook hinzufügen",
|
"addWebhook": "Webhook hinzufügen",
|
||||||
"changeEmailDisclaimer": "Dies ist die Email Adresse, die du benutzt, um dich bei Habitica anzumelden und um Benachrichtigungen zu erhalten.",
|
"changeEmailDisclaimer": "Dies ist die Email Adresse, die du benutzt, um dich bei Habitica anzumelden und um Benachrichtigungen zu erhalten.",
|
||||||
"changeDisplayNameDisclaimer": "Dies ist der Name, der für deinen Avatar in Habitica angezeigt wird.",
|
"changeDisplayNameDisclaimer": "Dies ist der Name, der für deinen Avatar in Habitica angezeigt wird.",
|
||||||
"changePasswordDisclaimer": "Passwort muß 8 Zeichen oder länger sein. Wir empfehlen ein starkes Passwort, das du sonst nirgends verwendest.",
|
"changePasswordDisclaimer": "Das Ändern deines Passwortes wird dich von all deinen Geräten und Drittanbieter-Anwendungen abmelden.",
|
||||||
"dateFormatDisclaimer": "Passe die Datumsformatierung in Habitica an.",
|
"dateFormatDisclaimer": "Passe die Datumsformatierung in Habitica an.",
|
||||||
"enableAudio": "Aktiviere Audio",
|
"enableAudio": "Aktiviere Audio",
|
||||||
"playDemoAudio": "Spiele Demo ab",
|
"playDemoAudio": "Spiele Demo ab",
|
||||||
@@ -255,7 +255,7 @@
|
|||||||
"connected": "Verbunden",
|
"connected": "Verbunden",
|
||||||
"connect": "Verbinden",
|
"connect": "Verbinden",
|
||||||
"changeClassDisclaimer": "Bei Änderung deiner Klasse bekommst du alle deine vorhandenen Attributspunkte erstattet. Passe deine Attributspunkte im Attributwerte-Abschnitt deines Profils an, sobald du eine neue Klasse gewählt hast.",
|
"changeClassDisclaimer": "Bei Änderung deiner Klasse bekommst du alle deine vorhandenen Attributspunkte erstattet. Passe deine Attributspunkte im Attributwerte-Abschnitt deines Profils an, sobald du eine neue Klasse gewählt hast.",
|
||||||
"APITokenDisclaimer": "<b>Dein API Token ist wie ein Passwort. Teile es nicht öffentlich.</b>Es kann sein, daß du gelegentlich nach deiner User ID gefragt wirst, aber poste niemals dein API Token, wo andere es sehen können, einschließlich Github.<br><br><b>Hinweis:</b> Wenn du ein neues API Token brauchst (z.B., wenn du es aus Versehen geteilt hast), schreib eine Email an <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> mit deiner User ID und deinem aktuellen Token. Wenn es dann zurückgesetzt ist, musst du alles wieder neu authorisieren, indem du dich auf der Website und der mobilen App abmeldest und das neue Token bei allen anderen Habitica Tools, die du nutzt, angibst.",
|
"APITokenDisclaimer": "<b>Dein API-Schlüssel ist wie ein Passwort. Teile ihn niemals öffentlich.</b> Du wirst ggf. nach deiner Benutzer-ID gefragt, aber schreibe deinen API-Schlüssel niemals dort, wo andere ihn sehen könnten bspw. Github.<br><br><b>Hinweis:</b> Falls du ein neues API-Schlüssel brauchst (z.B., weil du ihn versehentlich geteilt hast), kannst du dein Passwort ändern, um ihn zurückzusetzen. Einmal zurückgesetzt, musst du dich auf all deinen Geräten, auf denen du Habitica verwendest, erneut anmelden und deinen neuen API-Schlüssel in Drittanbieter-Anwendungen angeben, die du verwendest.",
|
||||||
"thirdPartyTools": "Drittanbieter Apps, Erweiterungen, und alle möglichen anderen Tools, die du mit deinem Account nutzen kannst, findest du im <a href='https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations' target='_blank'>Habitica Wiki</a>.",
|
"thirdPartyTools": "Drittanbieter Apps, Erweiterungen, und alle möglichen anderen Tools, die du mit deinem Account nutzen kannst, findest du im <a href='https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations' target='_blank'>Habitica Wiki</a>.",
|
||||||
"transaction_subscription_bonus": "<b>Abonnement</b>-Bonus"
|
"transaction_subscription_bonus": "<b>Abonnement</b>-Bonus"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
"subGemName": "Abonnenten-Edelsteine",
|
"subGemName": "Abonnenten-Edelsteine",
|
||||||
"maxBuyGems": "Du hast diesen Monat schon die erlaubte Menge Edelsteine gekauft. Innerhalb der ersten drei Tage des folgenden Monats werden neue verfügbar sein. Danke für Dein Abonnement!",
|
"maxBuyGems": "Du hast diesen Monat schon die erlaubte Menge Edelsteine gekauft. Innerhalb der ersten drei Tage des folgenden Monats werden neue verfügbar sein. Danke für Dein Abonnement!",
|
||||||
"timeTravelers": "Mysteriöse Zeitreisende",
|
"timeTravelers": "Mysteriöse Zeitreisende",
|
||||||
"timeTravelersPopoverNoSubMobile": "Sieht aus als bräuchtest Du eine Mystische Sanduhr um das Zeitportal zu öffnen und die Mysteriösen Zeitreisenden herbei zu rufen.",
|
"timeTravelersPopoverNoSubMobile": "Abonnenten erhalten jeden Monat eine Mystische Sanduhr für den Laden der Zeitreisenden!",
|
||||||
"timeTravelersPopover": "Deine Mystische Sanduhr hat unser Zeitportal geöffnet! Wähle etwas aus, was wir für Dich aus der Vergangenheit oder Zukunft holen sollen.",
|
"timeTravelersPopover": "Deine Mystische Sanduhr hat unser Zeitportal geöffnet! Wähle etwas aus, was wir für Dich aus der Vergangenheit oder Zukunft holen sollen.",
|
||||||
"mysterySetNotFound": "Überraschungsset nicht gefunden, oder Set wurde bereits erworben.",
|
"mysterySetNotFound": "Überraschungsset nicht gefunden, oder Set wurde bereits erworben.",
|
||||||
"mysteryItemIsEmpty": "Mysteriöse Gegenstände sind leer",
|
"mysteryItemIsEmpty": "Mysteriöse Gegenstände sind leer",
|
||||||
@@ -265,5 +265,6 @@
|
|||||||
"mysterySet202504": "Scheues Yeti Set",
|
"mysterySet202504": "Scheues Yeti Set",
|
||||||
"mysterySet202505": "Hochfliegender Schwalbenschwanz Set",
|
"mysterySet202505": "Hochfliegender Schwalbenschwanz Set",
|
||||||
"mysterySet202506": "Sonnenschein Set",
|
"mysterySet202506": "Sonnenschein Set",
|
||||||
"mysterySet202507": "Draufgängerisches Skater Set"
|
"mysterySet202507": "Draufgängerisches Skater Set",
|
||||||
|
"mysterySet202508": "Strahlendes Klingen Set"
|
||||||
}
|
}
|
||||||
|
|||||||
7
website/common/locales/en/admin.json
Normal file
7
website/common/locales/en/admin.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"adminPanel": "Admin Panel",
|
||||||
|
"siteBlockers": "Site Blockers",
|
||||||
|
"newsroom": "Newsroom",
|
||||||
|
"adminBlockerTypeDescription": "<b>IP-Address</b> - Block access for a specific IP-Address\n\nClient - Block access for a client based on the \"x-client\" header.\n\nE-Mail - Blocks e-mails from being used for signup.",
|
||||||
|
"adminBlockerAreaDescription": "A blocker can either apply to the full site, completely blocking any access. Or it can apply to purchases, which still allows the site to be accessed."
|
||||||
|
}
|
||||||
@@ -1035,6 +1035,10 @@
|
|||||||
"backgroundSirensLairText": "Siren's Lair",
|
"backgroundSirensLairText": "Siren's Lair",
|
||||||
"backgroundSirensLairNotes": "Dare to dive into a Siren’s Lair.",
|
"backgroundSirensLairNotes": "Dare to dive into a Siren’s Lair.",
|
||||||
|
|
||||||
|
"backgrounds082025": "SET 135: Released August 2025",
|
||||||
|
"backgroundSunnyStreetWithShopsText": "Sunny Street with Shops",
|
||||||
|
"backgroundSunnyStreetWithShopsNotes": "Enjoy the sights and sounds of a Sunny Street with Shops.",
|
||||||
|
|
||||||
"timeTravelBackgrounds": "Steampunk Backgrounds",
|
"timeTravelBackgrounds": "Steampunk Backgrounds",
|
||||||
"backgroundAirshipText": "Airship",
|
"backgroundAirshipText": "Airship",
|
||||||
"backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.",
|
"backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.",
|
||||||
|
|||||||
@@ -109,12 +109,14 @@
|
|||||||
"tweet": "Tweet",
|
"tweet": "Tweet",
|
||||||
"checkOutMobileApps": "Check out our mobile apps!",
|
"checkOutMobileApps": "Check out our mobile apps!",
|
||||||
"missingAuthHeaders": "Missing authentication headers.",
|
"missingAuthHeaders": "Missing authentication headers.",
|
||||||
|
"missingClientHeader": "Missing x-client headers.",
|
||||||
"missingUsernameEmail": "Missing username or email.",
|
"missingUsernameEmail": "Missing username or email.",
|
||||||
"missingEmail": "Missing email.",
|
"missingEmail": "Missing email.",
|
||||||
"missingUsername": "Missing username.",
|
"missingUsername": "Missing username.",
|
||||||
"missingPassword": "Missing password.",
|
"missingPassword": "Missing password.",
|
||||||
"missingNewPassword": "Missing new password.",
|
"missingNewPassword": "Missing new password.",
|
||||||
"invalidEmailDomain": "You cannot register with emails with the following domains: <%= domains %>",
|
"invalidEmailDomain": "You cannot register with emails with the following domains: <%= domains %>",
|
||||||
|
"emailBlockedRegistration": "This E-Mail is blocked from registration. If you think this is a mistake, please contact us at admin@habitica.com.",
|
||||||
"wrongPassword": "Password is incorrect. If you forgot your password, click \"Forgot Password.\"",
|
"wrongPassword": "Password is incorrect. If you forgot your password, click \"Forgot Password.\"",
|
||||||
"incorrectDeletePhrase": "Please type <%= magicWord %> in all capital letters to delete your account.",
|
"incorrectDeletePhrase": "Please type <%= magicWord %> in all capital letters to delete your account.",
|
||||||
"incorrectResetPhrase": "Please type <%= magicWord %> in all capital letters to reset your account.",
|
"incorrectResetPhrase": "Please type <%= magicWord %> in all capital letters to reset your account.",
|
||||||
|
|||||||
@@ -600,6 +600,8 @@
|
|||||||
"weaponMystery202404Notes": "This staff will bestow upon you an ancient wisdom as ageless as the rocks and trees. Confers no benefit. April 2024 Subscriber Item.",
|
"weaponMystery202404Notes": "This staff will bestow upon you an ancient wisdom as ageless as the rocks and trees. Confers no benefit. April 2024 Subscriber Item.",
|
||||||
"weaponMystery202408Text": "Arcane Aegis",
|
"weaponMystery202408Text": "Arcane Aegis",
|
||||||
"weaponMystery202408Notes": "A magic bubble shield that protects you from enemy spells or helps you float in the air or water. Confers no benefit. August 2024 Subscriber Item.",
|
"weaponMystery202408Notes": "A magic bubble shield that protects you from enemy spells or helps you float in the air or water. Confers no benefit. August 2024 Subscriber Item.",
|
||||||
|
"weaponMystery202508Text": "Brilliant Crimson Blade",
|
||||||
|
"weaponMystery202508Notes": "This spinning blade will terrify any monster or red Daily that crosses your path! Confers no benefit. August 2025 Subscriber Item.",
|
||||||
|
|
||||||
"weaponMystery301404Text": "Steampunk Cane",
|
"weaponMystery301404Text": "Steampunk Cane",
|
||||||
"weaponMystery301404Notes": "Excellent for taking a turn about town. March 3015 Subscriber Item. Confers no benefit.",
|
"weaponMystery301404Notes": "Excellent for taking a turn about town. March 3015 Subscriber Item. Confers no benefit.",
|
||||||
@@ -1736,6 +1738,8 @@
|
|||||||
"armorArmoireBeekeepersSuitNotes": "Keep yourself safe as you look after your busy bumbles. Increases Constitution by <%= con %>. Enchanted Armoire: Beekeeper Set (Item 2 of 4)",
|
"armorArmoireBeekeepersSuitNotes": "Keep yourself safe as you look after your busy bumbles. Increases Constitution by <%= con %>. Enchanted Armoire: Beekeeper Set (Item 2 of 4)",
|
||||||
"armorArmoireFlyFishingWadersText": "Fly Fishing Waders",
|
"armorArmoireFlyFishingWadersText": "Fly Fishing Waders",
|
||||||
"armorArmoireFlyFishingWadersNotes": "Stay perfectly warm and dry when you wade into a stream, pond, lake, or river. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Fly Fishing Set (Item 2 of 3)",
|
"armorArmoireFlyFishingWadersNotes": "Stay perfectly warm and dry when you wade into a stream, pond, lake, or river. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Fly Fishing Set (Item 2 of 3)",
|
||||||
|
"armorArmoireRedWaistcoatText": "Red Waistcoat",
|
||||||
|
"armorArmoireRedWaistcoatNotes": "Look smart and stunning as you tackle your tasks. There’s something secret hidden in the vest pocket—what do you think it could be? Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Red Waistcoat Set (Item 2 of 2)",
|
||||||
|
|
||||||
"headgear": "helm",
|
"headgear": "helm",
|
||||||
"headgearCapitalized": "Headgear",
|
"headgearCapitalized": "Headgear",
|
||||||
@@ -2673,6 +2677,8 @@
|
|||||||
"headArmoireBeekeepersHatNotes": "Keep your face safe as you tend to your buzzing buddies. Increases Perception by <%= per %>. Enchanted Armoire: Beekeeper Set (Item 1 of 4)",
|
"headArmoireBeekeepersHatNotes": "Keep your face safe as you tend to your buzzing buddies. Increases Perception by <%= per %>. Enchanted Armoire: Beekeeper Set (Item 1 of 4)",
|
||||||
"headArmoireFlyFishingHatText": "Fly Fishing Hat",
|
"headArmoireFlyFishingHatText": "Fly Fishing Hat",
|
||||||
"headArmoireFlyFishingHatNotes": "With a wide brim and spot to hold a spare lure, don’t go fly fishing without this beauty. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Fly Fishing Set (Item 1 of 3)",
|
"headArmoireFlyFishingHatNotes": "With a wide brim and spot to hold a spare lure, don’t go fly fishing without this beauty. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Fly Fishing Set (Item 1 of 3)",
|
||||||
|
"headArmoireRedNewsieHatText": "Red Newsie Cap",
|
||||||
|
"headArmoireRedNewsieHatNotes": "Extra! Extra! Read all about it: this cap is comfortable, fashionable, and practical. Increases Perception and Intelligence by <%= attrs %> each. Enchanted Armoire: Red Waistcoat Set (Item 1 of 2)",
|
||||||
|
|
||||||
"offhand": "off-hand item",
|
"offhand": "off-hand item",
|
||||||
"offHandCapitalized": "Off-Hand Item",
|
"offHandCapitalized": "Off-Hand Item",
|
||||||
@@ -3006,6 +3012,8 @@
|
|||||||
"shieldMystery202502Notes": "This Valentine’s Day and every day, may your heart be as light as these buoyant balloons. Confers no benefit. February 2025 Subscriber Item.",
|
"shieldMystery202502Notes": "This Valentine’s Day and every day, may your heart be as light as these buoyant balloons. Confers no benefit. February 2025 Subscriber Item.",
|
||||||
"shieldMystery202506Text": "Solar Shine Shield",
|
"shieldMystery202506Text": "Solar Shine Shield",
|
||||||
"shieldMystery202506Notes": "Dispel darkness and bestow warm and cheerful rays wherever you are. Confers no benefit. June 2025 Subscriber Item.",
|
"shieldMystery202506Notes": "Dispel darkness and bestow warm and cheerful rays wherever you are. Confers no benefit. June 2025 Subscriber Item.",
|
||||||
|
"shieldMystery202508Text": "Brilliant Cyan Blade",
|
||||||
|
"shieldMystery202508Notes": "If you thought one spinning blade was cool looking, try two! Confers no benefit. August 2025 Subscriber Item.",
|
||||||
|
|
||||||
"shieldMystery301405Text": "Clock Shield",
|
"shieldMystery301405Text": "Clock Shield",
|
||||||
"shieldMystery301405Notes": "Time is on your side with this towering clock shield! Confers no benefit. June 3015 Subscriber Item.",
|
"shieldMystery301405Notes": "Time is on your side with this towering clock shield! Confers no benefit. June 3015 Subscriber Item.",
|
||||||
|
|||||||
@@ -176,6 +176,7 @@
|
|||||||
"mysterySet202505": "Soaring Swallowtail Set",
|
"mysterySet202505": "Soaring Swallowtail Set",
|
||||||
"mysterySet202506": "Solar Shine Set",
|
"mysterySet202506": "Solar Shine Set",
|
||||||
"mysterySet202507": "Spunky Skater Set",
|
"mysterySet202507": "Spunky Skater Set",
|
||||||
|
"mysterySet202508": "Brilliant Blade Set",
|
||||||
"mysterySet301404": "Steampunk Standard Set",
|
"mysterySet301404": "Steampunk Standard Set",
|
||||||
"mysterySet301405": "Steampunk Accessories Set",
|
"mysterySet301405": "Steampunk Accessories Set",
|
||||||
"mysterySet301703": "Peacock Steampunk Set",
|
"mysterySet301703": "Peacock Steampunk Set",
|
||||||
|
|||||||
@@ -241,5 +241,7 @@
|
|||||||
"sunsetFaqPara21": "Gems in the Guild Bank will be refunded to the leader of the Guild on August 8th when Guild Services end.",
|
"sunsetFaqPara21": "Gems in the Guild Bank will be refunded to the leader of the Guild on August 8th when Guild Services end.",
|
||||||
"anotherQuestion": "Have another question?",
|
"anotherQuestion": "Have another question?",
|
||||||
"contactAdmin": "Contact <a href='mailto:admin@habitica.com'>admin@habitica.com</a>",
|
"contactAdmin": "Contact <a href='mailto:admin@habitica.com'>admin@habitica.com</a>",
|
||||||
"webFaqAnswer60": "Here are some quick tips to get you started with your new Habitica Group Plan:\n\n * Promote a member to a manager to give them the ability to create and edit tasks\n * Leave tasks unassigned if anyone can complete it, and it only needs to be done once\n * Assign a task to one person to make sure no one else can complete their task\n * Assign a task to multiple people if they all need to complete it\n * Toggle the ability to display shared tasks on your personal board to not miss anything\n * You get rewarded for the tasks you complete, even multi-assigned\n * Task completion rewards aren’t split between members\n * Use task colour on the team board to judge the average completion rate of tasks\n * Regularly review the tasks on the shared task board to make sure they are still relevant\n * Missing a Daily won’t damage you or your team, but the task will degrade in colour"
|
"webFaqAnswer60": "Here are some quick tips to get you started with your new Habitica Group Plan:\n\n * Promote a member to a manager to give them the ability to create and edit tasks\n * Leave tasks unassigned if anyone can complete it, and it only needs to be done once\n * Assign a task to one person to make sure no one else can complete their task\n * Assign a task to multiple people if they all need to complete it\n * Toggle the ability to display shared tasks on your personal board to not miss anything\n * You get rewarded for the tasks you complete, even multi-assigned\n * Task completion rewards aren’t split between members\n * Use task colour on the team board to judge the average completion rate of tasks\n * Regularly review the tasks on the shared task board to make sure they are still relevant\n * Missing a Daily won’t damage you or your team, but the task will degrade in colour",
|
||||||
|
"webFaqAnswer67": "Classes are different roles that your character can play. Each class provides its own set of unique benefits and skills as you level up. These skills can complement the way you interact with your tasks or help you contribute to completing Quests in your Party.\n\nYour class also determines the Equipment that will be available to you for purchase in your Rewards, the Market, and the Seasonal Shop.\n\nHere’s a rundown of each class to help you choose which one is best suited to your playstyle:\n#### **Warrior**\n* Warriors deal high damage to bosses and have a high chance of critical hits when completing tasks, rewarding you extra Experience and Gold.\n* Strength is their primary stat, raising the damage they do.\n* Constitution is their secondary stat, lowering the damage they take.\n* Warriors' skills buff their Party mates' Constitution and Strength.\n* Consider playing as a Warrior if you love to fight bosses but also want some protection if you miss tasks occasionally.\n#### **Healer**\n* Healers have high defence and can heal themselves as well as their Party mates.\n* Constitution is their primary stat, increasing their heals and lowering the damage they take.\n* Intelligence is their secondary stat, increasing their Mana and Experience.\n* Healers' skills make their tasks less red and buff their Party mates' Constitution.\n* Consider playing as a Healer if you miss tasks often and need the ability to heal yourself or your Party members. Healers also level up quickly.\n#### **Mage**\n* Mages level up quickly, gain lots of Mana, and damage bosses in Quests.\n* Intelligence is their primary stat, increasing their Mana and Experience.\n* Perception is their secondary stat, increasing their Gold and item drops.\n* Mages' skills freeze their task streaks, restore their Party mates' Mana, and buff their Intelligence.\n* Consider playing as a Mage if you are motivated by progressing quickly through levels and contributing damage to boss Quests.\n#### **Rogue**\n* Rogues get the most item drops and Gold from completing tasks, and have a high chance of critical hits, getting even more Experience and Gold.\n* Perception is their primary stat, increasing their Gold and item drops.\n* Strength is their secondary stat, raising the damage they do.\n* Rogues' skills help them dodge missed Dailies, pilfer Gold, and buff their Party mates’ Perception.\n* Consider playing as a Rogue if you’re highly motivated by rewards.",
|
||||||
|
"sunsetFaqPara2": "Habitica’s primary purpose is and has always been to provide a gamified task management experience. Taverns and Guilds helped motivate players by helping them find others with similar goals. Some truly wonderful spaces were created and we had a chance to see the community thrive with helpful discussion. As the years passed, we noticed changes in how players use and rely on Habitica. Parties flourished, while Guilds and public spaces were used by less and less of our player base. In an ever changing internet landscape, the resources necessary to maintain these spaces became too disproportionate to the number of people actually participating in them."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,11 +33,11 @@
|
|||||||
"marketing1Lead3Title": "Get rewarded for your effort",
|
"marketing1Lead3Title": "Get rewarded for your effort",
|
||||||
"marketing1Lead3": "Having something to look forward to can be the difference between getting a task done, or having it taunt you for weeks. When life doesn't offer a reward, Habitica has you covered! You’ll be rewarded for every task, but surprises are around every corner–so keep up your progress! ",
|
"marketing1Lead3": "Having something to look forward to can be the difference between getting a task done, or having it taunt you for weeks. When life doesn't offer a reward, Habitica has you covered! You’ll be rewarded for every task, but surprises are around every corner–so keep up your progress! ",
|
||||||
"marketing2Header": "Team up with friends",
|
"marketing2Header": "Team up with friends",
|
||||||
"marketing2Lead1Title": "Social Productivity",
|
"marketing2Lead1Title": "Social productivity",
|
||||||
"marketing2Lead1": "Get a boost of motivation by collaborating, competing, and interacting with others! Habitica is built to harness the most effective part of any self-improvement program: social accountability.",
|
"marketing2Lead1": "Get a boost of motivation by collaborating, competing, and interacting with others! Habitica is built to harness the most effective part of any self-improvement program: social accountability.",
|
||||||
"marketing2Lead2Title": "Battle monsters on Quests",
|
"marketing2Lead2Title": "Battle monsters on Quests",
|
||||||
"marketing2Lead2": "Take on one of our hundreds of Quests with a Party of friends to enter the fray. Quest monsters push your accountability to the max. Forgetting to floss means damage done to everyone!",
|
"marketing2Lead2": "Take on one of our hundreds of Quests with a Party of friends to enter the fray. Quest monsters push your accountability to the max. Forgetting to floss means damage done to everyone!",
|
||||||
"marketing2Lead3Title": "Challenge Each Other",
|
"marketing2Lead3Title": "Challenge each other",
|
||||||
"marketing2Lead3": "Join Challenges made by our community to get curated task lists that fit your interests and goals. Do your best to compete for the Gem prize awarded to the winner!",
|
"marketing2Lead3": "Join Challenges made by our community to get curated task lists that fit your interests and goals. Do your best to compete for the Gem prize awarded to the winner!",
|
||||||
"marketing3Header": "Android & iOS Apps",
|
"marketing3Header": "Android & iOS Apps",
|
||||||
"marketing3Lead1": "You can get Habitica on your Android or iOS device to check off tasks anywhere. Check out our award winning apps for a fresh approach to getting things done.",
|
"marketing3Lead1": "You can get Habitica on your Android or iOS device to check off tasks anywhere. Check out our award winning apps for a fresh approach to getting things done.",
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
"marketing3Lead2": "We're proud to be an open-source project that welcomes contributions from our dedicated community. Make Habitica fit your own needs or contribute to improve the experience of all players around the world. Visit us on [GitHub](https://github.com/habitrpg) to learn more!",
|
"marketing3Lead2": "We're proud to be an open-source project that welcomes contributions from our dedicated community. Make Habitica fit your own needs or contribute to improve the experience of all players around the world. Visit us on [GitHub](https://github.com/habitrpg) to learn more!",
|
||||||
"marketing4Header": "Beyond household chores",
|
"marketing4Header": "Beyond household chores",
|
||||||
"marketing4Lead1": "Education is one of the best places for a little gamification! Break through the monotony of everyday classwork by adding some game play into the mix. Habitica can be a fun way to track homework, make classroom Challenges, and let your students show off their accomplishments.",
|
"marketing4Lead1": "Education is one of the best places for a little gamification! Break through the monotony of everyday classwork by adding some game play into the mix. Habitica can be a fun way to track homework, make classroom Challenges, and let your students show off their accomplishments.",
|
||||||
"marketing4Lead1Title": "Gamification In Education",
|
"marketing4Lead1Title": "Gamification in education",
|
||||||
"marketing4Lead2": "Building a healthier lifestyle can easily become an overwhelming endeavor. Habitica helps you track all aspects of your fitness goals with flexible scheduling and intensity to meet you where you are. So have some fun while you work your way towards better health!",
|
"marketing4Lead2": "Building a healthier lifestyle can easily become an overwhelming endeavor. Habitica helps you track all aspects of your fitness goals with flexible scheduling and intensity to meet you where you are. So have some fun while you work your way towards better health!",
|
||||||
"marketing4Lead2Title": "Gamification In Health and Wellness",
|
"marketing4Lead2Title": "Gamification In Health and Wellness",
|
||||||
"marketing4Lead3-1": "Ready to have fun getting things done?",
|
"marketing4Lead3-1": "Ready to have fun getting things done?",
|
||||||
@@ -182,5 +182,6 @@
|
|||||||
"enterHabitica": "Enter Habitica",
|
"enterHabitica": "Enter Habitica",
|
||||||
"translateHabitica": "Translate Habitica",
|
"translateHabitica": "Translate Habitica",
|
||||||
"marketing3Lead1Title": "Android & iOS apps",
|
"marketing3Lead1Title": "Android & iOS apps",
|
||||||
"marketing4Lead3Button": "Get Started Today"
|
"marketing4Lead3Button": "Get Started Today",
|
||||||
|
"missingClientHeader": "Missing x-client headers."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,7 +167,7 @@
|
|||||||
"contentRelease": "Content releases + Events",
|
"contentRelease": "Content releases + Events",
|
||||||
"bannedWordUsedInProfile": "Your Display Name or About text contained inappropriate language.",
|
"bannedWordUsedInProfile": "Your Display Name or About text contained inappropriate language.",
|
||||||
"changeDisplayNameDisclaimer": "This is the name that will be displayed for your Avatar in Habitica.",
|
"changeDisplayNameDisclaimer": "This is the name that will be displayed for your Avatar in Habitica.",
|
||||||
"changePasswordDisclaimer": "Password must be 8 characters or more. We recommend a strong password that you're not using elsewhere.",
|
"changePasswordDisclaimer": "Passwords must be 8 characters or more. Changing your password will log you out of any other devices and third party tools you may use.",
|
||||||
"dateFormatDisclaimer": "Adjust the date formatting across Habitica.",
|
"dateFormatDisclaimer": "Adjust the date formatting across Habitica.",
|
||||||
"enableAudio": "Enable Audio",
|
"enableAudio": "Enable Audio",
|
||||||
"playDemoAudio": "Play Demo",
|
"playDemoAudio": "Play Demo",
|
||||||
@@ -195,7 +195,7 @@
|
|||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"resetTextLocal": "If you're absolutely certain, type your password into the text box below.",
|
"resetTextLocal": "If you're absolutely certain, type your password into the text box below.",
|
||||||
"resetTextSocial": "If you're absolutely certain, type <b>\"<%= magicWord %>\"</b> into the text box below.",
|
"resetTextSocial": "If you're absolutely certain, type <b>\"<%= magicWord %>\"</b> into the text box below.",
|
||||||
"APITokenDisclaimer": "<b>Your API Token is like a password; Do not share it publicly.</b> You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.<br><br><b>Note:</b> If you need a new API Token (e.g., if you accidentally shared it), email <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> with your User ID and current Token. Once it is reset you will need to re-authorise everything by logging out of the website and mobile app and by providing the new Token to any other Habitica tools that you use.",
|
"APITokenDisclaimer": "<b>Your API Token is like a password; Do not share it publicly.</b> You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.<br><br><b>If you need a new API Token</b> (e.g., if you accidentally shared it), you can change your password to reset it. Once it is reset, you will need to log back in to any other devices you use Habitica on and provide the new API Token to third-party tools you may use.",
|
||||||
"audioThemeDisclaimer": "Audio themes add optional sound effects to the Habitica website. Volume levels are controlled using your computer's volume settings.",
|
"audioThemeDisclaimer": "Audio themes add optional sound effects to the Habitica website. Volume levels are controlled using your computer's volume settings.",
|
||||||
"gemCap": "Gem Cap",
|
"gemCap": "Gem Cap",
|
||||||
"nextHourglass": "Next Mystic Hourglass Delivery",
|
"nextHourglass": "Next Mystic Hourglass Delivery",
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
"subGemName": "Subscriber Gems",
|
"subGemName": "Subscriber Gems",
|
||||||
"maxBuyGems": "You have bought all the Gems you can this month. More become available within the first three days of each month. Thanks for subscribing!",
|
"maxBuyGems": "You have bought all the Gems you can this month. More become available within the first three days of each month. Thanks for subscribing!",
|
||||||
"timeTravelers": "Time Travellers",
|
"timeTravelers": "Time Travellers",
|
||||||
"timeTravelersPopoverNoSubMobile": "Looks like you’ll need a Mystic Hourglass to open the time portal and summon the Mysterious Time Travelers.",
|
"timeTravelersPopoverNoSubMobile": "Subscribers receive a rare Mystic Hourglass every month to use in the Time Travellers Shop!",
|
||||||
"timeTravelersPopover": "Your Mystic Hourglass has opened our time portal! Choose what you’d like us to fetch from the past or future.",
|
"timeTravelersPopover": "Your Mystic Hourglass has opened our time portal! Choose what you’d like us to fetch from the past or future.",
|
||||||
"mysterySetNotFound": "Mystery set not found, or set already owned.",
|
"mysterySetNotFound": "Mystery set not found, or set already owned.",
|
||||||
"mysteryItemIsEmpty": "Mystery items are empty",
|
"mysteryItemIsEmpty": "Mystery items are empty",
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
"mysterySet301703": "Peacock Steampunk Set",
|
"mysterySet301703": "Peacock Steampunk Set",
|
||||||
"mysterySet301704": "Pheasant Steampunk Set",
|
"mysterySet301704": "Pheasant Steampunk Set",
|
||||||
"mysterySetwondercon": "Wondercon",
|
"mysterySetwondercon": "Wondercon",
|
||||||
"subUpdateCard": "Update Credit Card",
|
"subUpdateCard": "Edit Credit Card",
|
||||||
"subUpdateTitle": "Update",
|
"subUpdateTitle": "Update",
|
||||||
"notEnoughHourglasses": "You don't have enough Mystic Hourglasses.",
|
"notEnoughHourglasses": "You don't have enough Mystic Hourglasses.",
|
||||||
"petsAlreadyOwned": "Pet already owned.",
|
"petsAlreadyOwned": "Pet already owned.",
|
||||||
@@ -120,11 +120,11 @@
|
|||||||
"gemBenefit2": "Backgrounds to immerse your avatar in the world of Habitica!",
|
"gemBenefit2": "Backgrounds to immerse your avatar in the world of Habitica!",
|
||||||
"gemBenefit3": "Exciting Quest chains that drop pet eggs.",
|
"gemBenefit3": "Exciting Quest chains that drop pet eggs.",
|
||||||
"gemBenefit4": "Reset your avatar's Stat Points and change its Class.",
|
"gemBenefit4": "Reset your avatar's Stat Points and change its Class.",
|
||||||
"subscriptionBenefit1": "Alexander the Merchant will now sell you Gems from the Market for 20 Gold each!",
|
"subscriptionBenefit1": "Get up to 50 Gold-purchasable Gems in the Market to buy Quests, Customizations, Pets, and more!",
|
||||||
"subscriptionBenefit3": "Discover even more items in Habitica with a 2x daily drop-cap.",
|
"subscriptionBenefit3": "Find double the Eggs, Hatching Potions, and Food each day to grow your Pet collection!",
|
||||||
"subscriptionBenefit4": "Unique cosmetic item for you to decorate your avatar each month.",
|
"subscriptionBenefit4": "Stay decked out in the latest exclusive gear. Subscribe now to get <%= month %>’s <%= currentMysterySetName %>!",
|
||||||
"subscriptionBenefit5": "Receive the Royal Purple Jackalope pet when you become a new subscriber.",
|
"subscriptionBenefit5": "Get the exclusive Royal Purple Jackalope when you subscribe today!",
|
||||||
"subscriptionBenefit6": "Earn Mystic Hourglasses to purchase items in the Time Traveler’s Shop!",
|
"subscriptionBenefit6": "Never miss an item with 1 Mystic Hourglass a month to use in the Time Travellers Shop!",
|
||||||
"purchaseAll": "Purchase Set",
|
"purchaseAll": "Purchase Set",
|
||||||
"gemsRemaining": "remaining",
|
"gemsRemaining": "remaining",
|
||||||
"notEnoughGemsToBuy": "No more Gems available for purchase this month. More will become available within the first 3 days of each month.",
|
"notEnoughGemsToBuy": "No more Gems available for purchase this month. More will become available within the first 3 days of each month.",
|
||||||
@@ -148,17 +148,17 @@
|
|||||||
"viewSubscriptions": "View Subscriptions",
|
"viewSubscriptions": "View Subscriptions",
|
||||||
"mysterySet202002": "Stylish Sweetheart Set",
|
"mysterySet202002": "Stylish Sweetheart Set",
|
||||||
"cancelSubAlternatives": "If you're having technical problems or Habitica doesn't seem to be working out for you, please consider <a href='mailto:admin@habitica.com'>contacting us</a>. We want to help you get the most from Habitica.",
|
"cancelSubAlternatives": "If you're having technical problems or Habitica doesn't seem to be working out for you, please consider <a href='mailto:admin@habitica.com'>contacting us</a>. We want to help you get the most from Habitica.",
|
||||||
"cancelYourSubscription": "Cancel your subscription?",
|
"cancelYourSubscription": "Need to cancel your subscription?",
|
||||||
"readyToResubscribe": "Are you ready to resubscribe?",
|
"readyToResubscribe": "Are you ready to resubscribe?",
|
||||||
"needToUpdateCard": "Need to update your card?",
|
"needToUpdateCard": "Need to update your card?",
|
||||||
"subMonths": "Sub Months",
|
"subMonths": "Months Subscribed",
|
||||||
"subscriptionStats": "Subscription Stats",
|
"subscriptionStats": "Subscription Stats",
|
||||||
"subscriptionInactiveDate": "Your subscription benefits will become inactive on <br><strong><%= date %></strong>",
|
"subscriptionInactiveDate": "Your subscription benefits will become inactive on <br><strong><%= date %></strong>",
|
||||||
"subscriptionCanceled": "Your subscription is canceled",
|
"subscriptionCanceled": "Your subscription is canceled",
|
||||||
"youAreSubscribed": "You are subscribed to Habitica",
|
"youAreSubscribed": "You are subscribed to Habitica",
|
||||||
"doubleDropCap": "Double the Drops",
|
"doubleDropCap": "Double the Drops",
|
||||||
"monthlyMysteryItems": "Monthly Mystery Items",
|
"monthlyMysteryItems": "Limited Monthly Gear Sets",
|
||||||
"subscribersReceiveBenefits": "Subscribers receive these useful benefits!",
|
"subscribersReceiveBenefits": "Stay motivated with even more rewards when you subscribe",
|
||||||
"giftASubscription": "Gift a Subscription",
|
"giftASubscription": "Gift a Subscription",
|
||||||
"mysterySet202003": "Barbed Battler Set",
|
"mysterySet202003": "Barbed Battler Set",
|
||||||
"mysterySet202004": "Mighty Monarch Set",
|
"mysterySet202004": "Mighty Monarch Set",
|
||||||
@@ -231,5 +231,6 @@
|
|||||||
"mysterySet202305": "Eventide Dragon Set",
|
"mysterySet202305": "Eventide Dragon Set",
|
||||||
"mysterySet202302": "Trickster Tabby Set",
|
"mysterySet202302": "Trickster Tabby Set",
|
||||||
"mysterySet202304": "Tiptop Teapot Set",
|
"mysterySet202304": "Tiptop Teapot Set",
|
||||||
"mysterySet202310": "Ghostlight Wraith Set"
|
"mysterySet202310": "Ghostlight Wraith Set",
|
||||||
|
"monthlyMysticHourglass": "Monthly Mystic Hourglass"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -156,7 +156,7 @@
|
|||||||
"achievementBonelessBossModalText": "¡Tienes todas las mascotas invertebradas en tu colección!",
|
"achievementBonelessBossModalText": "¡Tienes todas las mascotas invertebradas en tu colección!",
|
||||||
"achievementBonelessBossText": "Ha eclosionado todos los colores estándar de mascotas invertebradas: escarabajo, mariposa calamar, nudibranquio, pulpo, caracol y araña!",
|
"achievementBonelessBossText": "Ha eclosionado todos los colores estándar de mascotas invertebradas: escarabajo, mariposa calamar, nudibranquio, pulpo, caracol y araña!",
|
||||||
"achievementBonelessBoss": "Jefe deshuesado",
|
"achievementBonelessBoss": "Jefe deshuesado",
|
||||||
"achievementDuneBuddyText": "Ha eclosionado todos los colores estándar de mascotas de clima desértico: armadillo, cactus, zorro, rana, serpiente y araña.",
|
"achievementDuneBuddyText": "¡Ha eclosionado todos los colores estándar de mascotas de clima desértico: armadillo, cactus, zorro, rana, serpiente y araña!",
|
||||||
"achievementDuneBuddy": "Amigo de médano",
|
"achievementDuneBuddy": "Amigo de médano",
|
||||||
"achievementDuneBuddyModalText": "¡Has conseguido todas las mascotas de desierto!",
|
"achievementDuneBuddyModalText": "¡Has conseguido todas las mascotas de desierto!",
|
||||||
"achievementRoughRiderModalText": "¡Has conseguido todos los colores básicos de las mascotas y monturas incómodas!",
|
"achievementRoughRiderModalText": "¡Has conseguido todos los colores básicos de las mascotas y monturas incómodas!",
|
||||||
|
|||||||
@@ -909,5 +909,8 @@
|
|||||||
"backgroundSummerSeashoreNotes": "Atrapa una ola este Verano en la Costa.",
|
"backgroundSummerSeashoreNotes": "Atrapa una ola este Verano en la Costa.",
|
||||||
"backgrounds072025": "Conjunto 134: Publicado en Julio 2025",
|
"backgrounds072025": "Conjunto 134: Publicado en Julio 2025",
|
||||||
"backgroundSirensLairText": "Guarida de Sirena",
|
"backgroundSirensLairText": "Guarida de Sirena",
|
||||||
"backgroundSirensLairNotes": "Atrévete a sumergirte en la Guarida de Sirena."
|
"backgroundSirensLairNotes": "Atrévete a sumergirte en la Guarida de Sirena.",
|
||||||
|
"backgroundSunnyStreetWithShopsText": "Calle Soleada con Tiendas",
|
||||||
|
"backgrounds082025": "Conjunto 135: Publicado en Agosto 2025",
|
||||||
|
"backgroundSunnyStreetWithShopsNotes": "Embriaga tus sentidos con las imágenes y los sonidos de esta Calle Soleada con Tiendas."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -182,5 +182,7 @@
|
|||||||
"translateHabitica": "Traduce Habitica",
|
"translateHabitica": "Traduce Habitica",
|
||||||
"incorrectResetPhrase": "Por favor, teclea <%= magicWord %> en mayúsculas para reiniciar tu cuenta.",
|
"incorrectResetPhrase": "Por favor, teclea <%= magicWord %> en mayúsculas para reiniciar tu cuenta.",
|
||||||
"marketing3Lead1Title": "Aplicaciones para Android y iOS",
|
"marketing3Lead1Title": "Aplicaciones para Android y iOS",
|
||||||
"marketing4Lead3Button": "Empieza Hoy Mismo"
|
"marketing4Lead3Button": "Empieza Hoy Mismo",
|
||||||
|
"missingClientHeader": "Faltan los encabezados x-client.",
|
||||||
|
"emailBlockedRegistration": "Esta cuenta de E-Mail está bloqueada desde el registro. Si crees que es un error, por favor contacta con nosotros por medio de admin@habitica.com."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3375,5 +3375,13 @@
|
|||||||
"shieldArmoireFlyFishingRodNotes": "Coloca un cebo en esta caña larga y flexible y engañará a los peces que lo confundirán con una auténtica mosca vez tras vez, garantizado. Aumenta la Fuerza y la Inteligencia en <%= attrs %> cada uno. Armario Encantado: Conjunto de Pescador Fluvial (Artículo 3 de 3)",
|
"shieldArmoireFlyFishingRodNotes": "Coloca un cebo en esta caña larga y flexible y engañará a los peces que lo confundirán con una auténtica mosca vez tras vez, garantizado. Aumenta la Fuerza y la Inteligencia en <%= attrs %> cada uno. Armario Encantado: Conjunto de Pescador Fluvial (Artículo 3 de 3)",
|
||||||
"shieldArmoireFlyFishingRodText": "Caña de Pescador Fluvial",
|
"shieldArmoireFlyFishingRodText": "Caña de Pescador Fluvial",
|
||||||
"backMystery202507Text": "Tabla del Audaz",
|
"backMystery202507Text": "Tabla del Audaz",
|
||||||
"backMystery202507Notes": "Tu montura para las aceras y los medio-tubos. No otorga ningún beneficio. Artículo de Suscriptor Julio 2025."
|
"backMystery202507Notes": "Tu montura para las aceras y los medio-tubos. No otorga ningún beneficio. Artículo de Suscriptor Julio 2025.",
|
||||||
|
"weaponMystery202508Text": "Cuchilla Brillante Carmesí",
|
||||||
|
"weaponMystery202508Notes": "¡Esta cuchilla giratoria será el terror de cualquier monstruo o cualquier Tarea Diaria en rojo que se cruce en tu camino, huirán despavoridos! No otorga ningún beneficio. Artículo de Suscriptor Agosto 2025.",
|
||||||
|
"headArmoireRedNewsieHatText": "Gorra Roja de Vendedor de Periódicos",
|
||||||
|
"headArmoireRedNewsieHatNotes": "¡Extra! ¡Extra! Leed las jugosas últimas noticias: esta gorra es cómoda, práctica y está a la moda. Aumenta la Percepción y la Inteligencia en <%= attrs %> cada uno. Armario Encantado: Conjunto Chaleco Rojo (Artículo 1 de 2)",
|
||||||
|
"shieldMystery202508Text": "Cuchilla Brillante Cian",
|
||||||
|
"shieldMystery202508Notes": "Si una cuchilla giratoria ya te había volado el cerebro ¡Imagínate dos! Un auténtico disparate no apto para todas las mentes. No otorga ningún beneficio. Artículo de Suscriptor Agosto 2025.",
|
||||||
|
"armorArmoireRedWaistcoatText": "Chaleco Rojo",
|
||||||
|
"armorArmoireRedWaistcoatNotes": "Viste elegante y con clase mientras cumples con tus tareas. Hay algo secreto escondido en el bolsillo interior, pero, quién no tiene uno o dos cadáveres escondidos en el armario—¿qué crees que será, precioso mío? Aumenta la Constitución y la Fuerza en <%= attrs %>. Armario Encantado: Conjunto Chaleco Rojo (Artículo 2 de 2)"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -265,5 +265,6 @@
|
|||||||
"mysterySet202504": "Conjunto de Yeti Esquivo",
|
"mysterySet202504": "Conjunto de Yeti Esquivo",
|
||||||
"mysterySet202505": "Conjunto Mariposa Macaón Masiva",
|
"mysterySet202505": "Conjunto Mariposa Macaón Masiva",
|
||||||
"mysterySet202506": "Conjunto Brillo Solar",
|
"mysterySet202506": "Conjunto Brillo Solar",
|
||||||
"mysterySet202507": "Conjunto de Patinador Audaz"
|
"mysterySet202507": "Conjunto de Patinador Audaz",
|
||||||
|
"mysterySet202508": "Conjunto Cuchilla Brillante"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -909,5 +909,8 @@
|
|||||||
"backgroundSummerSeashoreNotes": "Faites des vagues sur ce Bord de Mer Estival.",
|
"backgroundSummerSeashoreNotes": "Faites des vagues sur ce Bord de Mer Estival.",
|
||||||
"backgrounds072025": "Ensemble 133 : Sortie Juillet 2025",
|
"backgrounds072025": "Ensemble 133 : Sortie Juillet 2025",
|
||||||
"backgroundSirensLairText": "Antre des Sirènes",
|
"backgroundSirensLairText": "Antre des Sirènes",
|
||||||
"backgroundSirensLairNotes": "Osez nager au cœur de l'Antre des Sirènes."
|
"backgroundSirensLairNotes": "Osez nager au cœur de l'Antre des Sirènes.",
|
||||||
|
"backgrounds082025": "Ensemble 135 : Sortie Août 2025",
|
||||||
|
"backgroundSunnyStreetWithShopsText": "Allée Marchande Ensoleillée",
|
||||||
|
"backgroundSunnyStreetWithShopsNotes": "Profitez de l'ambiance lumineuse et sonore d'une Allée Marchande Ensoleillée."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -182,5 +182,6 @@
|
|||||||
"translateHabitica": "Traduire Habitica",
|
"translateHabitica": "Traduire Habitica",
|
||||||
"incorrectResetPhrase": "Merci de taper <%= magicWord %> en lettres capitales pour réinitialiser votre compte.",
|
"incorrectResetPhrase": "Merci de taper <%= magicWord %> en lettres capitales pour réinitialiser votre compte.",
|
||||||
"marketing3Lead1Title": "Applications Android et iOS",
|
"marketing3Lead1Title": "Applications Android et iOS",
|
||||||
"marketing4Lead3Button": "Commencez dès Aujourd'hui"
|
"marketing4Lead3Button": "Commencez dès Aujourd'hui",
|
||||||
|
"missingClientHeader": "En-têtes x-client manquants."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3375,5 +3375,13 @@
|
|||||||
"headArmoireFlyFishingHatText": "Chapeau de Pêche à la Mouche",
|
"headArmoireFlyFishingHatText": "Chapeau de Pêche à la Mouche",
|
||||||
"shieldArmoireFlyFishingRodText": "Canne à Mouche",
|
"shieldArmoireFlyFishingRodText": "Canne à Mouche",
|
||||||
"backMystery202507Text": "Planche de Skate Stylée",
|
"backMystery202507Text": "Planche de Skate Stylée",
|
||||||
"backMystery202507Notes": "Votre fidèle destrier pour affronter le bitume et les rampes. Ne confère aucun bonus. Équipement d'Abonnement Juillet 2025."
|
"backMystery202507Notes": "Votre fidèle destrier pour affronter le bitume et les rampes. Ne confère aucun bonus. Équipement d'Abonnement Juillet 2025.",
|
||||||
|
"weaponMystery202508Notes": "Cette lame tournoyante terrifiera tou·te·s monstres et Quotidiennes rouges que vous croiserez sur votre chemin ! Ne confère aucun bonus. Équipement d'Abonnement Août 2025.",
|
||||||
|
"weaponMystery202508Text": "Lame Lumineuse Pourpe",
|
||||||
|
"armorArmoireRedWaistcoatText": "Gilet Rouge",
|
||||||
|
"armorArmoireRedWaistcoatNotes": "Profitez d'un look classe et flamboyant en effectuant vos tâches. Il y a quelque chose de caché dans la poche intérieur, qu'est-ce que ça pourrait être ? Augmente la Constitution et la Force de <%= attrs %> chacune. Armoire Enchantée : Ensemble Gilet Rouge (Objet 2 sur 2)",
|
||||||
|
"headArmoireRedNewsieHatText": "Casquette Rouge d·u·e la Crieu·r·se Publi·c·que",
|
||||||
|
"headArmoireRedNewsieHatNotes": "Extra ! Extra ! Toutes les dernières infos : cette casquette est confortable, à la mode, et pratique. Augmente la Perception et l'Intelligence de <%= attrs %> chacune. Armoire Enchantée : Ensemble Gilet Rouge (Objet 1 sur 2)",
|
||||||
|
"shieldMystery202508Text": "Lame Lumineuse Cyan",
|
||||||
|
"shieldMystery202508Notes": "Si vous pensiez que c'était classe de faire tournoyer une lame, essayez avec deux ! Ne confère aucun bonus. Équipement d'Abonnement Août 2025."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -265,5 +265,6 @@
|
|||||||
"mysterySet202504": "Ensemble Yéti Insaisissable",
|
"mysterySet202504": "Ensemble Yéti Insaisissable",
|
||||||
"mysterySet202505": "Ensemble Machaon Majestueux",
|
"mysterySet202505": "Ensemble Machaon Majestueux",
|
||||||
"mysterySet202506": "Ensemble Rayonnement Solaire",
|
"mysterySet202506": "Ensemble Rayonnement Solaire",
|
||||||
"mysterySet202507": "Ensemble Skateu·r·se Stylé·e"
|
"mysterySet202507": "Ensemble Skateu·r·se Stylé·e",
|
||||||
|
"mysterySet202508": "Ensemble Lame Lumineuse"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
"iosFaqStillNeedHelp": "אם יש לך שאלה שאינה מופיעה ברשימה או ב[וויקי שאלות נפוצות](https://habitica.fandom.com/wiki/FAQ), אנחנו מזמינים אותך לשאול בשיחת הפונדק תחת תפריט > פונדק! נשמח לעזור.",
|
"iosFaqStillNeedHelp": "אם יש לך שאלה שאינה מופיעה ברשימה או ב[וויקי שאלות נפוצות](https://habitica.fandom.com/wiki/FAQ), אנחנו מזמינים אותך לשאול בשיחת הפונדק תחת תפריט > פונדק! נשמח לעזור.",
|
||||||
"androidFaqStillNeedHelp": "אם יש לך שאלה שאינה מופיעה ברשימה או ב[וויקי שאלות נפוצות](https://habitica.fandom.com/wiki/FAQ), אנחנו מזמינים אותך לשאול בשיחת הפונדק תחת תפריט > פונדק! נשמח לעזור.",
|
"androidFaqStillNeedHelp": "אם יש לך שאלה שאינה מופיעה ברשימה או ב[וויקי שאלות נפוצות](https://habitica.fandom.com/wiki/FAQ), אנחנו מזמינים אותך לשאול בשיחת הפונדק תחת תפריט > פונדק! נשמח לעזור.",
|
||||||
"webFaqStillNeedHelp": "",
|
"webFaqStillNeedHelp": "",
|
||||||
"webFaqAnswer25": "בHabitica יש שלוש סוגי משימות על מנת לענות על כל הצרכים שלך: הרגלים, משימות חוזרות, ומשימה",
|
"webFaqAnswer25": "הביטיקה משתמשת בשלושה סוגי משימות שונים כדי להתאים לצרכים שלך: הרגלים, משימות יומיות ומשימות.\n\nהרגלים יכולים להיות חיוביים או שליליים ולייצג משהו שרוצים לעקוב אחריו מספר פעמים ביום, או בלוח זמנים לא מוגדר. הרגלים חיוביים יספקו לך תגמולים, כמו מטבעות זהב ונקודות ניסיון (Exp), בעוד שהרגלים שליליים יגרמו לך לאבד נקודות בריאות (HP).\n\nמשימות יומיות הן משימות חוזרות שרוצים להשלים בלוח זמנים מובנה יותר. לדוגמה, פעם ביום, שלוש פעמים בשבוע או ארבע פעמים בחודש. החמצת משימות יומיות גורמת לך לאבד נקודות חיים, אך ככל שהן קשות יותר, כך התגמולים טובים יותר!\n\nמטלות הן משימות חד פעמיות המספקות תגמולים לאחר שמשלימים אותן. למשימות יכול להיות תאריך יעד, אך לא ירדו נקודות חיים אם מפספסים אותו.\n\nיש לבחור את סוג המשימה המתאים ביותר למה שרוצים להשיג!",
|
||||||
"commonQuestions": "שאלות נפוצות",
|
"commonQuestions": "שאלות נפוצות",
|
||||||
"faqQuestion25": "מהן סוגי המשימות השונות?"
|
"faqQuestion25": "מהן סוגי המשימות השונות?",
|
||||||
|
"parties": "חבורות"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -398,10 +398,10 @@
|
|||||||
"questFerretBoss": "Nefarious Ferret",
|
"questFerretBoss": "Nefarious Ferret",
|
||||||
"questFerretDropFerretEgg": "Ferret (Egg)",
|
"questFerretDropFerretEgg": "Ferret (Egg)",
|
||||||
"questFerretUnlockText": "Unlocks purchasable Ferret eggs in the Market",
|
"questFerretUnlockText": "Unlocks purchasable Ferret eggs in the Market",
|
||||||
"questDustBunniesText": "The Feral Dust Bunnies",
|
"questDustBunniesText": "ארנבוני האבק המפלצתיים",
|
||||||
"questDustBunniesNotes": "It's been a while since you've done any dusting in here, but you're not too worried—a little dust never hurt anyone, right? It's not until you stick your hand into one of the dustiest corners and feel something bite that you remember @InspectorCaracal's warning: leaving harmless dust sit too long causes it to turn into vicious dust bunnies! You'd better defeat them before they cover all of Habitica in fine particles of dirt!",
|
"questDustBunniesNotes": "It's been a while since you've done any dusting in here, but you're not too worried—a little dust never hurt anyone, right? It's not until you stick your hand into one of the dustiest corners and feel something bite that you remember @InspectorCaracal's warning: leaving harmless dust sit too long causes it to turn into vicious dust bunnies! You'd better defeat them before they cover all of Habitica in fine particles of dirt!",
|
||||||
"questDustBunniesCompletion": "The dust bunnies vanish into a puff of... well, dust. As it clears, you look around. You'd forgotten how nice this place looks when it's clean. You spy a small pile of gold where the dust used to be. Huh, you'd been wondering where that was!",
|
"questDustBunniesCompletion": "The dust bunnies vanish into a puff of... well, dust. As it clears, you look around. You'd forgotten how nice this place looks when it's clean. You spy a small pile of gold where the dust used to be. Huh, you'd been wondering where that was!",
|
||||||
"questDustBunniesBoss": "Feral Dust Bunnies",
|
"questDustBunniesBoss": "ארנבוני האבק המפלצתיים",
|
||||||
"questGroupMoon": "Lunar Battle",
|
"questGroupMoon": "Lunar Battle",
|
||||||
"questMoon1Text": "Lunar Battle, Part 1: Find the Mysterious Shards",
|
"questMoon1Text": "Lunar Battle, Part 1: Find the Mysterious Shards",
|
||||||
"questMoon1Notes": "Habiticans have been distracted from their tasks by something strange: twisted shards of stone are appearing across the land. Worried, @Starsystemic the Seer summons you to her tower. She says, \"I've been reading alarming omens about these shards, which have been blighting the land and driving hardworking Habiticans to distraction. I can track the source, but first I'll need to examine the shards. Can you bring some to me?\"",
|
"questMoon1Notes": "Habiticans have been distracted from their tasks by something strange: twisted shards of stone are appearing across the land. Worried, @Starsystemic the Seer summons you to her tower. She says, \"I've been reading alarming omens about these shards, which have been blighting the land and driving hardworking Habiticans to distraction. I can track the source, but first I'll need to examine the shards. Can you bring some to me?\"",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"lostAllHealth": "Ostao/la si bez Zdravlja!",
|
"lostAllHealth": "Ostao/la si bez Zdravlja!",
|
||||||
"dontDespair": "Ne očajavaj!",
|
"dontDespair": "Ne očajavaj!",
|
||||||
"deathPenaltyDetails": "Izgubio/la si Level, Zlatnike i komad Opreme, ali možeš ih vratiti marljivim radom! Sretno--sjajno će te ići!",
|
"deathPenaltyDetails": "Izgubio/la si Level, Zlatnike i komad Opreme, ali možeš ih vratiti marljivim radom! Sretno--sjajno će te ići.",
|
||||||
"refillHealthTryAgain": "Obnovi Zdravlje i pokušaj ponovno",
|
"refillHealthTryAgain": "Obnovi Zdravlje i pokušaj ponovno",
|
||||||
"dyingOftenTips": "Događa li ti se ovo često? <a href='https://habitica.wikia.com/wiki/Death_Mechanics#Strategies_for_Staying_Alive' target='_blank'>Evo nekoliko savjeta!</a>",
|
"dyingOftenTips": "Događa li ti se ovo često? <a href='https://habitica.wikia.com/wiki/Death_Mechanics#Strategies_for_Staying_Alive' target='_blank'>Evo nekoliko savjeta!</a>",
|
||||||
"losingHealthWarning": "Pripazi- gubiš Zdravlje!",
|
"losingHealthWarning": "Pripazi- gubiš Zdravlje!",
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
"backgroundHauntedHouseNotes": "幽霊屋敷をそっと通りぬけましょう。",
|
"backgroundHauntedHouseNotes": "幽霊屋敷をそっと通りぬけましょう。",
|
||||||
"backgroundPumpkinPatchText": "カボチャ畑",
|
"backgroundPumpkinPatchText": "カボチャ畑",
|
||||||
"backgroundPumpkinPatchNotes": "カボチャ畑でジャック・オ・ランタンを作りましょう。",
|
"backgroundPumpkinPatchNotes": "カボチャ畑でジャック・オ・ランタンを作りましょう。",
|
||||||
"backgrounds112014": "セット6: 2014年11月リリース",
|
"backgrounds112014": "セット6:2014年11月リリース",
|
||||||
"backgroundHarvestFeastText": "収穫祭",
|
"backgroundHarvestFeastText": "収穫祭",
|
||||||
"backgroundHarvestFeastNotes": "収穫祭を楽しみましょう。",
|
"backgroundHarvestFeastNotes": "収穫祭を楽しみましょう。",
|
||||||
"backgroundStarrySkiesText": "星空",
|
"backgroundStarrySkiesText": "星空",
|
||||||
@@ -131,7 +131,7 @@
|
|||||||
"backgroundSunsetOasisNotes": "夕焼けの沃地で休もう。",
|
"backgroundSunsetOasisNotes": "夕焼けの沃地で休もう。",
|
||||||
"backgrounds122015": "セット19:2015年12月リリース",
|
"backgrounds122015": "セット19:2015年12月リリース",
|
||||||
"backgroundAlpineSlopesText": "雪の山",
|
"backgroundAlpineSlopesText": "雪の山",
|
||||||
"backgroundAlpineSlopesNotes": "雪の山にスキーする。",
|
"backgroundAlpineSlopesNotes": "雪の山でスキーをしよう。",
|
||||||
"backgroundSnowySunriseText": "雪の日出",
|
"backgroundSnowySunriseText": "雪の日出",
|
||||||
"backgroundSnowySunriseNotes": "雪の日の出を見よう。",
|
"backgroundSnowySunriseNotes": "雪の日の出を見よう。",
|
||||||
"backgroundWinterTownText": "都市の冬",
|
"backgroundWinterTownText": "都市の冬",
|
||||||
@@ -206,7 +206,7 @@
|
|||||||
"backgroundStrangeSewersNotes": "奇妙な下水道で滑りましょう。",
|
"backgroundStrangeSewersNotes": "奇妙な下水道で滑りましょう。",
|
||||||
"backgroundRainyCityText": "雨の街",
|
"backgroundRainyCityText": "雨の街",
|
||||||
"backgroundRainyCityNotes": "雨の街をピチャピチャ歩きましょう。",
|
"backgroundRainyCityNotes": "雨の街をピチャピチャ歩きましょう。",
|
||||||
"backgrounds112016": "セット30: 2016年11月リリース",
|
"backgrounds112016": "セット30:2016年11月リリース",
|
||||||
"backgroundMidnightCloudsText": "闇夜の雲海",
|
"backgroundMidnightCloudsText": "闇夜の雲海",
|
||||||
"backgroundMidnightCloudsNotes": "闇夜の雲海を飛びまわろう。",
|
"backgroundMidnightCloudsNotes": "闇夜の雲海を飛びまわろう。",
|
||||||
"backgroundStormyRooftopsText": "嵐の屋上",
|
"backgroundStormyRooftopsText": "嵐の屋上",
|
||||||
@@ -252,8 +252,8 @@
|
|||||||
"backgroundMagicBeanstalkNotes": "魔法の豆の木を登ろう。",
|
"backgroundMagicBeanstalkNotes": "魔法の豆の木を登ろう。",
|
||||||
"backgroundMeanderingCaveText": "曲がりくねった洞窟",
|
"backgroundMeanderingCaveText": "曲がりくねった洞窟",
|
||||||
"backgroundMeanderingCaveNotes": "曲がりくねった洞窟を探検しよう。",
|
"backgroundMeanderingCaveNotes": "曲がりくねった洞窟を探検しよう。",
|
||||||
"backgroundMistiflyingCircusText": "幻想的なサーカス",
|
"backgroundMistiflyingCircusText": "マドワシティーのサーカス",
|
||||||
"backgroundMistiflyingCircusNotes": "幻想的なサーカスで酔い騒ごう。",
|
"backgroundMistiflyingCircusNotes": "マドワシティーのサーカスで酔い騒ごう。",
|
||||||
"backgrounds042017": "セット35: 2017年4月リリース",
|
"backgrounds042017": "セット35: 2017年4月リリース",
|
||||||
"backgroundBugCoveredLogText": "虫だらけの丸太",
|
"backgroundBugCoveredLogText": "虫だらけの丸太",
|
||||||
"backgroundBugCoveredLogNotes": "虫だらけの丸太を調査しよう。",
|
"backgroundBugCoveredLogNotes": "虫だらけの丸太を調査しよう。",
|
||||||
@@ -264,9 +264,9 @@
|
|||||||
"backgrounds052017": "セット36:2017年5月リリース",
|
"backgrounds052017": "セット36:2017年5月リリース",
|
||||||
"backgroundGuardianStatuesText": "ガーディアンの像",
|
"backgroundGuardianStatuesText": "ガーディアンの像",
|
||||||
"backgroundGuardianStatuesNotes": "ガーディアンの像の前で寝ずの番をしよう。",
|
"backgroundGuardianStatuesNotes": "ガーディアンの像の前で寝ずの番をしよう。",
|
||||||
"backgroundHabitCityStreetsText": "Habit シティーの街並み",
|
"backgroundHabitCityStreetsText": "ハビットシティの街並み",
|
||||||
"backgroundHabitCityStreetsNotes": "Habit シティーの街並みを探検しましょう。",
|
"backgroundHabitCityStreetsNotes": "ハビットシティの街並みを探検しましょう。",
|
||||||
"backgroundOnATreeBranchText": "木の枝で",
|
"backgroundOnATreeBranchText": "木の枝の上",
|
||||||
"backgroundOnATreeBranchNotes": "木の枝の上にとまろう。",
|
"backgroundOnATreeBranchNotes": "木の枝の上にとまろう。",
|
||||||
"backgrounds062017": "セット37:2017年6月リリース",
|
"backgrounds062017": "セット37:2017年6月リリース",
|
||||||
"backgroundBuriedTreasureText": "埋もれた宝",
|
"backgroundBuriedTreasureText": "埋もれた宝",
|
||||||
@@ -357,7 +357,7 @@
|
|||||||
"backgroundDocksNotes": "造船ドックの上で魚釣りをしましょう。",
|
"backgroundDocksNotes": "造船ドックの上で魚釣りをしましょう。",
|
||||||
"backgroundRowboatText": "小舟",
|
"backgroundRowboatText": "小舟",
|
||||||
"backgroundRowboatNotes": "小舟の上で輪唱しましょう。",
|
"backgroundRowboatNotes": "小舟の上で輪唱しましょう。",
|
||||||
"backgroundPirateFlagText": "海賊のフラッグ",
|
"backgroundPirateFlagText": "海賊の旗",
|
||||||
"backgroundPirateFlagNotes": "見る者に恐怖を与える海賊旗を掲げましょう。",
|
"backgroundPirateFlagNotes": "見る者に恐怖を与える海賊旗を掲げましょう。",
|
||||||
"backgrounds072018": "セット50:2018年7月リリース",
|
"backgrounds072018": "セット50:2018年7月リリース",
|
||||||
"backgroundDarkDeepText": "暗い深海",
|
"backgroundDarkDeepText": "暗い深海",
|
||||||
@@ -451,7 +451,7 @@
|
|||||||
"backgroundUnderwaterVentsText": "海底の熱水噴出孔",
|
"backgroundUnderwaterVentsText": "海底の熱水噴出孔",
|
||||||
"backgroundSeasideCliffsNotes": "そびえる断崖の美観とともに海辺に立ちましょう。",
|
"backgroundSeasideCliffsNotes": "そびえる断崖の美観とともに海辺に立ちましょう。",
|
||||||
"backgroundTreehouseText": "ツリーハウス",
|
"backgroundTreehouseText": "ツリーハウス",
|
||||||
"backgroundTreehouseNotes": "あなた達だけの樹木のアジト、あなた達専用のツリーハウスに集まって遊びましょう。",
|
"backgroundTreehouseNotes": "林の中に隠れた、自分専用のツリーハウスで遊びましょう。",
|
||||||
"backgroundGiantDandelionsNotes": "巨大なタンポポに囲まれてのんびり時を過ごしましょう。",
|
"backgroundGiantDandelionsNotes": "巨大なタンポポに囲まれてのんびり時を過ごしましょう。",
|
||||||
"backgroundGiantDandelionsText": "巨大なタンポポ",
|
"backgroundGiantDandelionsText": "巨大なタンポポ",
|
||||||
"backgroundAmidAncientRuinsText": "古代遺跡の真ん中",
|
"backgroundAmidAncientRuinsText": "古代遺跡の真ん中",
|
||||||
@@ -516,8 +516,8 @@
|
|||||||
"backgroundRainyBarnyardText": "雨降る納屋の前庭",
|
"backgroundRainyBarnyardText": "雨降る納屋の前庭",
|
||||||
"backgroundHabitCityRooftopsNotes": "ハビットシティーの屋根と屋根の間を大胆に跳ぼう。",
|
"backgroundHabitCityRooftopsNotes": "ハビットシティーの屋根と屋根の間を大胆に跳ぼう。",
|
||||||
"backgroundHabitCityRooftopsText": "ハビットシティーの屋上",
|
"backgroundHabitCityRooftopsText": "ハビットシティーの屋上",
|
||||||
"backgroundHotAirBalloonNotes": "熱気球で景色の上まで舞い上がろう。",
|
"backgroundHotAirBalloonNotes": "気球に乗って空から景色を眺めよう。",
|
||||||
"backgroundHotAirBalloonText": "熱気球",
|
"backgroundHotAirBalloonText": "気球",
|
||||||
"backgrounds062020": "セット73:2020年6月リリース",
|
"backgrounds062020": "セット73:2020年6月リリース",
|
||||||
"backgroundStrawberryPatchNotes": "いちご畑から新鮮な喜びを摘もう。",
|
"backgroundStrawberryPatchNotes": "いちご畑から新鮮な喜びを摘もう。",
|
||||||
"backgroundStrawberryPatchText": "いちご畑",
|
"backgroundStrawberryPatchText": "いちご畑",
|
||||||
@@ -874,7 +874,7 @@
|
|||||||
"backgrounds082024": "セット123: 2024年8月リリース",
|
"backgrounds082024": "セット123: 2024年8月リリース",
|
||||||
"monthlyBackgrounds": "月替わりの背景",
|
"monthlyBackgrounds": "月替わりの背景",
|
||||||
"backgrounds092024": "セット124: 2024年9月リリース",
|
"backgrounds092024": "セット124: 2024年9月リリース",
|
||||||
"backgroundMagicDoorInForestText": "森の中の魔法のゲート",
|
"backgroundMagicDoorInForestText": "森の中の魔法の門",
|
||||||
"backgroundMagicDoorInForestNotes": "思い切って森の魔法のゲートに足を踏み入れましょう。",
|
"backgroundMagicDoorInForestNotes": "思い切って森の魔法のゲートに足を踏み入れましょう。",
|
||||||
"backgrounds102024": "セット125: 2024年10月リリース",
|
"backgrounds102024": "セット125: 2024年10月リリース",
|
||||||
"backgroundSurroundedByGhostsText": "おばけに囲まれる",
|
"backgroundSurroundedByGhostsText": "おばけに囲まれる",
|
||||||
@@ -884,7 +884,7 @@
|
|||||||
"backgroundOldFashionedTeaShopNotes": "レトロな喫茶店で、心地よい飲み物を楽しみましょう。",
|
"backgroundOldFashionedTeaShopNotes": "レトロな喫茶店で、心地よい飲み物を楽しみましょう。",
|
||||||
"backgroundShellGateText": "貝殻門",
|
"backgroundShellGateText": "貝殻門",
|
||||||
"backgroundSavannaText": "もやのかかった草原",
|
"backgroundSavannaText": "もやのかかった草原",
|
||||||
"backgroundShellGateNotes": "サンゴで装飾された貝殻の門を行進しましょう。",
|
"backgroundShellGateNotes": "サンゴで装飾された貝殻門の間を行進しましょう。",
|
||||||
"backgroundSavannaNotes": "もやのかかった草原をハイキングしましょう。",
|
"backgroundSavannaNotes": "もやのかかった草原をハイキングしましょう。",
|
||||||
"backgrounds122024": "セット127: 2024年12月リリース",
|
"backgrounds122024": "セット127: 2024年12月リリース",
|
||||||
"backgroundFirstSnowForestText": "森の初雪",
|
"backgroundFirstSnowForestText": "森の初雪",
|
||||||
@@ -904,10 +904,13 @@
|
|||||||
"backgrounds062025": "セット133:2025年6月リリース",
|
"backgrounds062025": "セット133:2025年6月リリース",
|
||||||
"backgroundSummerSeashoreText": "夏の海岸",
|
"backgroundSummerSeashoreText": "夏の海岸",
|
||||||
"backgroundSummerSeashoreNotes": "夏の海岸で波に乗ろう。",
|
"backgroundSummerSeashoreNotes": "夏の海岸で波に乗ろう。",
|
||||||
"backgrounds052025": "セット132:2025年5月リリース",
|
"backgrounds052025": "セット132:2025年5月リリース",
|
||||||
"backgroundTrailThroughAForestText": "森の散歩道",
|
"backgroundTrailThroughAForestText": "森の散歩道",
|
||||||
"backgroundTrailThroughAForestNotes": "森の散歩道を歩こう。",
|
"backgroundTrailThroughAForestNotes": "森の散歩道を歩こう。",
|
||||||
"backgrounds072025": "134セット:2025年7月リリース",
|
"backgrounds072025": "セット134:2025年7月リリース",
|
||||||
"backgroundSirensLairText": "セイレーンの隠れ家",
|
"backgroundSirensLairText": "セイレーンの隠れ家",
|
||||||
"backgroundSirensLairNotes": "セイレーンの隠れ家に飛び込む勇気を持とう。"
|
"backgroundSirensLairNotes": "セイレーンの隠れ家に飛び込む勇気を持とう。",
|
||||||
|
"backgroundSunnyStreetWithShopsText": "晴れの日の商店街",
|
||||||
|
"backgrounds082025": "セット135:2025年8月リリース",
|
||||||
|
"backgroundSunnyStreetWithShopsNotes": "晴れの日の商店街の雰囲気を楽しもう。"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
"challenge": "チャレンジ",
|
"challenge": "チャレンジ",
|
||||||
"challengeDetails": "チャレンジはプレイヤー同士で競争し、一連の関連したタスクを完了させることによって賞品を獲得するコミュニティのイベントです。",
|
"challengeDetails": "チャレンジはプレイヤー同士で競争し、一連の関連したタスクを完了させることによって賞品を獲得するコミュニティのイベントです。",
|
||||||
"brokenChaLink": "チャレンジのリンク切れ",
|
"brokenChaLink": "チャレンジのリンク切れ",
|
||||||
"brokenTask": "チャレンジのリンク切れ: このタスクはもともとチャレンジの一部でしたが、チャレンジから削除されました。どうしますか?",
|
"brokenTask": "チャレンジのリンク切れ:このタスクはもともとチャレンジの一部でしたが、チャレンジから削除されました。どうしますか?",
|
||||||
"keepIt": "このまま残す",
|
"keepIt": "このまま残す",
|
||||||
"removeIt": "消す",
|
"removeIt": "消す",
|
||||||
"brokenChallenge": "チャレンジのリンク切れ:このタスクはもともとチャレンジの一部でしたが、チャレンジ(もしくはグループ)が削除されました。残されたタスクはどうしますか?",
|
"brokenChallenge": "チャレンジのリンク切れ:このタスクはもともとチャレンジの一部でしたが、チャレンジ(もしくはグループ)が削除されました。残されたタスクはどうしますか?",
|
||||||
"challengeCompleted": "チャレンジ終了です! <span class=\"badge\"><%- user %></span>が優勝しました! 残ったタスクはどうしますか?",
|
"challengeCompleted": "チャレンジ終了です!<span class=\"badge\"><%- user %></span>が優勝しました!残ったタスクはどうしますか?",
|
||||||
"unsubChallenge": "チャレンジのリンク切れ:このタスクはもともとチャレンジの一部でしたが、あなたがチャレンジ登録を取り消しました。残されたタスクはどうしますか?",
|
"unsubChallenge": "チャレンジのリンク切れ:このタスクはもともとチャレンジの一部でしたが、あなたがチャレンジ登録を取り消しました。残されたタスクはどうしますか?",
|
||||||
"challenges": "チャレンジ",
|
"challenges": "チャレンジ",
|
||||||
"endDate": "終了日",
|
"endDate": "終了日",
|
||||||
|
|||||||
@@ -129,7 +129,7 @@
|
|||||||
"healerText": "治療師は痛みに耐え、他者を守ります。やらなかった日課や悪い習慣にも治療師は動揺せず、失敗から体力を回復させる能力を持っています。パーティーの他のメンバーを助けることに喜びを感じる、困難な仕事による死をも恐れぬ理想があるのなら、治療師でプレイしましょう!",
|
"healerText": "治療師は痛みに耐え、他者を守ります。やらなかった日課や悪い習慣にも治療師は動揺せず、失敗から体力を回復させる能力を持っています。パーティーの他のメンバーを助けることに喜びを感じる、困難な仕事による死をも恐れぬ理想があるのなら、治療師でプレイしましょう!",
|
||||||
"optOutOfClasses": "やめる",
|
"optOutOfClasses": "やめる",
|
||||||
"chooseClass": "クラスを選んでください",
|
"chooseClass": "クラスを選んでください",
|
||||||
"chooseClassLearnMarkdown": "[Habiticaのクラス・システムについて詳しく調べる](https://habitica.fandom.com/ja/wiki/クラス・システム)",
|
"chooseClassLearnMarkdown": "[Habiticaのクラス・システムについて詳しく調べる](/static/faq/#what-classes)",
|
||||||
"optOutOfClassesText": "まだ選ぶ準備ができていない? 焦らなくても大丈夫です! もし選択しない場合、後で設定からクラスを有効にする事ができます。各クラスについては<a href='/static/faq#what-classes' target='_blank'>よくある質問</a>で読むことができます。",
|
"optOutOfClassesText": "まだ選ぶ準備ができていない? 焦らなくても大丈夫です! もし選択しない場合、後で設定からクラスを有効にする事ができます。各クラスについては<a href='/static/faq#what-classes' target='_blank'>よくある質問</a>で読むことができます。",
|
||||||
"selectClass": "<%= heroClass %>を選択",
|
"selectClass": "<%= heroClass %>を選択",
|
||||||
"select": "選択",
|
"select": "選択",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"playerTiersDesc": "チャットで見られる色のついたユーザー名は、その人の貢献者段位を表わしています。段位が高いほど、その人がHabiticaのピクセルアート、コード、コミュニティなどに貢献していることを示します!",
|
"playerTiersDesc": "チャットで見られる色のついたユーザー名は、その人の貢献者段位を表しています。段位が高いほど、その人がHabiticaのピクセルアート、コード、コミュニティなどに貢献していることを示します!",
|
||||||
"tier1": "初段 (友人)",
|
"tier1": "初段 (友人)",
|
||||||
"tier2": "2段 (友人)",
|
"tier2": "2段 (友人)",
|
||||||
"tier3": "3段 (エリート)",
|
"tier3": "3段 (エリート)",
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
"tierModerator": "モデレーター",
|
"tierModerator": "モデレーター",
|
||||||
"tierStaff": "スタッフ",
|
"tierStaff": "スタッフ",
|
||||||
"tierNPC": "NPC",
|
"tierNPC": "NPC",
|
||||||
"friend": "友達",
|
"friend": "友人",
|
||||||
"elite": "エリート",
|
"elite": "エリート",
|
||||||
"champion": "チャンピオン",
|
"champion": "チャンピオン",
|
||||||
"legendary": "伝説",
|
"legendary": "伝説",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"lostAllHealth": "体力がなくなった!",
|
"lostAllHealth": "体力がなくなった!",
|
||||||
"dontDespair": "がっかりしないで!",
|
"dontDespair": "がっかりしないで!",
|
||||||
"deathPenaltyDetails": "レベル、ゴールド、装備の一部を失ってしまいました。しかし、がんばればすべてを取り戻せます! あなたなら、きっとやれる――幸あらんことを。",
|
"deathPenaltyDetails": "レベル、ゴールド、装備の一部を失ってしまいました。しかし、努力すればすべて取り戻せます! あなたなら、きっとできる!頑張って!",
|
||||||
"refillHealthTryAgain": "体力を復活させて、もう一度やってみよう",
|
"refillHealthTryAgain": "体力を復活させて、もう一度やってみよう",
|
||||||
"dyingOftenTips": "よく体力がなくなってしまいますか? <a href='https://habitica.fandom.com/ja/wiki/死のしくみ#生き残るための戦略' target='_blank'>ここにヒントがあります! </a>",
|
"dyingOftenTips": "よく体力がなくなってしまいますか? <a href='https://habitica.fandom.com/ja/wiki/死のしくみ#生き残るための戦略' target='_blank'>ここにヒントがあります! </a>",
|
||||||
"losingHealthWarning": "気をつけて - 体力が減っています!",
|
"losingHealthWarning": "気をつけて - 体力が減っています!",
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"defaultHabit1Text": "生産的な仕事 (鉛筆をクリックして編集)",
|
"defaultHabit1Text": "生産的な仕事 (鉛筆をクリックして編集)",
|
||||||
"defaultHabit2Text": "ジャンクフードを食べる(鉛筆をクリックして編集)",
|
"defaultHabit2Text": "ジャンクフードを食べる(鉛筆をクリックして編集)",
|
||||||
"defaultHabit3Text": "階段・エレベーター(鉛筆をクリックして編集)",
|
"defaultHabit3Text": "階段・エレベーター(鉛筆をクリックして編集)",
|
||||||
"defaultHabit4Text": "Habiticaにタスクを追加しましょう",
|
"defaultHabit4Text": "Habiticaにタスクを追加しましょう",
|
||||||
"defaultHabit4Notes": "習慣、日課、To Doのどれでも",
|
"defaultHabit4Notes": "習慣、日課、To Doのどれでも",
|
||||||
"defaultTodo1Text": "Habiticaに参加する(チェックして完了しましょう!)",
|
"defaultTodo1Text": "Habiticaに参加する(チェックして完了しましょう!)",
|
||||||
"defaultTodoNotes": "このTo Doを完了にする、または編集、削除できます。",
|
"defaultTodoNotes": "このTo Doを完了にする、または編集、削除できます。",
|
||||||
"defaultReward1Text": "15分間の休憩",
|
"defaultReward1Text": "15分間の休憩",
|
||||||
"defaultReward2Text": "自分へのごほうび",
|
"defaultReward2Text": "自分へのごほうび",
|
||||||
|
|||||||
@@ -12,10 +12,10 @@
|
|||||||
"faqQuestion27": "タスクが色を変える理由は何ですか?",
|
"faqQuestion27": "タスクが色を変える理由は何ですか?",
|
||||||
"faqQuestion28": "休息が必要な場合、日課を一時停止できますか?",
|
"faqQuestion28": "休息が必要な場合、日課を一時停止できますか?",
|
||||||
"webFaqAnswer28": "はい!「日課を休む 」ボタンは設定内にあります。これにより、日課を逃した場合でもHPが減りません。これは、休暇中や休息が必要な場合、または他の理由で休憩が必要な場合に役立ちます。クエストに参加している場合、個人の進捗は一時停止されますが、仲間が日課を逃した場合はその分ダメージを受けます。\n\n特定の日課を一時停止するには、スケジュールを編集して期限を0日に設定し、再開する準備ができるまでそのままにしておくことができます。",
|
"webFaqAnswer28": "はい!「日課を休む 」ボタンは設定内にあります。これにより、日課を逃した場合でもHPが減りません。これは、休暇中や休息が必要な場合、または他の理由で休憩が必要な場合に役立ちます。クエストに参加している場合、個人の進捗は一時停止されますが、仲間が日課を逃した場合はその分ダメージを受けます。\n\n特定の日課を一時停止するには、スケジュールを編集して期限を0日に設定し、再開する準備ができるまでそのままにしておくことができます。",
|
||||||
"faqQuestion29": "HPを回復する方法はどのようになりますか?",
|
"faqQuestion29": "HPを回復する方法は何ですか?",
|
||||||
"faqQuestion30": "HPがなくなった場合、何が起こりますか?",
|
"faqQuestion30": "HPがなくなった場合、どうなりますか?",
|
||||||
"faqQuestion31": "マイナスにならないタスクをやり取りしたのに、なぜHPが減少したのでしょうか?",
|
"faqQuestion31": "マイナスにならないタスクをやり取りしたのに、なぜHPが減少したのでしょうか?",
|
||||||
"faqQuestion32": "クラスはどうやって選択できるのですか?",
|
"faqQuestion32": "クラスはどうやって選択できますか?",
|
||||||
"faqQuestion33": "レベル10を超えると現れる青いバーは何ですか?",
|
"faqQuestion33": "レベル10を超えると現れる青いバーは何ですか?",
|
||||||
"webFaqAnswer33": "クラスシステムが解除されると、マナを使用するスキルも解除されます。マナはINTによって決まり、スキルや装備によって調整できます。",
|
"webFaqAnswer33": "クラスシステムが解除されると、マナを使用するスキルも解除されます。マナはINTによって決まり、スキルや装備によって調整できます。",
|
||||||
"faqQuestion34": "ペットはどの種類の食べ物が好きですか?",
|
"faqQuestion34": "ペットはどの種類の食べ物が好きですか?",
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
"webFaqAnswer27": "タスクの色は、その値を視覚的に表現しています。全てのタスクは中立の黄色で始まり、青は良い状態を示し、赤は悪い状態を示します。各タスクの値は以下のように決まります:\n\n習慣はプラスボタンまたはマイナスボタンをタップすることによって、青または赤に変化します。良い習慣および悪い習慣は、完了しないと時間の経過とともに徐々に黄色に変化します。両方向の習慣は、ユーザーの入力に基づいてのみ色が変わります。\n\n日課は完了の頻度に基づいて色が変わり、完了すると青く、未完了だと赤くなります。\n\nTo Doは完了されないまま経過する時間とともに徐々に赤くなります。\n\nタスクが赤くなればなるほど、そのタスクを完了すると獲得できるゴールドと経験値が増えるので、一番難しいタスクにも挑戦してくださいね!",
|
"webFaqAnswer27": "タスクの色は、その値を視覚的に表現しています。全てのタスクは中立の黄色で始まり、青は良い状態を示し、赤は悪い状態を示します。各タスクの値は以下のように決まります:\n\n習慣はプラスボタンまたはマイナスボタンをタップすることによって、青または赤に変化します。良い習慣および悪い習慣は、完了しないと時間の経過とともに徐々に黄色に変化します。両方向の習慣は、ユーザーの入力に基づいてのみ色が変わります。\n\n日課は完了の頻度に基づいて色が変わり、完了すると青く、未完了だと赤くなります。\n\nTo Doは完了されないまま経過する時間とともに徐々に赤くなります。\n\nタスクが赤くなればなるほど、そのタスクを完了すると獲得できるゴールドと経験値が増えるので、一番難しいタスクにも挑戦してくださいね!",
|
||||||
"webFaqAnswer29": "体力回復の薬をごほうび欄から25ゴールドで購入することで、15 HPを回復できます。さらに、レベルアップすると常にHPが完全に回復します!",
|
"webFaqAnswer29": "体力回復の薬をごほうび欄から25ゴールドで購入することで、15 HPを回復できます。さらに、レベルアップすると常にHPが完全に回復します!",
|
||||||
"webFaqAnswer31": "タスクを完了してHPが不当に減少した場合、他のプラットフォームで行われた変更がサーバーに同期される際に遅延が発生した可能性があります。たとえば、モバイルアプリでゴールドを使用したり、マナを使ったり、HPが減少した後にウェブサイトでタスクを完了すると、サーバーはすべてが同期されていることを確認しているだけです。",
|
"webFaqAnswer31": "タスクを完了してHPが不当に減少した場合、他のプラットフォームで行われた変更がサーバーに同期される際に遅延が発生した可能性があります。たとえば、モバイルアプリでゴールドを使用したり、マナを使ったり、HPが減少した後にウェブサイトでタスクを完了すると、サーバーはすべてが同期されていることを確認しているだけです。",
|
||||||
"webFaqAnswer32": "Habiticaには戦士、魔道士、盗賊、そして治療師の4つのクラスがあります。全てのプレイヤーは、レベル10に達するまで戦士としてスタートします。レベル10に達すると、新しいクラスを選択するか戦士として続行するかの選択が与えられます。\n\nそれぞれのクラスには異なる装備とスキルがあります。クラスを選択したくない場合は、「選ばない」を選択できます。選ばないを選択すると、後で設定からいつでもクラスシステムを有効にできます。",
|
"webFaqAnswer32": "Habiticaには戦士、魔道士、盗賊、そして治療師の4つのクラスがあります。全てのプレイヤーは、レベル10に達するまで戦士としてスタートします。レベル10に達すると、新しいクラスを選択するか戦士として続行するかの選択が与えられます。\n\nそれぞれのクラスには異なる装備とスキルがあります。クラスを選択したくない場合は、「選ばない」を選択できます。「選ばない」を選択すると、後で設定からいつでもクラスシステムを有効にできます。",
|
||||||
"webFaqAnswer30": "HPがゼロになると、レベルが1下がり、すべてのゴールドと再購入可能な装備の一部が失われます。",
|
"webFaqAnswer30": "HPがゼロになると、レベルが1下がり、すべてのゴールドと再購入可能な装備の一部が失われます。",
|
||||||
"webFaqAnswer34": "ペットは自分の色に合ったエサが好きです。ただし、普通のペットは例外で、すべての普通のペットが同じアイテムを好みます。各ペットが好む具体的なエサは以下の通りです:\n\n * 普通のペット:肉\n * 白いペット:牛乳\n * 砂漠のペット:じゃがいも\n * 赤いペット:いちご\n * 影のペット:チョコレート\n * 骨のペット:さかな\n * ゾンビのペット:腐った肉\n * わたあめピンクのペット:ピンクの綿菓子\n * わたあめブルーのペット:ブルーの綿菓子\n * 黄金のペット:ハチミツ",
|
"webFaqAnswer34": "ペットは自分の色に合ったエサが好きです。ただし、普通のペットは例外で、すべての普通のペットが同じアイテムを好みます。各ペットが好む具体的なエサは以下の通りです:\n\n * 普通のペット:肉\n * 白いペット:牛乳\n * 砂漠のペット:じゃがいも\n * 赤いペット:いちご\n * 影のペット:チョコレート\n * 骨のペット:さかな\n * ゾンビのペット:腐った肉\n * わたあめピンクのペット:ピンクの綿菓子\n * わたあめブルーのペット:ブルーの綿菓子\n * 黄金のペット:ハチミツ",
|
||||||
"webFaqAnswer36": "Habiticaのアバターの外見をカスタマイズする方法は無限です!アバターの体型、髪型と色、肌の色、メガネや移動補助具の追加などを変更するには、メニューから「アバターのカスタマイズ」を選択します。\n\nモバイルアプリでアバターをカスタマイズするには:\n * メニューから「アバターのカスタマイズ」を選択します\n\nウェブサイトでアバターをカスタマイズするには:\n * ナビゲーションのユーザーメニューから「アバターのカスタマイズ」を選択します",
|
"webFaqAnswer36": "Habiticaのアバターの外見をカスタマイズする方法は無限です!アバターの体型、髪型と色、肌の色、メガネや移動補助具の追加などを変更するには、メニューから「アバターのカスタマイズ」を選択します。\n\nモバイルアプリでアバターをカスタマイズするには:\n * メニューから「アバターのカスタマイズ」を選択します\n\nウェブサイトでアバターをカスタマイズするには:\n * ナビゲーションのユーザーメニューから「アバターのカスタマイズ」を選択します",
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
"webFaqAnswer37": "「衣装を着る」オプションがオンになっているか確認してください。もしアバターが衣装を着ている場合、その装備セットが武装の代わりに表示されます。\n\nモバイル版で衣装を切り替えるには:\n * メニューから「装備」を選択し、「衣装を使用する」トグルを見つけます\n\nウェブ版で衣装を切り替えるには:\n * 所持品から「装備」を選択し、装備ドロワーの衣装タブで「衣装を使用する」トグルを見つけます",
|
"webFaqAnswer37": "「衣装を着る」オプションがオンになっているか確認してください。もしアバターが衣装を着ている場合、その装備セットが武装の代わりに表示されます。\n\nモバイル版で衣装を切り替えるには:\n * メニューから「装備」を選択し、「衣装を使用する」トグルを見つけます\n\nウェブ版で衣装を切り替えるには:\n * 所持品から「装備」を選択し、装備ドロワーの衣装タブで「衣装を使用する」トグルを見つけます",
|
||||||
"webFaqAnswer38": "新しいHabiticaプレイヤーは基本の戦士クラスの装備しか購入できません。プレイヤーは装備を順番に購入して次のピースをアンロックする必要があります。\n\n多くの装備はクラス固有であり、プレイヤーは現在のクラスに属する装備のみ購入できます。",
|
"webFaqAnswer38": "新しいHabiticaプレイヤーは基本の戦士クラスの装備しか購入できません。プレイヤーは装備を順番に購入して次のピースをアンロックする必要があります。\n\n多くの装備はクラス固有であり、プレイヤーは現在のクラスに属する装備のみ購入できます。",
|
||||||
"webFaqAnswer39": "もし装備を手に入れたい場合は、Habiticaの有料会員になるか、ラッキー宝箱に挑戦するか、Habiticaの大祭のうちの1つで贅沢をすることができます。\n\nHabiticaの有料会員は毎月特別な独占装備セットと、タイムトラベラーショップで過去の装備セットを購入するための神秘的な砂時計を受け取ります。\n\nごほうびのラッキー宝箱には350以上の装備があります!100ゴールドで、特別な装備、ペットを乗騎に育てるための餌、またはレベルアップのための経験値のいずれかを受け取るチャンスがあります!\n\n四季ごとの大祭では、新しいクラスの装備がゴールドで購入でき、以前の大祭セットはジェムで購入できます。",
|
"webFaqAnswer39": "もし装備を手に入れたい場合は、Habiticaの有料会員になるか、ラッキー宝箱に挑戦するか、Habiticaの大祭のうちの1つで贅沢をすることができます。\n\nHabiticaの有料会員は毎月特別な独占装備セットと、タイムトラベラーショップで過去の装備セットを購入するための神秘的な砂時計を受け取ります。\n\nごほうびのラッキー宝箱には350以上の装備があります!100ゴールドで、特別な装備、ペットを乗騎に育てるための餌、またはレベルアップのための経験値のいずれかを受け取るチャンスがあります!\n\n四季ごとの大祭では、新しいクラスの装備がゴールドで購入でき、以前の大祭セットはジェムで購入できます。",
|
||||||
"webFaqAnswer41": "神秘の砂時計はHabiticaの独占的な有料会員通貨で、タイムトラベラーズショップで使用されます! 砂時計は購読プランに基づいた設定されたスケジュールで配信されます。\n\n砂時計の配信スケジュール:\n * 1ヶ月定期購読者は、3回目の連続支払いの後、月初に砂時計1個を受け取ります。\n *3ヶ月定期購読者は、購読直後に砂時計1個を受け取り、更新のたびに月初にさらに砂時計1個を受け取ります。.\n * 6ヶ月定期購読者は、契約後すぐに2個の砂時計を受け取り、更新のたびに月初にさらに2個の砂時計を受け取ります。\n * 12ヶ月定期購読者は、購読直後に4個の砂時計を受け取り、各更新後の月の初めにさらに4つの砂時計を受け取ります。",
|
"webFaqAnswer41": "神秘の砂時計はHabiticaの有料会員限定の通貨でタイムトラベラーの店で使用できます。有料会員は神秘の砂時計を登録特典がある月ごとに他の特典とともに受け取れます。\n特別な背景、ペット、クエスト、道具に興味があるならば有料プランのオプションをタイムトラベラーの店でチェックしてみてください。",
|
||||||
"webFaqAnswer42": "自分自身を奮起させ、タスクを達成するために責任感を高める最良の方法の一つは、パーティーに参加することです! 他のHabiticaプレイヤーと一緒にパーティーを組むことは、クエストに挑戦してペットと装備を手に入れ、仲間のスキルからバフを受け、モチベーションを高める素晴らしい方法です。\n\n責任感を高める別の方法は、チャレンジに参加することです。 チャレンジは特定の目標に関連するタスクを自動的にリストに追加します! これにより、ジェムの賞を目指して競争する要素が追加され、モチベーションが向上するかもしれません。 Habiticaチームによって作成された公式のチャレンジだけでなく、他のプレイヤーによって作成されたチャレンジもあります。",
|
"webFaqAnswer42": "自分自身を奮起させ、タスクを達成するために責任感を高める最良の方法の一つは、パーティーに参加することです! 他のHabiticaプレイヤーと一緒にパーティーを組むことは、クエストに挑戦してペットと装備を手に入れ、仲間のスキルからバフを受け、モチベーションを高める素晴らしい方法です。\n\n責任感を高める別の方法は、チャレンジに参加することです。 チャレンジは特定の目標に関連するタスクを自動的にリストに追加します! これにより、ジェムの賞を目指して競争する要素が追加され、モチベーションが向上するかもしれません。 Habiticaチームによって作成された公式のチャレンジだけでなく、他のプレイヤーによって作成されたチャレンジもあります。",
|
||||||
"faqQuestion43": "クエストの進め方は?",
|
"faqQuestion43": "クエストの進め方は?",
|
||||||
"webFaqAnswer43": "クエストを始めるには、まずパーティーに参加する必要があります。パーティーは、単独でクエストに挑戦する冒険としても、他のHabiticaプレーヤーを招待してクエストに迅速に取り組むこともできます!\n\nパーティーから「クエストの開始」ボタンを選択して、インベントリからクエストスクロールを選択します。クエストを進めるために通常どおりタスクを完了してください!ボスクエストに挑戦している場合はモンスターに対してダメージを蓄積し、コレクションクエストに挑戦している場合はアイテムを見つけるチャンスがあります。すべての進捗状況は翌日に適用されます。\n\n十分なダメージを与えたり、すべてのアイテムを集めたりすると、クエストが完了し、報酬がもらえます!",
|
"webFaqAnswer43": "クエストを始めるには、まずパーティーに参加する必要があります。パーティーは、単独でクエストに挑戦する冒険としても、他のHabiticaプレーヤーを招待してクエストに迅速に取り組むこともできます!\n\nパーティーから「クエストの開始」ボタンを選択して、インベントリからクエストスクロールを選択します。クエストを進めるために通常どおりタスクを完了してください!ボスクエストに挑戦している場合はモンスターに対してダメージを蓄積し、コレクションクエストに挑戦している場合はアイテムを見つけるチャンスがあります。すべての進捗状況は翌日に適用されます。\n\n十分なダメージを与えたり、すべてのアイテムを集めたりすると、クエストが完了し、報酬がもらえます!",
|
||||||
|
|||||||
@@ -26,31 +26,31 @@
|
|||||||
"login": "ログイン",
|
"login": "ログイン",
|
||||||
"logout": "ログアウト",
|
"logout": "ログアウト",
|
||||||
"marketing1Header": "ゲームをプレーして、習慣を改善しましょう",
|
"marketing1Header": "ゲームをプレーして、習慣を改善しましょう",
|
||||||
"marketing1Lead1Title": "あなたの人生のRPG",
|
"marketing1Lead1Title": "人生をゲーム化しよう",
|
||||||
"marketing1Lead1": "Habiticaは現実での習慣を改善するゲームです。すべてのタスク(習慣、日課、To Do)を倒すべき小さなモンスターとみなすことで、あなたの人生を「ゲーム化」します。あなたがよりよく生きれば、ゲームも前進します。一方、現実で失敗すると、ゲーム内の分身であるキャラクターも後戻りしてしまいますよ。",
|
"marketing1Lead1": "Habiticaはタスクがたくさんたまっていて困っている人に向いているアプリです。アイテムをゲットしたり、モンスターと戦ったりするなど、基戦ったりームの仕組みで生活をもっと生産的にして、タスクを完了したときの達成感を高めます。タスクをたくさんするほど、ゲーム内の進歩も大きくなります。",
|
||||||
"marketing1Lead2Title": "すばらしい装備を手に入れよう",
|
"marketing1Lead2Title": "すばらしい装備を手に入れよう",
|
||||||
"marketing1Lead2": "習慣を改善して、アバターを成長させましょう。手に入れたカッコいい衣装をみんなに披露しましょう!",
|
"marketing1Lead2": "習慣を改善して、アバターを成長させましょう。手に入れたカッコいい衣装をみんなに披露しましょう!",
|
||||||
"marketing1Lead3Title": "ときどきボーナスが入ります",
|
"marketing1Lead3Title": "頑張って賞金を取ろう",
|
||||||
"marketing1Lead3": "ギャンブルこそがやる気につながる、そんな人たちには、「確率的報酬」とよんでいるシステムがあります。Habiticaには、積極的、消極的、確実、気まぐれ…すべてのやる気対策が入っています。",
|
"marketing1Lead3": "ギャンブルこそがやる気につながる、そんな人たちには、「確率的報酬」とよんでいるシステムがあります。Habiticaには、積極的、消極的、確実、気まぐれ…すべてのやる気対策が入っています。",
|
||||||
"marketing2Header": "友達と競争しましょう",
|
"marketing2Header": "友達と協力しよう",
|
||||||
"marketing2Lead1Title": "仲間と一緒に生産性を高めよう",
|
"marketing2Lead1Title": "仲間と一緒に生産性を高めよう",
|
||||||
"marketing2Lead1": "Habitica を一人でプレーすることもできますが、だれかと協力し、競争し、責任を感じあいはじめてこそ、Habitica の本領発揮です。自分を成長させるプログラムでいちばん効果的なのは、社会的な責任感です。責任感と競争を実現する環境として、ビデオゲーム以上のものがあるでしょうか?",
|
"marketing2Lead1": "Habitica を一人でプレーすることもできますが、だれかと協力し、競争し、責任を感じあいはじめてこそ、Habitica の本領発揮です。自分を成長させるプログラムでいちばん効果的なのは、社会的な責任感です。責任感と競争を実現する環境として、ビデオゲーム以上のものがあるでしょうか?",
|
||||||
"marketing2Lead2Title": "モンスターと戦おう",
|
"marketing2Lead2Title": "モンスターと戦おう",
|
||||||
"marketing2Lead2": "ロールプレイングゲームに戦いは不可欠ですよね? パーティーと一緒にモンスターと戦いましょう。モンスターとの戦いは「連帯責任モード」です。あなたがスポーツジムに行くのをさぼった日は、モンスターが *パーティ全員* にダメージを与えます!",
|
"marketing2Lead2": "パーティーの友達と一緒にクエストに挑戦しよう!モンスターと戦えるかは、あなたにかかっています。デンタルフロスを忘れてしまうと、参加者全員がダメージを受けます!",
|
||||||
"marketing2Lead3Title": "チャレンジで競おう",
|
"marketing2Lead3Title": "チャレンジで競おう",
|
||||||
"marketing2Lead3": "「チャレンジ」を通して友達やHabiticaで出会った人と競争してみましょう。チャレンジの勝者は特別な賞品を手にすることができます。",
|
"marketing2Lead3": "Habiticaのコミュニティが作った「チャレンジ」に参加して、自分の興味や目標に合うタスクに挑戦しましょう。賞品のジェムがもらえるように頑張ろう!",
|
||||||
"marketing3Header": "アプリと拡張機能",
|
"marketing3Header": "Habiticaの他の使い方",
|
||||||
"marketing3Lead1": "**iPhone もしくは Android** アプリを使えば、外出先でも Habitica が操作できます。私たちは日課などのボタンをクリックするためにwebサイトにいちいちログインするのはめんどうだと気づきました。",
|
"marketing3Lead1": "**iPhone もしくは Android** アプリを使えば、外出先でも Habitica が操作できます。私たちは日課などのボタンをクリックするためにwebサイトにいちいちログインするのはめんどうだと気づきました。",
|
||||||
"marketing3Lead2Title": "サードパーティーとの連動",
|
"marketing3Lead2Title": "サードパーティーとの連動",
|
||||||
"marketing3Lead2": "その他の**サードパーティーのツール**は、あなたの生活のさまざまな側面を Habitica に結びつけます。Habitica が提供しているAPIは、例えば非生産的なWebページを見ていたらポイントを失い、生産的なページを見ていたらポイントを獲得できます[Chrome 拡張機能](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US)のように、物事の簡単な統合をもたらします。[詳しくはこちらをご覧ください](https://habitica.fandom.com/ja/wiki/拡張機能・アドオン・カスタマイズ)。",
|
"marketing3Lead2": "Habiticaはオープンソースのプロジェクトであり、メンバーからの寄付によりサポートされています。自分のニーズに合わせたり、世界中のプレイヤーに使いやすくしたりするために、皆さんもHabiticaに貢献できます。[詳しくはこちらをご覧ください](https://habitica.fandom.com/ja/wiki/Habitica%E3%81%B8%E3%81%AE%E8%B2%A2%E7%8C%AE)。",
|
||||||
"marketing4Header": "組織での利用",
|
"marketing4Header": "組織での利用",
|
||||||
"marketing4Lead1": "教育は、ゲーム化のもっとも適した分野の一つです。近年、電話機とゲームが、どれだけ学生・生徒たちとぴったりくっついていることか--みなさんご存知でしょう。力を解き放つのです!学生・生徒たちを友達同士の競争のスタートラインに並べましょう。よい行いにはレアな賞をあげましょう。学生・生徒の成績と態度が急上昇するのを見ていましょう。",
|
"marketing4Lead1": "教育は、ゲーム化のもっとも適した分野の一つです。近年、電話機とゲームが、どれだけ学生・生徒たちとぴったりくっついていることか--みなさんご存知でしょう。力を解き放つのです!学生・生徒たちを友達同士の競争のスタートラインに並べましょう。よい行いにはレアな賞をあげましょう。学生・生徒の成績と態度が急上昇するのを見ていましょう。",
|
||||||
"marketing4Lead1Title": "教育におけるゲーミフィケーション",
|
"marketing4Lead1Title": "教育におけるゲーミフィケーション",
|
||||||
"marketing4Lead2": "健康管理のコストは増大の一途をたどっており、その影響も大きくなっています。コストを削減し、健康を促進するために無数の計画が立てられています。Habitica も健康的なライフスタイルへの、しっかりとした道を築きあげるものであると私たちは信じています。",
|
"marketing4Lead2": "健康管理のコストは増大の一途をたどっており、その影響も大きくなっています。コストを削減し、健康を促進するために無数の計画が立てられています。Habitica も健康的なライフスタイルへの、しっかりとした道を築きあげるものであると私たちは信じています。",
|
||||||
"marketing4Lead2Title": "健康維持・向上のゲーミフィケーション",
|
"marketing4Lead2Title": "健康維持・向上のゲーミフィケーション",
|
||||||
"marketing4Lead3-1": "あなたの人生をゲーム化したいですか?",
|
"marketing4Lead3-1": "タスクを楽しんでやってみよう!",
|
||||||
"marketing4Lead3-2": "教育、健康管理、その他に Habitica でとりくんでいるグループのことに興味がありますか?",
|
"marketing4Lead3-2": "教育、健康管理、その他に Habitica でとりくんでいるグループのことに興味がありますか?",
|
||||||
"marketing4Lead3Title": "すべてをゲーム化しましょう",
|
"marketing4Lead3Title": "さっそく始めましょう!",
|
||||||
"mobileAndroid": "Androidアプリ",
|
"mobileAndroid": "Androidアプリ",
|
||||||
"mobileIOS": "iOSアプリ",
|
"mobileIOS": "iOSアプリ",
|
||||||
"oldNews": "ニュース",
|
"oldNews": "ニュース",
|
||||||
@@ -181,5 +181,6 @@
|
|||||||
"footerProduct": "プロダクト",
|
"footerProduct": "プロダクト",
|
||||||
"translateHabitica": "Habiticaの翻訳",
|
"translateHabitica": "Habiticaの翻訳",
|
||||||
"incorrectResetPhrase": "アカウントをリセットするには、すべて大文字で <%= magicWord %> と入力してください。",
|
"incorrectResetPhrase": "アカウントをリセットするには、すべて大文字で <%= magicWord %> と入力してください。",
|
||||||
"marketing3Lead1Title": "アンドロイド&iOS用アプリ"
|
"marketing3Lead1Title": "アンドロイド&iOS用アプリ",
|
||||||
|
"marketing4Lead3Button": "Habiticaを始める"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2759,7 +2759,7 @@
|
|||||||
"armorSpecialSpring2023RogueNotes": "手足は4本しかなくてもイモムシの中で最も高く登り這い上がることができます。知覚が<%= per %>上がります。2023年春の限定装備。",
|
"armorSpecialSpring2023RogueNotes": "手足は4本しかなくてもイモムシの中で最も高く登り這い上がることができます。知覚が<%= per %>上がります。2023年春の限定装備。",
|
||||||
"armorArmoirePaintersApronText": "画家のエプロン",
|
"armorArmoirePaintersApronText": "画家のエプロン",
|
||||||
"headMystery202301Notes": "あなたの聴覚はとても鋭くなり、夜明けと露のきらめきが聞こえるでしょう。効果なし。2023年1月有料会員アイテム。",
|
"headMystery202301Notes": "あなたの聴覚はとても鋭くなり、夜明けと露のきらめきが聞こえるでしょう。効果なし。2023年1月有料会員アイテム。",
|
||||||
"weaponSpecialSpring2023MageNotes": "その輝きが大きければ大きいほどその力は強大なものとなります。知能が<%= int %>上がります。2023年春の限定装備。",
|
"weaponSpecialSpring2023MageNotes": "輝きが大きければ大きいほどその力は強大なものとなります。知能が<%= int %>、知覚が<%= per %>上がります。2023年春の限定装備。",
|
||||||
"armorSpecialBirthday2023Text": "すてきでたわけたパーティーローブ",
|
"armorSpecialBirthday2023Text": "すてきでたわけたパーティーローブ",
|
||||||
"shieldSpecialSpring2023WarriorNotes": "春を代表する花々で色鮮やかな花束を作りましょう。体質が<%= con %>上がります。2023年春の限定装備。",
|
"shieldSpecialSpring2023WarriorNotes": "春を代表する花々で色鮮やかな花束を作りましょう。体質が<%= con %>上がります。2023年春の限定装備。",
|
||||||
"shieldSpecialSpring2023HealerNotes": "病院のお見舞いのアクセント、または春のダンスに参加するための儀式の一部! 体質が<%= con %>上がります。2023年春の限定装備。",
|
"shieldSpecialSpring2023HealerNotes": "病院のお見舞いのアクセント、または春のダンスに参加するための儀式の一部! 体質が<%= con %>上がります。2023年春の限定装備。",
|
||||||
@@ -3085,10 +3085,31 @@
|
|||||||
"armorArmoireSoftWhiteSuitText": "やわらかい白スーツ",
|
"armorArmoireSoftWhiteSuitText": "やわらかい白スーツ",
|
||||||
"backMystery202402Text": "パラダイスピンクのハート",
|
"backMystery202402Text": "パラダイスピンクのハート",
|
||||||
"weaponMystery202408Text": "神秘の神盾",
|
"weaponMystery202408Text": "神秘の神盾",
|
||||||
"gearItemsCompleted": "すべての<%= klass %>ギアを集めました! 新しいギアは季節のイベントでリリースされます。",
|
"gearItemsCompleted": "すべての<%= klass %>の装備を集めました! 新しいギアは季節のイベントでリリースされます。",
|
||||||
"moreArmoireGearAvailable": "それまでは、<%= armoireCount %> 個のギアをEnchanted Armoireで見つけることができます!",
|
"moreArmoireGearAvailable": "それまでは、<%= armoireCount %> 個の装備をラッキー宝箱で見つけることができます!",
|
||||||
"moreArmoireGearComing": "ラッキー宝箱も毎月新入荷します!",
|
"moreArmoireGearComing": "ラッキー宝箱も毎月新入荷します!",
|
||||||
"weaponSpecialSummer2024RogueNotes": "敵の攻撃を相手に返します!力が<%= str %>上がります。2024年夏の限定装備。",
|
"weaponSpecialSummer2024RogueNotes": "敵の攻撃を相手に返します!力が<%= str %>上がります。2024年夏の限定装備。",
|
||||||
"weaponSpecialSummer2024WarriorText": "シャチの刃スライサー",
|
"weaponSpecialSummer2024WarriorText": "シャチの歯のスライサー",
|
||||||
"weaponSpecialSummer2024RogueText": "ウミウシのトライデント"
|
"weaponSpecialSummer2024RogueText": "ウミウシのトライデント",
|
||||||
|
"armorArmoireSnowyFluffTrimmedCoatText": "雪のようなふわふわのコート",
|
||||||
|
"headMystery202501Notes": "この輝く帽子は光とお祭り騒ぎをあなたの周りに常に生成します。何の利益も有料会員ません。2025年1月の有料会員アイテム。",
|
||||||
|
"weaponSpecialSummer2025WarriorText": "ホタテ貝の槍",
|
||||||
|
"weaponSpecialSummer2025RogueText": "イカの腕",
|
||||||
|
"weaponSpecialSummer2024MageText": "イソギンチャクの杖",
|
||||||
|
"weaponSpecialSummer2024HealerText": "海貝の杖",
|
||||||
|
"weaponSpecialSummer2024HealerNotes": "杖の先の貝は驚くほど硬い!知能が<%= int %>上がります。2024年春の限定装備。",
|
||||||
|
"weaponSpecialFall2024RogueText": "リボンの杖",
|
||||||
|
"weaponSpecialFall2024HealerText": "宇宙の大鎌",
|
||||||
|
"weaponSpecialFall2024HealerNotes": "この立派な刃を使うと、超難しく感じるタスクでも乗り越えられる。知能が<%= int %>上がります。2024年秋の限定装備。",
|
||||||
|
"weaponSpecialFall2024MageText": "冥界の杖",
|
||||||
|
"weaponSpecialWinter2025HealerText": "星の杖",
|
||||||
|
"weaponSpecialWinter2025MageText": "オーロラの発光",
|
||||||
|
"weaponSpecialWinter2025MageNotes": "このカラフルで鮮やかなオーロラはきれいな背景になります。無敵になれるでしょう!知能が<%= int %>、知覚が<%= per %>上がります。",
|
||||||
|
"weaponSpecialSummer2025HealerText": "クリオネの翼足のパドル",
|
||||||
|
"weaponArmoireCorsairsBladeText": "コルセアの刃",
|
||||||
|
"weaponSpecialWinter2025WarriorNotes": "力強いヘラジカに強い斧を。無敵になれるでしょう!力が<%= str %>上がります。2024年冬の限定装備。",
|
||||||
|
"weaponSpecialSpring2025RogueText": "水晶ポイントの殻竿",
|
||||||
|
"weaponSpecialSpring2025RogueNotes": "1回振るだけで、目標を達成するまでの障害物が乗り越えられる。力が<%= str %>上がります。2025年春の限定装備。",
|
||||||
|
"weaponSpecialSpring2025MageText": "カマキリの杖",
|
||||||
|
"armorSpecialSummer2024WarriorText": "ジンベイザメのしっぽ"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,7 +107,7 @@
|
|||||||
"greeting0": "こんにちは!",
|
"greeting0": "こんにちは!",
|
||||||
"greeting1": "ちょっとあいさつしてみただけ (^_^)",
|
"greeting1": "ちょっとあいさつしてみただけ (^_^)",
|
||||||
"greeting2": "(遠くから手をブンブン振る)",
|
"greeting2": "(遠くから手をブンブン振る)",
|
||||||
"greeting3": "そこのあなた!",
|
"greeting3": "ヤッホー!",
|
||||||
"greetingCardAchievementTitle": "Kawaii",
|
"greetingCardAchievementTitle": "Kawaii",
|
||||||
"greetingCardAchievementText": "やあ!よう!こんにちは!<%= count %> 通のあいさつカードをやりとりしました。",
|
"greetingCardAchievementText": "やあ!よう!こんにちは!<%= count %> 通のあいさつカードをやりとりしました。",
|
||||||
"thankyouCard": "ありがとうのカード",
|
"thankyouCard": "ありがとうのカード",
|
||||||
@@ -189,7 +189,7 @@
|
|||||||
"dismissAll": "すべて閉じる",
|
"dismissAll": "すべて閉じる",
|
||||||
"messages": "メッセージ",
|
"messages": "メッセージ",
|
||||||
"emptyMessagesLine1": "メッセージはありません",
|
"emptyMessagesLine1": "メッセージはありません",
|
||||||
"emptyMessagesLine2": "ユーザーのプロフィールを見に行って「メッセージ」ボタンを押すと、新しいメッセージを送ることができます。",
|
"emptyMessagesLine2": "Habiticaのプレイヤーやパーティーメンバーにメッセージを送って会話を始めよう!ユーザーのプロフィールの「メッセージ」ボタンを押すと、新しいメッセージを送ることができます。",
|
||||||
"userSentMessage": "<span class=\"notification-bold\"><%- user %></span>からのメッセージが届きました",
|
"userSentMessage": "<span class=\"notification-bold\"><%- user %></span>からのメッセージが届きました",
|
||||||
"letsgo": "レッツゴー!",
|
"letsgo": "レッツゴー!",
|
||||||
"selected": "選択中",
|
"selected": "選択中",
|
||||||
@@ -238,5 +238,8 @@
|
|||||||
"bannedPlayer": "このプレーヤーはアカウント停止されました。",
|
"bannedPlayer": "このプレーヤーはアカウント停止されました。",
|
||||||
"skipExternalLinkModal": "リンクをクリックするときにCTRL(Windows)またはCommand(Mac)を押したままにすると、このモーダルがスキップされます。",
|
"skipExternalLinkModal": "リンクをクリックするときにCTRL(Windows)またはCommand(Mac)を押したままにすると、このモーダルがスキップされます。",
|
||||||
"general": "一般",
|
"general": "一般",
|
||||||
"titleCustomizations": "カスタマイズ"
|
"titleCustomizations": "カスタマイズ",
|
||||||
|
"newMessage": "新しいメッセージ",
|
||||||
|
"targetUserNotExist": "「<%= userName %>」というユーザーはいません。",
|
||||||
|
"rememberToBeKind": "他人には優しくして、<a href='/static/community-guidelines' target='_blank'>コミュニティガイドラン</a>を守ってください。"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,7 +294,7 @@
|
|||||||
"teamBasedTasksListDesc": "グループメンバー全員が同じタスクボードで作業することで、グループ内の状況を把握することができます。共有タスクボードからタスクを完了させることも、個人のタスクにコピーして外出先で完了させることもできます。",
|
"teamBasedTasksListDesc": "グループメンバー全員が同じタスクボードで作業することで、グループ内の状況を把握することができます。共有タスクボードからタスクを完了させることも、個人のタスクにコピーして外出先で完了させることもできます。",
|
||||||
"groupManagementControls": "柔軟な説明責任",
|
"groupManagementControls": "柔軟な説明責任",
|
||||||
"groupManagementControlsDesc": "タスクが本当に完了されたかを確認するためにタスク承認機能を使いましょう。グループメンバーへ任務を共有するためのグループマネージャーを追加し、全てのチームメンバーのためのプライベートなグループチャットを楽しみましょう。",
|
"groupManagementControlsDesc": "タスクが本当に完了されたかを確認するためにタスク承認機能を使いましょう。グループメンバーへ任務を共有するためのグループマネージャーを追加し、全てのチームメンバーのためのプライベートなグループチャットを楽しみましょう。",
|
||||||
"inGameBenefits": "ゲーム中のメリット",
|
"inGameBenefits": "メリットがたくさん!",
|
||||||
"inGameBenefitsDesc": "グループメンバーは、限定のジャッカロープの乗騎だけでなく、毎月の特別な装備セットや、ゴールドでジェムを買う機能など、有料プランの特典を全て受けられます。",
|
"inGameBenefitsDesc": "グループメンバーは、限定のジャッカロープの乗騎だけでなく、毎月の特別な装備セットや、ゴールドでジェムを買う機能など、有料プランの特典を全て受けられます。",
|
||||||
"letsMakeAccount": "まずはアカウントを作成しましょう",
|
"letsMakeAccount": "まずはアカウントを作成しましょう",
|
||||||
"nameYourGroup": "次に、あなたのグループの名前をつけましょう",
|
"nameYourGroup": "次に、あなたのグループの名前をつけましょう",
|
||||||
@@ -393,7 +393,7 @@
|
|||||||
"groupTeacher": "教師として生徒のタスクを設定する",
|
"groupTeacher": "教師として生徒のタスクを設定する",
|
||||||
"descriptionOptional": "説明",
|
"descriptionOptional": "説明",
|
||||||
"descriptionOptionalText": "説明を追加",
|
"descriptionOptionalText": "説明を追加",
|
||||||
"nextPaymentMethod": "次のステップ:支払方法",
|
"nextPaymentMethod": "次のステップ:お支払い",
|
||||||
"createGroup": "グループを作る",
|
"createGroup": "グループを作る",
|
||||||
"groupParentChildren": "保護者として子どものタスクを設定する",
|
"groupParentChildren": "保護者として子どものタスクを設定する",
|
||||||
"sendGiftLabel": "ギフトメッセージを送信しますか?",
|
"sendGiftLabel": "ギフトメッセージを送信しますか?",
|
||||||
@@ -422,5 +422,8 @@
|
|||||||
"challengeBannedSlursPrivate": "あなたのチャレンジには、ハビティカのコミュニティガイドラインに違反する中傷が含まれています。あなたのチャレンジを保存するには、それを削除してください。",
|
"challengeBannedSlursPrivate": "あなたのチャレンジには、ハビティカのコミュニティガイドラインに違反する中傷が含まれています。あなたのチャレンジを保存するには、それを削除してください。",
|
||||||
"challengeBannedSlurs": "あなたのチャレンジにはHabiticaのコミュニティガイドラインに違反する中傷が含まれており、あなたのチャットおよびチャレンジ作成権限は剥奪されました。詳しくは admin@habitica.com までお問い合わせください。",
|
"challengeBannedSlurs": "あなたのチャレンジにはHabiticaのコミュニティガイドラインに違反する中傷が含まれており、あなたのチャットおよびチャレンジ作成権限は剥奪されました。詳しくは admin@habitica.com までお問い合わせください。",
|
||||||
"challengeBannedWords": "あなたのチャレンジには、1 つ以上の汚い言葉またはアダルト トピックへの言及が含まれています。チャレンジを保存できるように編集してください。単に検閲するのではなく、その言葉を削除する必要があります。",
|
"challengeBannedWords": "あなたのチャレンジには、1 つ以上の汚い言葉またはアダルト トピックへの言及が含まれています。チャレンジを保存できるように編集してください。単に検閲するのではなく、その言葉を削除する必要があります。",
|
||||||
"upgradeYourCrew": "チームをアップグレードする準備はできていますか?"
|
"upgradeYourCrew": "チームをアップグレードする準備はできていますか?",
|
||||||
|
"messageCopiedToClipboard": "コピーしました。",
|
||||||
|
"createGroupToday": "グループを作成しよう!",
|
||||||
|
"createGroupTitle": "グループを作成する"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -270,5 +270,13 @@
|
|||||||
"winter2025StringLightsHealerSet": "ストリングライトの治療師セット",
|
"winter2025StringLightsHealerSet": "ストリングライトの治療師セット",
|
||||||
"winter2025SnowRogueSet": "雪の盗賊セット",
|
"winter2025SnowRogueSet": "雪の盗賊セット",
|
||||||
"fall2024SpaceInvaderHealerSet": "スペースインベーダーセット(治療師)",
|
"fall2024SpaceInvaderHealerSet": "スペースインベーダーセット(治療師)",
|
||||||
"fall2024BlackCatRogueSet": "黒ネコセット(盗賊)"
|
"fall2024BlackCatRogueSet": "黒ネコセット(盗賊)",
|
||||||
|
"spring2025CrystalPointRogueSet": "水晶ポイントの盗賊セット",
|
||||||
|
"spring2025PlumeriaHealerSet": "プルメリアの治療師セット",
|
||||||
|
"spring2025MantisMageSet": "カマキリの魔導士セット",
|
||||||
|
"spring2025SunshineWarriorSet": "サンシャイン戦士セット",
|
||||||
|
"summer2025ScallopWarriorSet": "ホタテ貝の戦士セット",
|
||||||
|
"summer2025SquidRogueSet": "イカの盗賊セット",
|
||||||
|
"summer2025SeaAngelHealerSet": "クリオネの治療師セット",
|
||||||
|
"summer2025FairyWrasseMageSet": "イトヒキベラの魔導士セット"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -132,5 +132,5 @@
|
|||||||
"sellItems": "アイテムを売る",
|
"sellItems": "アイテムを売る",
|
||||||
"customizationsShopText": "スタイルを変えたいですか?そんなあなたにぴったりの場所です!季節に合った新しい外見を取り揃えています。",
|
"customizationsShopText": "スタイルを変えたいですか?そんなあなたにぴったりの場所です!季節に合った新しい外見を取り揃えています。",
|
||||||
"notAvailable": "このアイテムはご利用いただけません。",
|
"notAvailable": "このアイテムはご利用いただけません。",
|
||||||
"paymentYouSentSubscriptionG1G1": "あなたは <strong><%- name %></strong>に<br><%= months %>ヶ月分のHabitica有料プランを送り、同じ分の有料プランが1つ贈って、1つ無料で手に入れようキャンペーンによってあなたにも適用されました!"
|
"paymentYouSentSubscriptionG1G1": "あなたは<strong><%- name %></strong><br>さんに<%= months %>か月間のHabitica 有料プランを送信しました。そして、Gift One Get One プロモーションのため、同じ有料プランがあなたのアカウントに適用されました。"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"needTips": "Habiticaをどうやって始めたらいいか、ヒントが必要ですか?ここに簡単なガイドがあります!",
|
"needTips": "Habiticaをどうやって始めたらいいか、ヒントが必要ですか?ここに簡単なガイドがあります!",
|
||||||
"step1": "ステップ 1:タスクを入力しよう",
|
"step1": "ステップ 1:タスクを入力しよう",
|
||||||
"webStep1Text": "Habiticaは現実世界の目標なくして成り立ちませんから、いくつかタスクを登録しましょう。思いついたら後から追加できます! 緑の「作成」ボタンを押すことで全てのタスクを追加できます。\n* **[To Do](https://habitica.fandom.com/ja/wiki/To_Do)の作成:** 一度きり、もしくはめったにくり返さないタスクはTo Do欄に一つずつ入力しましょう。タスクを押すとチェックリストや期限日などを追加できます!\n* **[日課](https://habitica.fandom.com/ja/wiki/日課)の作成:** 毎日、曜日ごと、月ごと、年ごとにやる必要がある行動は日課の欄に入力しましょう。タスクを押して、どのようにくり返すかを編集して、開始日を設定しましょう。例えば3日ごとなど、くり返しの間隔も設定できます。\n* **[習慣](https://habitica.fandom.com/ja/wiki/習慣)の作成:** 身に付けたい習慣は習慣の欄に入力しましょう。習慣を編集して、良い習慣:heavy_plus_sign:、または悪い習慣:heavy_minus_sign:のどちらかだけに設定を変更できます。\n* **[ごほうび](https://habitica.fandom.com/ja/wiki/ごほうび)の作成:** もともとゲーム内で設定されているごほうびに加えて、やる気を出すためにやりたい行動や楽しみとなるものをごほうび欄に追加しましょう。休息をとること、自分を適度に甘やかすことは大切です!\n* どのようなタスクを入力すればいいかアイデアがほしいときは、[習慣の例](https://habitica.fandom.com/ja/wiki/習慣の例)、[日課の例](https://habitica.fandom.com/ja/wiki/日課の例)、[To Doの例](https://habitica.fandom.com/ja/wiki/To_Doの例)、[自分好みのごほうびの例](https://habitica.fandom.com/ja/wiki/自分好みのごほうびの例)のWikiページを見ると参考になります。",
|
"webStep1Text": "Habiticaは現実世界の目標がないと成り立たないので、いくつかタスクを入力してみましょう。後から思いついたときは追加できます。 緑の「作成」ボタンを押してタスクを追加できます。\n* **[To Do](https://habitica.fandom.com/ja/wiki/To_Do)の作成:** 一度きり、もしくはめったに繰り返さないタスクはTo Do欄に一つずつ入力しましょう。タスクをクリックするとチェックリストや期限日などを追加できます。\n* **[日課](https://habitica.fandom.com/ja/wiki/日課)の作成:** 毎日、曜日ごと、月ごと、年ごとにやる必要がある行動は日課の欄に入力しましょう。タスクをクリックして、期限日や開始日を設定できます。「3日ごと」など、くり返しの間隔も設定できます。\n* **[習慣](https://habitica.fandom.com/ja/wiki/習慣)の作成:** 身に付けたい習慣は習慣の欄に入力しましょう。習慣を編集して、良い習慣:heavy_plus_sign:、または悪い習慣:heavy_minus_sign:のどちらかに変更できます。\n* **[ごほうび](https://habitica.fandom.com/ja/wiki/ごほうび)の作成:**ゲーム内でゲットできるごほうびに加えて、やる気を出すために楽しいアクティビティや好きなお菓子をごほうび欄に追加しましょう。休息をとること、そしてたまには自分を甘やかすことが大切です!\n* どのようなタスクを入力すればいいかアイデアがほしい人は、[習慣の例](https://habitica.fandom.com/ja/wiki/習慣の例)、[日課の例](https://habitica.fandom.com/ja/wiki/日課の例)、[To Doの例](https://habitica.fandom.com/ja/wiki/To_Doの例)、[自分好みのごほうびの例](https://habitica.fandom.com/ja/wiki/自分好みのごほうびの例)のWikiページを参考にしてみてください。",
|
||||||
"step2": "ステップ 2:現実世界の行動でゲームのポイントを得ましょう",
|
"step2": "ステップ 2:現実世界の行動でゲームのポイントを得ましょう",
|
||||||
"webStep2Text": "さあ、リストの中の目標に取り組みはじめましょう! あなたがタスクを完了してHabiticaでチェックを入れるごとに、あなたはレベルアップに必要な[経験値](https://habitica.fandom.com/ja/wiki/経験値)と、ごほうびを購入できる[ゴールド](https://habitica.fandom.com/ja/wiki/ゴールド)を獲得します。あなたが悪い習慣を行ってしまったり、日課をやりそびれてしまったりすると、あなたは[体力](https://habitica.fandom.com/ja/wiki/体力)を失います。このように、Habiticaでの経験と体力のバーはあなたが目標に向かって進むうえでの楽しい指標になります。あなたのキャラクターがゲーム中で成長するにつれて、現実世界でのあなたの生活にも改善がみられることでしょう。",
|
"webStep2Text": "さあ、リストの中の目標に取り組みはじめましょう! あなたがタスクを完了してHabiticaでチェックを入れるごとに、あなたはレベルアップに必要な[経験値](https://habitica.fandom.com/ja/wiki/経験値)と、ごほうびを購入できる[ゴールド](https://habitica.fandom.com/ja/wiki/ゴールド)を獲得します。あなたが悪い習慣を行ってしまったり、日課をやりそびれてしまったりすると、あなたは[体力](https://habitica.fandom.com/ja/wiki/体力)を失います。このように、Habiticaでの経験と体力のバーはあなたが目標に向かって進むうえでの楽しい指標になります。あなたのキャラクターがゲーム中で成長するにつれて、現実世界でのあなたの生活にも改善がみられることでしょう。",
|
||||||
"step3": "ステップ 3:カスタマイズして、Habiticaの冒険に出かけよう",
|
"step3": "ステップ 3:カスタマイズして、Habiticaの冒険に出かけよう",
|
||||||
|
|||||||
@@ -277,8 +277,8 @@
|
|||||||
"questBurnoutBossRageSeasonalShop": "`モエツ鬼は、消耗の一撃を放った!`\n\nあーっ! 私たちの未了の日課が、モエツ鬼の炎のえさになってしまい、再度一撃を放つだけのエネルギーとなってしまいました! したたり落ちるスペクトルの炎が、季節の店をおそいました。恐る恐るのぞくと、陽気な季節の魔女が消耗した魂となって、ぶら下がっています。\n\nNPC たちを救わないと! Habitica の民よ、急いで自分のタスクをこなし、モエツ鬼が三度の攻撃を加えてくる前に退治しましょう!",
|
"questBurnoutBossRageSeasonalShop": "`モエツ鬼は、消耗の一撃を放った!`\n\nあーっ! 私たちの未了の日課が、モエツ鬼の炎のえさになってしまい、再度一撃を放つだけのエネルギーとなってしまいました! したたり落ちるスペクトルの炎が、季節の店をおそいました。恐る恐るのぞくと、陽気な季節の魔女が消耗した魂となって、ぶら下がっています。\n\nNPC たちを救わないと! Habitica の民よ、急いで自分のタスクをこなし、モエツ鬼が三度の攻撃を加えてくる前に退治しましょう!",
|
||||||
"questBurnoutBossRageTavern": "`モエツ鬼が、消耗の一撃を下した!`\n\nたくさんの Habitica の人びとは、キャンプ場にひそみ、モエツ鬼から隠れていますが、もう無理です! 天をも揺るがす吠え声とともに、モエツ鬼は熱さで白く光る手でキャンプ場を一かき。キャンプ場の支配人・Danielが、モエツ鬼の手に捕まり、目の前で消耗した魂へと姿を変えられてしまいました!\n\nこのせっかちがもたらす恐怖は、そう長くはつづきません。あきらめてはいけません…モエツ鬼にとどめを刺すまで、あとほんの少しです!",
|
"questBurnoutBossRageTavern": "`モエツ鬼が、消耗の一撃を下した!`\n\nたくさんの Habitica の人びとは、キャンプ場にひそみ、モエツ鬼から隠れていますが、もう無理です! 天をも揺るがす吠え声とともに、モエツ鬼は熱さで白く光る手でキャンプ場を一かき。キャンプ場の支配人・Danielが、モエツ鬼の手に捕まり、目の前で消耗した魂へと姿を変えられてしまいました!\n\nこのせっかちがもたらす恐怖は、そう長くはつづきません。あきらめてはいけません…モエツ鬼にとどめを刺すまで、あとほんの少しです!",
|
||||||
"questFrogText": "散らかしカエルの沼",
|
"questFrogText": "散らかしカエルの沼",
|
||||||
"questFrogNotes": "あなた達がヨドミ沼をのろのろと歩いていると、@starsystemicが大きな看板を指さしました。そこにはこうあります「進み続けなさい--できるものなら」<br><br>「そんなに難しいことじゃないだろう!」@RosemonkeyCTが言います。「道は広いし、見晴らしもいい!」<br><br>しかし進み続けるうち、あなた達は通り道が徐々に沼の汚れにふさがれ、奇妙な青いゴミやがらくたが散らかされていくのに気づきます。とうとう、先に進むことはできなくなってしまいました。<br><br>どうしてこんな汚い場所に来てしまったのだろうとあなたが周囲を見回していると、@Jon Arjinbornが「あれを見ろ!」と叫びました。汚い洗濯物で着飾り、青い炎で照らされたカエルが、怒ってぬかるみから飛び出してきます。先に進むためには、この散らかし毒ガエルを打ち破らねばなりません!",
|
"questFrogNotes": "友達と一緒にヨドミ沼をのろのろと歩いていると、@starsystemicが大きな看板を指さします。そこには、「進み続けなさい ― できるなら」と書いてあります。<br><br>「そんな難しいことじゃないでしょ!」と、@RosemonkeyCTが言います。「道は広いし、見晴らしもいいもん!」<br><br>しかし、進み続けるうち、通り道が徐々に沼の汚れにふさがれ、奇妙な青いゴミやがらくたが散らかされていくことに気づきます。とうとう、先に進むことはできなくなってしまいました。<br><br>どうしてこんなに汚くなったのだろう、と周囲を見回していると、「気を付けて!」と、@Jon Arjinbornの叫び声が聞こえてきます。汚い洗濯物を身につけて、青い炎で照らされたカエルが、怒って泥沼から飛び出てきます。先に進むためには、この散らかし毒ガエルを打ち破らなければなりません!",
|
||||||
"questFrogCompletion": "カエルは小さくなって、泥の中に戻っていきました。やりました。カエルがすごすごと去っていった後には、青いネバネバは消え、目の前は晴れていきました。<br><br>道の真ん中でしゃがみこんでいると、そこには 3 つのきれいなたまごが。「透明の水槽に入れてやれば、かわいいオタマジャクシが見られるよ!」と、@Breadstrings 。「ほら、あなたが持って帰んなよ。」",
|
"questFrogCompletion": "戦いを負けたカエルは縮こまって、泥の中に戻っていきます。カエルがにゅるりと去っていくと、青いスライムが消え、視界が明けます。<br><br>なんと、道の真ん中に 3 つのきれいなたまごが見えてきました!「透明な殻の中に小さなオタマジャクシが見れるよ!」と、@Breadstrings 。「これ、あなたが持って帰りな。」",
|
||||||
"questFrogBoss": "散らかしカエル",
|
"questFrogBoss": "散らかしカエル",
|
||||||
"questFrogDropFrogEgg": "カエル(たまご)",
|
"questFrogDropFrogEgg": "カエル(たまご)",
|
||||||
"questFrogUnlockText": "市場でカエルのたまごを買えるようになります",
|
"questFrogUnlockText": "市場でカエルのたまごを買えるようになります",
|
||||||
@@ -776,5 +776,35 @@
|
|||||||
"questCrabBoss": "いじわるカニ",
|
"questCrabBoss": "いじわるカニ",
|
||||||
"questCrabRageTitle": "気まぐれないじわる",
|
"questCrabRageTitle": "気まぐれないじわる",
|
||||||
"questGiraffeText": "キ・リン",
|
"questGiraffeText": "キ・リン",
|
||||||
"questOpalUnlockText": "オパールのたまごがえしの薬を市場で買えるようになる"
|
"questOpalUnlockText": "オパールのたまごがえしの薬を市場で買えるようになる",
|
||||||
|
"questGiraffeNotes": "イッポイッポ草原の長い草の中を歩いて、タスクから休憩するために自然を感じ取っている途中。小山を通り抜けると、遠くに物がたくさん置いてあることに気づく。楽器、画材、電子機器などがたくさん集まっているようだ。<br><br>ちょっと近づいてみると、「おい!何してるの?!」と、アカシアの木の後ろから叫び声が聞こえる。カッコいいサングラスをつけた、背の高くて堂々としたキリンが現れる。手にはギターを持っていて、長い首からカメラがぶら下がっている。「これは全部僕の物だよ!気を付けて、何も触らないで!」<br><br>多くの物にほこりがたまっていることに気づく。「わぁ、趣味がたくさんあるんだね!好きな作品とか、見せてくれない?」と聞いてみる。<br><br>キリンは集めたものを全部見渡すと、顔をそむけてしまう。「こんなにたくさんあるのに、どこから始めたらいいのか、わからないんだよ!やる気が出るように手伝って!」",
|
||||||
|
"questRaccoonBoss": "欲張りなアライグマ",
|
||||||
|
"questRaccoonDropRaccoonEgg": "アライグマ(たまご)",
|
||||||
|
"questRaccoonUnlockText": "市場でアライグマのたまごが買えるようになります。",
|
||||||
|
"questGiraffeBoss": "キ・リン",
|
||||||
|
"questGiraffeDropGiraffeEgg": "キリン(たまご)",
|
||||||
|
"questChameleonText": "騒がしいカメレオン",
|
||||||
|
"questChameleonBoss": "騒がしいカメレオン",
|
||||||
|
"questChameleonDropChameleonEgg": "カメレオン(たまご)",
|
||||||
|
"questGiraffeUnlockText": "市場でキリンのたまごが買えるようになります。",
|
||||||
|
"questChameleonUnlockText": "市場でカメレオンのたまごが買えるようになります",
|
||||||
|
"questCrabDropCrabEgg": "カニ(たまご)",
|
||||||
|
"questCrabUnlockText": "市場でカニのたまごが買えるようになります。",
|
||||||
|
"questDogDropDogEgg": "犬(たまご)",
|
||||||
|
"questDogUnlockText": "市場で犬のたまごが買えるようになります。",
|
||||||
|
"questPlatypusDropPlatypusEgg": "カモノハシ(たまご)",
|
||||||
|
"questOtterDropOtterEgg": "ラッコ(たまご)",
|
||||||
|
"questOtterUnlockText": "市場でラッコのたまごが買えるようになります",
|
||||||
|
"questJadeDropJadePotion": "ジェイドのたまごがえしの薬",
|
||||||
|
"questJadeUnlockText": "市場でジェイドのたまごがえしの薬が買えるようになります。",
|
||||||
|
"questAlpacaDropAlpacaEgg": "アルパカ(たまご)",
|
||||||
|
"questAlpacaUnlockText": "市場でアルパカのたまごが買えるようになります",
|
||||||
|
"questCatDropCatEgg": "ネコ(たまご)",
|
||||||
|
"questCatUnlockText": "市場でネコのたまごが買えるようになります。",
|
||||||
|
"questPlatypusText": "完璧主義者のカモノハシ",
|
||||||
|
"questPlatypusUnlockText": "市場でカモノハシのたまごが買えるようになります",
|
||||||
|
"questOpalText": "不思議なオパールの伝説",
|
||||||
|
"questOpalCollectOpalGems": "オパールの宝石",
|
||||||
|
"questOpalDropOpalPotion": "オパールのたまごがえしの薬",
|
||||||
|
"questGiraffeCompletion": "キ・リンの物の整理を助けてあげると、なんだか楽しくなって元気が出る!<br><br>キリンはギターを手に取って、教則本を開いて、さっそく音を出してみる。「君のおかげでやる気が出たよ!ありがとう!まだまだ先はあるけどね。これ、お礼にあげる!」"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -116,7 +116,7 @@
|
|||||||
"generate": "生成する",
|
"generate": "生成する",
|
||||||
"getCodes": "コードを取得する",
|
"getCodes": "コードを取得する",
|
||||||
"webhooks": "Webhook",
|
"webhooks": "Webhook",
|
||||||
"webhooksInfo": "Webhookは、タスクの採点や更新、グループ内のメッセージ送信など、特定のアクションが実行されたときに通知を受け取る方法を開発者に提供します。Webhookを作成することで、Habiticaの変更を監視し、その変更に対応するアプリを構築することができます。<br><br>Webhookに関する追加情報や例については、<a target=\"_blank\" href=\"https://habitica.fandom.com/wiki/Webhooks\">API Docs</a>をご覧ください",
|
"webhooksInfo": "Webhookは、タスクの採点や更新、グループ内のメッセージ送信など、特定のアクションが実行されたときに通知を受け取る方法を開発者に提供します。Webhookを作成することで、Habiticaの変更を監視し、その変更に対応するアプリを構築することができます。<br><br>Webhookに関する追加情報や例については、<a target=\"_blank\" href=\"https://habitica.com/apidoc/#api-Webhook-AddWebhook\">API Docs</a>をご覧ください。",
|
||||||
"enabled": "有効",
|
"enabled": "有効",
|
||||||
"webhookURL": "webフック URL",
|
"webhookURL": "webフック URL",
|
||||||
"invalidUrl": "無効な Url",
|
"invalidUrl": "無効な Url",
|
||||||
@@ -246,11 +246,11 @@
|
|||||||
"resetDetail3": "すべてのタスク(チャレンジのものを除く)は永久に削除され、履歴データもすべて失われます。",
|
"resetDetail3": "すべてのタスク(チャレンジのものを除く)は永久に削除され、履歴データもすべて失われます。",
|
||||||
"resetDetail4": "有料プランのミステリーアイテムと無料記念アイテムを除くすべての装備が失われます。削除されたアイテムは、すべての限定装備を含めて買い戻すことができます(クラス固有の装備を買い戻すには、正しいクラスに属している必要があります)。",
|
"resetDetail4": "有料プランのミステリーアイテムと無料記念アイテムを除くすべての装備が失われます。削除されたアイテムは、すべての限定装備を含めて買い戻すことができます(クラス固有の装備を買い戻すには、正しいクラスに属している必要があります)。",
|
||||||
"APICopied": "APIトークンがクリップボードにコピーされました。",
|
"APICopied": "APIトークンがクリップボードにコピーされました。",
|
||||||
"APITokenDisclaimer": "<b>あなたのAPI Tokenはパスワードのようなものです。公には共有しないでください。</b>ユーザーIDの入力を求められることがありますが、Githubを含め、他の人が見られる場所にAPI Tokenを投稿しないでください。<br><br><b>注意:</b>新しいAPI Tokenが必要な場合(誤って共有してしまった場合など)、<a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>にあなたのユーザーIDと現在のTokenをメールしてください。一度リセットされたら、ウェブサイトやモバイルアプリからログアウトし、新しいTokenをハビティカの他のツールに提供することで、すべてを再認証する必要があります。",
|
"APITokenDisclaimer": "<b>あなたのAPIトークンはパスワードのようなものです。だれとも共有しないでください。</b>ユーザーIDの入力を求められることはありますが、Githubを含め、他の人が見られる場所にAPIトークンを投稿しないでください。<br><br><b>新しいAPIトークンが必要な場合</b>(誤って共有してしまった場合など)、パスワードを変えてリセットすることができます。一度リセットされたら、Habiticaを使用するデバイスに再びログインし、サードパーティーツールを使用する場合、APIトークンを更新する必要があります。",
|
||||||
"changeEmailDisclaimer": "Habiticaにログインしたり、お知らせを受け取ったりするためのメールアドレスです。",
|
"changeEmailDisclaimer": "Habiticaにログインしたり、お知らせを受け取ったりするためのメールアドレスです。",
|
||||||
"userNameSuccess": "ユーザー名の変更に成功しました",
|
"userNameSuccess": "ユーザー名の変更に成功しました",
|
||||||
"addWebhook": "webフックの追加",
|
"addWebhook": "webフックの追加",
|
||||||
"changePasswordDisclaimer": "パスワードは8文字以上でなければなりません。他で使用していない強力なパスワードをお勧めします。",
|
"changePasswordDisclaimer": "パスワードは8文字以上でなければなりません。パスワードを変更すると他のデバイスや使用中のサードパーティーツールからログアウトされます。",
|
||||||
"audioThemeDisclaimer": "効果音のテーマは、Habiticaのウェブサイトにオプションの効果音を追加します。音量レベルはコンピュータの音量設定で調節できます。",
|
"audioThemeDisclaimer": "効果音のテーマは、Habiticaのウェブサイトにオプションの効果音を追加します。音量レベルはコンピュータの音量設定で調節できます。",
|
||||||
"noClassSelected": "クラス選択なし",
|
"noClassSelected": "クラス選択なし",
|
||||||
"changeClassDisclaimer": "クラスを変更すると、既存のステータスポイントはすべて払い戻されます。新しいクラスを選択したら、プロフィールのステータスセクションからステータスポイントを調整してください。",
|
"changeClassDisclaimer": "クラスを変更すると、既存のステータスポイントはすべて払い戻されます。新しいクラスを選択したら、プロフィールのステータスセクションからステータスポイントを調整してください。",
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"subscription": "有料プラン",
|
"subscription": "有料プラン",
|
||||||
"subscriptions": "有料プラン",
|
"subscriptions": "有料プラン",
|
||||||
"sendGems": "ジェムを送る",
|
"sendGems": "ジェムを送る",
|
||||||
"buyGemsGold": "無料のマンスリージェム",
|
"buyGemsGold": "毎月無料のジェム",
|
||||||
"mustSubscribeToPurchaseGems": "ゴールドでジェムを買うには、有料プランに加入する必要があります",
|
"mustSubscribeToPurchaseGems": "ゴールドでジェムを買うには、有料プランに加入する必要があります",
|
||||||
"reachedGoldToGemCapQuantity": "あなたがリクエストした数 <%= quantity %> は、今月中に購入できる上限数を超えています(<%= convCap %>)。毎月1日から3日のいずれかの時点で、最大数が利用可能になります。有料プランにご加入いただきありがとうございます!",
|
"reachedGoldToGemCapQuantity": "あなたがリクエストした数 <%= quantity %> は、今月中に購入できる上限数を超えています(<%= convCap %>)。毎月1日から3日のいずれかの時点で、最大数が利用可能になります。有料プランにご加入いただきありがとうございます!",
|
||||||
"mysteryItem": "毎月の限定アイテム",
|
"mysteryItem": "毎月の限定アイテム",
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
"subGemName": "有料会員のジェム",
|
"subGemName": "有料会員のジェム",
|
||||||
"maxBuyGems": "今月ゴールドで購入可能なジェムをすべて買い切りました。来月の1~3日頃にまた新しく購入可能になります。有料プランにご加入いただきありがとうございます!",
|
"maxBuyGems": "今月ゴールドで購入可能なジェムをすべて買い切りました。来月の1~3日頃にまた新しく購入可能になります。有料プランにご加入いただきありがとうございます!",
|
||||||
"timeTravelers": "タイムトラベラー",
|
"timeTravelers": "タイムトラベラー",
|
||||||
"timeTravelersPopoverNoSubMobile": "時の扉を開いて謎のタイムトラベラーを呼び出すには、神秘の砂時計が必要なようです。",
|
"timeTravelersPopoverNoSubMobile": "有料会員はタイムトラベラーの店で使える神秘の砂時計が毎月もらえます!",
|
||||||
"timeTravelersPopover": "神秘の砂時計によって時の扉が開かれた! さあ、我々に取り寄せてほしい過去や未来のものを選んでくれたまえ。",
|
"timeTravelersPopover": "神秘の砂時計によって時の扉が開かれた! さあ、我々に取り寄せてほしい過去や未来のものを選んでくれたまえ。",
|
||||||
"mysterySetNotFound": "ミステリーセットが見つからない、またはすでに持っています。",
|
"mysterySetNotFound": "ミステリーセットが見つからない、またはすでに持っています。",
|
||||||
"mysteryItemIsEmpty": "ミステリー アイテムが売り切れ",
|
"mysteryItemIsEmpty": "ミステリー アイテムが売り切れ",
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
"mysterySet301703": "クジャクのスチームパンクセット",
|
"mysterySet301703": "クジャクのスチームパンクセット",
|
||||||
"mysterySet301704": "キジのスチームパンクセット",
|
"mysterySet301704": "キジのスチームパンクセット",
|
||||||
"mysterySetwondercon": "Wondercon イベント",
|
"mysterySetwondercon": "Wondercon イベント",
|
||||||
"subUpdateCard": "クレジットカードを更新する",
|
"subUpdateCard": "クレジットカードを変更する",
|
||||||
"subUpdateTitle": "更新",
|
"subUpdateTitle": "更新",
|
||||||
"notEnoughHourglasses": "神秘の砂時計が足りません。",
|
"notEnoughHourglasses": "神秘の砂時計が足りません。",
|
||||||
"petsAlreadyOwned": "このペットはすでにもっています。",
|
"petsAlreadyOwned": "このペットはすでにもっています。",
|
||||||
@@ -120,9 +120,9 @@
|
|||||||
"gemBenefit2": "アバターをHabiticaの世界観に溶け込ませるための背景!",
|
"gemBenefit2": "アバターをHabiticaの世界観に溶け込ませるための背景!",
|
||||||
"gemBenefit3": "ペットのたまごが手に入る、愉快な連続クエスト。",
|
"gemBenefit3": "ペットのたまごが手に入る、愉快な連続クエスト。",
|
||||||
"gemBenefit4": "アバターの能力値をリセット、またはクラスを変更する。",
|
"gemBenefit4": "アバターの能力値をリセット、またはクラスを変更する。",
|
||||||
"subscriptionBenefit1": "商人のAlexanderは、市場でジェムを1つにつき20ゴールドですぐ売ってくれます!",
|
"subscriptionBenefit1": "市場でゴールドで購入可能なジェムを最大50個得て、クエスト、カスタマイズ、ペットなどが購入できます!",
|
||||||
"subscriptionBenefit3": "毎日の落とし物上限を2倍にして、Habiticaでより多くのアイテムを見つけましょう。",
|
"subscriptionBenefit3": "毎日2倍のタマゴ、たまごがえしの薬と餌を見つけてペットコレクションを増やしましょう!",
|
||||||
"subscriptionBenefit4": "毎月、あなたのアバターを着飾るためのユニークでおしゃれなアイテムです。",
|
"subscriptionBenefit4": "最新の限定装備で着飾りましょう。有料プランに登録して<%= month %>の <%= currentMysterySetName %>をゲットしよう!",
|
||||||
"subscriptionBenefit5": "初めて有料会員になったときは、ロイヤルパープルのジャッカロープのペットを受け取れます。",
|
"subscriptionBenefit5": "初めて有料会員になったときは、ロイヤルパープルのジャッカロープのペットを受け取れます。",
|
||||||
"subscriptionBenefit6": "タイムトラベラーの店でアイテムを買うために神秘の砂時計を手に入れましょう!",
|
"subscriptionBenefit6": "タイムトラベラーの店でアイテムを買うために神秘の砂時計を手に入れましょう!",
|
||||||
"purchaseAll": "セットを購入する",
|
"purchaseAll": "セットを購入する",
|
||||||
@@ -148,7 +148,7 @@
|
|||||||
"viewSubscriptions": "有料プランを見る",
|
"viewSubscriptions": "有料プランを見る",
|
||||||
"giftASubscription": "有料プランをプレゼントする",
|
"giftASubscription": "有料プランをプレゼントする",
|
||||||
"doubleDropCap": "落とし物を2倍に",
|
"doubleDropCap": "落とし物を2倍に",
|
||||||
"monthlyMysteryItems": "毎月のミステリーアイテム",
|
"monthlyMysteryItems": "毎月の限定装備セット",
|
||||||
"subscribersReceiveBenefits": "有料会員はこれらの有益な特典を受けられます!",
|
"subscribersReceiveBenefits": "有料会員はこれらの有益な特典を受けられます!",
|
||||||
"cancelYourSubscription": "有料プランを解約しますか?",
|
"cancelYourSubscription": "有料プランを解約しますか?",
|
||||||
"needToUpdateCard": "カードを更新する必要がありますか?",
|
"needToUpdateCard": "カードを更新する必要がありますか?",
|
||||||
@@ -236,6 +236,25 @@
|
|||||||
"mysterySet202408": "神秘の神盾セット",
|
"mysterySet202408": "神秘の神盾セット",
|
||||||
"mysterySet202409": "ヘリオトロープの魔法使いセット",
|
"mysterySet202409": "ヘリオトロープの魔法使いセット",
|
||||||
"mysterySet202410": "キャンディーコーンのキツネセット",
|
"mysterySet202410": "キャンディーコーンのキツネセット",
|
||||||
"mysterySet202412": "ステッキキャンディのワタオウサギセット",
|
"mysterySet202412": "キャンディケインのワタオウサギセット",
|
||||||
"mysterySet202411": "毛むくじゃらの喧嘩屋セット"
|
"mysterySet202411": "毛むくじゃらの喧嘩屋セット",
|
||||||
|
"mysterySet202508": "豪華な刃セット",
|
||||||
|
"mysterySet202503": "ジェイドのジャガーノートセット",
|
||||||
|
"mysterySet202501": "フロストバインダーセット",
|
||||||
|
"mysterySet202505": "羽ばたくアゲハチョウセット",
|
||||||
|
"mysterySet202507": "元気なスケーターセット",
|
||||||
|
"subscribeTo": "に登録",
|
||||||
|
"monthlyMysticHourglass": "毎月の神秘の砂時計",
|
||||||
|
"unlockNGems": "毎月<strong><%= count %> 個のジェム</strong>をアンロックしよう",
|
||||||
|
"resubscribeToPickUp": "有料プランに再登録して中断したところから続けましょう!",
|
||||||
|
"popular": "人気",
|
||||||
|
"subscribe": "有料プランの登録",
|
||||||
|
"giftSubscriptionLeadText": "贈りたい有料プランを選択しよう!この購入は自動的に更新されません。",
|
||||||
|
"recurringMonthly": "毎月自動更新",
|
||||||
|
"maxGemCap": "<strong>最大限のジェム</strong>からスタート",
|
||||||
|
"nMonthsGift": "<%= months %>ヶ月プラン",
|
||||||
|
"oneMonthGift": "1ヶ月プラン",
|
||||||
|
"selectPayment": "お支払い方法を選択する",
|
||||||
|
"mysterySet202504": "伝説の雪男セット",
|
||||||
|
"mysterySet202506": "太陽の輝きセット"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
"sunsetFaqList10": "Spelers worden tevens aangemoedigd te mailen naar <a href='mailto:admin@habitica.com'>admin@habitica.com</a>met de vragen waarop ze geen antwoord konden vinden in bovenstaande links.",
|
"sunsetFaqList10": "Spelers worden tevens aangemoedigd te mailen naar <a href='mailto:admin@habitica.com'>admin@habitica.com</a>met de vragen waarop ze geen antwoord konden vinden in bovenstaande links.",
|
||||||
"sunsetFaqPara20": "Habitica's Gemeenschapsrichtlijnen zullen bijgewerkt worden op het moment dat de service Herberg en Gilden ophouden te bestaan. Ze zullen de klemtoon leggen op gemeenschapsregels die in relatie staan tot het spelersprofiel, Uitdagingen en berichten in private ruimtes. Onze Gebruikersvoorwaarden waren steeds van toepassing op zowel publieke als private ruimtes, en vereisen niet meteen een update hierdoor.",
|
"sunsetFaqPara20": "Habitica's Gemeenschapsrichtlijnen zullen bijgewerkt worden op het moment dat de service Herberg en Gilden ophouden te bestaan. Ze zullen de klemtoon leggen op gemeenschapsregels die in relatie staan tot het spelersprofiel, Uitdagingen en berichten in private ruimtes. Onze Gebruikersvoorwaarden waren steeds van toepassing op zowel publieke als private ruimtes, en vereisen niet meteen een update hierdoor.",
|
||||||
"contentQuestion0": "Wat veranderd er?",
|
"contentQuestion0": "Wat veranderd er?",
|
||||||
"commonQuestions": "Veelvoorkomende vragen",
|
"commonQuestions": "Veelvoorkomende Vragen",
|
||||||
"faqQuestion25": "Wat zijn de verschillende type taken?",
|
"faqQuestion25": "Wat zijn de verschillende type taken?",
|
||||||
"faqQuestion40": "Wat zijn Edelstenen en hoe kan ik ze krijgen?",
|
"faqQuestion40": "Wat zijn Edelstenen en hoe kan ik ze krijgen?",
|
||||||
"faqQuestion48": "Kan ik Habitica spelen met anderen?",
|
"faqQuestion48": "Kan ik Habitica spelen met anderen?",
|
||||||
@@ -90,5 +90,13 @@
|
|||||||
"faqQuestion43": "Hoe kan ik Quests starten?",
|
"faqQuestion43": "Hoe kan ik Quests starten?",
|
||||||
"webFaqAnswer43": "Om een Quest te starten, moet je lid zijn van een groep. Groepen kunnen solo-avonturen zijn waarin je Quests alleen aangaat, of je kunt andere Habitica-spelers uitnodigen om Quests sneller aan te pakken!\n\nKies een Quest-scroll uit je inventaris door op de knop “Quest starten” te klikken in je groep. Voltooi je taken zoals je normaal doet om voortgang te boeken in de Quest! Je bouwt schade op tegen een monster als je een Baas-Quest doet, of je maakt kans om voorwerpen te vinden als je een Verzamel-Quest doet. Alle opgebouwde voortgang wordt de volgende dag toegepast.\n\nWanneer je genoeg schade hebt aangericht of alle voorwerpen hebt verzameld, is de Quest voltooid en ontvang je je beloningen!",
|
"webFaqAnswer43": "Om een Quest te starten, moet je lid zijn van een groep. Groepen kunnen solo-avonturen zijn waarin je Quests alleen aangaat, of je kunt andere Habitica-spelers uitnodigen om Quests sneller aan te pakken!\n\nKies een Quest-scroll uit je inventaris door op de knop “Quest starten” te klikken in je groep. Voltooi je taken zoals je normaal doet om voortgang te boeken in de Quest! Je bouwt schade op tegen een monster als je een Baas-Quest doet, of je maakt kans om voorwerpen te vinden als je een Verzamel-Quest doet. Alle opgebouwde voortgang wordt de volgende dag toegepast.\n\nWanneer je genoeg schade hebt aangericht of alle voorwerpen hebt verzameld, is de Quest voltooid en ontvang je je beloningen!",
|
||||||
"faqQuestion44": "Hoe kan ik Challenge-taken verwijderen?",
|
"faqQuestion44": "Hoe kan ik Challenge-taken verwijderen?",
|
||||||
"webFaqAnswer44": "Je moet de Challenge verlaten of wachten tot de Challenge wordt afgesloten om de bijbehorende taken te kunnen verwijderen. Een rood megafoonpictogram betekent dat de Challenge is afgesloten, terwijl een grijze megafoon betekent dat de Challenge nog loopt.\n\nOm Challenge-taken te verwijderen in de Android-app:\n1. Tik op een taak die bij de Challenge hoort.\n2. Tik rechtsboven op het scherm op “Verwijderen”.\n3. Kies om de Challenge-taken van je takenlijst te verwijderen.\n\nOm Challenge-taken te verwijderen in de iOS-app:\n1. Zoek de Challenge-taak die je wilt verwijderen en kijk naar het megafoonpictogram.\n2. Als het megafoonpictogram rood is, tik op de taak en selecteer onderaan “Verwijderen”.\n3. Als het megafoonpictogram grijs is, moet je de Challenge opzoeken en deze verlaten om de taak te verwijderen.\n\nOm Challenge-taken te verwijderen op de website:\n1. Zoek de Challenge-taak die je wilt verwijderen en kijk naar het megafoonpictogram.\n2. Als het megafoonpictogram rood is, klik erop en kies om de taken van je takenlijst te verwijderen.\n3. Als het megafoonpictogram grijs is, moet je de Challenge opzoeken en deze verlaten om de taak te verwijderen."
|
"webFaqAnswer44": "Je moet de Challenge verlaten of wachten tot de Challenge wordt afgesloten om de bijbehorende taken te kunnen verwijderen. Een rood megafoonpictogram betekent dat de Challenge is afgesloten, terwijl een grijze megafoon betekent dat de Challenge nog loopt.\n\nOm Challenge-taken te verwijderen in de Android-app:\n1. Tik op een taak die bij de Challenge hoort.\n2. Tik rechtsboven op het scherm op “Verwijderen”.\n3. Kies om de Challenge-taken van je takenlijst te verwijderen.\n\nOm Challenge-taken te verwijderen in de iOS-app:\n1. Zoek de Challenge-taak die je wilt verwijderen en kijk naar het megafoonpictogram.\n2. Als het megafoonpictogram rood is, tik op de taak en selecteer onderaan “Verwijderen”.\n3. Als het megafoonpictogram grijs is, moet je de Challenge opzoeken en deze verlaten om de taak te verwijderen.\n\nOm Challenge-taken te verwijderen op de website:\n1. Zoek de Challenge-taak die je wilt verwijderen en kijk naar het megafoonpictogram.\n2. Als het megafoonpictogram rood is, klik erop en kies om de taken van je takenlijst te verwijderen.\n3. Als het megafoonpictogram grijs is, moet je de Challenge opzoeken en deze verlaten om de taak te verwijderen.",
|
||||||
|
"faqQuestion45": "Mijn personage is veranderd in een sneeuwpop, zeester, bloem of geest. Hoe kan ik terug veranderen?",
|
||||||
|
"webFaqAnswer45": "Één van jouw groepsleden heeft een Seizoens Winkel transformatie voorwerp op jou gebruikt! Jouw personage zal de volgende dag weer normaal worden. Als je de transformatie eerder wilt verwijderen, kan je een tegengif (Zout, Zand, Bloemblaadjes-vrij of Ondoorzichtig drankje) kopen bij Beloningen.",
|
||||||
|
"faqQuestion46": "Hoe meld ik een bug?",
|
||||||
|
"webFaqAnswer46": "Als je denkt dat je een bug bent tegengekomen, laat het ons dan weten!\n\nOm een bug in de mobiele apps te melden:\n *In het menu, selecteer Ondersteuning en tik op ''Hulp krijgen'' en scroll omlaag naar ''Meld een bug''\n\nOm een bug op de website te melden:\n *In het menu, selecteer ''Meld een bug''",
|
||||||
|
"faqQuestion47": "Kan ik gegevens zien om te bekijken hoe goed ik mijn taken en gewoontes heb gedaan?",
|
||||||
|
"webFaqAnswer47": "Op dit moment heeft Habitica geen visuele weergave van je taak gegevens in de loop van de tijd. Echter kan je op de Habitica website je taak gegevens exporteren via het tabblad ''Site Gegevens'' in Instellingen.",
|
||||||
|
"webFaqAnswer48": "Ja, met Groepen! Je kunt je eigen Groep starten of je aansluiten bij een bestaande Groep. Samen spelen met andere Habitica spelers is een geweldige manier om Queestes aan te gaan, versterking te ontvangen door de vaardigheden van Groepsleden en je motivatie een boost te geven door extra verantwoordelijkheid.",
|
||||||
|
"faqQuestion49": "Hoe vind ik een Groep als ik niet bij een Groep ben aangesloten?"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2601,5 +2601,48 @@
|
|||||||
"armorSpecialSummer2022WarriorNotes": "Maak je klaar voor een waterige strijd terwijl je jezelf omringt met deze wervelende, spiralerende kolom van lucht en mist. Verhoogt Constitutie met <%= con %>. Beperkte Editie 2022 Zomeruitrusting.",
|
"armorSpecialSummer2022WarriorNotes": "Maak je klaar voor een waterige strijd terwijl je jezelf omringt met deze wervelende, spiralerende kolom van lucht en mist. Verhoogt Constitutie met <%= con %>. Beperkte Editie 2022 Zomeruitrusting.",
|
||||||
"armorSpecialSummer2022MageNotes": "Wanneer u dit pantser draagt, glijdt u gemakkelijk door uw werk zoals de mantarog door water glijdt. Verhoogt Intelligentie met <%= int %>. Beperkte Editie 2022 Zomeruitrusting.",
|
"armorSpecialSummer2022MageNotes": "Wanneer u dit pantser draagt, glijdt u gemakkelijk door uw werk zoals de mantarog door water glijdt. Verhoogt Intelligentie met <%= int %>. Beperkte Editie 2022 Zomeruitrusting.",
|
||||||
"gearItemsCompleted": "Je bezit alle <%= klass %> uitrusting! Nieuwe uitrustingen worden uitgebracht tijdens de seizoensgebonden Gala's.",
|
"gearItemsCompleted": "Je bezit alle <%= klass %> uitrusting! Nieuwe uitrustingen worden uitgebracht tijdens de seizoensgebonden Gala's.",
|
||||||
"moreArmoireGearAvailable": "Tot dan kan je <%= armoireCount %> stukken uitrusting in de Betoverde Kast vinden!"
|
"moreArmoireGearAvailable": "Tot dan kan je <%= armoireCount %> stukken uitrusting in de Betoverde Kast vinden!",
|
||||||
|
"headAccessoryMystery202307Notes": "Deze machtige Kroon roept cyclonen en stormachtig weer op! Verleent geen voordeel. Juli 2023 Item voor Abonnees.",
|
||||||
|
"headAccessoryMystery202505Text": "Hoogvliegende zwaluwstaartantennes",
|
||||||
|
"headAccessoryMystery202410Text": "Snoepmaïsoorjes",
|
||||||
|
"eyewearMystery202312Text": "Winterse Blauwe Ogen",
|
||||||
|
"headAccessoryMystery202212Notes": "Versterk je warmte en vriendschap tot nieuwe hoogten met deze sierlijke gouden tiara. Verleent geen voordeel. December 2022 Item voor Abonnees.",
|
||||||
|
"headAccessoryMystery202310Text": "Kroon van spookachtige lichten",
|
||||||
|
"eyewearArmoireRoseColoredGlassesText": "Roze bril",
|
||||||
|
"headAccessoryMystery202305Text": "Eventide-hoorns",
|
||||||
|
"headAccessoryMystery202405Text": "Vergulde drakenhoorns",
|
||||||
|
"headAccessoryMystery202302Notes": "Het purr-fecte accessoire om je betoverende glimlach te accentueren. Verleent geen voordeel. Februari 2023 Item voor Abonnees.",
|
||||||
|
"eyewearMystery202503Notes": "Deze doordringende blik zal elke vechter die je durft uit te dagen met angst vervullen! Geeft geen voordeel. Maart 2025 voorwerp voor Abonnees.",
|
||||||
|
"eyewearMystery202503Text": "Jade Juggernaut Ogen",
|
||||||
|
"eyewearMystery202406Text": "Spookpiratenmasker",
|
||||||
|
"headAccessoryMystery202212Text": "Gletsjer Tiara",
|
||||||
|
"headAccessoryMystery202205Text": "Schemervleugelige drakenhoorns",
|
||||||
|
"headAccessoryMystery202203Text": "Onverschrokken Libelle Kroon",
|
||||||
|
"headAccessoryMystery202203Notes": "Heb je een extra snelheidsboost nodig? De kleine decoratieve vleugeltjes op deze Kroon zijn krachtiger dan ze lijken! Verleent geen voordeel. Maart 2022 Item voor Abonnees.",
|
||||||
|
"headAccessoryMystery202307Text": "Kraken's Kroon",
|
||||||
|
"eyewearMystery202201Text": "Middernachtelijk feestvierdersmasker",
|
||||||
|
"eyewearArmoireComedyMaskText": "Komedie Masker",
|
||||||
|
"eyewearArmoireTragedyMaskText": "Tragedie Masker",
|
||||||
|
"eyewearMystery202108Text": "Vurige Ogen",
|
||||||
|
"eyewearMystery202208Text": "Sprankelende Ogen",
|
||||||
|
"eyewearMystery202303Text": "Dromerige Ogen",
|
||||||
|
"eyewearSpecialAnniversaryText": "Habitica Helden Masker",
|
||||||
|
"headAccessorySpecialHeroicCircletText": "Heroïsche Kroon",
|
||||||
|
"bodyArmoireKarateOrangeBeltText": "Oranje band",
|
||||||
|
"headAccessoryMystery202305Notes": "Deze hoorns gloeien door het weerkaatste maanlicht. Verleent geen voordeel. Mei 2023 Item voor Abonnees.",
|
||||||
|
"headAccessoryMystery202205Notes": "Deze schitterende hoorns zijn zo helder als een zonsondergang in de woestijn. Verleent geen voordeel. Mei 2022 Item voor Abonnees.",
|
||||||
|
"eyewearMystery202202Text": "Turquoise Ogen met Blush",
|
||||||
|
"eyewearMystery202204BText": "Virtueel Gezicht",
|
||||||
|
"headAccessoryMystery202302Text": "Bedrieglijke tabbyoren",
|
||||||
|
"bodyArmoireKarateGreenBeltText": "Groene band",
|
||||||
|
"bodyArmoireKaratePurpleBeltText": "Paarse band",
|
||||||
|
"bodyArmoireKarateBlueBeltText": "Blauwe band",
|
||||||
|
"bodyArmoireKarateBrownBeltText": "Bruine band",
|
||||||
|
"bodyArmoireKarateRedBeltText": "Rode band",
|
||||||
|
"headAccessorySpecialHeroicCircletNotes": "Zwaar is het hoofd dat de kroon draagt, maar deze Kroon is zo licht als je genereuze geest. Verhoogt alle statistieken met <%= attrs %>.",
|
||||||
|
"bodyArmoireKarateBlackBeltText": "Zwarte band",
|
||||||
|
"eyewearArmoireJewelersEyeLoupeText": "Juweliersloep",
|
||||||
|
"eyewearArmoireJewelersEyeLoupeNotes": "Deze oogloep vergroot wat je aan het doen bent, zodat je absoluut elk detail kunt zien. Verhoogt de waarneming met <%= per %>. Betoverd Kabinet: juweliersset (item 2 van 4).",
|
||||||
|
"eyewearMystery202308Text": "Slaperige Ogen",
|
||||||
|
"headAccessoryMystery202309Text": "Gigantische antennes van de kometenmot"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
"showBailey": "Bailey laten zien",
|
"showBailey": "Bailey laten zien",
|
||||||
"showBaileyPop": "Breng Bailey de Stadsomroeper uit haar schuilplaats zodat je nieuws uit het verleden kunt nalezen.",
|
"showBaileyPop": "Breng Bailey de Stadsomroeper uit haar schuilplaats zodat je nieuws uit het verleden kunt nalezen.",
|
||||||
"fixVal": "Personage waarden bijstellen",
|
"fixVal": "Personage waarden bijstellen",
|
||||||
"fixValPop": "Handmatig veranderen van waarden zoals gezondheidspunten, niveau en goud.",
|
"fixValPop": "Handmatig veranderen van waarden zoals Gezondheidspunten, Niveau en Goud.",
|
||||||
"invalidLevel": "Ongeldige waarde: Niveau moet 1 of groter zijn.",
|
"invalidLevel": "Ongeldige waarde: Niveau moet 1 of hoger zijn.",
|
||||||
"enableClass": "Klassensysteem aanzetten",
|
"enableClass": "Klassensysteem aanzetten",
|
||||||
"enableClassPop": "Aanvankelijk had je geen klasse gekozen. Wil je er nu een kiezen?",
|
"enableClassPop": "Aanvankelijk had je geen klasse gekozen. Wil je er nu een kiezen?",
|
||||||
"resetAccPop": "Opnieuw starten, en alle niveaus, goud, uitrusting, geschiedenis en taken verliezen.",
|
"resetAccPop": "Opnieuw starten, en alle niveaus, goud, uitrusting, geschiedenis en taken verliezen.",
|
||||||
@@ -195,12 +195,12 @@
|
|||||||
"passwordSuccess": "Wachtwoord succesvol aangepast",
|
"passwordSuccess": "Wachtwoord succesvol aangepast",
|
||||||
"transaction_admin_update_balance": "Door beheerder gegeven",
|
"transaction_admin_update_balance": "Door beheerder gegeven",
|
||||||
"giftSubscriptionRateText": "<strong>$<%= price %> USD</strong> voor <strong><%= months %> maanden</strong>",
|
"giftSubscriptionRateText": "<strong>$<%= price %> USD</strong> voor <strong><%= months %> maanden</strong>",
|
||||||
"generalSettings": "Algemene instellingen",
|
"generalSettings": "Algemene Instellingen",
|
||||||
"taskSettings": "Taak instellingen",
|
"taskSettings": "Taak Instellingen",
|
||||||
"confirmCancelChanges": "Weet je het zeker? Je wijzigingen worden niet opgeslagen.",
|
"confirmCancelChanges": "Weet je het zeker? Je wijzigingen worden niet opgeslagen.",
|
||||||
"loginMethods": "Inlog manieren",
|
"loginMethods": "Inlog Methodes",
|
||||||
"character": "Karakter",
|
"character": "Karakter",
|
||||||
"siteData": "Website informatie",
|
"siteData": "Website Informatie",
|
||||||
"account": "Account",
|
"account": "Account",
|
||||||
"siteLanguage": "Websitetaal"
|
"siteLanguage": "Websitetaal"
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user