diff --git a/.babelrc b/.babelrc index 0bddca3824..29a41a8166 100644 --- a/.babelrc +++ b/.babelrc @@ -9,4 +9,4 @@ } ] ] -} \ No newline at end of file +} diff --git a/gulp/gulp-start.js b/gulp/gulp-start.js deleted file mode 100644 index 736f5cb325..0000000000 --- a/gulp/gulp-start.js +++ /dev/null @@ -1,11 +0,0 @@ -import gulp from 'gulp'; -import nodemon from 'gulp-nodemon'; - -import pkg from '../package.json'; - -gulp.task('nodemon', done => { - nodemon({ - script: pkg.main, - }); - done(); -}); diff --git a/gulp/gulp-tests.js b/gulp/gulp-tests.js index 64ac63902f..3a85cb59ca 100644 --- a/gulp/gulp-tests.js +++ b/gulp/gulp-tests.js @@ -49,12 +49,6 @@ function integrationTestCommand (testDir) { } /* Test task definitions */ -gulp.task('test:nodemon', gulp.series(done => { - process.env.PORT = TEST_SERVER_PORT; // eslint-disable-line no-process-env - process.env.NODE_DB_URI = TEST_DB_URI; // eslint-disable-line no-process-env - done(); -}, 'nodemon')); - gulp.task('test:prepare:mongo', cb => { const mongooseOptions = getDefaultConnectionOptions(); const connectionUrl = getDevelopmentConnectionUrl(TEST_DB_URI); diff --git a/gulpfile.js b/gulpfile.js index 86c9f32a38..bc1132913c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -21,7 +21,6 @@ if (process.env.NODE_ENV === 'production') { // eslint-disable-line no-process-e require('./gulp/gulp-build'); // eslint-disable-line global-require require('./gulp/gulp-console'); // eslint-disable-line global-require require('./gulp/gulp-sprites'); // eslint-disable-line global-require - require('./gulp/gulp-start'); // eslint-disable-line global-require require('./gulp/gulp-tests'); // eslint-disable-line global-require require('./gulp/gulp-transifex-test'); // eslint-disable-line global-require require('gulp').task('default', gulp.series('test')); // eslint-disable-line global-require diff --git a/migrations/archive/api_v3/groups.js b/migrations/archive/api_v3/groups.js index 1d1d7e3b0c..43db848add 100644 --- a/migrations/archive/api_v3/groups.js +++ b/migrations/archive/api_v3/groups.js @@ -37,7 +37,7 @@ let consoleStamp = require('console-stamp'); consoleStamp(console); // Initialize configuration -require('../../website/server/libs/api-v3/setupNconf')(); +require('../../website/server/libs/api-v3/setupNconf').default(); let MONGODB_OLD = nconf.get('MONGODB_OLD'); let MONGODB_NEW = nconf.get('MONGODB_NEW'); diff --git a/migrations/archive/api_v3/users.js b/migrations/archive/api_v3/users.js index 1560c9d3dd..2511175071 100644 --- a/migrations/archive/api_v3/users.js +++ b/migrations/archive/api_v3/users.js @@ -32,7 +32,7 @@ let moment = require('moment'); consoleStamp(console); // Initialize configuration -require('../../website/server/libs/api-v3/setupNconf')(); +require('../../website/server/libs/api-v3/setupNconf').default(); let MONGODB_OLD = nconf.get('MONGODB_OLD'); let MONGODB_NEW = nconf.get('MONGODB_NEW'); diff --git a/migrations/migration-runner.js b/migrations/migration-runner.js index c66ac2014a..e3125c8be1 100644 --- a/migrations/migration-runner.js +++ b/migrations/migration-runner.js @@ -6,7 +6,7 @@ require('@babel/register'); // eslint-disable-line import/no-extraneous-dependen function setUpServer () { const nconf = require('nconf'); // eslint-disable-line global-require, no-unused-vars const mongoose = require('mongoose'); // eslint-disable-line global-require, no-unused-vars - const setupNconf = require('../website/server/libs/setupNconf'); // eslint-disable-line global-require + const setupNconf = require('../website/server/libs/setupNconf').default; // eslint-disable-line global-require setupNconf(); diff --git a/package-lock.json b/package-lock.json index 0d4ad6223e..1b9ddf57ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "habitica", - "version": "5.36.5", + "version": "5.38.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "habitica", - "version": "5.36.5", + "version": "5.38.2", "hasInstallScript": true, "dependencies": { "@babel/core": "^7.22.10", @@ -43,7 +43,6 @@ "gulp-babel": "^8.0.0", "gulp-filter": "^7.0.0", "gulp-imagemin": "^7.1.0", - "gulp-nodemon": "^2.5.0", "gulp.spritesmith": "^6.13.0", "habitica-markdown": "^3.0.0", "helmet": "^4.6.0", @@ -55,12 +54,11 @@ "merge-stream": "^2.0.0", "method-override": "^3.0.0", "moment": "^2.29.4", - "moment-recur": "^1.0.7", + "moment-recur": "git://github.com/HabitRPG/moment-recur.git#d3e8e6da0806f13b74dd2e4d7d9053e6a63db119", "mongoose": "^8.9.5", "morgan": "^1.10.0", "nconf": "^0.12.1", "node-gcm": "^1.0.5", - "nodemon": "^2.0.20", "on-headers": "^1.0.2", "passport": "^0.5.3", "passport-facebook": "^3.0.0", @@ -151,14 +149,6 @@ "node": ">=4" } }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/code-frame/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -542,14 +532,6 @@ "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1787,231 +1769,6 @@ "node": ">=10.0.0" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", - "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", - "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", - "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", - "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", - "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", - "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", - "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", - "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", - "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", - "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", - "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", - "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", - "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", - "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/linux-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", @@ -2027,96 +1784,6 @@ "node": ">=12" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", - "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", - "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", - "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", - "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", - "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", - "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -4171,6 +3838,14 @@ "node": ">=6" } }, + "node_modules/apidoc/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/apidoc/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4201,6 +3876,41 @@ "node": ">=10" } }, + "node_modules/apidoc/node_modules/nodemon": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/apidoc/node_modules/nodemon/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/apidoc/node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -4215,6 +3925,36 @@ "node": ">=10" } }, + "node_modules/apidoc/node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/apidoc/node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/apidoc/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/apidoc/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -6195,7 +5935,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "devOptional": true, + "dev": true, "dependencies": { "file-uri-to-path": "1.0.0" } @@ -7015,15 +6755,6 @@ "node": ">=4" } }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "optional": true, - "engines": { - "node": ">=4" - } - }, "node_modules/coa/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -7117,6 +6848,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, "engines": { "node": ">=0.1.90" } @@ -8995,14 +8727,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-config-habitrpg/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-config-habitrpg/node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -10509,7 +10233,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "devOptional": true + "dev": true }, "node_modules/filename-reserved-regex": { "version": "2.0.0", @@ -11595,24 +11319,6 @@ "node": ">=0.10.0" } }, - "node_modules/glob-watcher/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, "node_modules/glob-watcher/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -12302,16 +12008,6 @@ "node": ">=8" } }, - "node_modules/gulp-nodemon": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/gulp-nodemon/-/gulp-nodemon-2.5.0.tgz", - "integrity": "sha512-vXfaP72xo2C6XOaXrNcLEM3QqDJ1x21S3x97U4YtzN2Rl2kH57++aFkAVxe6BafGRSTxs/xVfE/jNNlCv5Ym2Q==", - "dependencies": { - "colors": "^1.2.1", - "gulp": "^4.0.0", - "nodemon": "^2.0.2" - } - }, "node_modules/gulp.spritesmith": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/gulp.spritesmith/-/gulp.spritesmith-6.13.0.tgz", @@ -12544,6 +12240,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, "node_modules/has-property-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", @@ -15337,15 +15041,6 @@ "node": "*" } }, - "node_modules/mocha/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/mocha/node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -15409,9 +15104,10 @@ } }, "node_modules/moment-recur": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/moment-recur/-/moment-recur-1.0.7.tgz", - "integrity": "sha512-jpBQn6H62gCnEYjtYdLfK/VdPZHEXo1t8RrVItHVVS67SRvByyJBNBa3WQSGTe+8H0smcYO/79FYTA9LGMVdQw==", + "version": "1.0.8", + "resolved": "git+ssh://git@github.com/HabitRPG/moment-recur.git#d3e8e6da0806f13b74dd2e4d7d9053e6a63db119", + "integrity": "sha512-LaqXV3izeVQjG0EKAEQQWdneMiff5JR6oBKcfgl0uFOTeaFzLKG62psk7r2VE7RTBdhYigt6KNaLZR7GdWPEIA==", + "license": "Unlicense", "dependencies": { "moment": "<3.0.0" } @@ -15951,7 +15647,7 @@ "version": "2.18.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "devOptional": true + "dev": true }, "node_modules/nanomatch": { "version": "1.2.13", @@ -16314,68 +16010,6 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, - "node_modules/nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "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": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", @@ -19216,15 +18850,6 @@ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, - "node_modules/run-rs/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/run-rs/node_modules/mongodb": { "version": "3.6.12", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.12.tgz", @@ -19748,25 +19373,6 @@ "is-arrayish": "^0.3.1" } }, - "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/sinon": { "version": "15.2.0", "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.2.0.tgz", @@ -20793,15 +20399,6 @@ "node": ">=4" } }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "optional": true, - "engines": { - "node": ">=4" - } - }, "node_modules/svgo/node_modules/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", diff --git a/package.json b/package.json index 32085c2f0c..cab727d710 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "5.36.5", + "version": "5.38.2", "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.22.10", @@ -38,7 +38,6 @@ "gulp-babel": "^8.0.0", "gulp-filter": "^7.0.0", "gulp-imagemin": "^7.1.0", - "gulp-nodemon": "^2.5.0", "gulp.spritesmith": "^6.13.0", "habitica-markdown": "^3.0.0", "helmet": "^4.6.0", @@ -50,12 +49,11 @@ "merge-stream": "^2.0.0", "method-override": "^3.0.0", "moment": "^2.29.4", - "moment-recur": "^1.0.7", + "moment-recur": "git://github.com/HabitRPG/moment-recur.git#d3e8e6da0806f13b74dd2e4d7d9053e6a63db119", "mongoose": "^8.9.5", "morgan": "^1.10.0", "nconf": "^0.12.1", "node-gcm": "^1.0.5", - "nodemon": "^2.0.20", "on-headers": "^1.0.2", "passport": "^0.5.3", "passport-facebook": "^3.0.0", @@ -100,17 +98,16 @@ "test:sanity": "nyc --silent --no-clean mocha test/sanity --recursive", "test:common": "nyc --silent --no-clean mocha test/common --recursive", "test:content": "nyc --silent --no-clean mocha test/content --recursive", - "test:nodemon": "gulp test:nodemon", "coverage": "nyc report --reporter=html --report-dir coverage/results; open coverage/results/index.html", "sprites": "gulp sprites:compile", "client:dev": "cd website/client && npm run serve", "client:build": "cd website/client && npm run build", "client:unit": "cd website/client && npm run test:unit", - "start": "gulp nodemon", + "start": "node --watch ./website/server/index.js", "start:simple": "node ./website/server/index.js", - "debug": "gulp nodemon --inspect", - "mongo:dev": "run-rs -v 5.0.23 -l ubuntu1804 --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", + "debug": "node --watch --inspect ./website/server/index.js", + "mongo:dev": "run-rs -v 7.0.23 -l ubuntu2404 --keep --dbpath mongodb-data --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", "apidoc": "gulp apidoc", "heroku-postbuild": ".heroku/report_deploy.sh" diff --git a/scripts/team-cron.js b/scripts/team-cron.js index 11f67fbf4f..6e84acaa5f 100644 --- a/scripts/team-cron.js +++ b/scripts/team-cron.js @@ -8,7 +8,17 @@ const TASK_VALUE_CHANGE_FACTOR = 0.9747; const MIN_TASK_VALUE = -47.27; async function updateTeamTasks (team) { + if (team.purchased.plan.dateTerminated) { + const dateTerminated = new Date(team.purchased.plan.dateTerminated); + if (dateTerminated < new Date()) { + team.purchased.plan.customerId = undefined; + team.markModified('purchased.plan'); + return team.save(); + } + } + const toSave = []; + let teamLeader = await User.findOne({ _id: team.leader }, 'preferences').exec(); if (!teamLeader) { // why would this happen? @@ -93,12 +103,7 @@ async function updateTeamTasks (team) { export default async function processTeamsCron () { const activeTeams = await Group.find({ 'purchased.plan.customerId': { $exists: true }, - $or: [ - { 'purchased.plan.dateTerminated': { $exists: false } }, - { 'purchased.plan.dateTerminated': null }, - { 'purchased.plan.dateTerminated': { $gt: new Date() } }, - ], - }).exec(); + }, { cron: 1, leader: 1, purchased: 1 }).exec(); const cronPromises = activeTeams.map(updateTeamTasks); return Promise.all(cronPromises); diff --git a/test/api/unit/middlewares/auth.test.js b/test/api/unit/middlewares/auth.test.js index f4a9324189..4ddd401abc 100644 --- a/test/api/unit/middlewares/auth.test.js +++ b/test/api/unit/middlewares/auth.test.js @@ -1,8 +1,11 @@ +import nconf from 'nconf'; +import requireAgain from 'require-again'; import { generateRes, generateReq, } from '../../../helpers/api-unit.helper'; -import { authWithHeaders as authWithHeadersFactory } from '../../../../website/server/middlewares/auth'; + +const authPath = '../../../../website/server/middlewares/auth'; describe('auth middleware', () => { let res; let req; let @@ -16,6 +19,7 @@ describe('auth middleware', () => { describe('auth with headers', () => { 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({ userFieldsToExclude: ['items'], }); @@ -35,6 +39,7 @@ describe('auth middleware', () => { }); it('makes sure some fields are always included', done => { + const authWithHeadersFactory = requireAgain(authPath).authWithHeaders; const authWithHeaders = authWithHeadersFactory({ userFieldsToExclude: [ 'items', 'auth.timestamps', @@ -60,5 +65,57 @@ describe('auth middleware', () => { return done(); }); }); + + it('errors with InvalidCredentialsError and code when token is wrong', done => { + const authWithHeadersFactory = requireAgain(authPath).authWithHeaders; + const authWithHeaders = authWithHeadersFactory({ userFieldsToExclude: [] }); + + req.headers['x-api-user'] = user._id; + req.headers['x-api-key'] = 'totally-wrong-token'; + + authWithHeaders(req, res, err => { + expect(err).to.exist; + expect(err.name).to.equal('InvalidCredentialsError'); + expect(err.code).to.equal('invalid_credentials'); + expect(err.message).to.equal(res.t('invalidCredentials')); + 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(); + }); + }); + }); }); }); diff --git a/test/api/unit/middlewares/blocker.test.js b/test/api/unit/middlewares/blocker.test.js new file mode 100644 index 0000000000..ad4050fa4d --- /dev/null +++ b/test/api/unit/middlewares/blocker.test.js @@ -0,0 +1,197 @@ +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); + }); + }); + + 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); + }); + }); +}); diff --git a/test/api/unit/middlewares/ipBlocker.test.js b/test/api/unit/middlewares/ipBlocker.test.js deleted file mode 100644 index e75994bfb9..0000000000 --- a/test/api/unit/middlewares/ipBlocker.test.js +++ /dev/null @@ -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); - }); -}); diff --git a/test/api/unit/models/user.test.js b/test/api/unit/models/user.test.js index c5b6054c73..8db5a1aa83 100644 --- a/test/api/unit/models/user.test.js +++ b/test/api/unit/models/user.test.js @@ -1,9 +1,13 @@ import moment from 'moment'; +import requireAgain from 'require-again'; import { model as User } from '../../../../website/server/models/user'; import { model as NewsPost } from '../../../../website/server/models/newsPost'; import { model as Group } from '../../../../website/server/models/group'; +import { model as Blocker } from '../../../../website/server/models/blocker'; import common from '../../../../website/common'; +const pathToUserSchema = '../../../../website/server/models/user/schema'; + describe('User Model', () => { describe('.toJSON()', () => { it('keeps user._tmp when calling .toJSON', () => { @@ -912,4 +916,73 @@ describe('User Model', () => { 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); + }); + }); }); diff --git a/test/api/v3/integration/user/auth/POST-auth_reset-password-set-new-one.js b/test/api/v3/integration/user/auth/POST-auth_reset-password-set-new-one.js index 472872988d..25ae9e7c5d 100644 --- a/test/api/v3/integration/user/auth/POST-auth_reset-password-set-new-one.js +++ b/test/api/v3/integration/user/auth/POST-auth_reset-password-set-new-one.js @@ -238,6 +238,28 @@ describe('POST /user/auth/reset-password-set-new-one', () => { expect(isPassValid).to.equal(true); }); + it('changes the apiToken on password reset', async () => { + const user = await generateUser(); + const previousToken = user.apiToken; + + const code = encrypt(JSON.stringify({ + userId: user._id, + expiresAt: moment().add({ days: 1 }), + })); + await user.updateOne({ + 'auth.local.passwordResetCode': code, + }); + + await api.post(`${endpoint}`, { + newPassword: 'my new password', + confirmPassword: 'my new password', + code, + }); + + await user.sync(); + expect(user.apiToken).to.not.eql(previousToken); + }); + it('renders the success page and convert the password from sha1 to bcrypt', async () => { const user = await generateUser(); diff --git a/test/api/v3/integration/user/auth/PUT-user_update_password.test.js b/test/api/v3/integration/user/auth/PUT-user_update_password.test.js index 916e377a7f..6b764d7e1b 100644 --- a/test/api/v3/integration/user/auth/PUT-user_update_password.test.js +++ b/test/api/v3/integration/user/auth/PUT-user_update_password.test.js @@ -27,11 +27,30 @@ describe('PUT /user/auth/update-password', async () => { newPassword, confirmPassword: newPassword, }); - expect(response).to.eql({}); + + expect(response).to.exist; + expect(response.apiToken).to.exist; + await user.sync(); expect(user.auth.local.hashed_password).to.not.eql(previousHashedPassword); }); + it('should change the apiToken on password change', async () => { + const previousToken = user.apiToken; + const response = await user.put(ENDPOINT, { + password, + newPassword, + confirmPassword: newPassword, + }); + + const newToken = response.apiToken; + expect(newToken).to.exist; + + await user.sync(); + expect(user.apiToken).to.eql(newToken); + expect(user.apiToken).to.not.eql(previousToken); + }); + it('returns an error when confirmPassword does not match newPassword', async () => { await expect(user.put(ENDPOINT, { password, diff --git a/test/content/schedule.test.js b/test/content/schedule.test.js index ab0caf9b96..94c03be794 100644 --- a/test/content/schedule.test.js +++ b/test/content/schedule.test.js @@ -133,21 +133,21 @@ describe('Content Schedule', () => { }); it('sets the end date for a gala', () => { - const date = new Date('2024-05-20'); + const date = new Date('2024-05-31'); const matchers = getAllScheduleMatchingGroups(date); - expect(matchers.seasonalGear.end).to.eql(moment.utc(`2024-06-21T${String(switchoverTime).padStart(2, '0')}:00:00.000Z`).toDate()); + expect(matchers.seasonalGear.end).to.eql(moment.utc(`2024-06-01T${String(switchoverTime).padStart(2, '0')}:00:00.000Z`).toDate()); }); it('sets the end date for a winter gala', () => { - const date = new Date('2024-12-22'); + const date = new Date('2025-02-28'); const matchers = getAllScheduleMatchingGroups(date); - expect(matchers.seasonalGear.end).to.eql(moment.utc(`2025-03-21T${String(switchoverTime).padStart(2, '0')}:00:00.000Z`).toDate()); + expect(matchers.seasonalGear.end).to.eql(moment.utc(`2025-03-01T${String(switchoverTime).padStart(2, '0')}:00:00.000Z`).toDate()); }); it('sets the end date in new year for a winter gala', () => { - const date = new Date('2025-01-04'); + const date = new Date('2025-02-28'); const matchers = getAllScheduleMatchingGroups(date); - expect(matchers.seasonalGear.end).to.eql(moment.utc(`2025-03-21T${String(switchoverTime).padStart(2, '0')}:00:00.000Z`).toDate()); + expect(matchers.seasonalGear.end).to.eql(moment.utc(`2025-03-01T${String(switchoverTime).padStart(2, '0')}:00:00.000Z`).toDate()); }); it('uses correct date for first hours of the month', () => { diff --git a/test/content/shop-featuredItems.test.js b/test/content/shop-featuredItems.test.js index 6ec7d57592..b1d7d8ce31 100644 --- a/test/content/shop-featuredItems.test.js +++ b/test/content/shop-featuredItems.test.js @@ -18,7 +18,7 @@ describe('Shop Featured Items', () => { }); it('contains the current premium hatching potions', () => { - clock = Sinon.useFakeTimers(new Date('2024-04-08')); + clock = Sinon.useFakeTimers(new Date('2024-04-09')); const items = featuredItems.market(); expect(_.find(items, item => item.path === 'premiumHatchingPotions.Porcelain')).to.exist; }); diff --git a/test/helpers/globals.helper.js b/test/helpers/globals.helper.js index 213efac698..535138a69c 100644 --- a/test/helpers/globals.helper.js +++ b/test/helpers/globals.helper.js @@ -19,6 +19,6 @@ const sinonStubPromise = require('sinon-stub-promise'); sinonStubPromise(global.sinon); global.sandbox = sinon.createSandbox(); -const setupNconf = require('../../website/server/libs/setupNconf'); +const setupNconf = require('../../website/server/libs/setupNconf').default; setupNconf('./config.json.example'); diff --git a/test/helpers/start-server.js b/test/helpers/start-server.js index 57d98519e5..cf1f74b71a 100644 --- a/test/helpers/start-server.js +++ b/test/helpers/start-server.js @@ -3,7 +3,7 @@ const nconf = require('nconf'); const mongoose = require('mongoose'); -const setupNconf = require('../../website/server/libs/setupNconf'); +const setupNconf = require('../../website/server/libs/setupNconf').default; // fix further imports of require/import syntaxes require('@babel/register'); diff --git a/website/client/.eslintrc.js b/website/client/.eslintrc.js index 7a44ad03e3..6fdf41506f 100644 --- a/website/client/.eslintrc.js +++ b/website/client/.eslintrc.js @@ -3,6 +3,7 @@ module.exports = { root: true, env: { node: true, + es2021: true, }, extends: [ 'habitrpg/lib/vue', @@ -39,7 +40,4 @@ module.exports = { order: ['template', 'style', 'script'], }], }, - parserOptions: { - parser: 'babel-eslint', - }, }; diff --git a/website/client/babel.config.js b/website/client/babel.config.js deleted file mode 100644 index d2ddb50bcf..0000000000 --- a/website/client/babel.config.js +++ /dev/null @@ -1,9 +0,0 @@ -/* eslint-disable import/no-commonjs */ -module.exports = { - presets: [ - '@vue/cli-plugin-babel/preset', - ], - plugins: [ - '@babel/plugin-proposal-optional-chaining', - ], -}; diff --git a/website/client/public/index.html b/website/client/index.html similarity index 97% rename from website/client/public/index.html rename to website/client/index.html index 2b77fedd6a..bc3dc19bef 100644 --- a/website/client/public/index.html +++ b/website/client/index.html @@ -12,6 +12,7 @@ +
@@ -28,10 +29,9 @@
- - + diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 92af10f04b..c595d61381 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -9,20 +9,16 @@ "version": "1.0.0", "hasInstallScript": true, "dependencies": { - "@vue/cli-plugin-babel": "^5.0.8", - "@vue/cli-plugin-eslint": "^5.0.8", - "@vue/cli-plugin-router": "^5.0.8", - "@vue/cli-plugin-unit-mocha": "^5.0.8", - "@vue/cli-service": "^5.0.8", + "@froxz/vite-plugin-s3": "^1.6.0", + "@vitejs/plugin-vue2": "^2.3.3", "@vue/test-utils": "1.0.0-beta.29", "amplitude-js": "^8.21.3", "assert": "^2.1.0", + "autoprefixer": "^10.4.20", "axios": "^0.28.0", "axios-progress-bar": "^1.2.0", - "babel-eslint": "^10.1.0", "bootstrap": "^4.6.0", "bootstrap-vue": "^2.23.1", - "core-js": "^3.33.1", "eslint": "7.32.0", "eslint-config-habitrpg": "6.2.0", "eslint-plugin-mocha": "5.3.0", @@ -32,31 +28,34 @@ "intro.js": "^7.2.0", "jquery": "^3.7.1", "lodash": "^4.17.21", + "markdown-it": "^14.0.0", "moment": "^2.29.4", - "moment-locales-webpack-plugin": "^1.2.0", "nconf": "^0.12.1", "sass": "^1.63.4", - "sass-loader": "^14.1.1", "sinon": "^17.0.1", "stopword": "^2.0.8", "timers-browserify": "^2.0.12", "uuid": "^9.0.1", "validator": "^13.9.0", + "vite": "^6.0.0", + "vite-plugin-compression2": "^1.3.3", "vue": "^2.7.10", "vue-fragment": "^1.6.0", "vue-mugen-scroll": "^0.2.6", "vue-router": "^3.6.5", - "vue-template-babel-compiler": "^2.0.0", - "vue-template-compiler": "^2.7.10", "vuedraggable": "^2.24.3", "vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#153d339e4dbebb73733658aeda1d5b7fcc55b0a0" }, "devDependencies": { "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "@vitest/browser": "^3.0.5", "babel-plugin-lodash": "^3.3.4", - "chai": "^5.1.0", "inspectpack": "^4.7.1", + "jsdom": "^26.0.0", + "mocha": "^11.1.0", + "playwright": "^1.50.1", "terser-webpack-plugin": "^5.3.10", + "vitest": "^3.0.5", "webpack": "^5.94.0" } }, @@ -68,19 +67,6 @@ "node": ">=0.10.0" } }, - "node_modules/@achrinza/node-ipc": { - "version": "9.2.8", - "resolved": "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.8.tgz", - "integrity": "sha512-DSzEEkbMYbAUVlhy7fg+BzccoRuSQzqHbIPGxGv19OJ2WKwS3/9ChAnQcII4g+GujcHhyJ8BUuOVAx/S5uAfQg==", - "dependencies": { - "@node-ipc/js-queue": "2.0.3", - "event-pubsub": "4.3.0", - "js-message": "1.0.7" - }, - "engines": { - "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20 || 21" - } - }, "node_modules/@amplitude/analytics-connector": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@amplitude/analytics-connector/-/analytics-connector-1.5.0.tgz", @@ -128,6 +114,8 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -136,15 +124,841 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "license": "MIT", + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/crc32c": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "dependencies": { + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.828.0.tgz", + "integrity": "sha512-TvFyrEfJkf9NN3cq5mXCgFv/sPaA8Rm5tEPgV5emuLedeGsORlWmVpdSKqfZ4lSoED1tMfNM6LY4uA9D8/RS5g==", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/credential-provider-node": "3.828.0", + "@aws-sdk/middleware-bucket-endpoint": "3.821.0", + "@aws-sdk/middleware-expect-continue": "3.821.0", + "@aws-sdk/middleware-flexible-checksums": "3.826.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-location-constraint": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-sdk-s3": "3.826.0", + "@aws-sdk/middleware-ssec": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/signature-v4-multi-region": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.828.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.5.3", + "@smithy/eventstream-serde-browser": "^4.0.4", + "@smithy/eventstream-serde-config-resolver": "^4.1.2", + "@smithy/eventstream-serde-node": "^4.0.4", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-blob-browser": "^4.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/hash-stream-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/md5-js": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-retry": "^4.1.12", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.19", + "@smithy/util-defaults-mode-node": "^4.0.19", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "@smithy/util-waiter": "^4.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.828.0.tgz", + "integrity": "sha512-qxw8JcPTaFaBwTBUr4YmLajaMh3En65SuBWAKEtjctbITRRekzR7tvr/TkwoyVOh+XoAtkwOn+BQeQbX+/wgHw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.828.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.5.3", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-retry": "^4.1.12", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.19", + "@smithy/util-defaults-mode-node": "^4.0.19", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.826.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.826.0.tgz", + "integrity": "sha512-BGbQYzWj3ps+dblq33FY5tz/SsgJCcXX0zjQlSC07tYvU1jHTUvsefphyig+fY38xZ4wdKjbTop+KUmXUYrOXw==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.5.3", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.826.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.826.0.tgz", + "integrity": "sha512-DK3pQY8+iKK3MGDdC3uOZQ2psU01obaKlTYhEwNu4VWzgwQL4Vi3sWj4xSWGEK41vqZxiRLq6fOq7ysRI+qEZA==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.826.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.826.0.tgz", + "integrity": "sha512-N+IVZBh+yx/9GbMZTKO/gErBi/FYZQtcFRItoLbY+6WU+0cSWyZYfkoeOxHmQV3iX9k65oljERIWUmL9x6OSQg==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.828.0.tgz", + "integrity": "sha512-T3DJMo2/j7gCPpFg2+xEHWgua05t8WP89ye7PaZxA2Fc6CgScHkZsJZTri1QQIU2h+eOZ75EZWkeFLIPgN0kRQ==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/credential-provider-env": "3.826.0", + "@aws-sdk/credential-provider-http": "3.826.0", + "@aws-sdk/credential-provider-process": "3.826.0", + "@aws-sdk/credential-provider-sso": "3.828.0", + "@aws-sdk/credential-provider-web-identity": "3.828.0", + "@aws-sdk/nested-clients": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.828.0.tgz", + "integrity": "sha512-9z3iPwVYOQYNzVZj8qycZaS/BOSKRXWA+QVNQlfEnQ4sA4sOcKR4kmV2h+rJcuBsSFfmOF62ZDxyIBGvvM4t/w==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.826.0", + "@aws-sdk/credential-provider-http": "3.826.0", + "@aws-sdk/credential-provider-ini": "3.828.0", + "@aws-sdk/credential-provider-process": "3.826.0", + "@aws-sdk/credential-provider-sso": "3.828.0", + "@aws-sdk/credential-provider-web-identity": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.826.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.826.0.tgz", + "integrity": "sha512-kURrc4amu3NLtw1yZw7EoLNEVhmOMRUTs+chaNcmS+ERm3yK0nKjaJzmKahmwlTQTSl3wJ8jjK7x962VPo+zWw==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.828.0.tgz", + "integrity": "sha512-9CEAXzUDSzOjOCb3XfM15TZhTaM+l07kumZyx2z8NC6T2U4qbCJqn4h8mFlRvYrs6cBj2SN40sD3r5Wp0Cq2Kw==", + "dependencies": { + "@aws-sdk/client-sso": "3.828.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/token-providers": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.828.0.tgz", + "integrity": "sha512-MguDhGHlQBeK9CQ/P4NOY0whAJ4HJU4x+f1dphg3I1sGlccFqfB8Moor2vXNKu0Th2kvAwkn9pr7gGb/+NGR9g==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/nested-clients": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.821.0.tgz", + "integrity": "sha512-cebgeytKlWOgGczLo3BPvNY9XlzAzGZQANSysgJ2/8PSldmUpXRIF+GKPXDVhXeInWYHIfB8zZi3RqrPoXcNYQ==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.821.0.tgz", + "integrity": "sha512-zAOoSZKe1njOrtynvK6ZORU57YGv5I7KP4+rwOvUN3ZhJbQ7QPf8gKtFUCYAPRMegaXCKF/ADPtDZBAmM+zZ9g==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.826.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.826.0.tgz", + "integrity": "sha512-Fz9w8CFYPfSlHEB6feSsi06hdS+s+FB8k5pO4L7IV0tUa78mlhxF/VNlAJaVWYyOkZXl4HPH2K48aapACSQOXw==", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.821.0.tgz", + "integrity": "sha512-xSMR+sopSeWGx5/4pAGhhfMvGBHioVBbqGvDs6pG64xfNwM5vq5s5v6D04e2i+uSTj4qGa71dLUs5I0UzAK3sw==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.821.0.tgz", + "integrity": "sha512-sKrm80k0t3R0on8aA/WhWFoMaAl4yvdk+riotmMElLUpcMcRXAd1+600uFVrxJqZdbrKQ0mjX0PjT68DlkYXLg==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.821.0.tgz", + "integrity": "sha512-0cvI0ipf2tGx7fXYEEN5fBeZDz2RnHyb9xftSgUsEq7NBxjV0yTZfLJw6Za5rjE6snC80dRN8+bTNR1tuG89zA==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.821.0.tgz", + "integrity": "sha512-efmaifbhBoqKG3bAoEfDdcM8hn1psF+4qa7ykWuYmfmah59JBeqHLfz5W9m9JoTwoKPkFcVLWZxnyZzAnVBOIg==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.826.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.826.0.tgz", + "integrity": "sha512-8F0qWaYKfvD/de1AKccXuigM+gb/IZSncCqxdnFWqd+TFzo9qI9Hh+TpUhWOMYSgxsMsYQ8ipmLzlD/lDhjrmA==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/core": "^3.5.3", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.821.0.tgz", + "integrity": "sha512-YYi1Hhr2AYiU/24cQc8HIB+SWbQo6FBkMYojVuz/zgrtkFmALxENGF/21OPg7f/QWd+eadZJRxCjmRwh5F2Cxg==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.828.0.tgz", + "integrity": "sha512-nixvI/SETXRdmrVab4D9LvXT3lrXkwAWGWk2GVvQvzlqN1/M/RfClj+o37Sn4FqRkGH9o9g7Fqb1YqZ4mqDAtA==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@smithy/core": "^3.5.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.828.0.tgz", + "integrity": "sha512-xmeOILiR9LvfC8MctgeRXXN8nQTwbOvO4wHvgE8tDRsjnBpyyO0j50R4+viHXdMUGtgGkHEXRv8fFNBq54RgnA==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.828.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.5.3", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-retry": "^4.1.12", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.19", + "@smithy/util-defaults-mode-node": "^4.0.19", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.821.0.tgz", + "integrity": "sha512-t8og+lRCIIy5nlId0bScNpCkif8sc0LhmtaKsbm0ZPm3sCa/WhCbSZibjbZ28FNjVCV+p0D9RYZx0VDDbtWyjw==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.826.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.826.0.tgz", + "integrity": "sha512-3fEi/zy6tpMzomYosksGtu7jZqGFcdBXoL7YRsG7OEeQzBbOW9B+fVaQZ4jnsViSjzA/yKydLahMrfPnt+iaxg==", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.828.0.tgz", + "integrity": "sha512-JdOjI/TxkfQpY/bWbdGMdCiePESXTbtl6MfnJxz35zZ3tfHvBnxAWCoYJirdmjzY/j/dFo5oEyS6mQuXAG9w2w==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/nested-clients": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.821.0.tgz", + "integrity": "sha512-Znroqdai1a90TlxGaJ+FK1lwC0fHpo97Xjsp5UKGR5JODYm7f9+/fF17ebO1KdoBr/Rm0UIFiF5VmI8ts9F1eA==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.804.0.tgz", + "integrity": "sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.828.0.tgz", + "integrity": "sha512-RvKch111SblqdkPzg3oCIdlGxlQs+k+P7Etory9FmxPHyPDvsP1j1c74PmgYqtzzMWmoXTjd+c9naUHh9xG8xg==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "@smithy/util-endpoints": "^3.0.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.804.0.tgz", + "integrity": "sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.821.0.tgz", + "integrity": "sha512-irWZHyM0Jr1xhC+38OuZ7JB6OXMLPZlj48thElpsO1ZSLRkLZx5+I7VV6k3sp2yZ7BYbKz/G2ojSv4wdm7XTLw==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.828.0.tgz", + "integrity": "sha512-LdN6fTBzTlQmc8O8f1wiZN0qF3yBWVGis7NwpWK7FUEzP9bEZRxYfIkV9oV9zpt6iNRze1SedK3JQVB/udxBoA==", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz", + "integrity": "sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -154,6 +968,8 @@ "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "peer": true, "engines": { "node": ">=6.9.0" } @@ -162,6 +978,8 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz", "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==", + "dev": true, + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", @@ -188,36 +1006,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "dev": true, "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dependencies": { - "@babel/types": "^7.22.15" + "@babel/parser": "^7.27.5", + "@babel/types": "^7.27.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" @@ -227,6 +1025,8 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "peer": true, "dependencies": { "@babel/compat-data": "^7.23.5", "@babel/helper-validator-option": "^7.23.5", @@ -238,97 +1038,12 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz", - "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", - "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", - "dependencies": { - "@babel/types": "^7.23.0" - }, + "dev": true, + "peer": true, "engines": { "node": ">=6.9.0" } @@ -337,6 +1052,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, "dependencies": { "@babel/types": "^7.22.15" }, @@ -348,6 +1064,8 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "peer": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -362,61 +1080,21 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/@babel/helper-simple-access": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "peer": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -425,11 +1103,13 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -439,6 +1119,8 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "peer": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -447,19 +1129,17 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "license": "MIT", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "license": "MIT", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "engines": { "node": ">=6.9.0" } @@ -468,19 +1148,8 @@ "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" - }, + "dev": true, + "peer": true, "engines": { "node": ">=6.9.0" } @@ -489,7 +1158,9 @@ "version": "7.26.10", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/template": "^7.26.9", "@babel/types": "^7.26.10" @@ -512,12 +1183,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", - "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", - "license": "MIT", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", "dependencies": { - "@babel/types": "^7.26.10" + "@babel/types": "^7.27.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -526,126 +1196,12 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", - "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", - "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", - "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.6.tgz", - "integrity": "sha512-D7Ccq9LfkBFnow3azZGJvZYgcfeqAw3I1e5LoTpj6UKIFQilh8yqXsIGcRIqbBdsPWIz+Ze7ZZfggSj62Qp+Fg==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/plugin-syntax-decorators": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", @@ -658,212 +1214,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz", - "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", - "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", - "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -871,904 +1226,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", - "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", - "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", - "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", - "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", - "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", - "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", - "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", - "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", - "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", - "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", - "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", - "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", - "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", - "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", - "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", - "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", - "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", - "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", - "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", - "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", - "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", - "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", - "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", - "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", - "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", - "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", - "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", - "dependencies": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", - "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", - "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", - "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", - "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", - "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", - "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", - "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", - "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", - "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.6.tgz", - "integrity": "sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg==", - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", - "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", - "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", - "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", - "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", - "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", - "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", - "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", - "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", - "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.6.tgz", - "integrity": "sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==", - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.4", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.5", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.3", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.23.4", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, "node_modules/@babel/runtime": { "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", @@ -1780,53 +1237,31 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/runtime-corejs2": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.26.10.tgz", - "integrity": "sha512-JfoPiD7f/vvd/PaOfu5cr9CyzwDMPg4T0nX3MQr6IgTq49DhjvUcmjmjA7j6+xih1Evq+QKZnge1SoIlYozv/Q==", - "license": "MIT", - "dependencies": { - "core-js": "^2.6.12", - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs2/node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true - }, "node_modules/@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", - "license": "MIT", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", - "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "dev": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1835,24 +1270,140 @@ } }, "node_modules/@babel/types": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", - "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", - "license": "MIT", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": ">=10.0.0" + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", + "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, "node_modules/@eslint/eslintrc": { @@ -1899,17 +1450,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "node_modules/@froxz/vite-plugin-s3": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@froxz/vite-plugin-s3/-/vite-plugin-s3-1.7.1.tgz", + "integrity": "sha512-0iGJEiMI0Zy2Zq+a3sfc8yUgaRiZsy7d5Lx9LiZ6ssUM5lxmCZW4KSCjEKG2L1E3JORGoPDXBYnfb0w6jFcI7g==", "dependencies": { - "@hapi/hoek": "^9.0.0" + "@aws-sdk/client-s3": "^3.0.0", + "mime-types": "^2.1.35", + "recursive-readdir": "^2.2.3" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" } }, "node_modules/@humanwhocodes/config-array": { @@ -1930,14 +1481,111 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "devOptional": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -1947,14 +1595,16 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "devOptional": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "devOptional": true, "engines": { "node": ">=6.0.0" } @@ -1963,73 +1613,28 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "devOptional": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "devOptional": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "devOptional": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "node_modules/@node-ipc/js-queue": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", - "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", - "dependencies": { - "easy-stack": "1.0.1" - }, - "engines": { - "node": ">=1.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@nuxt/opencollective": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.3.tgz", @@ -2111,28 +1716,82 @@ "node": ">=8" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.24", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", - "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==" - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dependencies": { - "@hapi/hoek": "^9.0.0" + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" } }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.43.0.tgz", + "integrity": "sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.43.0.tgz", + "integrity": "sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] }, "node_modules/@sinonjs/commons": { "version": "3.0.1", @@ -2173,748 +1832,699 @@ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==" }, - "node_modules/@soda/friendly-errors-webpack-plugin": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", - "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "node_modules/@smithy/abort-controller": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", "dependencies": { - "chalk": "^3.0.0", - "error-stack-parser": "^2.0.6", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "node": ">=18.0.0" } }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@smithy/chunked-blob-reader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz", + "integrity": "sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==", "dependencies": { - "color-convert": "^2.0.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=18.0.0" } }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/has-flag": { + "node_modules/@smithy/chunked-blob-reader-native": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz", + "integrity": "sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==", "dependencies": { - "has-flag": "^4.0.0" + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, - "node_modules/@soda/get-current-script": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz", - "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==" - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/@smithy/config-resolver": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.4.tgz", + "integrity": "sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 10" + "node": ">=18.0.0" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "node_modules/@smithy/core": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.5.3.tgz", + "integrity": "sha512-xa5byV9fEguZNofCclv6v9ra0FYh5FATQW/da7FQUVTic94DfrN/NvmKZjrMyzbpqfot9ZjBaO8U1UeTbmSLuA==", + "dependencies": { + "@smithy/middleware-serde": "^4.0.8", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=10.13.0" + "node": ">=18.0.0" } }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "node_modules/@smithy/credential-provider-imds": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.6.tgz", + "integrity": "sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==", "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "node_modules/@smithy/eventstream-codec": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.4.tgz", + "integrity": "sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig==", "dependencies": { - "@types/node": "*" + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.3.1", + "@smithy/util-hex-encoding": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.4.tgz", + "integrity": "sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA==", "dependencies": { - "@types/node": "*" + "@smithy/eventstream-serde-universal": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.2.tgz", + "integrity": "sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ==", "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==", + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.4.tgz", + "integrity": "sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w==", "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@smithy/eventstream-serde-universal": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.4.tgz", + "integrity": "sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA==", "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "@smithy/eventstream-codec": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "node_modules/@smithy/fetch-http-handler": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.4.tgz", + "integrity": "sha512-AMtBR5pHppYMVD7z7G+OlHHAcgAN7v0kVKEpHuTO4Gb199Gowh0taYi9oDStFeUhetkeP55JLSVlTW1n9rFtUw==", "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/@smithy/hash-blob-browser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.4.tgz", + "integrity": "sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ==", "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "@smithy/chunked-blob-reader": "^5.0.0", + "@smithy/chunked-blob-reader-native": "^4.0.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", - "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "node_modules/@smithy/hash-node": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.4.tgz", + "integrity": "sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==", "dependencies": { - "@types/node": "*" + "@smithy/types": "^4.3.1", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + "node_modules/@smithy/hash-stream-node": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.4.tgz", + "integrity": "sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg==", + "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + "node_modules/@smithy/invalid-dependency": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.4.tgz", + "integrity": "sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", + "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@types/minimatch": { + "node_modules/@smithy/md5-js": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.4.tgz", + "integrity": "sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg==", + "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.4.tgz", + "integrity": "sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==", + "dependencies": { + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.11.tgz", + "integrity": "sha512-zDogwtRLzKl58lVS8wPcARevFZNBOOqnmzWWxVe9XiaXU2CADFjvJ9XfNibgkOWs08sxLuSr81NrpY4mgp9OwQ==", + "dependencies": { + "@smithy/core": "^3.5.3", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.12.tgz", + "integrity": "sha512-wvIH70c4e91NtRxdaLZF+mbLZ/HcC6yg7ySKUiufL6ESp6zJUSnJucZ309AvG9nqCFHSRB5I6T3Ez1Q9wCh0Ww==", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/service-error-classification": "^4.0.5", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.8.tgz", + "integrity": "sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==", + "dependencies": { + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.4.tgz", + "integrity": "sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.3.tgz", + "integrity": "sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==", + "dependencies": { + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", + "dependencies": { + "@smithy/abort-controller": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.4.tgz", + "integrity": "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==" - }, - "node_modules/@types/node": { - "version": "20.10.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", - "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.2.tgz", + "integrity": "sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==", "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", - "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" - }, - "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" - }, - "node_modules/@vue/babel-helper-vue-jsx-merge-props": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", - "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==" - }, - "node_modules/@vue/babel-helper-vue-transform-on": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.1.5.tgz", - "integrity": "sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==" - }, - "node_modules/@vue/babel-plugin-jsx": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.5.tgz", - "integrity": "sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==", - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "@vue/babel-helper-vue-transform-on": "^1.1.5", - "camelcase": "^6.3.0", - "html-tags": "^3.3.1", - "svg-tags": "^1.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-plugin-transform-vue-jsx": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz", - "integrity": "sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==", - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", - "html-tags": "^2.0.0", - "lodash.kebabcase": "^4.1.1", - "svg-tags": "^1.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-plugin-transform-vue-jsx/node_modules/html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@vue/babel-preset-app": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz", - "integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==", - "dependencies": { - "@babel/core": "^7.12.16", - "@babel/helper-compilation-targets": "^7.12.16", - "@babel/helper-module-imports": "^7.12.13", - "@babel/plugin-proposal-class-properties": "^7.12.13", - "@babel/plugin-proposal-decorators": "^7.12.13", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/runtime": "^7.12.13", - "@vue/babel-plugin-jsx": "^1.0.3", - "@vue/babel-preset-jsx": "^1.1.2", - "babel-plugin-dynamic-import-node": "^2.3.3", - "core-js": "^3.8.3", - "core-js-compat": "^3.8.3", - "semver": "^7.3.4" - }, - "peerDependencies": { - "@babel/core": "*", - "core-js": "^3", - "vue": "^2 || ^3.2.13" - }, - "peerDependenciesMeta": { - "core-js": { - "optional": true - }, - "vue": { - "optional": true - } - } - }, - "node_modules/@vue/babel-preset-app/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" + "node": ">=18.0.0" } }, - "node_modules/@vue/babel-preset-app/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/@smithy/querystring-builder": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.4.tgz", + "integrity": "sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@smithy/types": "^4.3.1", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" + "node": ">=18.0.0" } }, - "node_modules/@vue/babel-preset-app/node_modules/yallist": { + "node_modules/@smithy/querystring-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.4.tgz", + "integrity": "sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.5.tgz", + "integrity": "sha512-LvcfhrnCBvCmTee81pRlh1F39yTS/+kYleVeLCwNtkY8wtGg8V/ca9rbZZvYIl8OjlMtL6KIjaiL/lgVqHD2nA==", + "dependencies": { + "@smithy/types": "^4.3.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.4.tgz", + "integrity": "sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.2.tgz", + "integrity": "sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.3.tgz", + "integrity": "sha512-xxzNYgA0HD6ETCe5QJubsxP0hQH3QK3kbpJz3QrosBCuIWyEXLR/CO5hFb2OeawEKUxMNhz3a1nuJNN2np2RMA==", + "dependencies": { + "@smithy/core": "^3.5.3", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.4.tgz", + "integrity": "sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==", + "dependencies": { + "@smithy/querystring-parser": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/@vue/babel-preset-jsx": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz", - "integrity": "sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", + "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", "dependencies": { - "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", - "@vue/babel-sugar-composition-api-inject-h": "^1.4.0", - "@vue/babel-sugar-composition-api-render-instance": "^1.4.0", - "@vue/babel-sugar-functional-vue": "^1.4.0", - "@vue/babel-sugar-inject-h": "^1.4.0", - "@vue/babel-sugar-v-model": "^1.4.0", - "@vue/babel-sugar-v-on": "^1.4.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0", - "vue": "*" - }, - "peerDependenciesMeta": { - "vue": { - "optional": true - } - } - }, - "node_modules/@vue/babel-sugar-composition-api-inject-h": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz", - "integrity": "sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==", - "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-sugar-composition-api-render-instance": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz", - "integrity": "sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==", - "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-sugar-functional-vue": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz", - "integrity": "sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==", - "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-sugar-inject-h": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz", - "integrity": "sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==", - "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-sugar-v-model": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz", - "integrity": "sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==", - "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", - "camelcase": "^5.0.0", - "html-tags": "^2.0.0", - "svg-tags": "^1.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-sugar-v-model/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@vue/babel-sugar-v-model/node_modules/html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@vue/babel-sugar-v-on": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz", - "integrity": "sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==", - "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", - "camelcase": "^5.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-sugar-v-on/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@vue/cli-overlay": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz", - "integrity": "sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==" - }, - "node_modules/@vue/cli-plugin-babel": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz", - "integrity": "sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ==", - "dependencies": { - "@babel/core": "^7.12.16", - "@vue/babel-preset-app": "^5.0.8", - "@vue/cli-shared-utils": "^5.0.8", - "babel-loader": "^8.2.2", - "thread-loader": "^3.0.0", - "webpack": "^5.54.0" - }, - "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" - } - }, - "node_modules/@vue/cli-plugin-eslint": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.8.tgz", - "integrity": "sha512-d11+I5ONYaAPW1KyZj9GlrV/E6HZePq5L5eAF5GgoVdu6sxr6bDgEoxzhcS1Pk2eh8rn1MxG/FyyR+eCBj/CNg==", - "dependencies": { - "@vue/cli-shared-utils": "^5.0.8", - "eslint-webpack-plugin": "^3.1.0", - "globby": "^11.0.2", - "webpack": "^5.54.0", - "yorkie": "^2.0.0" - }, - "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0", - "eslint": ">=7.5.0" - } - }, - "node_modules/@vue/cli-plugin-router": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz", - "integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==", - "dependencies": { - "@vue/cli-shared-utils": "^5.0.8" - }, - "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" - } - }, - "node_modules/@vue/cli-plugin-unit-mocha": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-unit-mocha/-/cli-plugin-unit-mocha-5.0.8.tgz", - "integrity": "sha512-t8eN1ttbSkHg+U7AjCKwpuhpV2OBsP35RjBkdSrcAPjoX3MxVwoWyqGPeYI+jWbPGX3tFxM/uMQwN0U3lmzH7A==", - "dependencies": { - "@vue/cli-shared-utils": "^5.0.8", - "jsdom": "^18.0.1", - "jsdom-global": "^3.0.2", - "mocha": "^8.3.0", - "mochapack": "^2.1.0" - }, - "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" - } - }, - "node_modules/@vue/cli-plugin-vuex": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz", - "integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==", - "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" - } - }, - "node_modules/@vue/cli-service": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-5.0.8.tgz", - "integrity": "sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.12.16", - "@soda/friendly-errors-webpack-plugin": "^1.8.0", - "@soda/get-current-script": "^1.0.2", - "@types/minimist": "^1.2.0", - "@vue/cli-overlay": "^5.0.8", - "@vue/cli-plugin-router": "^5.0.8", - "@vue/cli-plugin-vuex": "^5.0.8", - "@vue/cli-shared-utils": "^5.0.8", - "@vue/component-compiler-utils": "^3.3.0", - "@vue/vue-loader-v15": "npm:vue-loader@^15.9.7", - "@vue/web-component-wrapper": "^1.3.0", - "acorn": "^8.0.5", - "acorn-walk": "^8.0.2", - "address": "^1.1.2", - "autoprefixer": "^10.2.4", - "browserslist": "^4.16.3", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "cli-highlight": "^2.1.10", - "clipboardy": "^2.3.0", - "cliui": "^7.0.4", - "copy-webpack-plugin": "^9.0.1", - "css-loader": "^6.5.0", - "css-minimizer-webpack-plugin": "^3.0.2", - "cssnano": "^5.0.0", - "debug": "^4.1.1", - "default-gateway": "^6.0.3", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "hash-sum": "^2.0.0", - "html-webpack-plugin": "^5.1.0", - "is-file-esm": "^1.0.0", - "launch-editor-middleware": "^2.2.1", - "lodash.defaultsdeep": "^4.6.1", - "lodash.mapvalues": "^4.6.0", - "mini-css-extract-plugin": "^2.5.3", - "minimist": "^1.2.5", - "module-alias": "^2.2.2", - "portfinder": "^1.0.26", - "postcss": "^8.2.6", - "postcss-loader": "^6.1.1", - "progress-webpack-plugin": "^1.0.12", - "ssri": "^8.0.1", - "terser-webpack-plugin": "^5.1.1", - "thread-loader": "^3.0.0", - "vue-loader": "^17.0.0", - "vue-style-loader": "^4.1.3", - "webpack": "^5.54.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-chain": "^6.5.1", - "webpack-dev-server": "^4.7.3", - "webpack-merge": "^5.7.3", - "webpack-virtual-modules": "^0.4.2", - "whatwg-fetch": "^3.6.2" - }, - "bin": { - "vue-cli-service": "bin/vue-cli-service.js" + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^12.0.0 || >= 14.0.0" - }, - "peerDependencies": { - "vue-template-compiler": "^2.0.0", - "webpack-sources": "*" - }, - "peerDependenciesMeta": { - "cache-loader": { - "optional": true - }, - "less-loader": { - "optional": true - }, - "pug-plain-loader": { - "optional": true - }, - "raw-loader": { - "optional": true - }, - "sass-loader": { - "optional": true - }, - "stylus-loader": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - }, - "webpack-sources": { - "optional": true - } + "node": ">=18.0.0" } }, - "node_modules/@vue/cli-shared-utils": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", - "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", + "node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", + "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", "dependencies": { - "@achrinza/node-ipc": "^9.2.5", - "chalk": "^4.1.2", - "execa": "^1.0.0", - "joi": "^17.4.0", - "launch-editor": "^2.2.1", - "lru-cache": "^6.0.0", - "node-fetch": "^2.6.7", - "open": "^8.0.2", - "ora": "^5.3.0", - "read-pkg": "^5.1.1", - "semver": "^7.3.4", - "strip-ansi": "^6.0.0" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@vue/cli-shared-utils/node_modules/ansi-styles": { + "node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", + "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", + "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", + "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.19.tgz", + "integrity": "sha512-mvLMh87xSmQrV5XqnUYEPoiFFeEGYeAKIDDKdhE2ahqitm8OHM3aSvhqL6rrK6wm1brIk90JhxDf5lf2hbrLbQ==", + "dependencies": { + "@smithy/property-provider": "^4.0.4", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.19.tgz", + "integrity": "sha512-8tYnx+LUfj6m+zkUUIrIQJxPM1xVxfRBvoGHua7R/i6qAxOMjqR6CpEpDwKoIs1o0+hOjGvkKE23CafKL0vJ9w==", + "dependencies": { + "@smithy/config-resolver": "^4.1.4", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.6.tgz", + "integrity": "sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", + "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.4.tgz", + "integrity": "sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.5.tgz", + "integrity": "sha512-V7MSjVDTlEt/plmOFBn1762Dyu5uqMrV2Pl2X0dYk4XvWfdWJNe9Bs5Bzb56wkCuiWjSfClVMGcsuKrGj7S/yg==", + "dependencies": { + "@smithy/service-error-classification": "^4.0.5", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.2.tgz", + "integrity": "sha512-aI+GLi7MJoVxg24/3J1ipwLoYzgkB4kUfogZfnslcYlynj3xsQ0e7vk4TnTro9hhsS5PvX1mwmkRqqHQjwcU7w==", + "dependencies": { + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", + "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", + "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.5.tgz", + "integrity": "sha512-4QvC49HTteI1gfemu0I1syWovJgPvGn7CVUoN9ZFkdvr/cCFkrEL7qNCdx/2eICqDWEGnnr68oMdSIPCLAriSQ==", + "dependencies": { + "@smithy/abort-controller": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2925,10 +2535,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@vue/cli-shared-utils/node_modules/chalk": { + "node_modules/@testing-library/dom/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2940,10 +2551,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@vue/cli-shared-utils/node_modules/color-convert": { + "node_modules/@testing-library/dom/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2951,48 +2563,26 @@ "node": ">=7.0.0" } }, - "node_modules/@vue/cli-shared-utils/node_modules/color-name": { + "node_modules/@testing-library/dom/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/@vue/cli-shared-utils/node_modules/has-flag": { + "node_modules/@testing-library/dom/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@vue/cli-shared-utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@vue/cli-shared-utils/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@vue/cli-shared-utils/node_modules/supports-color": { + "node_modules/@testing-library/dom/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3000,10 +2590,219 @@ "node": ">=8" } }, - "node_modules/@vue/cli-shared-utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true + }, + "node_modules/@types/chai": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dev": true, + "dependencies": { + "@types/deep-eql": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "node_modules/@types/node": { + "version": "20.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", + "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", + "devOptional": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@vitejs/plugin-vue2": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue2/-/plugin-vue2-2.3.3.tgz", + "integrity": "sha512-qexY6+bbwY8h0AZerzUuGywNTi0cLOkbiSbggr0R3WEW95iB2hblQFyv4MAkkc2vm4gZN1cO5kzT1Kp6xlVzZw==", + "engines": { + "node": "^14.18.0 || >= 16.0.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "vue": "^2.7.0-0" + } + }, + "node_modules/@vitest/browser": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-3.2.3.tgz", + "integrity": "sha512-5HpUb0ixGF8JWSAjb/P1x/VPuTYUkL4pL0+YO6DJiuvQgqJN3PREaUEcXwfXjU4nBc37EahfpRbAwdE9pHs9lQ==", + "dev": true, + "dependencies": { + "@testing-library/dom": "^10.4.0", + "@testing-library/user-event": "^14.6.1", + "@vitest/mocker": "3.2.3", + "@vitest/utils": "3.2.3", + "magic-string": "^0.30.17", + "sirv": "^3.0.1", + "tinyrainbow": "^2.0.0", + "ws": "^8.18.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "playwright": "*", + "vitest": "3.2.3", + "webdriverio": "^7.0.0 || ^8.0.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/@vitest/expect": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.3.tgz", + "integrity": "sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==", + "dev": true, + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.3", + "@vitest/utils": "3.2.3", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.3.tgz", + "integrity": "sha512-cP6fIun+Zx8he4rbWvi+Oya6goKQDZK+Yq4hhlggwQBbrlOQ4qtZ+G4nxB6ZnzI9lyIb+JnvyiJnPC2AGbKSPA==", + "dev": true, + "dependencies": { + "@vitest/spy": "3.2.3", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.3.tgz", + "integrity": "sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==", + "dev": true, + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.3.tgz", + "integrity": "sha512-83HWYisT3IpMaU9LN+VN+/nLHVBCSIUKJzGxC5RWUOsK1h3USg7ojL+UXQR3b4o4UBIWCYdD2fxuzM7PQQ1u8w==", + "dev": true, + "dependencies": { + "@vitest/utils": "3.2.3", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.3.tgz", + "integrity": "sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "3.2.3", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.3.tgz", + "integrity": "sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==", + "dev": true, + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.3.tgz", + "integrity": "sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "3.2.3", + "loupe": "^3.1.3", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } }, "node_modules/@vue/compiler-sfc": { "version": "2.7.16", @@ -3018,64 +2817,6 @@ "prettier": "^1.18.2 || ^2.0.0" } }, - "node_modules/@vue/component-compiler-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", - "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", - "dependencies": { - "consolidate": "^0.15.1", - "hash-sum": "^1.0.2", - "lru-cache": "^4.1.2", - "merge-source-map": "^1.1.0", - "postcss": "^7.0.36", - "postcss-selector-parser": "^6.0.2", - "source-map": "~0.6.1", - "vue-template-es2015-compiler": "^1.9.0" - }, - "optionalDependencies": { - "prettier": "^1.18.2 || ^2.0.0" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==" - }, - "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "node_modules/@vue/component-compiler-utils/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" - }, "node_modules/@vue/test-utils": { "version": "1.0.0-beta.29", "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-1.0.0-beta.29.tgz", @@ -3089,48 +2830,11 @@ "vue-template-compiler": "^2.x" } }, - "node_modules/@vue/vue-loader-v15": { - "name": "vue-loader", - "version": "15.11.1", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz", - "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", - "dependencies": { - "@vue/component-compiler-utils": "^3.1.0", - "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0", - "vue-hot-reload-api": "^2.3.0", - "vue-style-loader": "^4.1.0" - }, - "peerDependencies": { - "css-loader": "*", - "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" - }, - "peerDependenciesMeta": { - "cache-loader": { - "optional": true - }, - "prettier": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/@vue/vue-loader-v15/node_modules/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==" - }, - "node_modules/@vue/web-component-wrapper": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", - "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==" - }, "node_modules/@webassemblyjs/ast": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -3139,22 +2843,26 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", @@ -3164,12 +2872,14 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -3181,6 +2891,7 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -3189,6 +2900,7 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -3196,12 +2908,14 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -3217,6 +2931,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", @@ -3229,6 +2944,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -3240,6 +2956,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", @@ -3253,6 +2970,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" @@ -3261,30 +2979,14 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true }, "node_modules/acorn": { "version": "8.11.2", @@ -3297,38 +2999,11 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals/node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-import-attributes": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, "peerDependencies": { "acorn": "^8" } @@ -3341,31 +3016,13 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/ajv": { @@ -3383,46 +3040,11 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, "peerDependencies": { "ajv": "^6.9.1" } @@ -3448,25 +3070,6 @@ "node": ">=6" } }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -3486,11 +3089,6 @@ "node": ">=4" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -3503,25 +3101,6 @@ "node": ">= 8" } }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -3530,6 +3109,15 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", @@ -3542,11 +3130,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, "node_modules/array-includes": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", @@ -3565,14 +3148,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, "node_modules/array.prototype.findlastindex": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", @@ -3684,18 +3259,10 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "funding": [ { "type": "opencollective", @@ -3711,11 +3278,11 @@ } ], "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", + "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -3757,65 +3324,6 @@ "axios": "0.x" } }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, "node_modules/babel-plugin-lodash": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz", @@ -3829,79 +3337,11 @@ "require-package-name": "^2.0.1" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", - "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.4", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", - "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.4", - "core-js-compat": "^3.33.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", - "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.4" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -3910,99 +3350,11 @@ "node": ">=8" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "node_modules/blueimp-md5": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==" }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, "node_modules/bootstrap": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz", @@ -4035,6 +3387,11 @@ "vue-functional-data-merge": "^3.1.0" } }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4055,20 +3412,16 @@ "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", + "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", "funding": [ { "type": "opencollective", @@ -4084,10 +3437,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001718", + "electron-to-chromium": "^1.5.160", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -4096,40 +3449,19 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "devOptional": true }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, "node_modules/call-bind": { @@ -4185,19 +3517,11 @@ "node": ">=6" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, "node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "engines": { "node": ">=10" }, @@ -4205,21 +3529,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001571", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001571.tgz", - "integrity": "sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==", + "version": "1.0.30001722", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001722.tgz", + "integrity": "sha512-DCQHBBZtiK6JVkAGw7drvAMK0Q0POD/xZvEmDp6baiMMP6QXXk9HpD6mNYBZWhOPG6LvIDb82ITqtWjhDckHCA==", "funding": [ { "type": "opencollective", @@ -4235,18 +3548,10 @@ } ] }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "engines": { - "node": ">=4" - } - }, "node_modules/chai": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", "dev": true, "dependencies": { "assertion-error": "^2.0.1", @@ -4316,145 +3621,11 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, "engines": { "node": ">=6.0" } }, - "node_modules/ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-highlight": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", - "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", - "dependencies": { - "chalk": "^4.0.0", - "highlight.js": "^10.7.1", - "mz": "^2.4.0", - "parse5": "^5.1.1", - "parse5-htmlparser2-tree-adapter": "^6.0.0", - "yargs": "^16.0.0" - }, - "bin": { - "highlight": "bin/highlight" - }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" - } - }, - "node_modules/cli-highlight/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cli-highlight/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cli-highlight/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cli-highlight/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/cli-highlight/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-highlight/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", - "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", - "dependencies": { - "arch": "^2.1.1", - "execa": "^1.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -4465,27 +3636,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -4499,16 +3649,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -4520,60 +3660,6 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -4584,173 +3670,22 @@ "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "engines": { - "node": ">=0.8" - } - }, "node_modules/consola": { "version": "2.15.3", "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, - "node_modules/consolidate": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", - "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", - "deprecated": "Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog", - "dependencies": { - "bluebird": "^3.1.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/copy-webpack-plugin": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", - "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", - "dependencies": { - "fast-glob": "^3.2.7", - "glob-parent": "^6.0.1", - "globby": "^11.0.3", - "normalize-path": "^3.0.0", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/core-js": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.34.0.tgz", - "integrity": "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", - "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", - "dependencies": { - "browserslist": "^4.22.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "peer": true }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4760,358 +3695,49 @@ "node": ">= 8" } }, - "node_modules/css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" - }, "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.4.0.tgz", + "integrity": "sha512-W0Y2HOXlPkb2yaKrCVRjinYKciu/qSLEmK0K9mcfDei3zwlnHFEHAs/Du3cIRwPqY+J4JsiBzUjoHyc8RsJ03A==", + "dev": true, "dependencies": { - "cssom": "~0.3.6" + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==" - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "peer": true }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -5126,6 +3752,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -5134,9 +3761,10 @@ } }, "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "dev": true }, "node_modules/decode-uri-component": { "version": "0.4.1", @@ -5160,91 +3788,6 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/default-gateway/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -5261,14 +3804,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -5293,63 +3828,24 @@ "node": ">=0.4.0" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, "engines": { "node": ">=6" } }, + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -5361,104 +3857,17 @@ "node": ">=6.0.0" } }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true }, "node_modules/dom-event-types": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/dom-event-types/-/dom-event-types-1.1.0.tgz", "integrity": "sha512-jNCX+uNJ3v38BKvPbpki6j5ItVlnSqVV6vDWGS6rExzCMjsc39frLjm1n91o6YaKK6AZl0wLloItW6C6mr61BQ==" }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, "node_modules/dunder-proto": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", @@ -5472,28 +3881,16 @@ "node": ">= 0.4" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/easy-stack": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", - "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.616", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz", - "integrity": "sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==" + "version": "1.5.166", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.166.tgz", + "integrity": "sha512-QPWqHL0BglzPYyJJ1zSSmwFFL6MFXhbACOCcsCdUMCkzPdS9/OIBVxg516X/Ado2qwAq8k0nJJ7phQPCqiaFAw==" }, "node_modules/element-in-view": { "version": "0.1.0", @@ -5505,34 +3902,11 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -5554,35 +3928,14 @@ } }, "node_modules/entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dependencies": { - "prr": "~1.0.1" + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dependencies": { - "stackframe": "^1.3.4" + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/es-abstract": { @@ -5654,9 +4007,10 @@ } }, "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true }, "node_modules/es-object-atoms": { "version": "1.0.0", @@ -5706,19 +4060,53 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -5727,34 +4115,6 @@ "node": ">=0.8.0" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint": { "version": "7.32.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", @@ -6291,113 +4651,6 @@ "node": ">=4" } }, - "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/eslint/node_modules/@babel/code-frame": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", @@ -6637,6 +4890,15 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -6645,226 +4907,29 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-pubsub": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", - "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, "engines": { "node": ">=0.8.x" } }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, + "node_modules/expect-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", + "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", + "dev": true, "engines": { - "node": ">=6" + "node": ">=12.0.0" } }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/execa/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/execa/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -6875,34 +4940,25 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, - "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "node_modules/fast-xml-parser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" + "strnum": "^1.0.5" }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" + "bin": { + "fxparser": "src/cli/cli.js" } }, "node_modules/file-entry-cache": { @@ -6938,56 +4994,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -7003,6 +5014,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, "bin": { "flat": "cli.js" } @@ -7052,6 +5064,22 @@ "is-callable": "^1.1.3" } }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -7065,14 +5093,6 @@ "node": ">= 6" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fp-ts": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.16.1.tgz", @@ -7091,33 +5111,6 @@ "url": "https://github.com/sponsors/rawify" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==" - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -7165,6 +5158,8 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "peer": true, "engines": { "node": ">=6.9.0" } @@ -7177,15 +5172,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/get-intrinsic": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", @@ -7209,17 +5195,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -7254,26 +5229,17 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "engines": { "node": ">=4" } @@ -7292,33 +5258,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", - "engines": { - "node": ">= 4" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -7333,29 +5272,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "engines": { - "node": ">=4.x" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/habitica-markdown": { "version": "3.0.0", @@ -7376,10 +5294,25 @@ "markdown-it-emoji": "^1.1.1" } }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + "node_modules/habitica-markdown/node_modules/entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" + }, + "node_modules/habitica-markdown/node_modules/markdown-it": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "dependencies": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } }, "node_modules/has-bigints": { "version": "1.0.2", @@ -7444,11 +5377,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -7473,277 +5401,56 @@ "resolved": "https://registry.npmjs.org/hellojs/-/hellojs-1.20.0.tgz", "integrity": "sha512-zfZGRt0J0OpJHnw2GJz4uh+rzMNAMWpIymiaRbSmCqCvqDMLSx2/qR5JucqnHPsZHUEjyKj5aLJ8K54kyHHjLQ==" }, - "node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "engines": { - "node": "*" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, "dependencies": { - "whatwg-encoding": "^2.0.0" + "whatwg-encoding": "^3.1.1" }, "engines": { - "node": ">=12" - } - }, - "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", - "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" + "node": ">=18" } }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "node": ">= 14" } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, "dependencies": { - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" + "node": ">= 14" } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -7906,14 +5613,6 @@ "node": ">= 0.4" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/intro.js": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/intro.js/-/intro.js-7.2.0.tgz", @@ -7938,14 +5637,6 @@ "io-ts": "^2.0.0" } }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "engines": { - "node": ">= 10" - } - }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -7974,11 +5665,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -8027,17 +5713,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dependencies": { - "ci-info": "^1.5.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -8063,20 +5738,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -8085,14 +5746,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-file-esm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-file-esm/-/is-file-esm-1.0.0.tgz", - "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==", - "dependencies": { - "read-pkg-up": "^7.0.1" - } - }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -8126,14 +5779,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "engines": { - "node": ">=8" - } - }, "node_modules/is-nan": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", @@ -8183,31 +5828,19 @@ } }, "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true }, "node_modules/is-regex": { "version": "1.1.4", @@ -8235,14 +5868,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -8289,6 +5914,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "engines": { "node": ">=10" }, @@ -8307,44 +5933,31 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/javascript-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", - "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==" - }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -8358,6 +5971,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -8366,6 +5980,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -8376,31 +5991,11 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/joi": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", - "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, "node_modules/jquery": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, - "node_modules/js-message": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", - "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8419,43 +6014,37 @@ } }, "node_modules/jsdom": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-18.1.1.tgz", - "integrity": "sha512-NmJQbjQ/gpS/1at/ce3nCx89HbXL/f5OcenBe8wU1Eik0ROhyUc3LtmG3567dEHAGXkN8rmILW/qtCOPxPHQJw==", + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.5.0", - "acorn-globals": "^6.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.1", - "decimal.js": "^10.3.1", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^3.0.0", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^10.0.0", - "ws": "^8.2.3", - "xml-name-validator": "^4.0.0" + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "peerDependencies": { - "canvas": "^2.5.0" + "canvas": "^3.0.0" }, "peerDependenciesMeta": { "canvas": { @@ -8463,28 +6052,16 @@ } } }, - "node_modules/jsdom-global": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz", - "integrity": "sha512-t1KMcBkz/pT5JrvcJbpUR2u/w1kO9jXctaaGJ0vZDzwFnIvGWw9IDSRciT83kIs8Bnw4qpOl8bQK08V01YgMPg==", - "peerDependencies": { - "jsdom": ">=10.0.0" - } - }, - "node_modules/jsdom/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -8492,15 +6069,11 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -8516,6 +6089,8 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "peer": true, "bin": { "json5": "lib/cli.js" }, @@ -8523,17 +6098,6 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/just-extend": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", @@ -8547,39 +6111,6 @@ "json-buffer": "3.0.1" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/launch-editor": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", - "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/launch-editor-middleware": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.6.1.tgz", - "integrity": "sha512-Fg/xYhf7ARmRp40n18wIfJyuAMEjXo67Yull7uF7d0OJ3qA4EYJISt1XfPPn69IIJ5jKgQwzcg6DqHYo95LL/g==", - "dependencies": { - "launch-editor": "^2.6.1" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -8592,19 +6123,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, "node_modules/linkify-it": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", @@ -8617,38 +6135,16 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, "engines": { "node": ">=6.11.5" } }, - "node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -8664,41 +6160,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.defaultsdeep": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", - "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==" - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==" - }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==" - }, - "node_modules/lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -8709,26 +6175,27 @@ "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, "node_modules/log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "dependencies": { - "chalk": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -8743,6 +6210,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8758,6 +6226,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -8768,12 +6237,14 @@ "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -8782,6 +6253,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -8789,164 +6261,54 @@ "node": ">=8" } }, - "node_modules/log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", - "dependencies": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", - "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/loupe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", - "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "dev": true }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "peer": true, "dependencies": { "yallist": "^3.0.2" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dependencies": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" }, "bin": { - "markdown-it": "bin/markdown-it.js" + "markdown-it": "bin/markdown-it.mjs" } }, "node_modules/markdown-it-emoji": { @@ -8987,6 +6349,29 @@ "markdown-it": "bin/markdown-it.js" } }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/markdown-it/node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/markdown-it/node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + }, + "node_modules/markdown-it/node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + }, "node_modules/math-intrinsics": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", @@ -8995,103 +6380,16 @@ "node": ">= 0.4" } }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dependencies": { - "source-map": "^0.6.1" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "node_modules/mime-db": { "version": "1.52.0", @@ -9112,86 +6410,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -9212,113 +6430,98 @@ } }, "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "engines": { - "node": ">=8" - } - }, - "node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "node": ">=16 || 14 >=14.17" } }, "node_modules/mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.6.0.tgz", + "integrity": "sha512-i0JVb+OUBqw63X/1pC3jCyJsqYisgxySBbsQa8TKvefpA1oEnw7JXxXnftfMHRsw7bEEVGRtVlHcDYXBa7FzVw==", + "dev": true, "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^9.2.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" }, "bin": { "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 10.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "engines": { - "node": ">=6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "balanced-match": "^1.0.0" } }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "node_modules/mocha/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { "node": ">=10" }, @@ -9326,18 +6529,40 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mocha/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -9346,33 +6571,38 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mocha/node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dependencies": { - "randombytes": "^2.1.0" + "node_modules/mocha/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -9383,288 +6613,33 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/mochapack": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/mochapack/-/mochapack-2.1.4.tgz", - "integrity": "sha512-qoZYT8ibht6z35e936P6Y/3nynFX843Jm+2l/pNWB3Sue63IHBfqZeAnF6Ypez85kUll7HtapMogfO2hGb2N2Q==", + "node_modules/mocha/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "dependencies": { - "@babel/runtime-corejs2": "^7.0.0", - "chalk": "^2.4.2", - "chokidar": "^3.5.2", - "glob-parent": "5.1.2", - "globby": "^10.0.1", - "interpret": "^1.2.0", - "is-glob": "^4.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.15", - "memory-fs": "^0.4.1", - "minimatch": "^3.0.4", - "nodent-runtime": "^3.2.1", - "normalize-path": "^3.0.0", - "progress": "^2.0.3", - "source-map-support": "^0.5.13", - "toposort": "^2.0.2", - "yargs": "14.0.0" - }, - "bin": { - "mochapack": "bin/mochapack" - }, - "peerDependencies": { - "mocha": ">=6", - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/mochapack/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/mochapack/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/mochapack/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mochapack/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/mochapack/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/mochapack/node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochapack/node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/mochapack/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mochapack/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mochapack/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mochapack/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/mochapack/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/mochapack/node_modules/yargs": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.0.0.tgz", - "integrity": "sha512-ssa5JuRjMeZEUjg7bEL99AwpitxU/zWGAGpdj0di41pOEmJti8NR6kyUIJBkR78DTYNPZOU08luUo0GTHuB+ow==", - "dependencies": { - "cliui": "^5.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "node_modules/mochapack/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "node_modules/mocha/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" } }, - "node_modules/module-alias": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", - "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==" - }, "node_modules/moment": { "version": "2.30.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", @@ -9673,57 +6648,30 @@ "node": "*" } }, - "node_modules/moment-locales-webpack-plugin": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/moment-locales-webpack-plugin/-/moment-locales-webpack-plugin-1.2.0.tgz", - "integrity": "sha512-QAi5v0OlPUP7GXviKMtxnpBAo8WmTHrUNN7iciAhNOEAd9evCOvuN0g1N7ThIg3q11GLCkjY1zQ2saRcf/43nQ==", - "dependencies": { - "lodash.difference": "^4.5.0" - }, - "peerDependencies": { - "moment": "^2.8.0", - "webpack": "^1 || ^2 || ^3 || ^4 || ^5" - } - }, "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, "engines": { "node": ">=10" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -9750,23 +6698,11 @@ "node": ">= 0.4.0" } }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true }, "node_modules/nise": { "version": "5.1.9", @@ -9785,15 +6721,6 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -9832,43 +6759,10 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" - }, - "node_modules/nodent-runtime": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/nodent-runtime/-/nodent-runtime-3.2.1.tgz", - "integrity": "sha512-7Ws63oC+215smeKJQCxzrK21VFVlCFBkwl0MOObt0HOpVQXs3u483sAmtkF33nNqZ5rSOQjB76fgyPBmAUrtCA==", - "hasInstallScript": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -9886,59 +6780,11 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", + "dev": true }, "node_modules/object-inspect": { "version": "1.13.3", @@ -10047,30 +6893,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -10079,44 +6901,6 @@ "wrappy": "1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "bin": { - "opener": "bin/opener-bin.js" - } - }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -10133,119 +6917,11 @@ "node": ">= 0.8.0" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "engines": { - "node": ">=4" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -10260,6 +6936,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -10270,34 +6947,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true }, "node_modules/parent-module": { "version": "1.0.1", @@ -10310,62 +6964,35 @@ "node": ">=6" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" + "entities": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { + "node_modules/parse5/node_modules/entities": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { "node": ">=8" } @@ -10391,19 +7018,34 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true + }, "node_modules/pathval": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", @@ -10414,9 +7056,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -10441,63 +7083,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/playwright": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.53.0.tgz", + "integrity": "sha512-ghGNnIEYZC4E+YtclRn4/p6oYbdPiASELBIYkBXfaTVKreQUYbMUYQDwS12a8F0/HtIjr/CkGjtwABeFPGcS4Q==", + "dev": true, "dependencies": { - "find-up": "^4.0.0" + "playwright-core": "1.53.0" + }, + "bin": { + "playwright": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" } }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "node_modules/playwright-core": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.53.0.tgz", + "integrity": "sha512-mGLg8m0pm4+mmtB7M89Xw/GSqoNC+twivl8ITteqvAndachozYe2ZA7srU6uleV1vEdAHYqjq+SV8SNxRRFYBw==", + "dev": true, + "bin": { + "playwright-core": "cli.js" }, "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "node": ">=18" } }, "node_modules/popper.js": { @@ -10518,39 +7131,10 @@ "vue": "^2.5.18" } }, - "node_modules/portfinder": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", - "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", - "dependencies": { - "async": "^2.6.4", - "debug": "^3.2.7", - "mkdirp": "^0.5.6" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.5.tgz", + "integrity": "sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg==", "funding": [ { "type": "opencollective", @@ -10566,532 +7150,19 @@ } ], "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.0.tgz", - "integrity": "sha512-SaIbK8XW+MZbd0xHPf7kdfA/3eOt7vxJ72IRecn3EzuZVLr1r0orzf0MX/pN8m+NMDoo6X/SQd8oeKqGZd8PXg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.14", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.14.tgz", - "integrity": "sha512-65xXYsT40i9GyWzlHQ5ShZoK7JZdySeOozi/tz2EezDo6c04q6+ckYMeoY7idaie1qp2dT5KoYQ2yky6JuoHnA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, - "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -11115,19 +7186,31 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, "node_modules/progress": { "version": "2.0.3", @@ -11137,71 +7220,11 @@ "node": ">=0.4.0" } }, - "node_modules/progress-webpack-plugin": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz", - "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==", - "dependencies": { - "chalk": "^2.1.0", - "figures": "^2.0.0", - "log-update": "^2.3.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "peerDependencies": { - "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -11210,18 +7233,12 @@ "node": ">=6" } }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dependencies": { - "side-channel": "^1.0.6" - }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, "node_modules/query-string": { @@ -11240,30 +7257,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ramda": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", @@ -11273,139 +7266,16 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true }, "node_modules/readdirp": { "version": "3.5.0", @@ -11418,20 +7288,15 @@ "node": ">=8.10.0" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dependencies": { - "regenerate": "^1.4.2" + "minimatch": "^3.0.5" }, "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, "node_modules/regenerator-runtime": { @@ -11439,14 +7304,6 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, "node_modules/regexp.prototype.flags": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", @@ -11474,61 +7331,6 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -11545,22 +7347,12 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, "node_modules/require-package-name": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", "integrity": "sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==", "dev": true }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -11585,35 +7377,6 @@ "node": ">=4" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -11628,28 +7391,50 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/rollup": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.43.0.tgz", + "integrity": "sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg==", "dependencies": { - "queue-microtask": "^1.2.2" + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.43.0", + "@rollup/rollup-android-arm64": "4.43.0", + "@rollup/rollup-darwin-arm64": "4.43.0", + "@rollup/rollup-darwin-x64": "4.43.0", + "@rollup/rollup-freebsd-arm64": "4.43.0", + "@rollup/rollup-freebsd-x64": "4.43.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.43.0", + "@rollup/rollup-linux-arm-musleabihf": "4.43.0", + "@rollup/rollup-linux-arm64-gnu": "4.43.0", + "@rollup/rollup-linux-arm64-musl": "4.43.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.43.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.43.0", + "@rollup/rollup-linux-riscv64-gnu": "4.43.0", + "@rollup/rollup-linux-riscv64-musl": "4.43.0", + "@rollup/rollup-linux-s390x-gnu": "4.43.0", + "@rollup/rollup-linux-x64-gnu": "4.43.0", + "@rollup/rollup-linux-x64-musl": "4.43.0", + "@rollup/rollup-win32-arm64-msvc": "4.43.0", + "@rollup/rollup-win32-ia32-msvc": "4.43.0", + "@rollup/rollup-win32-x64-msvc": "4.43.0", + "fsevents": "~2.3.2" } }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true + }, "node_modules/safe-array-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", @@ -11675,7 +7460,8 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/safe-regex-test": { "version": "1.0.2", @@ -11696,7 +7482,8 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/sass": { "version": "1.69.5", @@ -11714,71 +7501,16 @@ "node": ">=14.0.0" } }, - "node_modules/sass-loader": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.1.tgz", - "integrity": "sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==", - "dependencies": { - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, "dependencies": { "xmlchars": "^2.2.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=v12.22.7" } }, "node_modules/secure-keys": { @@ -11786,23 +7518,6 @@ "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz", "integrity": "sha512-nZi59hW3Sl5P3+wOO89eHBAAGwmCPd2aE1+dLZV5MO+ItQctIvAqihzaAXIQhvtH4KJPxM080HsnqltR2y8cWg==" }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -11817,153 +7532,16 @@ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -11998,22 +7576,6 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -12033,14 +7595,6 @@ "node": ">=8" } }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -12109,10 +7663,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/sinon": { "version": "17.0.1", @@ -12159,24 +7726,17 @@ } }, "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", + "dev": true, "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" }, "engines": { - "node": ">= 10" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" + "node": ">=18" } }, "node_modules/slice-ansi": { @@ -12225,24 +7785,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/sortablejs": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz", @@ -12257,9 +7799,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } @@ -12268,80 +7810,12 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "devOptional": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==" - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/split-on-first": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-3.0.0.tgz", @@ -12358,49 +7832,23 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "dev": true }, "node_modules/stopword": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/stopword/-/stopword-2.0.8.tgz", "integrity": "sha512-btlEC2vEuhCuvshz99hSGsY8GzaP5qzDPQm56j6rR/R38p8xdsOXgU5a6tIgvU/4hcCta1Vlo/2FVXA9m0f8XA==" }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -12414,6 +7862,21 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", @@ -12467,6 +7930,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -12475,30 +7951,6 @@ "node": ">=4" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", - "engines": { - "node": ">=4" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -12510,21 +7962,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "node_modules/strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "dev": true, "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" + "js-tokens": "^9.0.1" }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/antfu" } }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true + }, + "node_modules/strnum": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ] + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -12547,43 +8013,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==" - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true }, "node_modules/table": { "version": "6.8.1", @@ -12624,14 +8058,21 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, "engines": { "node": ">=6" } }, + "node_modules/tar-mini": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/tar-mini/-/tar-mini-0.2.0.tgz", + "integrity": "sha512-+qfUHz700DWnRutdUsxRRVZ38G1Qr27OetwaMYTdg8hcPxf46U0S1Zf76dQMWRBmusOt2ZCK5kbIaiLkoGO7WQ==" + }, "node_modules/terser": { "version": "5.26.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", + "devOptional": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -12649,6 +8090,7 @@ "version": "5.3.10", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", @@ -12682,6 +8124,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -12698,84 +8141,14 @@ "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "devOptional": true }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/thread-loader": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", - "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", - "dependencies": { - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.1.0", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/thread-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/thread-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/throttleit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", @@ -12784,11 +8157,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, "node_modules/timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", @@ -12800,6 +8168,102 @@ "node": ">=0.6.0" } }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tinypool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.0.tgz", + "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", + "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -12811,58 +8275,37 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/toposort": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", - "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" - }, "node_modules/totalist": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, "engines": { "node": ">=6" } }, "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" + "node": ">=16" } }, "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, "dependencies": { - "punycode": "^2.1.1" + "punycode": "^2.3.1" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/tsconfig-paths": { @@ -12911,26 +8354,6 @@ "node": ">=4" } }, - "node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", @@ -13014,64 +8437,13 @@ "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "devOptional": true }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "funding": [ { "type": "opencollective", @@ -13087,8 +8459,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -13105,15 +8477,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -13126,24 +8489,6 @@ "which-typed-array": "^1.1.2" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -13161,15 +8506,6 @@ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==" }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "node_modules/validator": { "version": "13.11.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", @@ -13178,12 +8514,219 @@ "node": ">= 0.10" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">= 0.8" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.3.tgz", + "integrity": "sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-plugin-compression2": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/vite-plugin-compression2/-/vite-plugin-compression2-1.4.0.tgz", + "integrity": "sha512-UEk0Bq1IkkwqbDLoLOHZ8WTmN1QbvR28fvNl2liB88/6SG1oLrTVkxfjqW3pdla/rKQ6QXn+pJpv3GBbl+k56g==", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "tar-mini": "^0.2.0" + }, + "peerDependencies": { + "vite": "^2.0.0||^3.0.0||^4.0.0||^5.0.0 ||^6.0.0" + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vitest": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.3.tgz", + "integrity": "sha512-E6U2ZFXe3N/t4f5BwUaVCKRLHqUpk1CBWeMh78UT4VaTPH/2dyvH6ALl29JTovEPu9dVKr/K/J4PkXgrMbw4Ww==", + "dev": true, + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.3", + "@vitest/mocker": "3.2.3", + "@vitest/pretty-format": "^3.2.3", + "@vitest/runner": "3.2.3", + "@vitest/snapshot": "3.2.3", + "@vitest/spy": "3.2.3", + "@vitest/utils": "3.2.3", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.0", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.3", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.3", + "@vitest/ui": "3.2.3", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/vue": { @@ -13255,96 +8798,6 @@ "resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz", "integrity": "sha512-leT4kdJVQyeZNY1kmnS1xiUlQ9z1B/kdBFCILIjYYQDqZgLqCLa0UhjSSeRX6c3mUe6U5qYeM8LrEqkHJ1B4LA==" }, - "node_modules/vue-hot-reload-api": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", - "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==" - }, - "node_modules/vue-loader": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.0.tgz", - "integrity": "sha512-tq81JlBNWYvoYAh5PRZXg5bE7BEv0Id6W7BF5otj18MtHgu5OqiK9rQu0z73r+VGlIq0lLDoEeC7RWYynUpXlQ==", - "dependencies": { - "chalk": "^4.1.0", - "hash-sum": "^2.0.0", - "watchpack": "^2.4.0" - }, - "peerDependencies": { - "webpack": "^4.1.0 || ^5.0.0-0" - }, - "peerDependenciesMeta": { - "@vue/compiler-sfc": { - "optional": true - }, - "vue": { - "optional": true - } - } - }, - "node_modules/vue-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/vue-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/vue-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/vue-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/vue-loader/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/vue-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/vue-mugen-scroll": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/vue-mugen-scroll/-/vue-mugen-scroll-0.2.6.tgz", @@ -13362,59 +8815,16 @@ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.6.5.tgz", "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==" }, - "node_modules/vue-style-loader": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", - "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", - "dependencies": { - "hash-sum": "^1.0.2", - "loader-utils": "^1.0.2" - } - }, - "node_modules/vue-style-loader/node_modules/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==" - }, - "node_modules/vue-template-babel-compiler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vue-template-babel-compiler/-/vue-template-babel-compiler-2.0.0.tgz", - "integrity": "sha512-O0GOktQ5TZCZ5sWVl8CbyLBFriwwai7xDBtpdUI1xZSbbVVNf5Um/mDHYJXaHX6vfhmeAuohggXxIi0RPgXZ4g==", - "dependencies": { - "@babel/core": "^7.14.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.15.6", - "@babel/plugin-proposal-optional-chaining": "^7.14.2", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.5", - "@babel/types": "^7.14.5", - "deepmerge": "^4.2.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "vue-template-compiler": "^2.6.0" - } - }, "node_modules/vue-template-compiler": { "version": "2.7.16", "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "peer": true, "dependencies": { "de-indent": "^1.0.2", "he": "^1.2.0" } }, - "node_modules/vue-template-es2015-compiler": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", - "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==" - }, "node_modules/vuedraggable": { "version": "2.24.3", "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.3.tgz", @@ -13432,30 +8842,23 @@ "vue": "^2.6.10" } }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, "node_modules/w3c-xmlserializer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", - "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, "dependencies": { - "xml-name-validator": "^4.0.0" + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/watchpack": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -13464,26 +8867,11 @@ "node": ">=10.13.0" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, "engines": { "node": ">=12" } @@ -13492,6 +8880,7 @@ "version": "5.94.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "dev": true, "dependencies": { "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", @@ -13533,356 +8922,20 @@ } } }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", - "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "html-escaper": "^2.0.2", - "is-plain-object": "^5.0.0", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-chain": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", - "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dependencies": { - "deepmerge": "^1.5.2", - "javascript-stringify": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-chain/node_modules/deepmerge": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", - "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, "engines": { "node": ">=10.13.0" } }, - "node_modules/webpack-virtual-modules": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", - "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==" - }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -13896,72 +8949,38 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, "dependencies": { "iconv-lite": "0.6.3" }, "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" - }, "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/whatwg-url": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", - "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, "dependencies": { - "tr46": "^3.0.0", + "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/which": { @@ -13993,11 +9012,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" - }, "node_modules/which-typed-array": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", @@ -14016,62 +9030,27 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" - }, "node_modules/workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==" + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.2.tgz", + "integrity": "sha512-Xz4Nm9c+LiBHhDR5bDLnNzmj6+5F+cyEAWPMkbs2awq/dYazR/efelZzUAjB/y3kNHL+uzkHvxVVpaOfGCPV7A==", + "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", @@ -14089,6 +9068,57 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -14125,9 +9155,10 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "dev": true, "engines": { "node": ">=10.0.0" }, @@ -14145,17 +9176,19 @@ } }, "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true }, "node_modules/y18n": { "version": "5.0.8", @@ -14168,15 +9201,9 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "peer": true }, "node_modules/yargs": { "version": "16.2.0", @@ -14207,6 +9234,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -14217,126 +9245,17 @@ "node": ">=10" } }, - "node_modules/yargs-unparser/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/yorkie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", - "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", - "hasInstallScript": true, - "dependencies": { - "execa": "^0.8.0", - "is-ci": "^1.0.10", - "normalize-path": "^1.0.0", - "strip-indent": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/yorkie/node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/yorkie/node_modules/execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/yorkie/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/yorkie/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/yorkie/node_modules/normalize-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", - "integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yorkie/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yorkie/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yorkie/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/yorkie/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" } } } diff --git a/website/client/package.json b/website/client/package.json index e9b1fe2689..62da71d323 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -3,28 +3,26 @@ "version": "1.0.0", "private": true, "scripts": { - "serve": "vue-cli-service serve", - "build": "vue-cli-service build", - "test:unit": "vue-cli-service test:unit --require ./tests/unit/helpers.js", - "lint": "vue-cli-service lint .", - "lint-no-fix": "vue-cli-service lint --no-fix .", + "serve": "vite", + "build": "vite build", + "preview": "vite preview", + "test:unit": "vitest run", + "test:unit:watch": "vitest watch", + "lint": "eslint --ext .js,.vue --ignore-path ../../.gitignore --fix .", + "lint-no-fix": "eslint --ext .js,.vue --no-fix src", "postinstall": "node ./scripts/npm-postinstall.js" }, "dependencies": { - "@vue/cli-plugin-babel": "^5.0.8", - "@vue/cli-plugin-eslint": "^5.0.8", - "@vue/cli-plugin-router": "^5.0.8", - "@vue/cli-plugin-unit-mocha": "^5.0.8", - "@vue/cli-service": "^5.0.8", + "@froxz/vite-plugin-s3": "^1.6.0", + "@vitejs/plugin-vue2": "^2.3.3", "@vue/test-utils": "1.0.0-beta.29", "amplitude-js": "^8.21.3", "assert": "^2.1.0", + "autoprefixer": "^10.4.20", "axios": "^0.28.0", "axios-progress-bar": "^1.2.0", - "babel-eslint": "^10.1.0", "bootstrap": "^4.6.0", "bootstrap-vue": "^2.23.1", - "core-js": "^3.33.1", "eslint": "7.32.0", "eslint-config-habitrpg": "6.2.0", "eslint-plugin-mocha": "5.3.0", @@ -34,31 +32,34 @@ "intro.js": "^7.2.0", "jquery": "^3.7.1", "lodash": "^4.17.21", + "markdown-it": "^14.0.0", "moment": "^2.29.4", - "moment-locales-webpack-plugin": "^1.2.0", "nconf": "^0.12.1", "sass": "^1.63.4", - "sass-loader": "^14.1.1", "sinon": "^17.0.1", "stopword": "^2.0.8", "timers-browserify": "^2.0.12", "uuid": "^9.0.1", "validator": "^13.9.0", + "vite": "^6.0.0", + "vite-plugin-compression2": "^1.3.3", "vue": "^2.7.10", "vue-fragment": "^1.6.0", "vue-mugen-scroll": "^0.2.6", "vue-router": "^3.6.5", - "vue-template-babel-compiler": "^2.0.0", - "vue-template-compiler": "^2.7.10", "vuedraggable": "^2.24.3", "vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#153d339e4dbebb73733658aeda1d5b7fcc55b0a0" }, "devDependencies": { "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "@vitest/browser": "^3.0.5", "babel-plugin-lodash": "^3.3.4", - "chai": "^5.1.0", "inspectpack": "^4.7.1", + "jsdom": "^26.0.0", + "mocha": "^11.1.0", + "playwright": "^1.50.1", "terser-webpack-plugin": "^5.3.10", + "vitest": "^3.0.5", "webpack": "^5.94.0" } } diff --git a/website/client/src/app.vue b/website/client/src/app.vue index e839ffd9b5..d8f561c3c3 100644 --- a/website/client/src/app.vue +++ b/website/client/src/app.vue @@ -29,12 +29,14 @@ - +
+ +
- diff --git a/website/client/src/assets/css/sprites.css b/website/client/src/assets/css/sprites.css index 3e61f3bebf..1c21bf44f1 100755 --- a/website/client/src/assets/css/sprites.css +++ b/website/client/src/assets/css/sprites.css @@ -177,7 +177,7 @@ 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; height: 135px; } @@ -190,6 +190,14 @@ 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 { width: 141px; height: 147px; diff --git a/website/client/src/assets/css/sprites/spritesmith-main.css b/website/client/src/assets/css/sprites/spritesmith-main.css index cd31dbc03a..6c9095d57e 100644 --- a/website/client/src/assets/css/sprites/spritesmith-main.css +++ b/website/client/src/assets/css/sprites/spritesmith-main.css @@ -2191,6 +2191,11 @@ width: 141px; 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-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_sunset_meadow.png'); width: 141px; @@ -29900,6 +29905,11 @@ width: 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 { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_robeOfDiamonds.png'); width: 114px; @@ -30535,6 +30545,11 @@ width: 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 { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_regalCrown.png'); width: 114px; @@ -31475,6 +31490,11 @@ width: 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 { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_robeOfDiamonds.png'); width: 114px; @@ -35635,6 +35655,16 @@ width: 114px; 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 { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_301404.png'); width: 90px; diff --git a/website/client/src/assets/scss/banner.scss b/website/client/src/assets/scss/banner.scss index 6461aff450..e00cfb4e29 100644 --- a/website/client/src/assets/scss/banner.scss +++ b/website/client/src/assets/scss/banner.scss @@ -1,5 +1,5 @@ -@import '~@/assets/scss/colors.scss'; +@import '@/assets/scss/colors.scss'; .featured-label { width: auto; diff --git a/website/client/src/assets/scss/bootstrap.scss b/website/client/src/assets/scss/bootstrap.scss index fc701daed6..5b5effb077 100644 --- a/website/client/src/assets/scss/bootstrap.scss +++ b/website/client/src/assets/scss/bootstrap.scss @@ -2,7 +2,7 @@ $grid-gutter-width: 24px; // Bootstrap and its default variables -@import 'node_modules/bootstrap/scss/bootstrap'; +@import '~/bootstrap/scss/bootstrap'; // Bootstrap Vue styles -@import 'node_modules/bootstrap-vue/dist/bootstrap-vue'; \ No newline at end of file +@import '~/bootstrap-vue/dist/bootstrap-vue'; \ No newline at end of file diff --git a/website/client/src/assets/scss/button.scss b/website/client/src/assets/scss/button.scss index 837cb89967..a86354a6f7 100644 --- a/website/client/src/assets/scss/button.scss +++ b/website/client/src/assets/scss/button.scss @@ -316,3 +316,9 @@ line-height: 2; padding: 2px 2px; } + +.btn-lg { + font-size: 1.25rem; + line-height: 1.5; + padding: .5rem 1rem; +} diff --git a/website/client/src/assets/scss/faq.scss b/website/client/src/assets/scss/faq.scss index 481a6016dd..aac66e0fbf 100644 --- a/website/client/src/assets/scss/faq.scss +++ b/website/client/src/assets/scss/faq.scss @@ -1,4 +1,4 @@ -@import '~@/assets/scss/colors.scss'; +@import '@/assets/scss/colors.scss'; h1 { margin-top: 0px; diff --git a/website/client/src/assets/scss/form.scss b/website/client/src/assets/scss/form.scss index b572ec26bf..a7b0f3863c 100644 --- a/website/client/src/assets/scss/form.scss +++ b/website/client/src/assets/scss/form.scss @@ -61,13 +61,13 @@ input, textarea, input.form-control, textarea.form-control { &.input-valid { padding-right: 27px; - background-image: url(~@/assets/svg/for-css/check.svg); + background-image: url(@/assets/svg/for-css/check.svg); background-size: 1rem; } &.input-invalid { padding-right: 40px; - background-image: url(~@/assets/svg/for-css/alert.svg); + background-image: url(@/assets/svg/for-css/alert.svg); background-size: 16px 16px; border-color: $red-100 !important; } @@ -239,7 +239,7 @@ $bg-disabled-control: $gray-10; &:checked~.custom-control-label::after { width: 18px; height: 18px; - background-image: url(~@/assets/svg/for-css/checkbox-white.svg); + background-image: url(@/assets/svg/for-css/checkbox-white.svg); background-size: 13px 10px; } diff --git a/website/client/src/assets/scss/iconalert.scss b/website/client/src/assets/scss/iconalert.scss index ddb2e03f46..acde7f23c6 100644 --- a/website/client/src/assets/scss/iconalert.scss +++ b/website/client/src/assets/scss/iconalert.scss @@ -29,13 +29,13 @@ } .iconalert-success::before { - background-image: url(~@/assets/svg/for-css/checkbox-white.svg); + background-image: url(@/assets/svg/for-css/checkbox-white.svg); background-size: 13px 10px; background-color: #1ca372; } .iconalert-warning::before, .iconalert-error::before { - background-image: url(~@/assets/svg/for-css/alert-white.svg); + background-image: url(@/assets/svg/for-css/alert-white.svg); background-size: 16px 16px; } diff --git a/website/client/src/assets/scss/modal.scss b/website/client/src/assets/scss/modal.scss index 1c88d6a775..375b429f43 100644 --- a/website/client/src/assets/scss/modal.scss +++ b/website/client/src/assets/scss/modal.scss @@ -1,4 +1,4 @@ -@import '~@/assets/scss/colors.scss'; +@import '@/assets/scss/colors.scss'; .modal { z-index: 1350; diff --git a/website/client/src/assets/scss/shops.scss b/website/client/src/assets/scss/shops.scss index afcb8353a4..7a8596cadd 100644 --- a/website/client/src/assets/scss/shops.scss +++ b/website/client/src/assets/scss/shops.scss @@ -46,13 +46,11 @@ .background { background-repeat: repeat-x; - + height:216px; width: 100%; position: absolute; - top: 0; left: 0; - display: flex; flex-direction: column; justify-content: center; @@ -67,6 +65,13 @@ flex-direction: column; } + .shop-message { + position: relative; + height: 76px; + margin: 71px auto; + width: 240px; + } + .npc { position: absolute; left: 0; diff --git a/website/client/src/assets/scss/static.scss b/website/client/src/assets/scss/static.scss index 9a9b9ee51e..9d3b18ef79 100644 --- a/website/client/src/assets/scss/static.scss +++ b/website/client/src/assets/scss/static.scss @@ -1,4 +1,4 @@ -@import '~@/assets/scss/colors.scss'; +@import '@/assets/scss/colors.scss'; .container-fluid.static-view { margin: 5em 2em 0 2em; diff --git a/website/client/src/components/404.vue b/website/client/src/components/404.vue index e5f713b0ae..724248a113 100644 --- a/website/client/src/components/404.vue +++ b/website/client/src/components/404.vue @@ -4,7 +4,7 @@

@@ -48,7 +48,7 @@ export default { diff --git a/website/client/src/components/admin/blocker/index.vue b/website/client/src/components/admin/blocker/index.vue new file mode 100644 index 0000000000..30b0dd16f4 --- /dev/null +++ b/website/client/src/components/admin/blocker/index.vue @@ -0,0 +1,238 @@ + + + + + diff --git a/website/client/src/components/admin/container.vue b/website/client/src/components/admin/container.vue new file mode 100644 index 0000000000..3a467cd37a --- /dev/null +++ b/website/client/src/components/admin/container.vue @@ -0,0 +1,40 @@ + + + diff --git a/website/client/src/components/appFooter.vue b/website/client/src/components/appFooter.vue index ae91f5d97c..88f1cf52f7 100644 --- a/website/client/src/components/appFooter.vue +++ b/website/client/src/components/appFooter.vue @@ -276,9 +276,9 @@

diff --git a/website/client/src/components/static/groupPlans.vue b/website/client/src/components/static/groupPlans.vue index 18635e6ca0..aa74449f0b 100644 --- a/website/client/src/components/static/groupPlans.vue +++ b/website/client/src/components/static/groupPlans.vue @@ -12,9 +12,21 @@ class="party" src="../../assets/images/group-plans-static/party@3x.png" > -

{{ $t('upgradeYourCrew') }}

-

{{ $t('groupPlanTitle') }}

-

{{ $t('groupPlanDesc') }}

+

+ {{ $t('upgradeYourCrew') }} +

+

+ {{ $t('groupPlanTitle') }} +

+

+ {{ $t('groupPlanDesc') }} +

Just $9 @@ -30,12 +42,16 @@ {{ $t('getStarted') }}
-

{{ $t('billedMonthly') }}

+

+ {{ $t('billedMonthly') }} +

-

{{ $t('teamBasedTasksList') }}

+

+ {{ $t('teamBasedTasksList') }} +

{{ $t('teamBasedTasksListDesc') }}

@@ -47,7 +63,9 @@
-

{{ $t('groupManagementControls') }}

+

+ {{ $t('groupManagementControls') }} +

{{ $t('groupManagementControlsDesc') }}

@@ -56,16 +74,26 @@ class="big-gem mb-3 mx-auto" src="../../assets/images/group-plans-static/big-gem@3x.png" > -

{{ $t('inGameBenefits') }}

-

{{ $t('inGameBenefitsDesc') }}

+

+ {{ $t('inGameBenefits') }} +

+

+ {{ $t('inGameBenefitsDesc') }} +

-

+

{{ $t('readyToUpgrade') }}

-

+

{{ $t('createGroupToday') }}

@@ -83,7 +111,9 @@ {{ $t('getStarted') }}
-

{{ $t('billedMonthly') }}

+

+ {{ $t('billedMonthly') }} +

@@ -105,8 +135,13 @@ class="bottom-banner text-center" :class="{ static: isStaticPage }" > -

{{ $t('interestedLearningMore') }}

-

+

+ {{ $t('interestedLearningMore') }} +

+

@@ -124,7 +159,7 @@ diff --git a/website/client/src/pages/settings/siteDataRows/apiRow.vue b/website/client/src/pages/settings/siteDataRows/apiRow.vue index b9e9a94920..037f5dbe3b 100644 --- a/website/client/src/pages/settings/siteDataRows/apiRow.vue +++ b/website/client/src/pages/settings/siteDataRows/apiRow.vue @@ -52,7 +52,7 @@ diff --git a/website/client/src/pages/settings/siteDataRows/webhooksRow.vue b/website/client/src/pages/settings/siteDataRows/webhooksRow.vue index 55992ace6f..035c253796 100644 --- a/website/client/src/pages/settings/siteDataRows/webhooksRow.vue +++ b/website/client/src/pages/settings/siteDataRows/webhooksRow.vue @@ -137,7 +137,7 @@ - &.groups-background { - background-color: white; - background-image: url('../assets/images/group-plans-static/top.svg'); - background-repeat: no-repeat; - } - } + + .modal-backdrop { + opacity: .9 !important; + background-color: $purple-100 !important; + } - + /* Push progress bar above modals */ + #nprogress .bar { + z-index: 1600 !important; /* Must stay above nav bar */ + } + - - - diff --git a/website/client/src/router/index.js b/website/client/src/router/index.js index cbb0efa1ce..cc82cd6cae 100644 --- a/website/client/src/router/index.js +++ b/website/client/src/router/index.js @@ -19,16 +19,12 @@ const HallPage = () => import(/* webpackChunkName: "hall" */'@/components/hall/i const PatronsPage = () => import(/* webpackChunkName: "hall" */'@/components/hall/patrons'); const HeroesPage = () => import(/* webpackChunkName: "hall" */'@/components/hall/heroes'); -// Admin Panel -const AdminPanelPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin-panel'); -const AdminPanelUserPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin-panel/user-support'); -const AdminPanelSearchPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin-panel/search'); - -// Except for tasks that are always loaded all the other main level -// All the main level -// components are loaded in separate webpack chunks. -// See https://webpack.js.org/guides/code-splitting-async/ -// for docs +// Admin Pages +const AdminContainerPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/container'); +const AdminPanelPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/admin-panel'); +const AdminPanelUserPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/admin-panel/user-support'); +const AdminPanelSearchPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/admin-panel/search'); +const BlockerPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/blocker'); // Tasks const UserTasks = () => import(/* webpackChunkName: "userTasks" */'@/components/tasks/user'); @@ -69,7 +65,7 @@ Vue.use(VueRouter); const router = new VueRouter({ mode: 'history', - base: process.env.NODE_ENV === 'production' ? '/' : __dirname, // eslint-disable-line no-process-env + base: '/', linkActiveClass: 'active', // When navigating to another route always scroll to the top // To customize the behavior see https://router.vuejs.org/en/advanced/scroll-behavior.html @@ -184,32 +180,55 @@ const router = new VueRouter({ }, { - name: 'adminPanel', - path: '/admin-panel', - component: AdminPanelPage, + name: 'adminSection', + path: '/admin', + component: AdminContainerPage, meta: { privilegeNeeded: [ // any one of these is enough to give access 'userSupport', + 'accessControl', ], }, children: [ { - name: 'adminPanelSearch', - path: 'search/:userIdentifier', - component: AdminPanelSearchPage, + name: 'adminPanel', + path: 'panel', + component: AdminPanelPage, meta: { - privilegeNeeded: [ + privilegeNeeded: [ // any one of these is enough to give access 'userSupport', ], }, + children: [ + { + name: 'adminPanelSearch', + path: 'search/:userIdentifier', + component: AdminPanelSearchPage, + meta: { + privilegeNeeded: [ + 'userSupport', + ], + }, + }, + { + name: 'adminPanelUser', + path: ':userIdentifier', + component: AdminPanelUserPage, + meta: { + privilegeNeeded: [ + 'userSupport', + ], + }, + }, + ], }, { - name: 'adminPanelUser', - path: ':userIdentifier', - component: AdminPanelUserPage, + name: 'blockers', + path: 'blockers', + component: BlockerPage, meta: { - privilegeNeeded: [ - 'userSupport', + privilegeNeeded: [ // any one of these is enough to give access + 'accessControl', ], }, }, diff --git a/website/client/src/router/shared-route-imports.js b/website/client/src/router/shared-route-imports.js index e3b5d24d13..46e646fc2f 100644 --- a/website/client/src/router/shared-route-imports.js +++ b/website/client/src/router/shared-route-imports.js @@ -1 +1 @@ -export const NotFoundPage = () => import(/* webpackChunkName: "not-found" */'@/components/404'); +export const NotFoundPage = () => import('@/components/404'); diff --git a/website/client/src/router/static-routes.js b/website/client/src/router/static-routes.js index d0eff40690..e896041f97 100644 --- a/website/client/src/router/static-routes.js +++ b/website/client/src/router/static-routes.js @@ -2,27 +2,27 @@ import { NotFoundPage } from './shared-route-imports'; -const StaticWrapper = () => import(/* webpackChunkName: "entry" */'@/components/static/staticWrapper'); -const HomePage = () => import(/* webpackChunkName: "entry" */'@/components/static/home'); +const StaticWrapper = () => import('@/components/static/staticWrapper'); +const HomePage = () => import('@/components/static/home'); -const AppleRedirectPage = () => import(/* webpackChunkName: "static" */'@/components/static/appleRedirect'); -const ClearBrowserDataPage = () => import(/* webpackChunkName: "static" */'@/components/static/clearBrowserData'); -const CommunityGuidelinesPage = () => import(/* webpackChunkName: "static" */'@/components/static/communityGuidelines'); -const ContactPage = () => import(/* webpackChunkName: "static" */'@/components/static/contact'); -const FAQPage = () => import(/* webpackChunkName: "static" */'@/components/static/faq'); -const ChatSunsetFaq = () => import(/* webpackChunkName: "static" */'@/components/static/chatSunsetFaq'); -const ContentScheduleFaq = () => import(/* webpackChunkName: "static" */'@/components/static/contentScheduleFaq'); -const SubscriptionBenefitsFaq = () => import(/* webpackChunkName: "static" */'@/components/static/subscriptionBenefitsFaq'); -const FeaturesPage = () => import(/* webpackChunkName: "static" */'@/components/static/features'); -const GroupPlansPage = () => import(/* webpackChunkName: "static" */'@/components/static/groupPlans'); +const AppleRedirectPage = () => import('@/components/static/appleRedirect'); +const ClearBrowserDataPage = () => import('@/components/static/clearBrowserData'); +const CommunityGuidelinesPage = () => import('@/components/static/communityGuidelines'); +const ContactPage = () => import('@/components/static/contact'); +const FAQPage = () => import('@/components/static/faq'); +const ChatSunsetFaq = () => import('@/components/static/chatSunsetFaq'); +const ContentScheduleFaq = () => import('@/components/static/contentScheduleFaq'); +const SubscriptionBenefitsFaq = () => import('@/components/static/subscriptionBenefitsFaq'); +const FeaturesPage = () => import('@/components/static/features'); +const GroupPlansPage = () => import('@/components/static/groupPlans'); // Commenting out merch page see // https://github.com/HabitRPG/habitica/issues/12039 -// const MerchPage = () => import(/* webpackChunkName: "static" */'@/components/static/merch'); -const NewsPage = () => import(/* webpackChunkName: "static" */'@/components/static/newStuff'); -const OverviewPage = () => import(/* webpackChunkName: "static" */'@/components/static/overview'); -const PressKitPage = () => import(/* webpackChunkName: "static" */'@/components/static/pressKit'); -const PrivacyPage = () => import(/* webpackChunkName: "static" */'@/components/static/privacy'); -const TermsPage = () => import(/* webpackChunkName: "static" */'@/components/static/terms'); +// const MerchPage = () => import('@/components/static/merch'); +const NewsPage = () => import('@/components/static/newStuff'); +const OverviewPage = () => import('@/components/static/overview'); +const PressKitPage = () => import('@/components/static/pressKit'); +const PrivacyPage = () => import('@/components/static/privacy'); +const TermsPage = () => import('@/components/static/terms'); export const STATIC_ROUTES = { path: '/static', diff --git a/website/client/src/router/user-routes.js b/website/client/src/router/user-routes.js index 4e59fa9d1e..aefb197384 100644 --- a/website/client/src/router/user-routes.js +++ b/website/client/src/router/user-routes.js @@ -1,16 +1,16 @@ import ParentPage from '@/components/parentPage.vue'; // Settings -const Settings = () => import(/* webpackChunkName: "settings" */'@/pages/settings-overview'); -const GeneralSettings = () => import(/* webpackChunkName: "settings" */'@/pages/settings/generalSettings'); -const Notifications = () => import(/* webpackChunkName: "settings" */'@/pages/settings/notificationSettings'); -const Transactions = () => import(/* webpackChunkName: "settings" */'@/pages/settings/purchaseHistory.vue'); +const Settings = () => import('@/pages/settings-overview'); +const GeneralSettings = () => import('@/pages/settings/generalSettings'); +const Notifications = () => import('@/pages/settings/notificationSettings'); +const Transactions = () => import('@/pages/settings/purchaseHistory.vue'); -const SiteData = () => import(/* webpackChunkName: "settings" */'@/pages/settings/siteData.vue'); +const SiteData = () => import('@/pages/settings/siteData.vue'); // not converted yet -const PromoCode = () => import(/* webpackChunkName: "settings" */'@/pages/settings/promoCode.vue'); -const Subscription = () => import(/* webpackChunkName: "settings" */'@/components/settings/subscription'); +const PromoCode = () => import('@/pages/settings/promoCode.vue'); +const Subscription = () => import('@/components/settings/subscription'); export const USER_ROUTES = { path: '/user', diff --git a/website/client/src/store/actions/auth.js b/website/client/src/store/actions/auth.js index 2d5a352316..a9f270d160 100644 --- a/website/client/src/store/actions/auth.js +++ b/website/client/src/store/actions/auth.js @@ -1,6 +1,20 @@ import axios from 'axios'; +import { authAsCredentialsState, LOCALSTORAGE_AUTH_KEY } from '@/libs/auth'; -const LOCALSTORAGE_AUTH_KEY = 'habit-mobile-settings'; +function saveLocalDataAuth (store, apiId, apiToken) { + const credentialsObj = { + auth: { + apiId, + apiToken, + }, + }; + + const userLocalData = JSON.stringify(credentialsObj); + + localStorage.setItem(LOCALSTORAGE_AUTH_KEY, userLocalData); + + store.state.credentials = authAsCredentialsState(credentialsObj); +} export async function register (store, params) { let url = '/api/v4/user/auth/local/register'; @@ -16,13 +30,7 @@ export async function register (store, params) { const user = result.data.data; - const userLocalData = JSON.stringify({ - auth: { - apiId: user._id, - apiToken: user.apiToken, - }, - }); - localStorage.setItem(LOCALSTORAGE_AUTH_KEY, userLocalData); + saveLocalDataAuth(store, user.id, user.apiToken); } export async function login (store, params) { @@ -35,14 +43,7 @@ export async function login (store, params) { const user = result.data.data; - const userLocalData = JSON.stringify({ - auth: { - apiId: user.id, - apiToken: user.apiToken, - }, - }); - - localStorage.setItem(LOCALSTORAGE_AUTH_KEY, userLocalData); + saveLocalDataAuth(store, user.id, user.apiToken); } export async function verifyUsername (store, params) { @@ -72,14 +73,7 @@ export async function socialAuth (store, params) { const user = result.data.data; - const userLocalData = JSON.stringify({ - auth: { - apiId: user.id, - apiToken: user.apiToken, - }, - }); - - localStorage.setItem(LOCALSTORAGE_AUTH_KEY, userLocalData); + saveLocalDataAuth(store, user.id, user.apiToken); } export async function appleAuth (store, params) { @@ -93,14 +87,7 @@ export async function appleAuth (store, params) { const user = result.data.data; - const userLocalData = JSON.stringify({ - auth: { - apiId: user.id, - apiToken: user.apiToken, - }, - }); - - localStorage.setItem(LOCALSTORAGE_AUTH_KEY, userLocalData); + saveLocalDataAuth(store, user.id, user.apiToken); } export function logout (store, options = {}) { @@ -108,3 +95,7 @@ export function logout (store, options = {}) { const query = options.redirectToLogin === true ? '?redirectToLogin=true' : ''; window.location.href = `/logout-server${query}`; } + +export function setNewToken (store, params) { + saveLocalDataAuth(store, params.userId, params.apiToken); +} diff --git a/website/client/src/store/actions/blockers.js b/website/client/src/store/actions/blockers.js new file mode 100644 index 0000000000..4473474d6b --- /dev/null +++ b/website/client/src/store/actions/blockers.js @@ -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; +} diff --git a/website/client/src/store/actions/index.js b/website/client/src/store/actions/index.js index d9be79396d..2b994c718c 100644 --- a/website/client/src/store/actions/index.js +++ b/website/client/src/store/actions/index.js @@ -20,6 +20,7 @@ import * as worldState from './worldState'; import * as news from './news'; import * as analytics from './analytics'; import * as faq from './faq'; +import * as blockers from './blockers'; // Actions should be named as 'actionName' and can be accessed as 'namespace:actionName' // Example: fetch in user.js -> 'user:fetch' @@ -45,6 +46,7 @@ const actions = flattenAndNamespace({ news, analytics, faq, + blockers, }); export default actions; diff --git a/website/client/src/store/index.js b/website/client/src/store/index.js index d4db095891..86d791ed94 100644 --- a/website/client/src/store/index.js +++ b/website/client/src/store/index.js @@ -6,12 +6,12 @@ import { DAY_MAPPING } from '@/../../common/script/cron'; import deepFreeze from '@/libs/deepFreeze'; import Store from '@/libs/store'; import { asyncResourceFactory } from '@/libs/asyncResource'; -import { setUpAxios } from '@/libs/auth'; +import { authAsCredentialsState, LOCALSTORAGE_AUTH_KEY, setUpAxios } from '@/libs/auth'; import actions from './actions'; import getters from './getters'; -const IS_TEST = process.env.NODE_ENV === 'test'; // eslint-disable-line no-process-env +const IS_TEST = import.meta.env.NODE_ENV === 'test'; // eslint-disable-line no-process-env // Load user auth parameters and determine if it's logged in // before trying to load data @@ -22,7 +22,7 @@ const browserTimezoneUtcOffset = moment().utcOffset(); axios.defaults.headers.common['x-client'] = 'habitica-web'; -let AUTH_SETTINGS = window.localStorage.getItem('habit-mobile-settings'); +let AUTH_SETTINGS = window.localStorage.getItem(LOCALSTORAGE_AUTH_KEY); if (AUTH_SETTINGS) { AUTH_SETTINGS = JSON.parse(AUTH_SETTINGS); isUserLoggedIn = setUpAxios(AUTH_SETTINGS); @@ -64,10 +64,7 @@ export default function clientStore () { // see https://github.com/HabitRPG/habitica/issues/9242 notificationsRemoved: [], worldState: asyncResourceFactory(), - credentials: isUserLoggedIn ? { - API_ID: AUTH_SETTINGS.auth.apiId, - API_TOKEN: AUTH_SETTINGS.auth.apiToken, - } : {}, + credentials: isUserLoggedIn ? authAsCredentialsState(AUTH_SETTINGS) : {}, // store the timezone offset in case it's different than the one in // user.preferences.timezoneOffset and change it after the user is synced // in app.vue diff --git a/website/client/tests/unit/.eslintrc.js b/website/client/tests/unit/.eslintrc.js deleted file mode 100644 index 270ac3cd72..0000000000 --- a/website/client/tests/unit/.eslintrc.js +++ /dev/null @@ -1,10 +0,0 @@ -/* eslint-disable import/no-commonjs */ -const base = require('../../../../test/.eslintrc.js'); - -base.rules = base.rules || {}; - -// TODO find a way to let eslint understand webpack aliases -base.rules['import/no-unresolved'] = 'off'; -base.rules['import/extensions'] = 'off'; - -module.exports = base; diff --git a/website/client/tests/unit/components/achievements/levelUp.spec.js b/website/client/tests/unit/components/achievements/levelUp.spec.js index 42d81ee0c6..15146f5af4 100644 --- a/website/client/tests/unit/components/achievements/levelUp.spec.js +++ b/website/client/tests/unit/components/achievements/levelUp.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test } from 'vitest'; import LevelUp from '@/components/achievements/levelUp.vue'; /* @@ -50,32 +51,32 @@ describe('LevelUp', () => { }); */ - it('displays the right level in the title', () => { + test('displays the right level in the title', () => { const title = testFunction('title', 12); expect(title()).to.equal('"reachedLevel" {"level":12}'); }); - it('does not display rewards for level 10', () => { + test('does not display rewards for level 10', () => { const displayRewardQuest = testFunction('displayRewardQuest', 10); expect(displayRewardQuest()).to.be.false; }); [15, 30, 40, 60].forEach(level => { - it(`does display rewards for level ${level}`, () => { + test(`does display rewards for level ${level}`, () => { const displayRewardQuest = testFunction('displayRewardQuest', level); expect(displayRewardQuest()).to.be.true; }); }); - it('generates the right test class for level 15', () => { + test('generates the right test class for level 15', () => { const questClass = testFunction('questClass', 15); expect(questClass()).to.equal('inventory_quest_scroll_atom1'); }); - it('generates empty test class for level 14', () => { + test('generates empty test class for level 14', () => { const questClass = testFunction('questClass', 14); expect(questClass()).to.equal(''); }); diff --git a/website/client/tests/unit/components/avatar.spec.js b/website/client/tests/unit/components/avatar.spec.js index 7d050848d7..2db45f31dc 100644 --- a/website/client/tests/unit/components/avatar.spec.js +++ b/website/client/tests/unit/components/avatar.spec.js @@ -1,10 +1,13 @@ +import { + describe, expect, test, beforeEach, afterEach, +} from 'vitest'; import Vue from 'vue'; import merge from 'lodash/merge'; import Avatar from '@/components/avatar'; import generateStore from '@/store'; -context('avatar.vue', () => { +describe('avatar.vue', () => { let Constructr; let vm; @@ -38,7 +41,7 @@ context('avatar.vue', () => { }); describe('hasClass', () => { - it('returns false if user is too low of level', () => { + test('returns false if user is too low of level', () => { vm.member = merge({ stats: { lvl: 3 }, preferences: { disableClasses: false }, @@ -47,7 +50,7 @@ context('avatar.vue', () => { expect(vm.hasClass).to.equal(false); }); - it('returns false if user has disabled the class system', () => { + test('returns false if user has disabled the class system', () => { vm.member = merge({ stats: { lvl: 17 }, preferences: { disableClasses: true }, @@ -56,7 +59,7 @@ context('avatar.vue', () => { expect(vm.hasClass).to.equal(false); }); - it('returns false if user has not yet selected a class', () => { + test('returns false if user has not yet selected a class', () => { vm.member = merge({ stats: { lvl: 20 }, preferences: { disableClasses: false }, @@ -65,7 +68,7 @@ context('avatar.vue', () => { expect(vm.hasClass).to.equal(false); }); - it('returns true if user meets all prereqs for having a class', () => { + test('returns true if user meets all prereqs for having a class', () => { vm.member = merge({ stats: { lvl: 13 }, preferences: { disableClasses: false }, @@ -76,11 +79,11 @@ context('avatar.vue', () => { }); describe('isBuffed', () => { - it('returns undefined if user is not buffed', () => { + test('returns undefined if user is not buffed', () => { expect(vm.isBuffed).to.equal(undefined); }); - it('returns a value if user has buffs', () => { + test('returns a value if user has buffs', () => { vm.member = merge({ stats: { buffs: { @@ -96,12 +99,12 @@ context('avatar.vue', () => { }); describe('paddingTop', () => { - xit('defaults to 27px', () => { + test('defaults to 24px', () => { vm.avatarOnly = true; - expect(vm.paddingTop).to.equal('27px'); + expect(vm.paddingTop).to.equal('24px'); }); - it('is 24px if user has a pet', () => { + test('is 24px if user has a pet', () => { vm.member.items = merge({ currentPet: { name: 'Foo' }, }, baseMember.items); @@ -109,7 +112,7 @@ context('avatar.vue', () => { expect(vm.paddingTop).to.equal('24px'); }); - it('is 0px if user has a mount', () => { + test('is 0px if user has a mount', () => { vm.member.items = merge({ currentMount: 'Bar', }, baseMember.items); @@ -117,18 +120,18 @@ context('avatar.vue', () => { expect(vm.paddingTop).to.equal('0px'); }); - it('can be overriden', () => { + test('can be overriden', () => { vm.overrideTopPadding = '27px'; expect(vm.paddingTop).to.equal('27px'); }); }); describe('costumeClass', () => { - it('returns if showing equipped gear', () => { + test('returns if showing equipped gear', () => { expect(vm.costumeClass).to.equal('equipped'); }); - it('returns if wearing a costume', () => { + test('returns if wearing a costume', () => { vm.member.preferences = { costume: true, hair: {} }; vm.member.items.gear.costume = {}; @@ -137,7 +140,7 @@ context('avatar.vue', () => { }); describe('visualBuffs', () => { - it('returns an array of buffs', () => { + test('returns an array of buffs', () => { vm.member = merge({ stats: { class: 'warrior', @@ -159,17 +162,17 @@ context('avatar.vue', () => { }; }); - it('shows the background', () => { + test('shows the background', () => { expect(vm.backgroundClass).to.equal('background_pony'); }); - it('can be overridden', () => { + test('can be overridden', () => { vm.overrideAvatarGear = { background: 'character' }; expect(vm.backgroundClass).to.equal('background_character'); }); - it('returns to a blank string if not showing background', () => { + test('returns to a blank string if not showing background', () => { vm.withBackground = false; vm.avatarOnly = true; @@ -178,11 +181,11 @@ context('avatar.vue', () => { }); describe('specialMountClass', () => { - it('returns null if not riding a Kangaroo', () => { + test('returns null if not riding a Kangaroo', () => { expect(vm.specialMountClass).to.equal(null); }); - it('returns corresponding offset class if riding a Kangaroo', () => { + test('returns corresponding offset class if riding a Kangaroo', () => { vm.member.items.currentMount = 'Kangaroo-Base'; expect(vm.specialMountClass).to.equal('offset-kangaroo'); @@ -190,7 +193,7 @@ context('avatar.vue', () => { }); describe('skinClass', () => { - it('returns current skin color', () => { + test('returns current skin color', () => { vm.member = merge({ preferences: { skin: 'blue', @@ -201,7 +204,7 @@ context('avatar.vue', () => { expect(vm.skinClass).to.equal('skin_blue'); }); - it('adds sleep if Dailies paused', () => { + test('adds sleep if Dailies paused', () => { vm.member = merge({ preferences: { skin: 'blue', @@ -213,7 +216,7 @@ context('avatar.vue', () => { }); }); - context('methods', () => { + describe('methods', () => { describe('getGearClass', () => { beforeEach(() => { vm.member = merge({ @@ -226,15 +229,15 @@ context('avatar.vue', () => { }, baseMember); }); - it('returns undefined if no match', () => { + test('returns undefined if no match', () => { expect(vm.getGearClass('foo')).to.equal(undefined); }); - it('returns the matching gear', () => { + test('returns the matching gear', () => { expect(vm.getGearClass('Hat')).to.equal('Fancy Tophat'); }); - it('can be overridden', () => { + test('can be overridden', () => { vm.overrideAvatarGear = { Hat: 'Dapper Bowler' }; expect(vm.getGearClass('Hat')).to.equal('Dapper Bowler'); @@ -242,7 +245,7 @@ context('avatar.vue', () => { }); describe('hideGear', () => { - it('returns no weapon equipped', () => { + test('returns no weapon equipped', () => { vm.member.items.gear.equipped = {}; expect(vm.hideGear('weapon')).to.equal(false); }); @@ -277,7 +280,7 @@ context('avatar.vue', () => { }, }, baseMember); }); - it('does if not showing visual buffs', () => { + test('does if not showing visual buffs', () => { expect(vm.showAvatar()).to.equal(true); const { buffs } = vm.member.stats; diff --git a/website/client/tests/unit/components/categories/categoryTags.spec.js b/website/client/tests/unit/components/categories/categoryTags.spec.js index b522bb84d8..a0345e13e1 100644 --- a/website/client/tests/unit/components/categories/categoryTags.spec.js +++ b/website/client/tests/unit/components/categories/categoryTags.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import { mount } from '@vue/test-utils'; import Vue from 'vue'; @@ -20,7 +23,7 @@ describe('Category Tags', () => { }); }); - it('displays a category', () => { + test('displays a category', () => { wrapper.setProps({ categories: [ { @@ -34,7 +37,7 @@ describe('Category Tags', () => { }); }); - it('displays a habitica official in purple', () => { + test('displays a habitica official in purple', () => { wrapper.setProps({ categories: [ { @@ -46,7 +49,7 @@ describe('Category Tags', () => { expect(wrapper.find('.category-label').text()).to.eq('habitica_official'); }); - it('displays owner label', () => { + test('displays owner label', () => { wrapper.setProps({ owner: true, }); @@ -54,7 +57,7 @@ describe('Category Tags', () => { expect(wrapper.find('.category-label').text()).to.eq('owned'); }); - it('displays member label', () => { + test('displays member label', () => { wrapper.setProps({ member: true, }); @@ -62,7 +65,7 @@ describe('Category Tags', () => { expect(wrapper.find('.category-label').text()).to.eq('joined'); }); - it('displays additional content at the end', () => { + test('displays additional content at the end', () => { expect(wrapper.find('p').text()).to.eq('This is a slot.'); }); }); diff --git a/website/client/tests/unit/components/challenges/challengeDetail.spec.js b/website/client/tests/unit/components/challenges/challengeDetail.spec.js index a423fe9a1b..096ce5d5e6 100644 --- a/website/client/tests/unit/components/challenges/challengeDetail.spec.js +++ b/website/client/tests/unit/components/challenges/challengeDetail.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import { shallowMount, createLocalVue } from '@vue/test-utils'; import ChallengeDetailComponent from '@/components/challenges/challengeDetail.vue'; import Store from '@/libs/store'; @@ -56,7 +59,7 @@ describe('Challenge Detail', () => { }); }); - it('removes a destroyed task from task list', () => { + test('removes a destroyed task from task list', () => { const taskToRemove = { _id: '1', type: 'habit' }; wrapper.vm.taskDestroyed(taskToRemove); expect(wrapper.vm.tasksByType[taskToRemove.type].length).to.eq(0); diff --git a/website/client/tests/unit/components/groups/membersModal.spec.js b/website/client/tests/unit/components/groups/membersModal.spec.js index 8148f941ef..a952b41f6c 100644 --- a/website/client/tests/unit/components/groups/membersModal.spec.js +++ b/website/client/tests/unit/components/groups/membersModal.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, afterEach, +} from 'vitest'; import Vue from 'vue'; import MembersModalComponent from '@/components/groups/membersModal.vue'; @@ -15,12 +18,12 @@ describe.skip('Members Modal Component', () => { vm.$destroy(); }); - it('should have an empty object as sort-option at start', () => { + test('should have an empty object as sort-option at start', () => { const defaultData = vm.data(); expect(defaultData.sortOption).to.eq({}); }); - it('should accept sort-option object', () => { + test('should accept sort-option object', () => { const sortOption = vm.data().sortOption[0]; vm.sort(sortOption); Vue.nextTick(() => { diff --git a/website/client/tests/unit/components/groups/myGuilds.spec.js b/website/client/tests/unit/components/groups/myGuilds.spec.js deleted file mode 100644 index 64c2730782..0000000000 --- a/website/client/tests/unit/components/groups/myGuilds.spec.js +++ /dev/null @@ -1,108 +0,0 @@ -import { shallowMount, createLocalVue } from '@vue/test-utils'; -import Store from '@/libs/store'; -import myGuilds from '@/components/groups/myGuilds'; -import PublicGuildItem from '@/components/groups/publicGuildItem'; - -const localVue = createLocalVue(); -localVue.use(Store); - -describe('myGuilds component', () => { - let computed; - const guilds = [{ - _id: '1', - type: 'guild', - name: 'Crimson Vow', - summary: 'testing', - description: 'testing', - }, { - _id: '2', - type: 'guild', - name: 'Log Horizon', - summary: 'testing', - description: 'testing', - }, { - _id: '3', - type: 'guild', - name: 'CAD Cads', - summary: '3D', - description: '3D', - }, { - _id: '4', - type: 'guild', - name: 'Santa Claus', - summary: '3d', - description: 'hohoho', - }]; - const store = new Store({ - state: { - user: { - data: { - _id: '999', - guilds: ['1', '2', '3', '4'], - }, - }, - editingGroup: {}, - constants: { - TAVERN_ID: '9999', - }, - }, - getters: {}, - actions: { - 'guilds:getMyGuilds': () => guilds, - 'common:setTitle': () => {}, - }, - }); - - function makeWrapper (opts = {}) { - return shallowMount(myGuilds, { - data () { - return { - filter: {}, - search: '', - }; - }, - store, - localVue, - ...opts, - }); - } - - before(() => { - computed = { - guilds: () => guilds, - }; - }); - - it('renders all guilds with no filter and no search', () => { - const wrapper = makeWrapper({ computed }); - expect(wrapper.findAll(PublicGuildItem).length).to.equal(4); - }); - - it('renders guilds with name matching against a single-word search term', () => { - const search = 'vow'; - const wrapper = makeWrapper({ computed }); - wrapper.setData({ search }); - expect(wrapper.findAll(PublicGuildItem).length).to.equal(1); - }); - - it('renders guilds with summary matching against a single-word search term', () => { - const search = '3d'; - const wrapper = makeWrapper({ computed }); - wrapper.setData({ search }); - expect(wrapper.findAll(PublicGuildItem).length).to.equal(2); - }); - - it('renders guilds with description matching against a single-word search term', () => { - const search = 'hoho'; - const wrapper = makeWrapper({ computed }); - wrapper.setData({ search }); - expect(wrapper.findAll(PublicGuildItem).length).to.equal(1); - }); - - it('renders guilds with summary matching against two search terms with space in between', () => { - const search = '3d ohayou'; - const wrapper = makeWrapper({ computed }); - wrapper.setData({ search }); - expect(wrapper.findAll(PublicGuildItem).length).to.equal(2); - }); -}); diff --git a/website/client/tests/unit/components/home.spec.js b/website/client/tests/unit/components/home.spec.js index 5b77b0233c..32c52d8b17 100644 --- a/website/client/tests/unit/components/home.spec.js +++ b/website/client/tests/unit/components/home.spec.js @@ -1,9 +1,14 @@ +import { + describe, expect, test, beforeEach, afterEach, +} from 'vitest'; import { shallowMount, createLocalVue } from '@vue/test-utils'; +import sinon from 'sinon'; import Home from '@/components/static/home.vue'; import Store from '@/libs/store'; import * as Analytics from '@/libs/analytics'; +const sandbox = sinon.createSandbox(); const localVue = createLocalVue(); localVue.use(Store); @@ -49,14 +54,16 @@ describe('Home', () => { wrapper = mountWrapper(); }); - afterEach(sinon.restore); + afterEach(() => { + sandbox.restore(); + }); - it('has a visible title', () => { + test('has a visible title', () => { expect(wrapper.find('h1').text()).to.equal('motivateYourself'); }); describe('signup form', () => { - it('registers a user from the form', async () => { + test('registers a user from the form', async () => { const username = 'newUser'; const email = 'rookie@habitica.com'; const password = 'ImmaG3tProductive!'; @@ -74,7 +81,7 @@ describe('Home', () => { }); }); - it('registers a user with group invite if groupInvite in the query', async () => { + test('registers a user with group invite if groupInvite in the query', async () => { const groupInvite = 'TheBestGroup'; wrapper = mountWrapper({ groupInvite }); await fillOutUserForm('invitedUser', 'invited@habitica.com', '1veGotFri3ndsHooray!'); @@ -85,7 +92,7 @@ describe('Home', () => { expect(registerStub.getCall(0).args[1].groupInvite).to.equal(groupInvite); }); - it('registers a user with group invite if p in the query', async () => { + test('registers a user with group invite if p in the query', async () => { const p = 'ThePiGroup'; wrapper = mountWrapper({ p }); await fillOutUserForm('alsoInvitedUser', 'invited2@habitica.com', '1veGotFri3nds2!'); @@ -96,7 +103,7 @@ describe('Home', () => { expect(registerStub.getCall(0).args[1].groupInvite).to.equal(p); }); - it('registers a user with group invite invite if both p and groupInvite are in the query', async () => { + test('registers a user with group invite invite if both p and groupInvite are in the query', async () => { const groupInvite = 'StillTheBestGroup'; wrapper = mountWrapper({ p: 'LesserGroup', groupInvite }); await fillOutUserForm('doublyInvitedUser', 'invited3@habitica.com', '1veGotSm4rtFri3nds!'); diff --git a/website/client/tests/unit/components/memberDetails.spec.js b/website/client/tests/unit/components/memberDetails.spec.js index df36f10b0e..f1edae7f6d 100644 --- a/website/client/tests/unit/components/memberDetails.spec.js +++ b/website/client/tests/unit/components/memberDetails.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, afterEach, +} from 'vitest'; import Vue from 'vue'; import MemberDetailsComponent from '@/components/memberDetails.vue'; @@ -14,7 +17,7 @@ describe('Members Details Component', () => { vm.$destroy(); }); - it.skip('prevents flickering by setting a 1px margin-right on elements of class member-stats', () => { + test.skip('prevents flickering by setting a 1px margin-right on elements of class member-stats', () => { const memberstats = vm.$el.querySelector('.member-stats'); const style = window.getComputedStyle(memberstats, null); const marginRightProp = style.getPropertyValue('margin-right'); diff --git a/website/client/tests/unit/components/messages/messageCard.spec.js b/website/client/tests/unit/components/messages/messageCard.spec.js index 7cd8c3672e..3a6a228832 100644 --- a/website/client/tests/unit/components/messages/messageCard.spec.js +++ b/website/client/tests/unit/components/messages/messageCard.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import Vue from 'vue'; import { shallowMount, createLocalVue } from '@vue/test-utils'; @@ -42,19 +45,19 @@ describe('MessageCard', () => { }); }); - it('shows the message text', () => { + test('shows the message text', () => { expect(wrapper.find('div.text').text()).to.equal(message.text); expect(wrapper.find('div.mentioned-icon').exists()).to.be.false; }); - it('shows mention dot if user is mentioned', () => { + test('shows mention dot if user is mentioned', () => { wrapper.setProps({ msg: createMessage('@Tester') }); expect(wrapper.find('div.mentioned-icon').exists()).to.be.true; }); // Bug fixed by https://github.com/HabitRPG/habitica/pull/12177 - it('shows mention dot if user is mentioned after almostmention', () => { + test('shows mention dot if user is mentioned after almostmention', () => { wrapper.setProps({ msg: createMessage('thetester @Tester') }); expect(wrapper.find('div.mentioned-icon').exists()).to.be.true; diff --git a/website/client/tests/unit/components/notifications.spec.js b/website/client/tests/unit/components/notifications.spec.js index c14d1fccca..e8e3f3039e 100644 --- a/website/client/tests/unit/components/notifications.spec.js +++ b/website/client/tests/unit/components/notifications.spec.js @@ -1,9 +1,16 @@ +import { + describe, expect, test, beforeEach, chai, +} from 'vitest'; import { shallowMount, createLocalVue } from '@vue/test-utils'; import { toNextLevel } from '@/../../common/script/statHelpers'; +import sinon from 'sinon'; +import sinonChai from 'sinon-chai'; import NotificationsComponent from '@/components/notifications.vue'; import Store from '@/libs/store'; import { hasClass } from '@/store/getters/members'; +chai.use(sinonChai); + const localVue = createLocalVue(); localVue.use(Store); @@ -46,7 +53,7 @@ describe('Notifications', () => { }); }); - it('set user has class computed prop', () => { + test('set user has class computed prop', () => { expect(wrapper.vm.userHasClass).to.be.false; store.state.user.data.stats.lvl = 10; @@ -57,7 +64,7 @@ describe('Notifications', () => { }); describe('user exp notifcation', () => { - it('notifies when user gets more exp', () => { + test('notifies when user gets more exp', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevel = 10; @@ -72,7 +79,7 @@ describe('Notifications', () => { expSpy.restore(); }); - it('when user levels with exact xp', () => { + test('when user levels with exact xp', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevelBefore = 9; @@ -94,7 +101,7 @@ describe('Notifications', () => { expSpy.restore(); }); - it('when user levels with exact more exp than needed', () => { + test('when user levels with exact more exp than needed', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevelBefore = 9; @@ -116,7 +123,7 @@ describe('Notifications', () => { expSpy.restore(); }); - it('when user has more exp than needed then levels', () => { + test('when user has more exp than needed then levels', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevelBefore = 9; @@ -138,7 +145,7 @@ describe('Notifications', () => { expSpy.restore(); }); - it('when user multilevels', () => { + test('when user multilevels', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevelBefore = 8; @@ -160,7 +167,7 @@ describe('Notifications', () => { expSpy.restore(); }); - it('when user looses xp', () => { + test('when user looses xp', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevel = 10; @@ -179,7 +186,7 @@ describe('Notifications', () => { expSpy.restore(); }); - it('when user looses xp under 0', () => { + test('when user looses xp under 0', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevel = 10; @@ -198,7 +205,7 @@ describe('Notifications', () => { expSpy.restore(); }); - it('when user dies', () => { + test('when user dies', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevelBefore = 10; diff --git a/website/client/tests/unit/components/sidebarSection.spec.js b/website/client/tests/unit/components/sidebarSection.spec.js index 72dccc0e95..f5ff43b832 100644 --- a/website/client/tests/unit/components/sidebarSection.spec.js +++ b/website/client/tests/unit/components/sidebarSection.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import { mount } from '@vue/test-utils'; import SidebarSection from '@/components/sidebarSection.vue'; @@ -16,21 +19,21 @@ describe('Sidebar Section', () => { }); }); - it('displays title', () => { + test('displays title', () => { expect(wrapper.find('h3').text()).to.eq('Hello World'); }); - it('displays contents', () => { + test('displays contents', () => { expect(wrapper.find('.section-body').find('p').text()).to.eq('This is a test.'); }); - it('displays tooltip icon', () => { + test('displays tooltip icon', () => { expect(wrapper.contains('.section-info')).to.eq(false); wrapper.setProps({ tooltip: 'This is a test' }); expect(wrapper.contains('.section-info')).to.eq(true); }); - it('hides contents', () => { + test('hides contents', () => { expect(wrapper.find('.section-body').element.style.display).to.not.eq('none'); wrapper.find('[role="button"').trigger('click'); expect(wrapper.find('.section-body').element.style.display).to.eq('none'); @@ -38,7 +41,7 @@ describe('Sidebar Section', () => { expect(wrapper.find('.section-body').element.style.display).to.not.eq('none'); }); - it('can hide contents by default', () => { + test('can hide contents by default', () => { wrapper = mount(SidebarSection, { propsData: { title: 'Hello World', diff --git a/website/client/tests/unit/components/tasks/column.spec.js b/website/client/tests/unit/components/tasks/column.spec.js index a44bf4be4d..e6cba6eb9e 100644 --- a/website/client/tests/unit/components/tasks/column.spec.js +++ b/website/client/tests/unit/components/tasks/column.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import { shallowMount, createLocalVue } from '@vue/test-utils'; import TaskColumn from '@/components/tasks/column.vue'; import Store from '@/libs/store'; @@ -41,7 +44,7 @@ describe('Task Column', () => { }); } - it('returns a vue instance', () => { + test('returns a vue instance', () => { wrapper = makeWrapper(); expect(wrapper.isVueInstance()).to.be.true; }); @@ -51,11 +54,11 @@ describe('Task Column', () => { wrapper = makeWrapper(); }); - it('defaults isUser to false', () => { + test('defaults isUser to false', () => { expect(wrapper.vm.isUser).to.be.false; }); - it('passes isUser to component instance', () => { + test('passes isUser to component instance', () => { wrapper.setProps({ isUser: false }); expect(wrapper.vm.isUser).to.be.false; @@ -106,7 +109,7 @@ describe('Task Column', () => { wrapper = makeWrapper({ store }); }); - it('returns task list from props for group-plan', () => { + test('returns task list from props for group-plan', () => { wrapper.setProps({ taskListOverride }); wrapper.vm.taskList.forEach((el, i) => { @@ -120,7 +123,7 @@ describe('Task Column', () => { }); }); - it('returns task list from store for user', () => { + test('returns task list from store for user', () => { wrapper.setProps({ isUser: true, taskListOverride }); wrapper.vm.taskList.forEach((el, i) => { @@ -142,7 +145,7 @@ describe('Task Column', () => { ]; }); - it('returns all tasks if no tag is given', () => { + test('returns all tasks if no tag is given', () => { const returnedTasks = wrapper.vm.filterByTagList(tasks); expect(returnedTasks).to.have.lengthOf(tasks.length); tasks.forEach((task, i) => { @@ -150,7 +153,7 @@ describe('Task Column', () => { }); }); - it('returns tasks for given single tag', () => { + test('returns tasks for given single tag', () => { const returnedTasks = wrapper.vm.filterByTagList(tasks, [3]); expect(returnedTasks).to.have.lengthOf(3); @@ -159,7 +162,7 @@ describe('Task Column', () => { expect(returnedTasks[2]).to.eq(tasks[3]); }); - it('returns tasks for given multiple tags', () => { + test('returns tasks for given multiple tags', () => { const returnedTasks = wrapper.vm.filterByTagList(tasks, [2, 3]); expect(returnedTasks).to.have.lengthOf(1); @@ -201,7 +204,7 @@ describe('Task Column', () => { ]; }); - it('returns all tasks for empty search term', () => { + test('returns all tasks for empty search term', () => { const returnedTasks = wrapper.vm.filterBySearchText(tasks); expect(returnedTasks).to.have.lengthOf(tasks.length); tasks.forEach((task, i) => { @@ -209,19 +212,19 @@ describe('Task Column', () => { }); }); - it('returns tasks for search term in title /i', () => { + test('returns tasks for search term in title /i', () => { ['Title', 'TITLE', 'title', 'tItLe'].forEach(term => { expect(wrapper.vm.filterBySearchText(tasks, term)[0]).to.eq(tasks[2]); }); }); - it('returns tasks for search term in note /i', () => { + test('returns tasks for search term in note /i', () => { ['Note', 'NOTE', 'note', 'nOtE'].forEach(term => { expect(wrapper.vm.filterBySearchText(tasks, term)[0]).to.eq(tasks[3]); }); }); - it('returns tasks for search term in checklist title /i', () => { + test('returns tasks for search term in checklist title /i', () => { ['Check', 'CHECK', 'check', 'cHeCK'].forEach(term => { const returnedTasks = wrapper.vm.filterBySearchText(tasks, term); diff --git a/website/client/tests/unit/components/tasks/user.spec.js b/website/client/tests/unit/components/tasks/user.spec.js index 56f2f2102a..dc7f4ee467 100644 --- a/website/client/tests/unit/components/tasks/user.spec.js +++ b/website/client/tests/unit/components/tasks/user.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test } from 'vitest'; import { shallowMount, createLocalVue } from '@vue/test-utils'; import User from '@/components/tasks/user.vue'; import Store from '@/libs/store'; @@ -21,7 +22,7 @@ describe('Tasks User', () => { } describe('Computed Properties', () => { - it('should render a challenge tag under challenge header in tag filter popup when the challenge is active', () => { + test('should render a challenge tag under challenge header in tag filter popup when the challenge is active', () => { const activeChallengeTag = { id: '1', name: 'Challenge1', @@ -35,7 +36,7 @@ describe('Tasks User', () => { expect(computedTagsByType.challenges.tags[0].name).to.equal(activeChallengeTag.name); }); - it('should render a challenge tag under normal tag header in tag filter popup when the challenge is no longer active', () => { + test('should render a challenge tag under normal tag header in tag filter popup when the challenge is no longer active', () => { const inactiveChallengeTag = { id: '1', name: 'Challenge1', diff --git a/website/client/tests/unit/components/ui/drawer.spec.js b/website/client/tests/unit/components/ui/drawer.spec.js index 3245744e33..222157d271 100644 --- a/website/client/tests/unit/components/ui/drawer.spec.js +++ b/website/client/tests/unit/components/ui/drawer.spec.js @@ -1,14 +1,15 @@ +import { describe, expect, test } from 'vitest'; import Vue from 'vue'; import DrawerComponent from '@/components/ui/drawer.vue'; describe('DrawerComponent', () => { - it('sets the correct default data', () => { + test('sets the correct default data', () => { expect(DrawerComponent.data).to.be.a('function'); const defaultData = DrawerComponent.data(); expect(defaultData.isOpened).to.be.true; }); - it('renders the correct title', () => { + test('renders the correct title', () => { const Ctor = Vue.extend(DrawerComponent); const vm = new Ctor({ propsData: { diff --git a/website/client/tests/unit/filters/floor.spec.js b/website/client/tests/unit/filters/floor.spec.js index 7880bc60a0..8875d427a7 100644 --- a/website/client/tests/unit/filters/floor.spec.js +++ b/website/client/tests/unit/filters/floor.spec.js @@ -1,7 +1,8 @@ +import { describe, expect, test } from 'vitest'; import floorFilter from '@/filters/floor'; describe('floor filter', () => { - it('can floor a decimal number', () => { + test('can floor a decimal number', () => { expect(floorFilter(4.567)).to.equal(4.56); expect(floorFilter(4.562)).to.equal(4.56); }); diff --git a/website/client/tests/unit/filters/round.spec.js b/website/client/tests/unit/filters/round.spec.js index 09fce16e79..7bd5c9be17 100644 --- a/website/client/tests/unit/filters/round.spec.js +++ b/website/client/tests/unit/filters/round.spec.js @@ -1,7 +1,8 @@ +import { describe, expect, test } from 'vitest'; import roundFilter from '@/filters/round'; describe('round filter', () => { - it('can round a decimal number', () => { + test('can round a decimal number', () => { expect(roundFilter(4.567)).to.equal(4.57); expect(roundFilter(4.562)).to.equal(4.56); }); diff --git a/website/client/tests/unit/filters/roundBigNumber.spec.js b/website/client/tests/unit/filters/roundBigNumber.spec.js index 5017d87d02..6a8e8bf3a6 100644 --- a/website/client/tests/unit/filters/roundBigNumber.spec.js +++ b/website/client/tests/unit/filters/roundBigNumber.spec.js @@ -1,20 +1,21 @@ +import { describe, expect, test } from 'vitest'; import roundBigNumberFilter from '@/filters/roundBigNumber'; describe('round big number filter', () => { - it('can round a decimal number', () => { + test('can round a decimal number', () => { expect(roundBigNumberFilter(4.567)).to.equal(4.57); expect(roundBigNumberFilter(4.562)).to.equal(4.56); }); - it('can round thousands', () => { + test('can round thousands', () => { expect(roundBigNumberFilter(70065)).to.equal('70.1k'); }); - it('can round milions', () => { + test('can round milions', () => { expect(roundBigNumberFilter(10000987)).to.equal('10.0m'); }); - it('can round bilions', () => { + test('can round bilions', () => { expect(roundBigNumberFilter(1000000000)).to.equal('1.0b'); }); }); diff --git a/website/client/tests/unit/helpers.js b/website/client/tests/unit/helpers.js deleted file mode 100644 index eccdde95ec..0000000000 --- a/website/client/tests/unit/helpers.js +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-disable import/no-commonjs */ -require('../../../../test/helpers/globals.helper.js'); - -// Shim localStorage -const localStorage = { - data: {}, - getItem (key) { - return this.data[key]; - }, - setItem (key, value) { - this.data[key] = value; - }, - removeItem (key) { - delete this.data[key]; - }, -}; - -Object.defineProperty(window, 'localStorage', { - value: localStorage, - configurable: true, - enumerable: true, - writable: true, -}); diff --git a/website/client/tests/unit/libs/asyncResource.spec.js b/website/client/tests/unit/libs/asyncResource.spec.js index f7378de4db..cc77bc4ed1 100644 --- a/website/client/tests/unit/libs/asyncResource.spec.js +++ b/website/client/tests/unit/libs/asyncResource.spec.js @@ -1,10 +1,21 @@ +import { + describe, expect, test, afterEach, beforeEach, chai, +} from 'vitest'; import axios from 'axios'; import { sleep } from '@/../../../test/helpers/sleep'; -import { asyncResourceFactory, loadAsyncResource } from '@/libs/asyncResource'; +import sinon from 'sinon'; +import sinonChai from 'sinon-chai'; +import chaiAsPromised from 'chai-as-promised'; import generateStore from '@/store'; +import { asyncResourceFactory, loadAsyncResource } from '@/libs/asyncResource'; + +chai.use(sinonChai); +chai.use(chaiAsPromised); + +const sandbox = sinon.createSandbox(); describe('async resource', () => { - it('asyncResourceFactory', () => { + test('asyncResourceFactory', () => { const resource = asyncResourceFactory(); expect(resource.loadingStatus).to.equal('NOT_LOADED'); expect(resource.data).to.equal(null); @@ -16,29 +27,29 @@ describe('async resource', () => { if (axios.get && axios.get.restore) axios.get.restore(); }); - context('errors', () => { - it('store is missing', () => { + describe('errors', () => { + test('store is missing', () => { expect(() => loadAsyncResource({})).to.throw; }); - it('path is missing', () => { + test('path is missing', () => { expect(() => loadAsyncResource({ store: 'store', })).to.throw; }); - it('url is missing', () => { + test('url is missing', () => { expect(() => loadAsyncResource({ store: 'store', path: 'path', })).to.throw; }); - it('deserialize is missing', () => { + test('deserialize is missing', () => { expect(() => loadAsyncResource({ store: 'store', path: 'path', url: 'url', })).to.throw; }); - it('resource not found', () => { + test('resource not found', () => { const store = generateStore(); expect(() => loadAsyncResource({ @@ -49,7 +60,7 @@ describe('async resource', () => { })).to.throw; }); - it('invalid loading status', () => { + test('invalid loading status', () => { const store = generateStore(); store.state.user.loadingStatus = 'INVALID'; @@ -62,7 +73,7 @@ describe('async resource', () => { }); }); - it('returns the resource if it is already loaded and forceLoad is false', async () => { + test('returns the resource if it is already loaded and forceLoad is false', async () => { const store = generateStore(); store.state.user.loadingStatus = 'LOADED'; store.state.user.data = { _id: 1 }; @@ -80,7 +91,7 @@ describe('async resource', () => { expect(axios.get).to.not.have.been.called; }); - it('load the resource if it is not loaded', async () => { + test('load the resource if it is not loaded', async () => { const store = generateStore(); store.state.user = asyncResourceFactory(); @@ -101,7 +112,7 @@ describe('async resource', () => { expect(axios.get).to.have.been.calledOnce; }); - it('load the resource if it is loaded but forceLoad is true', async () => { + test('load the resource if it is loaded but forceLoad is true', async () => { const store = generateStore(); store.state.user.loadingStatus = 'LOADED'; @@ -133,7 +144,7 @@ describe('async resource', () => { store.state.worldState.appVersionOnLoad = 1; }); - it('load the resource if it is loaded but the appVersion has changed', async () => { + test('load the resource if it is loaded but the appVersion has changed', async () => { store.state.serverAppVersion = 2; sandbox.stub(axios, 'get').withArgs('/api/v4/world-state').returns(Promise.resolve({ data: { data: { _id: 1 } }, @@ -155,7 +166,7 @@ describe('async resource', () => { expect(axios.get).to.have.been.calledOnce; }); - it('does not load the resource if it is loaded but the appVersion has changed', async () => { + test('does not load the resource if it is loaded but the appVersion has changed', async () => { sandbox.stub(axios, 'get').returns(Promise.resolve({ data: { data: { _id: 1 } } })); const resource = await loadAsyncResource({ @@ -173,7 +184,7 @@ describe('async resource', () => { }); }); - it('does not send multiple requests if the resource is being loaded', async () => { + test('does not send multiple requests if the resource is being loaded', async () => { const store = generateStore(); store.state.user.loadingStatus = 'LOADING'; diff --git a/website/client/tests/unit/libs/deepFreeze.spec.js b/website/client/tests/unit/libs/deepFreeze.spec.js index a49ef6f738..9f0572bd3e 100644 --- a/website/client/tests/unit/libs/deepFreeze.spec.js +++ b/website/client/tests/unit/libs/deepFreeze.spec.js @@ -1,7 +1,8 @@ +import { describe, expect, test } from 'vitest'; import deepFreeze from '@/libs/deepFreeze'; describe('deepFreeze', () => { - it('deeply freezes an object', () => { + test('deeply freezes an object', () => { const obj = { a: 1, b () { diff --git a/website/client/tests/unit/libs/i18n.spec.js b/website/client/tests/unit/libs/i18n.spec.js index f4a7f32f14..b7eca519ac 100644 --- a/website/client/tests/unit/libs/i18n.spec.js +++ b/website/client/tests/unit/libs/i18n.spec.js @@ -1,9 +1,12 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import Vue from 'vue'; import commoni18n from '@/../../common/script/i18n'; import i18n from '@/libs/i18n'; describe('i18n plugin', () => { - before(() => { + beforeEach(() => { Vue.use(i18n, { i18nData: { strings: { @@ -13,11 +16,11 @@ describe('i18n plugin', () => { }); }); - it('adds $t to Vue.prototype', () => { + test('adds $t to Vue.prototype', () => { expect(Vue.prototype.$t).to.exist; }); - it('$t is a proxy for common/i18n.t', () => { + test('$t is a proxy for common/i18n.t', () => { const result = (new Vue()).$t('reportBug'); expect(result).to.equal(commoni18n.t('reportBug')); expect(result).to.equal('Report a Bug'); diff --git a/website/client/tests/unit/libs/renderWithMentions.spec.js b/website/client/tests/unit/libs/renderWithMentions.spec.js index bb5b9a6a1b..e92bf85181 100644 --- a/website/client/tests/unit/libs/renderWithMentions.spec.js +++ b/website/client/tests/unit/libs/renderWithMentions.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test } from 'vitest'; import renderMarkdown from '@/libs/renderWithMentions'; describe('renderWithMentions', () => { @@ -5,13 +6,13 @@ describe('renderWithMentions', () => { return { auth: { local: { username: name } }, profile: { name: displayName } }; } - it('returns null if no text supplied', () => { + test('returns null if no text supplied', () => { const result = renderMarkdown('', user('a', 'b')); expect(result).to.be.null; }); - it('highlights displayname', () => { + test('highlights displayname', () => { const text = 'hello @displayedUser with text after'; const result = renderMarkdown(text, user('user', 'displayedUser')); @@ -19,14 +20,14 @@ describe('renderWithMentions', () => { expect(result).to.contain('@displayedUser'); }); - it('highlights username', () => { + test('highlights username', () => { const text = 'hello @user'; const result = renderMarkdown(text, user('user', 'displayedUser')); expect(result).to.contain('@user'); }); - it('highlights username sandwiched with underscores', () => { + test('highlights username sandwiched with underscores', () => { const text = 'hello @_user_'; const result = renderMarkdown(text, user('_user_', 'displayedUser')); @@ -35,7 +36,7 @@ describe('renderWithMentions', () => { expect(result).to.not.contain(''); }); - it('highlights username sandwiched with double underscores', () => { + test('highlights username sandwiched with double underscores', () => { const text = 'hello @__user__'; const result = renderMarkdown(text, user('diffUser', 'displayDiffUser')); @@ -44,13 +45,13 @@ describe('renderWithMentions', () => { expect(result).to.not.contain(''); }); - it('not highlights any email', () => { + test('not highlights any email', () => { const result = renderMarkdown('hello@example.com', user('example', 'displayedUser')); expect(result).to.not.contain('@example'); }); - it('complex highlight', () => { + test('complex highlight', () => { const plainText = 'a bit more @mentions to @use my@mentions.com broken @mail.com'; const result = renderMarkdown(plainText, user('use', 'mentions')); diff --git a/website/client/tests/unit/libs/store.spec.js b/website/client/tests/unit/libs/store.spec.js index 9fa413a07e..ace7fa5378 100644 --- a/website/client/tests/unit/libs/store.spec.js +++ b/website/client/tests/unit/libs/store.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import Vue from 'vue'; import StoreModule, { mapState, mapGetters, mapActions } from '@/libs/store'; import { flattenAndNamespace } from '@/libs/store/helpers/internals'; @@ -42,7 +45,7 @@ describe('Store', () => { Vue.use(StoreModule); }); - it('injects itself in all component', done => { + test('injects itself in all component', done => { new Vue({ // eslint-disable-line no-new store, created () { @@ -52,7 +55,7 @@ describe('Store', () => { }); }); - it('can watch a function on the state', done => { + test('can watch a function on the state', done => { store.watch(state => state.name, newName => { expect(newName).to.equal('test updated'); done(); @@ -62,13 +65,13 @@ describe('Store', () => { }); describe('getters', () => { - it('supports getters', () => { + test('supports getters', () => { expect(store.getters.computedName).to.equal('test computed!'); store.state.name = 'test updated'; expect(store.getters.computedName).to.equal('test updated computed!'); }); - it('supports nested getters', () => { + test('supports nested getters', () => { expect(store.getters['nested:computedName']).to.equal('test computed!'); store.state.name = 'test updated'; expect(store.getters['nested:computedName']).to.equal('test updated computed!'); @@ -76,21 +79,21 @@ describe('Store', () => { }); describe('actions', () => { - it('can dispatch an action', async () => { + test('can dispatch an action', async () => { expect(await store.dispatch('getName', 1, 2, 3)).to.deep.equal(['test', 1, 2, 3]); }); - it('can dispatch a nested action', async () => { + test('can dispatch a nested action', async () => { expect(await store.dispatch('nested:getName', 1, 2, 3)).to.deep.equal(['test', 1, 2, 3]); }); - it('throws an error if the action doesn\'t exists', () => { + test('throws an error if the action doesn\'t exists', () => { expect(() => store.dispatched('wrong')).to.throw; }); }); describe('helpers', () => { - it('mapState', done => { + test('mapState', done => { new Vue({ // eslint-disable-line no-new store, data: { @@ -114,7 +117,7 @@ describe('Store', () => { }); }); - it('mapGetters', done => { + test('mapGetters', done => { new Vue({ // eslint-disable-line no-new store, data: { @@ -134,7 +137,7 @@ describe('Store', () => { }); }); - it('mapActions', done => { + test('mapActions', done => { new Vue({ // eslint-disable-line no-new store, data: { @@ -154,7 +157,7 @@ describe('Store', () => { }); }); - it('flattenAndNamespace', () => { + test('flattenAndNamespace', () => { const result = flattenAndNamespace({ nested: { computed ({ state }, ...args) { diff --git a/website/client/tests/unit/libs/store/helpers/filterTasks.spec.js b/website/client/tests/unit/libs/store/helpers/filterTasks.spec.js index b9f86cdfc8..8cdb934be0 100644 --- a/website/client/tests/unit/libs/store/helpers/filterTasks.spec.js +++ b/website/client/tests/unit/libs/store/helpers/filterTasks.spec.js @@ -1,3 +1,6 @@ +import { + describe, beforeEach, test, expect, +} from 'vitest'; import { getTypeLabel, getFilterLabels, @@ -6,7 +9,7 @@ import { describe('Filter Category for Tasks', () => { describe('getTypeLabel', () => { - it('should return correct task type labels', () => { + test('should return correct task type labels', () => { expect(getTypeLabel('habit')).to.eq('habits'); expect(getTypeLabel('daily')).to.eq('dailies'); expect(getTypeLabel('todo')).to.eq('todos'); @@ -24,7 +27,7 @@ describe('Filter Category for Tasks', () => { reward = ['all', 'custom', 'wishlist']; }); - it('should return all task type filter labels by type', () => { + test('should return all task type filter labels by type', () => { // habits getFilterLabels('habit').forEach((item, i) => { expect(item).to.eq(habit[i]); @@ -45,14 +48,14 @@ describe('Filter Category for Tasks', () => { }); describe('getActiveFilter', () => { - it('should return single function by default', () => { + test('should return single function by default', () => { const activeFilter = getActiveFilter('habit'); expect(activeFilter).to.be.an('object'); expect(activeFilter).to.have.all.keys('label', 'filterFn', 'default'); expect(activeFilter.default).to.be.true; }); - it('should return single function for given filter type', () => { + test('should return single function for given filter type', () => { const activeFilterLabel = 'yellowred'; const activeFilter = getActiveFilter('habit', activeFilterLabel); expect(activeFilter).to.be.an('object'); diff --git a/website/client/tests/unit/libs/store/helpers/orderTasks.spec.js b/website/client/tests/unit/libs/store/helpers/orderTasks.spec.js index 285c0cb602..8f2648302c 100644 --- a/website/client/tests/unit/libs/store/helpers/orderTasks.spec.js +++ b/website/client/tests/unit/libs/store/helpers/orderTasks.spec.js @@ -1,3 +1,6 @@ +import { + describe, beforeEach, test, expect, +} from 'vitest'; import shuffle from 'lodash/shuffle'; import { orderSingleTypeTasks, @@ -14,18 +17,18 @@ describe('Task Order Helper Function', () => { shuffledTasks = shuffle(tasks); }); - it('should return tasks as is for no task order', () => { + test('should return tasks as is for no task order', () => { expect(orderSingleTypeTasks(shuffledTasks)).to.eq(shuffledTasks); }); - it('should return tasks in expected order', () => { + test('should return tasks in expected order', () => { const newOrderedTasks = orderSingleTypeTasks(shuffledTasks, taskOrderList); newOrderedTasks.forEach((item, index) => { expect(item).to.eq(tasks[index]); }); }); - it('should return new tasks at end of expected order', () => { + test('should return new tasks at end of expected order', () => { const newTaskIds = [10, 15, 20]; newTaskIds.forEach(i => tasks.push({ _id: i, id: i })); shuffledTasks = shuffle(tasks); diff --git a/website/client/tests/unit/mixins/groupsUtilities.spec.js b/website/client/tests/unit/mixins/groupsUtilities.spec.js index 686e59342e..6d3915b57a 100644 --- a/website/client/tests/unit/mixins/groupsUtilities.spec.js +++ b/website/client/tests/unit/mixins/groupsUtilities.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import { createLocalVue } from '@vue/test-utils'; import { TAVERN_ID } from '@/../../common/script/constants'; import groupsUtilities from '@/mixins/groupsUtilities'; @@ -11,7 +14,7 @@ describe('Groups Utilities Mixin', () => { let instance; let user; - before(() => { + beforeEach(() => { instance = new LocalVue({ store: generateStore(), mixins: [groupsUtilities], @@ -27,38 +30,38 @@ describe('Groups Utilities Mixin', () => { }); describe('isMemberOfGroup', () => { - it('registers as a method', () => { + test('registers as a method', () => { expect(instance.isMemberOfGroup).to.exist; }); - it('returns true when the group is the Tavern', () => { + test('returns true when the group is the Tavern', () => { expect(instance.isMemberOfGroup(user, { _id: TAVERN_ID, })).to.equal(true); }); - it('returns true when the group is the user\'s party', () => { + test('returns true when the group is the user\'s party', () => { expect(instance.isMemberOfGroup(user, { type: 'party', _id: user.party._id, })).to.equal(true); }); - it('returns false when the group is not the user\'s party', () => { + test('returns false when the group is not the user\'s party', () => { expect(instance.isMemberOfGroup(user, { type: 'party', _id: 'not my party', })).to.equal(false); }); - it('returns true when the group is not a guild of which the user is a member', () => { + test('returns true when the group is not a guild of which the user is a member', () => { expect(instance.isMemberOfGroup(user, { type: 'guild', _id: user.guilds[0], })).to.equal(true); }); - it('returns false when the group is not a guild of which the user is a member', () => { + test('returns false when the group is not a guild of which the user is a member', () => { expect(instance.isMemberOfGroup(user, { type: 'guild', _id: 'not my guild', @@ -70,7 +73,7 @@ describe('Groups Utilities Mixin', () => { let testGroup; let testGroup2; - before(() => { + beforeEach(() => { testGroup = { type: 'guild', _id: user.guilds[0], @@ -103,55 +106,55 @@ describe('Groups Utilities Mixin', () => { }; }); - it('returns true with no filter and no search', () => { + test('returns true with no filter and no search', () => { const filter = {}; const search = ''; expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true); }); - it('returns false with no filter and one search word not matching against any of the guild name, summary, and description', () => { + test('returns false with no filter and one search word not matching against any of the guild name, summary, and description', () => { const filter = {}; const search = '3d'; expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false); }); - it('returns true with no filter and one search word matched successfully against guild name', () => { + test('returns true with no filter and one search word matched successfully against guild name', () => { const filter = {}; const search = 'vow'; expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true); }); - it('returns true with no filter and one search word matched successfully against guild summary', () => { + test('returns true with no filter and one search word matched successfully against guild summary', () => { const filter = {}; const search = 'test'; expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true); }); - it('returns true with no filter and one search word matched successfully against guild description', () => { + test('returns true with no filter and one search word matched successfully against guild description', () => { const filter = {}; const search = 'dum'; expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true); }); - it('returns true with no filter and two search words with two spaces in between matched successfully against guild name', () => { + test('returns true with no filter and two search words with two spaces in between matched successfully against guild name', () => { const filter = {}; const search = 'cad test'; expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true); }); - it('returns true with no filter and two search words with two spaces in between matched successfully against guild summary', () => { + test('returns true with no filter and two search words with two spaces in between matched successfully against guild summary', () => { const filter = {}; const search = 'cad 3d'; expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true); }); - it('returns true with no filter and two search words with two spaces in between matched successfully against guild description', () => { + test('returns true with no filter and two search words with two spaces in between matched successfully against guild description', () => { const filter = {}; const search = 'my dummy'; expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true); }); - it('returns false with no search word and one filter category that does not match against any guild categories', () => { + test('returns false with no search word and one filter category that does not match against any guild categories', () => { const filter = { categories: ['academics'], }; @@ -159,7 +162,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false); }); - it('returns true with no search word and one filter category that matches successfully against any guild categories', () => { + test('returns true with no search word and one filter category that matches successfully against any guild categories', () => { const filter = { categories: ['hobbies_occupations'], }; @@ -167,7 +170,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true); }); - it('returns false with no search word and one filter role that does not match against guild role', () => { + test('returns false with no search word and one filter role that does not match against guild role', () => { const filter = { roles: ['guild_leader'], }; @@ -175,7 +178,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false); }); - it('returns true with no search word and one filter role that matches successfully against guild role', () => { + test('returns true with no search word and one filter role that matches successfully against guild role', () => { const filter = { roles: ['member'], }; @@ -183,7 +186,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true); }); - it('returns true with no search word and filter size silver tier that matches against a guild size of 1000, the max guild size belonging to silver tier', () => { + test('returns true with no search word and filter size silver tier that matches against a guild size of 1000, the max guild size belonging to silver tier', () => { const filter = { guildSize: 'gold_tier', }; @@ -191,7 +194,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true); }); - it('returns true with no search word and filter size bronze tier that matches against a guild size of 100, the max guild size belonging to bronze tier', () => { + test('returns true with no search word and filter size bronze tier that matches against a guild size of 100, the max guild size belonging to bronze tier', () => { const filter = { guildSize: 'silver_tier', }; @@ -199,7 +202,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true); }); - it('returns false with no search word and filter category that matches successfully against one guild category and filter role that does not match against guild role', () => { + test('returns false with no search word and filter category that matches successfully against one guild category and filter role that does not match against guild role', () => { const filter = { categories: ['hobbies_occupations'], roles: ['guild_leader'], @@ -208,7 +211,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false); }); - it('returns true with no search word and filter category that matches successfully against one guild category and filter role that matches successfully against guild role', () => { + test('returns true with no search word and filter category that matches successfully against one guild category and filter role that matches successfully against guild role', () => { const filter = { categories: ['hobbies_occupations'], roles: ['guild_leader'], @@ -217,7 +220,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true); }); - it('returns false with one search word that does not match against guild name and one filter category that matches successfully against guild categories', () => { + test('returns false with one search word that does not match against guild name and one filter category that matches successfully against guild categories', () => { const filter = { categories: ['hobbies_occupations'], }; @@ -225,7 +228,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false); }); - it('returns true with one search word that matches against guild name and one filter role that matches successfully against guild role', () => { + test('returns true with one search word that matches against guild name and one filter role that matches successfully against guild role', () => { const filter = { categories: ['hobbies_occupations'], }; diff --git a/website/client/tests/unit/store/actions/shops.spec.js b/website/client/tests/unit/store/actions/shops.spec.js index 9750c4e52b..30e8555c8b 100644 --- a/website/client/tests/unit/store/actions/shops.spec.js +++ b/website/client/tests/unit/store/actions/shops.spec.js @@ -1,11 +1,17 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import axios from 'axios'; import content from '@/../../common/script/content'; import getItemInfo from '@/../../common/script/libs/getItemInfo'; import getOfficialPinnedItems from '@/../../common/script/libs/getOfficialPinnedItems'; +import sinon from 'sinon'; import generateStore from '@/store'; +const sandbox = sinon.createSandbox(); + describe('shops actions', () => { let store; @@ -14,7 +20,7 @@ describe('shops actions', () => { }); describe('genericPurchase', () => { - it('buy gear', async () => { + test('buy gear', async () => { const user = { id: 1, stats: { diff --git a/website/client/tests/unit/store/actions/tasks.spec.js b/website/client/tests/unit/store/actions/tasks.spec.js index de6231a6b8..82c5ced938 100644 --- a/website/client/tests/unit/store/actions/tasks.spec.js +++ b/website/client/tests/unit/store/actions/tasks.spec.js @@ -1,6 +1,12 @@ +import { + describe, expect, test, beforeEach, afterEach, +} from 'vitest'; import axios from 'axios'; +import sinon from 'sinon'; import generateStore from '@/store'; +const sandbox = sinon.createSandbox(); + describe('tasks actions', () => { let store; @@ -13,7 +19,7 @@ describe('tasks actions', () => { if (axios.get && axios.get.restore) axios.get.restore(); }); - it.skip('fetches user tasks', async () => { + test.skip('fetches user tasks', async () => { expect(store.state.tasks.loadingStatus).to.equal('NOT_LOADED'); const tasks = [{ _id: 1 }]; sandbox.stub(axios, 'get').withArgs('/api/v4/tasks/user').returns(Promise.resolve({ data: { data: tasks } })); @@ -24,7 +30,7 @@ describe('tasks actions', () => { expect(store.state.tasks.loadingStatus).to.equal('LOADED'); }); - it('does not reload tasks by default', async () => { + test('does not reload tasks by default', async () => { const originalTask = [{ _id: 1 }]; store.state.tasks = { loadingStatus: 'LOADED', @@ -40,7 +46,7 @@ describe('tasks actions', () => { expect(store.state.tasks.loadingStatus).to.equal('LOADED'); }); - it.skip('can reload tasks if forceLoad is true', async () => { + test.skip('can reload tasks if forceLoad is true', async () => { store.state.tasks = { loadingStatus: 'LOADED', data: [{ _id: 1 }], diff --git a/website/client/tests/unit/store/actions/user.spec.js b/website/client/tests/unit/store/actions/user.spec.js index e33078cce8..c1ffc50fe1 100644 --- a/website/client/tests/unit/store/actions/user.spec.js +++ b/website/client/tests/unit/store/actions/user.spec.js @@ -1,6 +1,12 @@ +import { + describe, expect, test, beforeEach, afterEach, +} from 'vitest'; import axios from 'axios'; +import sinon from 'sinon'; import generateStore from '@/store'; +const sandbox = sinon.createSandbox(); + describe('user actions', () => { let store; @@ -13,7 +19,7 @@ describe('user actions', () => { }); describe('fetch', () => { - it('loads the user', async () => { + test('loads the user', async () => { expect(store.state.user.loadingStatus).to.equal('NOT_LOADED'); const user = { _id: 1 }; sandbox.stub(axios, 'get').withArgs('/api/v4/user').returns(Promise.resolve({ data: { data: user } })); @@ -24,7 +30,7 @@ describe('user actions', () => { expect(store.state.user.loadingStatus).to.equal('LOADED'); }); - it('does not reload user by default', async () => { + test('does not reload user by default', async () => { const originalUser = { _id: 1 }; store.state.user = { loadingStatus: 'LOADED', @@ -40,7 +46,7 @@ describe('user actions', () => { expect(store.state.user.loadingStatus).to.equal('LOADED'); }); - it('can reload user if forceLoad is true', async () => { + test('can reload user if forceLoad is true', async () => { store.state.user = { loadingStatus: 'LOADED', data: { _id: 1 }, diff --git a/website/client/tests/unit/store/getters/members/hasClass.spec.js b/website/client/tests/unit/store/getters/members/hasClass.spec.js index 701e72f9ea..a6ca9eaa6b 100644 --- a/website/client/tests/unit/store/getters/members/hasClass.spec.js +++ b/website/client/tests/unit/store/getters/members/hasClass.spec.js @@ -1,7 +1,8 @@ +import { describe, expect, test } from 'vitest'; import { hasClass } from '@/store/getters/members'; describe('hasClass getter', () => { - it('returns false if level < 10', () => { + test('returns false if level < 10', () => { const member = { stats: { lvl: 5, @@ -16,7 +17,7 @@ describe('hasClass getter', () => { expect(hasClass()(member)).to.equal(false); }); - it('returns false if member has disabled classes', () => { + test('returns false if member has disabled classes', () => { const member = { stats: { lvl: 10, @@ -31,7 +32,7 @@ describe('hasClass getter', () => { expect(hasClass()(member)).to.equal(false); }); - it('returns false if member has not yet selected a class', () => { + test('returns false if member has not yet selected a class', () => { const member = { stats: { lvl: 10, @@ -46,7 +47,7 @@ describe('hasClass getter', () => { expect(hasClass()(member)).to.equal(false); }); - it('returns true when all conditions are met', () => { + test('returns true when all conditions are met', () => { const member = { stats: { lvl: 10, diff --git a/website/client/tests/unit/store/getters/tasks/canDelete.spec.js b/website/client/tests/unit/store/getters/tasks/canDelete.spec.js index 345fc35aac..395a3de398 100644 --- a/website/client/tests/unit/store/getters/tasks/canDelete.spec.js +++ b/website/client/tests/unit/store/getters/tasks/canDelete.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import generateStore from '@/store'; describe('canDelete getter', () => { @@ -33,40 +36,40 @@ describe('canDelete getter', () => { task = { userId: 1, challenge: { id: 2 } }; }); - it('cannot Delete challenge or group task in own dashboard', () => { + test('cannot Delete challenge or group task in own dashboard', () => { expect(store.getters['tasks:canDelete'](task, 'challenge', true, null, challenge)).to.equal(false); expect(store.getters['tasks:canDelete'](task, 'group', true, group, null)).to.equal(false); }); - it('can Delete any challenge task as admin', () => { + test('can Delete any challenge task as admin', () => { store.state.user.data.permissions = { challengeAdmin: true }; expect(store.getters['tasks:canDelete'](task, 'challenge', true, null, challenge)).to.equal(true); }); - it('can Delete own challenge task if leader', () => { + test('can Delete own challenge task if leader', () => { store.state.user.data.id = 123; expect(store.getters['tasks:canDelete'](task, 'challenge', false, null, challenge)).to.equal(true); }); - it('cannot Delete challenge task if non leader on challenge page', () => { + test('cannot Delete challenge task if non leader on challenge page', () => { expect(store.getters['tasks:canDelete'](task, 'challenge', false, null, challenge)).to.equal(false); }); - it('can Delete group task as leader on group page', () => { + test('can Delete group task as leader on group page', () => { store.state.user.data.id = 123; expect(store.getters['tasks:canDelete'](task, 'group', false, group)).to.equal(true); }); - it('can Delete group task if manager on group page', () => { + test('can Delete group task if manager on group page', () => { store.state.user.data.id = 123984; expect(store.getters['tasks:canDelete'](task, 'group', false, group)).to.equal(true); }); - it('cannot Delete group task if not a leader on group page', () => { + test('cannot Delete group task if not a leader on group page', () => { expect(store.getters['tasks:canDelete'](task, 'group', false, group)).to.equal(false); }); }); diff --git a/website/client/tests/unit/store/getters/tasks/canEdit.spec.js b/website/client/tests/unit/store/getters/tasks/canEdit.spec.js index 15962b7030..f0c93a30d0 100644 --- a/website/client/tests/unit/store/getters/tasks/canEdit.spec.js +++ b/website/client/tests/unit/store/getters/tasks/canEdit.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import generateStore from '@/store'; describe('canEdit getter', () => { @@ -33,45 +36,45 @@ describe('canEdit getter', () => { task = { userId: 1, challenge: { id: 2 } }; }); - it('can Edit task in own dashboard', () => { + test('can Edit task in own dashboard', () => { expect(store.getters['tasks:canEdit'](task, 'challenge', true, null, challenge)).to.equal(true); }); - it('cannot Edit group task in own dashboard', () => { + test('cannot Edit group task in own dashboard', () => { expect(store.getters['tasks:canEdit'](task, 'group', true, group, null)).to.equal(false); }); - it('can Edit any challenge task if admin', () => { + test('can Edit any challenge task if admin', () => { store.state.user.data.permissions = { challengeAdmin: true }; expect(store.getters['tasks:canEdit'](task, 'challenge', true, null, challenge)).to.equal(true); expect(store.getters['tasks:canEdit'](task, 'challenge', false, null, challenge)).to.equal(true); }); - it('can Edit own challenge task if leader', () => { + test('can Edit own challenge task if leader', () => { store.state.user.data.id = 123; expect(store.getters['tasks:canEdit'](task, 'challenge', true, null, challenge)).to.equal(true); expect(store.getters['tasks:canEdit'](task, 'challenge', false, null, challenge)).to.equal(true); }); - it('cannot Edit challenge task if not leader on challenge page', () => { + test('cannot Edit challenge task if not leader on challenge page', () => { expect(store.getters['tasks:canEdit'](task, 'challenge', false, null, challenge)).to.equal(false); }); - it('can Edit group task as leader on group page', () => { + test('can Edit group task as leader on group page', () => { store.state.user.data.id = 123; expect(store.getters['tasks:canEdit'](task, 'group', false, group)).to.equal(true); }); - it('can Edit group task if manager on group page', () => { + test('can Edit group task if manager on group page', () => { store.state.user.data.id = 123984; expect(store.getters['tasks:canEdit'](task, 'group', false, group)).to.equal(true); }); - it('cannot Edit group task if not leader on group page', () => { + test('cannot Edit group task if not leader on group page', () => { expect(store.getters['tasks:canEdit'](task, 'group', false, group)).to.equal(false); }); }); diff --git a/website/client/tests/unit/store/getters/tasks/getTagsFor.spec.js b/website/client/tests/unit/store/getters/tasks/getTagsFor.spec.js index 902e80d388..e198e4a2ad 100644 --- a/website/client/tests/unit/store/getters/tasks/getTagsFor.spec.js +++ b/website/client/tests/unit/store/getters/tasks/getTagsFor.spec.js @@ -1,7 +1,8 @@ +import { describe, expect, test } from 'vitest'; import generateStore from '@/store'; describe('getTagsFor getter', () => { - it('returns the tags for a task', () => { + test('returns the tags for a task', () => { const store = generateStore(); store.state.user.data = { tags: [ diff --git a/website/client/tests/unit/store/getters/tasks/getTaskClasses.spec.js b/website/client/tests/unit/store/getters/tasks/getTaskClasses.spec.js index ad05f73a6c..7c4c1530b2 100644 --- a/website/client/tests/unit/store/getters/tasks/getTaskClasses.spec.js +++ b/website/client/tests/unit/store/getters/tasks/getTaskClasses.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import generateStore from '@/store'; describe('getTaskClasses getter', () => { @@ -14,92 +17,92 @@ describe('getTaskClasses getter', () => { getTaskClasses = store.getters['tasks:getTaskClasses']; }); - it('returns reward edit-modal-bg class', () => { + test('returns reward edit-modal-bg class', () => { const task = { type: 'reward' }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-purple-modal-bg'); }); - it('returns worst task edit-modal-bg class', () => { + test('returns worst task edit-modal-bg class', () => { const task = { type: 'todo', value: -21 }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-worst-modal-bg'); }); - it('returns worse task edit-modal-bg class', () => { + test('returns worse task edit-modal-bg class', () => { const task = { type: 'todo', value: -11 }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-worse-modal-bg'); }); - it('returns bad task edit-modal-bg class', () => { + test('returns bad task edit-modal-bg class', () => { const task = { type: 'todo', value: -6 }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-bad-modal-bg'); }); - it('returns neutral task edit-modal-bg class', () => { + test('returns neutral task edit-modal-bg class', () => { const task = { type: 'todo', value: 0 }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-neutral-modal-bg'); }); - it('returns good task edit-modal-bg class', () => { + test('returns good task edit-modal-bg class', () => { const task = { type: 'todo', value: 2 }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-good-modal-bg'); }); - it('returns better task edit-modal-bg class', () => { + test('returns better task edit-modal-bg class', () => { const task = { type: 'todo', value: 6 }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-better-modal-bg'); }); - it('returns best task edit-modal-bg class', () => { + test('returns best task edit-modal-bg class', () => { const task = { type: 'todo', value: 12 }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-best-modal-bg'); }); - it('returns best task edit-modal-text class', () => { + test('returns best task edit-modal-text class', () => { const task = { type: 'todo', value: 12 }; expect(getTaskClasses(task, 'edit-modal-text')).to.equal('task-best-modal-text'); }); - it('returns best task edit-modal-icon class', () => { + test('returns best task edit-modal-icon class', () => { const task = { type: 'todo', value: 12 }; expect(getTaskClasses(task, 'edit-modal-icon')).to.equal('task-best-modal-icon'); }); - it('returns best task edit-modal-option-disabled class', () => { + test('returns best task edit-modal-option-disabled class', () => { const task = { type: 'todo', value: 12 }; expect(getTaskClasses(task, 'edit-modal-option-disabled')).to.equal('task-best-modal-option-disabled'); }); - it('returns best task edit-modal-control-disabled class', () => { + test('returns best task edit-modal-control-disabled class', () => { const task = { type: 'todo', value: 12 }; expect(getTaskClasses(task, 'edit-modal-habit-control-disabled')).to.equal('task-best-modal-habit-control-disabled'); }); - it('returns create-modal-bg class', () => { + test('returns create-modal-bg class', () => { const task = { type: 'todo' }; expect(getTaskClasses(task, 'create-modal-bg')).to.equal('task-purple-modal-bg'); }); - it('returns create-modal-text class', () => { + test('returns create-modal-text class', () => { const task = { type: 'todo' }; expect(getTaskClasses(task, 'create-modal-text')).to.equal('task-purple-modal-text'); }); - it('returns create-modal-icon class', () => { + test('returns create-modal-icon class', () => { const task = { type: 'todo' }; expect(getTaskClasses(task, 'create-modal-icon')).to.equal('task-purple-modal-icon'); }); - it('returns create-modal-option-disabled class', () => { + test('returns create-modal-option-disabled class', () => { const task = { type: 'todo' }; expect(getTaskClasses(task, 'create-modal-option-disabled')).to.equal('task-purple-modal-option-disabled'); }); - it('returns create-modal-habit-control-disabled class', () => { + test('returns create-modal-habit-control-disabled class', () => { const task = { type: 'todo' }; expect(getTaskClasses(task, 'create-modal-habit-control-disabled')).to.equal('task-purple-modal-habit-control-disabled'); }); - it('returns completed todo classes', () => { + test('returns completed todo classes', () => { const task = { type: 'todo', value: 2, completed: true }; expect(getTaskClasses(task, 'control')).to.deep.equal({ bg: 'task-disabled-daily-todo-control-bg', @@ -109,7 +112,7 @@ describe('getTaskClasses getter', () => { }); }); - it('returns good todo classes', () => { + test('returns good todo classes', () => { const task = { type: 'todo', value: 2 }; expect(getTaskClasses(task, 'control')).to.deep.equal({ bg: 'task-good-control-bg', @@ -119,14 +122,14 @@ describe('getTaskClasses getter', () => { }); }); - it('returns reward classes', () => { + test('returns reward classes', () => { const task = { type: 'reward' }; expect(getTaskClasses(task, 'control')).to.deep.equal({ bg: 'task-reward-control-bg', }); }); - it('returns habit up classes', () => { + test('returns habit up classes', () => { const task = { type: 'habit', value: 2, up: true }; expect(getTaskClasses(task, 'control')).to.deep.equal({ up: { @@ -142,7 +145,7 @@ describe('getTaskClasses getter', () => { }); }); - it('returns noninteractive classes and padlock icons for group board tasks', () => { + test('returns noninteractive classes and padlock icons for group board tasks', () => { const task = { type: 'todo', value: 2, diff --git a/website/client/tests/unit/store/getters/tasks/getTasks.spec.js b/website/client/tests/unit/store/getters/tasks/getTasks.spec.js index c0cfa6969b..7c49b8f9bd 100644 --- a/website/client/tests/unit/store/getters/tasks/getTasks.spec.js +++ b/website/client/tests/unit/store/getters/tasks/getTasks.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import generateStore from '@/store'; describe('Store Getters for Tasks', () => { @@ -44,7 +47,7 @@ describe('Store Getters for Tasks', () => { }; }); - it('should returns all tasks by task type', () => { + test('should returns all tasks by task type', () => { let returnedTasks = store.getters['tasks:getUnfilteredTaskList']('habit'); expect(returnedTasks).to.eq(habits); @@ -80,7 +83,7 @@ describe('Store Getters for Tasks', () => { }; }); - it('should return weak habits', () => { + test('should return weak habits', () => { const returnedTasks = store.getters['tasks:getFilteredTaskList']({ type: 'habit', filterType: 'yellowred', @@ -89,7 +92,7 @@ describe('Store Getters for Tasks', () => { expect(returnedTasks[0]).to.eq(habits[0]); }); - it('should return strong habits', () => { + test('should return strong habits', () => { const returnedTasks = store.getters['tasks:getFilteredTaskList']({ type: 'habit', filterType: 'greenblue', @@ -98,7 +101,7 @@ describe('Store Getters for Tasks', () => { expect(returnedTasks[0]).to.eq(habits[1]); }); - it('should return scheduled todos', () => { + test('should return scheduled todos', () => { const returnedTasks = store.getters['tasks:getFilteredTaskList']({ type: 'todo', filterType: 'scheduled', @@ -107,7 +110,7 @@ describe('Store Getters for Tasks', () => { expect(returnedTasks[0]).to.eq(todos[0]); }); - it('should return completed todos', () => { + test('should return completed todos', () => { const returnedTasks = store.getters['tasks:getFilteredTaskList']({ type: 'todo', filterType: 'complete2', diff --git a/website/client/tests/unit/store/getters/user/user.spec.js b/website/client/tests/unit/store/getters/user/user.spec.js index 1bd84e20d4..af55cc21fe 100644 --- a/website/client/tests/unit/store/getters/user/user.spec.js +++ b/website/client/tests/unit/store/getters/user/user.spec.js @@ -1,10 +1,11 @@ +import { describe, expect, test } from 'vitest'; import { data, gems, buffs, preferences, tasksOrder, } from '@/store/getters/user'; -context('user getters', () => { +describe('user getters', () => { describe('data', () => { - it('returns the user\'s data', () => { + test('returns the user\'s data', () => { expect(data({ state: { user: { @@ -18,7 +19,7 @@ context('user getters', () => { }); describe('gems', () => { - it('returns the user\'s gems', () => { + test('returns the user\'s gems', () => { expect(gems({ state: { user: { @@ -30,7 +31,7 @@ context('user getters', () => { }); describe('buffs', () => { - it('returns the user\'s buffs', () => { + test('returns the user\'s buffs', () => { expect(buffs({ state: { user: { @@ -46,7 +47,7 @@ context('user getters', () => { }); describe('preferences', () => { - it('returns the user\'s preferences', () => { + test('returns the user\'s preferences', () => { expect(preferences({ state: { user: { @@ -60,7 +61,7 @@ context('user getters', () => { }); describe('tasksOrder', () => { - it('returns the user\'s tasksOrder', () => { + test('returns the user\'s tasksOrder', () => { expect(tasksOrder({ state: { user: { diff --git a/website/client/tests/unit/store/store.spec.js b/website/client/tests/unit/store/store.spec.js index f05690fcf4..11c5c9fd31 100644 --- a/website/client/tests/unit/store/store.spec.js +++ b/website/client/tests/unit/store/store.spec.js @@ -1,8 +1,9 @@ +import { describe, expect, test } from 'vitest'; import Store from '@/libs/store'; import generateStore from '@/store'; describe('Application store', () => { - it('is an instance of Store', () => { + test('is an instance of Store', () => { expect(generateStore()).to.be.an.instanceof(Store); }); }); diff --git a/website/client/vite.config.mjs b/website/client/vite.config.mjs new file mode 100644 index 0000000000..c67a085fbf --- /dev/null +++ b/website/client/vite.config.mjs @@ -0,0 +1,169 @@ +import nconf from 'nconf'; +import path from 'path'; +import { defineConfig } from 'vite' +import { ViteS3 } from '@froxz/vite-plugin-s3' +import { compression } from 'vite-plugin-compression2'; +import vue from '@vitejs/plugin-vue2' +import { fileURLToPath } from 'node:url' +import setupNconf from '../server/libs/setupNconf'; + +const configFile = path.join(path.resolve(__dirname, '../../config.json')); +setupNconf(configFile, nconf); +const DEV_BASE_URL = nconf.get('BASE_URL'); + +let S3_URL = nconf.get('S3_URL'); +if (S3_URL && !S3_URL.endsWith('/')) { + S3_URL += '/'; +} + +const ENABLE_S3 = S3_URL && nconf.get('S3_ACCESS_KEY') && nconf.get('S3_SECRET_KEY'); + + +const envVars = [ + 'AMAZON_PAYMENTS_SELLER_ID', + 'AMAZON_PAYMENTS_CLIENT_ID', + 'AMAZON_PAYMENTS_MODE', + 'EMAILS_COMMUNITY_MANAGER_EMAIL', + 'EMAILS_TECH_ASSISTANCE_EMAIL', + 'EMAILS_PRESS_ENQUIRY_EMAIL', + 'GA_ID', + 'STRIPE_PUB_KEY', + 'GOOGLE_CLIENT_ID', + 'APPLE_AUTH_CLIENT_ID', + 'AMPLITUDE_KEY', + 'LOGGLY_CLIENT_TOKEN', + 'TRUSTED_DOMAINS', + 'TIME_TRAVEL_ENABLED', + 'DEBUG_ENABLED', + 'CONTENT_SWITCHOVER_TIME_OFFSET', + // TODO necessary? if yes how not to mess up with vue cli? 'NODE_ENV' +]; + +const envObject = {}; + +envVars + .forEach(key => { + envObject[`import.meta.env.${key}`] = `'${nconf.get(key)}'`; + envObject[`process.env.${key}`] = `'${nconf.get(key)}'`; + }); +if (nconf.get('BASE_URL').indexOf('//habitica.com') !== -1) { + envObject['import.meta.env.DEBUG_ENABLED'] = `false`; + envObject['import.meta.env.TIME_TRAVEL_ENABLED'] = `false`; +} + +// https://vitejs.dev/config/ +export default defineConfig({ + define: envObject, + resolve: { + alias: [ + { find: '@', replacement: fileURLToPath(new URL('./src', import.meta.url)) }, + { find: '~', replacement: fileURLToPath(new URL('./node_modules', import.meta.url)) }, + ], + extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'], + dedupe: ['moment', 'lodash', 'moment-recur'], + }, + plugins: [ + vue(), + compression({ + filename: 'compressed/[base]', + compressionOptions: { level: 9 }, + skipIfLargerOrEqual: false, + }), + ViteS3(ENABLE_S3, { + include: [/compressed\/.*/], + basePath: nconf.get('S3_BASE_PATH'), + clientConfig: { + credentials: { + accessKeyId: nconf.get('S3_ACCESS_KEY'), + secretAccessKey: nconf.get('S3_SECRET_KEY'), + }, + region: nconf.get('S3_REGION'), + }, + uploadOptions: { + Bucket: nconf.get('S3_BUCKET_NAME'), + ContentEncoding: 'gzip', + } + }), + ViteS3(ENABLE_S3, { + include: [/.*\.(png|jpg|jpeg|gif|svg|webp|ico)/], + basePath: nconf.get('S3_BASE_PATH'), + clientConfig: { + credentials: { + accessKeyId: nconf.get('S3_ACCESS_KEY'), + secretAccessKey: nconf.get('S3_SECRET_KEY'), + }, + region: nconf.get('S3_REGION'), + }, + uploadOptions: { + Bucket: nconf.get('S3_BUCKET_NAME'), + } + }) + ], + experimental: { + renderBuiltUrl(filename, { hostType }) { + if (ENABLE_S3) { + if (hostType === 'js' && (filename.endsWith('.js') || filename.endsWith('.css'))) { + return { relative: true } + } else if (filename.endsWith('.js') || filename.endsWith('.css')) { + const name = filename.replace('assets/', 'compressed/') + return `${S3_URL}${name}` + } + return `${S3_URL}${filename}` + } else { + return { relative: true } + } + } + }, + optimizeDeps: { + include: ['moment-recur'] + }, + build: { + commonjsOptions: { + include: [/moment-recur/, /node_modules/] + }, + rollupOptions: { + output: { + experimentalMinChunkSize: 1000 + } + } + }, + base: '/', + server: { + headers: { 'Cache-Control': 'no-store' }, + proxy: { + // proxy all requests to the server at IP:PORT as specified in the top-level config + '^/api/v3': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + '^/api/v4': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + '^/stripe': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + '^/amazon': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + '^/paypal': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + '^/logout-server': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + '^/export': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + '^/analytics': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + } + } +}) diff --git a/website/client/vitest.config.js b/website/client/vitest.config.js new file mode 100644 index 0000000000..d9ff697255 --- /dev/null +++ b/website/client/vitest.config.js @@ -0,0 +1,22 @@ +import { defineConfig, mergeConfig } from 'vitest/config'; +import viteConfig from './vite.config.mjs'; + +export default defineConfig(configEnv => mergeConfig( + viteConfig, + defineConfig({ + test: { + include: ['tests/**'], + environment: 'jsdom', + }, + browser: { + enabled: true, + headless: true, + provider: 'playwright', + instances: [ + { + browser: 'chromium', + }, + ], + }, + }), +)); diff --git a/website/client/vue.config.js b/website/client/vue.config.js deleted file mode 100644 index 8d3528b9db..0000000000 --- a/website/client/vue.config.js +++ /dev/null @@ -1,200 +0,0 @@ -/* eslint-disable import/no-commonjs */ -const path = require('path'); -const webpack = require('webpack'); -const nconf = require('nconf'); -const vueTemplateCompiler = require('vue-template-babel-compiler'); -const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); -const setupNconf = require('../server/libs/setupNconf'); -const pkg = require('./package.json'); - -const configFile = path.join(path.resolve(__dirname, '../../config.json')); - -// TODO abstract from server -setupNconf(configFile, nconf); - -const DEV_BASE_URL = nconf.get('BASE_URL'); - -const envVars = [ - 'AMAZON_PAYMENTS_SELLER_ID', - 'AMAZON_PAYMENTS_CLIENT_ID', - 'AMAZON_PAYMENTS_MODE', - 'EMAILS_COMMUNITY_MANAGER_EMAIL', - 'EMAILS_TECH_ASSISTANCE_EMAIL', - 'EMAILS_PRESS_ENQUIRY_EMAIL', - 'BASE_URL', - 'GA_ID', - 'STRIPE_PUB_KEY', - 'GOOGLE_CLIENT_ID', - 'APPLE_AUTH_CLIENT_ID', - 'AMPLITUDE_KEY', - 'LOGGLY_CLIENT_TOKEN', - 'TRUSTED_DOMAINS', - 'TIME_TRAVEL_ENABLED', - 'DEBUG_ENABLED', - 'CONTENT_SWITCHOVER_TIME_OFFSET', - // TODO necessary? if yes how not to mess up with vue cli? 'NODE_ENV' -]; - -const envObject = {}; - -envVars - .forEach(key => { - envObject[`process.env.${key}`] = `'${nconf.get(key)}'`; - }); - -const webpackPlugins = [ - new webpack.ProvidePlugin({ 'window.jQuery': 'jquery' }), - new webpack.DefinePlugin(envObject), - new MomentLocalesPlugin({ - localesToKeep: ['bg', - 'cs', - 'da', - 'de', - 'en', - 'es', - 'fr', - 'he', - 'hu', - 'id', - 'it', - 'ja', - 'nl', - 'pl', - 'pt', - 'pt-br', - 'ro', - 'ru', - 'sk', - 'sv', - 'tr', - 'uk', - 'zh-cn', - 'zh-tw', - ], - }), - new webpack.IgnorePlugin({ - checkResource (resource, context) { - if ((context.includes('sinon') || resource.includes('sinon') || context.includes('nise')) && nconf.get('TIME_TRAVEL_ENABLED') !== 'true') { - return true; - } - if (context.includes('yargs')) { - return true; - } - return false; - }, - }), -]; - -module.exports = { - assetsDir: 'static', - configureWebpack: { - module: { - rules: [ - { - test: /\.svg/, - dependency: { not: ['url'] }, - type: 'asset/source', - }, - { - test: /\.js$/, - // Exclude transpiling `node_modules`, except `bootstrap-vue/src` - exclude: /node_modules\/(?!bootstrap-vue\/src\/)/, - use: { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env'], - }, - }, - }, - { - test: /\.js$/, - // Exclude transpiling `node_modules`, except `bootstrap-vue/src` - exclude: /node_modules\/(?!validator)/, - use: { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env'], - }, - }, - }, - ], - }, - resolve: { - fallback: { - crypto: false, - fs: false, - os: false, - path: false, - stream: false, - timers: require.resolve('timers-browserify'), - }, - alias: { - // Alias for using source of BootstrapVue - 'bootstrap-vue$': 'bootstrap-vue/src/index.js', - }, - }, - plugins: webpackPlugins, - }, - chainWebpack: config => { - // Fix issue with duplicated deps in monorepos - // https://getpocket.com/redirect?url=https%3A%2F%2Fgithub.com%2Fwebpack%2Fwebpack%2Fissues%2F8886 - // Manually resolve each dependency - Object.keys(pkg.dependencies).forEach(dep => { - config.resolve.alias - .set(dep, path.resolve(__dirname, `./node_modules/${dep}`)); - }); - - // Fix issue with Safari cache, see https://github.com/vuejs/vue-cli/issues/2509 - if (process.env.NODE_ENV === 'development') { - config.plugins.delete('preload'); - } - - // enable optional chaining in templates - config.module - .rule('vue') - .use('vue-loader') - .tap(options => { - options.compiler = vueTemplateCompiler; - return options; - }); - }, - - devServer: { - headers: { 'Cache-Control': 'no-store' }, - proxy: { - // proxy all requests to the server at IP:PORT as specified in the top-level config - '^/api/v3': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - '^/api/v4': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - '^/stripe': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - '^/amazon': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - '^/paypal': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - '^/logout-server': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - '^/export': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - '^/analytics': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - }, - }, -}; diff --git a/website/client/webpack.webstorm.config b/website/client/webpack.webstorm.config deleted file mode 100644 index 729c3d2a88..0000000000 --- a/website/client/webpack.webstorm.config +++ /dev/null @@ -1,9 +0,0 @@ -const path = require('path'); - -module.exports = { - resolve: { - alias: { - '@': path.join(__dirname, 'src'), - } - }, -}; diff --git a/website/common/locales/bg/front.json b/website/common/locales/bg/front.json index 1ad37d8b17..19e7ba605b 100644 --- a/website/common/locales/bg/front.json +++ b/website/common/locales/bg/front.json @@ -40,7 +40,7 @@ "marketing2Lead3Title": "Предизвиквайте се взаимно", "marketing2Lead3": "Предизвикателствата Ви дават възможността да се състезавате с приятели и непознати. Който се справи най-добре, получава специални награди.", "marketing3Header": "Приложения и разширения", - "marketing3Lead1": "Приложенията за **iPhone и Андроид** Ви позволяват да се грижите за задачите си в движение. Наясно сме, че влизането в уеб сайта и натискането на бутони може би е старомодно.", + "marketing3Lead1": "Приложенията за **iPhone и Андроид** Ви позволяват да се грижите за задачите си в движение. Наясно сме, че влизането в уеб сайта и натискането на бутони може би е старомодно.", "marketing3Lead2Title": "Интеграции", "marketing3Lead2": "Други **инструменти от трети страни** свързват Хабитика с различни страни на живота Ви. Нашият ППИ предоставя лесна интеграция с неща като [разширението за Chrome](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=bg-BG), чрез което губите точки живот, ако разглеждате непродуктивни уеб сайтове, и получавате точки, когато посещавате продуктивни такива. [Вижте повече тук](http://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).", "marketing4Header": "Употреба в институции", diff --git a/website/common/locales/bg/limited.json b/website/common/locales/bg/limited.json index 1c1d8a5aa2..825ba98ddb 100644 --- a/website/common/locales/bg/limited.json +++ b/website/common/locales/bg/limited.json @@ -15,7 +15,7 @@ "valentine2": "„Розите са червени,\n\nа този стих е нещо познато.\n\nДано ти харесва,\n\nзащото струва десет злато.“", "valentine3": "„Розите са червени,\n\nледените дракони са сини.\n\nНе искам да сме разделени,\n\nа да бъда с теб още много години!“", "valentineCardAchievementTitle": "Обожаващи приятели", - "valentineCardAchievementText": "Ооо, вие и приятелите ви наистина се харесвате! Имате <%= count %> изпратени или получени картички за Св. Валентин.", + "valentineCardAchievementText": "Ооо, вие и приятелите ви наистина се харесвате! Имате <%= count %> изпратени или получени картички за Св. Валентин.", "polarBear": "Полярна мечка", "turkey": "Пуйка", "gildedTurkey": "Позлатена пуйка", diff --git a/website/common/locales/bg/questscontent.json b/website/common/locales/bg/questscontent.json index 48cd0dc3f0..f8d3c48c60 100644 --- a/website/common/locales/bg/questscontent.json +++ b/website/common/locales/bg/questscontent.json @@ -42,7 +42,7 @@ "questOctopusUnlockText": "Отключва възможността за купуване на Яйца на Октопод от пазара", "questHarpyText": "Помощ! Харпия!", "questHarpyNotes": "Смелият приключенец @UncommonCriminal е изчезнал в гората, следвайки следите на крилато чудовище, което било забелязано преди няколко дни. Докато се подготвяш да започнеш търсенето му, един ранен папагал каца на ръката ти; а през красивата му перушина се вижда грозен белег. За крака му има закачена бележка, от която разбираш, че докато защитавал папагалите, @UncommonCriminal бил хванат от зла харпия, и отчаяно се нуждае от помощта ти, за да се измъкне. Ще последваш ли птицата, за да победиш харпията и спасиш @UncommonCriminal?", - "questHarpyCompletion": "Последният удар поваля харпията; перата ѝ се разхвърчават във всички посоки. След като бързо се качваш в гнездото ѝ, намираш @UncommonCriminal, обграден с папагалски яйца. Двамата заедно бързо връщате яйцата в близките гнезда. Белязаният папагал, който те извести, изграчва силно и пуска няколко яйца в ръцете ти. „След нападението на харпията няколко яйца имат нужда от нов дом“ — обяснява @UncommonCriminal. — „Изглежда си избран за почетен папагал.“", + "questHarpyCompletion": "Последният удар поваля харпията; перата ѝ се разхвърчават във всички посоки. След като бързо се качваш в гнездото ѝ, намираш @UncommonCriminal, обграден с папагалски яйца. Двамата заедно бързо връщате яйцата в близките гнезда. Белязаният папагал, който те извести, изграчва силно и пуска няколко яйца в ръцете ти. „След нападението на харпията няколко яйца имат нужда от нов дом“ — обяснява @UncommonCriminal. — „Изглежда си избран за почетен папагал.“", "questHarpyBoss": "Харпия", "questHarpyDropParrotEgg": "Папагал (яйце)", "questHarpyUnlockText": "Отключва възможността за купуване на Яйца на папагал от Пазара", @@ -88,7 +88,7 @@ "questMoonstone2Completion": "Рецидивата залита назад след последния ти удар, и за момент сърцето ти се изпълва с надежда, но тогава тя отмята глава назад и започва да се смее ужасяващо. Какво става?", "questMoonstone2DropMoonstone3Quest": "Рецидивата, част 3: Трансформираната Рецидивата (свитък)", "questMoonstone3Text": "Рецидивата, част 3: Трансформираната Рецидивата", - "questMoonstone3Notes": "Смеейки се странно, Рецидивата пада на земята и ти я нападаш с веригата от лунни камъни. За твой ужас, Рецидивата хваща камъните, а очите ѝ горят от задоволство.

„Глупаво създание от плът!“ — изкрещява тя — „Вярно е, че тези камъни ще възвърнат земната ми форма, но не по начина, който си представяш. С появата на пълната луна в мрака, моята сила нараства, а от сенките аз призовавам призрака на твоя най-голям враг!“

Лепкава, зелена мъгла се надига от блатото, а тялото на Рецидивата се сгърчва и изкривява във форма, която те изпълва със страх — немъртвото тяло на Порока, преродено.", + "questMoonstone3Notes": "Смеейки се странно, Рецидивата пада на земята и ти я нападаш с веригата от лунни камъни. За твой ужас, Рецидивата хваща камъните, а очите ѝ горят от задоволство.

„Глупаво създание от плът!“ — изкрещява тя — „Вярно е, че тези камъни ще възвърнат земната ми форма, но не по начина, който си представяш. С появата на пълната луна в мрака, моята сила нараства, а от сенките аз призовавам призрака на твоя най-голям враг!“

Лепкава, зелена мъгла се надига от блатото, а тялото на Рецидивата се сгърчва и изкривява във форма, която те изпълва със страх — немъртвото тяло на Порока, преродено.", "questMoonstone3Completion": "Дъхът ти е учестен и пот щипе очите ти, докато немъртвия змей се сгромолясва на земята. Останките от Рецидивата се разпръскват под формата на рядка, сива мъгла, която бързо се разнася от полъха на свеж вятър. Чуваш отдалечените, възторжени възгласи на хабитиканците, побеждаващи лошите си навици веднъж и завинаги.

@Baconsaur, господарят на зверовете, се спуска към теб от небето с грифона си: „Видях победата ти от горе и бях впечатлен. Моля те, вземи тази вълшебна туника — смелостта ти показва, че сърцето ти е благородно, и вярвам, че тя трябва да бъде твоя.“", "questMoonstone3Boss": "Некро-порок", "questMoonstone3DropRottenMeat": "Развалено месо (храна)", @@ -211,7 +211,7 @@ "questSlimeDropSlimeEgg": "Белоружена слуз (яйце)", "questSlimeUnlockText": "Отключва възможността за купуване на яйца на белоружена слуз от пазара.", "questSheepText": "Гръмотевичният овен", - "questSheepNotes": "Докато се разхождаш с няколко приятели из провинцията на Задачия, „поемайки си дъх“ от задълженията, откривате приятен малък магазин за прежди. Толкова сте погълнати от размотаването си, че едва забелязвате застрашителните облаци, събиращи се на хоризонта. „Имам лооошо чувство за времето.“ — промърморва @Misceo и ти поглеждаш нагоре. Буреносните облаци се завихрят и започват да приличат на… „Няма време да зяпаме облаците!“ — крещи @starsystemic — „То ни напада!“ Гръмотевичният овен се втурва напред, хвърляйки светкавици към теб!", + "questSheepNotes": "Докато се разхождаш с няколко приятели из провинцията на Задачия, „поемайки си дъх“ от задълженията, откривате приятен малък магазин за прежди. Толкова сте погълнати от размотаването си, че едва забелязвате застрашителните облаци, събиращи се на хоризонта. „Имам лооошо чувство за времето.“ — промърморва @Misceo и ти поглеждаш нагоре. Буреносните облаци се завихрят и започват да приличат на… „Няма време да зяпаме облаците!“ — крещи @starsystemic — „То ни напада!“ Гръмотевичният овен се втурва напред, хвърляйки светкавици към теб!", "questSheepBoss": "Гръмотевичен овен", "questSheepCompletion": "Впечатлен от старанието ти, гръмотевичният овен укротява яростта си. Той насочва три огромни ледени къса към теб, а след това изчезва с приглушен тътен. След като ги оглеждаш внимателно, откриваш, че ледените късове всъщност са три пухкави яйца. Прибираш ги, а след това се отправяш към вкъщи под синьото небе.", "questSheepDropSheepEgg": "Овца (яйце)", @@ -265,7 +265,7 @@ "questHorseDropHorseEgg": "Кон (яйце)", "questHorseUnlockText": "Отключва възможността за купуване на яйца на кон от пазара.", "questBurnoutText": "Умората и духовете на изтощението", - "questBurnoutNotes": "Минава полунощ, а въздухът е още задушливо горещ и застоял, когато Redphoenix и капитанът на разузнавачите Kiwibot внезапно нахлуват през портите на града: „Трябва да евакуираме всички дървени сгради!“ — крещи Redphoenix — „По-бързо!“

Kiwibot се подпира на стената, докато се опитва да си поеме дъх: „Тя изсмуква силите на хората и ги превръща в Духове на изтощението! Затова всичко се бави. Ето къде са изчезнали всички . Тя краде енергията им!“

„Тя?“ — пита Lemoness.

В този момент жегата придобива физическа форма.

Тя се надига от земята във вихър от пръст, а въздухът се изпълва с миризма на пушек и сяра. Пламъци се спускат към разтопената земя и се превръщат в крайници, огъващи се във въздуха. Огнени очи се отварят изведнъж и чудовището издава дълбок грачещ звук.

Kiwibot прошепва само една дума:

„Умората.“", + "questBurnoutNotes": "Минава полунощ, а въздухът е още задушливо горещ и застоял, когато Redphoenix и капитанът на разузнавачите Kiwibot внезапно нахлуват през портите на града: „Трябва да евакуираме всички дървени сгради!“ — крещи Redphoenix — „По-бързо!“

Kiwibot се подпира на стената, докато се опитва да си поеме дъх: „Тя изсмуква силите на хората и ги превръща в Духове на изтощението! Затова всичко се бави. Ето къде са изчезнали всички . Тя краде енергията им!“

„Тя?“ — пита Lemoness.

В този момент жегата придобива физическа форма.

Тя се надига от земята във вихър от пръст, а въздухът се изпълва с миризма на пушек и сяра. Пламъци се спускат към разтопената земя и се превръщат в крайници, огъващи се във въздуха. Огнени очи се отварят изведнъж и чудовището издава дълбок грачещ звук.

Kiwibot прошепва само една дума:

„Умората.“", "questBurnoutCompletion": "Умората е ПОБЕДЕНА!

С дълбока, но мека въздишка, Умората бавно освобождава изгарящата енергия, захранваща пламъците ѝ. Докато чудовището се превръща в пепел и разнася наоколо, откраднатата от него енергия се разпръсква из въздуха, възстановяваща духовете на изтощението и връщайки истинската им форма.

Иън, Даниел и Сезонната Магьосница се радват на хабитиканците, идващи да ги поздравят, а всички липсващи жители на Цветущите поля се прегръщат с приятелите и семействата си. Последният дух на изтощението се превръща в самата Весела Жетварка!

„Виж“ — прошепва @Baconsaur, когато пепелта започва да блести. Бавно, от пепелта се появяват стотици светещи феникси!

Една от блестящите птици кацва на скелетната ръка на Веселата Жетварка, а тя се усмихва към нея: „Мина доста време от последния път, когато имах невероятната чест да държа в ръцете си феникс от Цветущите поля“ — проговаря тя. — „Въпреки че, ако се имат предвид последните събития, бих казала, че това е съвсем нормално!“

Гласът ѝ става по-сериозен, но усмивката ѝ (очаквано) остава: „Всички ни познават като трудолюбиви, но освен това, ние знаем как да се веселим и празнуваме. Някак иронично, докато усърдно планирахме огромно празненство, забравихме да си позволим малко време за забавление. Определено няма да повторим тази грешка!“

Тя плясва с ръце — „А сега — да празнуваме!“", "questBurnoutCompletionChat": "`Умората е ПОБЕДЕНА!`\n\nС дълбока, но мека въздишка, Умората бавно освобождава изгарящата енергия, захранваща пламъците ѝ. Докато чудовището се превръща в пепел и разнася наоколо, откраднатата от него енергия се разпръсква из въздуха, възстановяваща духовете на изтощението и връщайки истинската им форма.\n\nИън, Даниел и Сезонната Магьосница се радват на хабитиканците, идващи да ги поздравят, а всички липсващи жители на Цветущите поля се прегръщат с приятелите и семействата си. Последният дух на изтощението се превръща в самата Весела Жетварка!\n\n„Виж“ — прошепва @Baconsaur, когато пепелта започва да блести. Бавно, от пепелта се появяват стотици светещи феникси!\n\nЕдна от блестящите птици кацва на скелетната ръка на Веселата Жетварка, а тя се усмихва към нея: „Мина доста време от последния път, когато имах невероятната чест да държа в ръцете си феникс от Цветущите поля“ — проговаря тя. — „Въпреки че, ако се имат предвид последните събития, бих казала, че това е съвсем нормално!“\n\nГласът ѝ става по-сериозен, но усмивката ѝ (очаквано) остава: „Всички ни познават като трудолюбиви, но освен това, ние знаем как да се веселим и празнуваме. Някак иронично, докато усърдно планирахме огромно празненство, забравихме да си позволим малко време за забавление. Определено няма да повторим тази грешка!“\n\nТя плясва с ръце — „А сега — да празнуваме!“\n\nВсички хабитиканци получават:\n\nЛюбимец феникс\nПревоз феникс\nПостижението: Спасител на Цветущите поля\nОбикновен бонбон\nВанилов бонбон\nПясъчен бонбон\nКанелен бонбон\nШоколадов бонбон\nРазвален бонбон\nКисел розов бонбон\nКисел син бонбон\nМеден бонбон", "questBurnoutBoss": "Умората", @@ -313,7 +313,7 @@ "questSnailDropSnailEgg": "Охлюв (яйце)", "questSnailUnlockText": "Отключва възможността за купуване на яйца на охлюв от пазара.", "questBewilderText": "Озадачителят", - "questBewilderNotes": "Празненството започва като всяко друго.

Мезетата са отлични, музиката е прекрасна и дори танцуващите слонове са някак на място. Хабитиканците пеят и се веселят сред пищната растителна украса, наслаждавайки се на кратката почивка от неприятните си задачи, а Първоаприлският шегаджия се мотае между тях, правейки шегички и фокуси.

Когато часовниковата кула на Мъглоград удря полунощ, Първоъприлският шегаджия скача на сцената и подхваща реч:

„Приятели! Врагове! Случайни познайници! Дайте ми ушите си.“ — всички се разсмиват, когато на главите им израстват животински уши и започват да се оглеждат един друг.

„Както знаете“ — продължава шегаджията, — „фокусите ми обикновено траят само ден. Но с радост Ви съобщавам, че открих по-лесен начин да си осигурим постоянно забавление, без да трябва да понасяме тежестта на неспирните си задължения. Скъпи хабитиканци, посрещнете моя вълшебен приятел… Озадачителя!“

Lemoness внезапно пребледнява и изпуска ордьовъра си. „Чакайте! Не вярвайте…“

Но изведнъж в стаята започва да навлиза мъгла, светеща и гъста, която се завихря около Първоаприлския шегаджия и започва да формира мъгляви пера и удължен врат. Тълпата е безмълвна; пред погледите на всички се образува чудовищна птица със светещи, призрачни крила, която избухва в ужасяващ, писклив смях:

„О, от векове не е имало толкова глупав хабитиканец, който да ме призове! Колко прекрасно е чувството най-после да имам истинска форма!“

Ужасени, вълшебните пчели на Мъглоград напускат летящия град, реещ се в небето. Едно по едно, прекрасните пролетни цветя повяхват и изчезват.

„Скъпи мои приятели, защо сте толкова уплашени?“ — изграчва Озадачителят, пляскайки с криле — „Вече няма нужда да се трудите за наградите си. Аз мога да ви дам всичко, което пожелаете!“

От небето се изсипва дъжд от монети, които се удрят в земята със страшна сила, а тълпата започва да пищи и се разбягва, за да намери подслон. „Това някаква шега ли е?“ — изкрещява Baconsaur, когато златота започва да чупи прозорците и да пробива покривите.

PainterProphet заляга, когато започват да удрят светкавици, а мъгла закрива слънцето. — „Не, този път мисля, че не е!“

Бързо, хабитиканци, нека не позволяваме на този световен главатар да ни разсее от целите ни! Концентрирайте се върху задачите, които трябва да изпълните, за да можем да спасим Мъглоград… както и себе си.", + "questBewilderNotes": "Празненството започва като всяко друго.

Мезетата са отлични, музиката е прекрасна и дори танцуващите слонове са някак на място. Хабитиканците пеят и се веселят сред пищната растителна украса, наслаждавайки се на кратката почивка от неприятните си задачи, а Първоаприлският шегаджия се мотае между тях, правейки шегички и фокуси.

Когато часовниковата кула на Мъглоград удря полунощ, Първоъприлският шегаджия скача на сцената и подхваща реч:

„Приятели! Врагове! Случайни познайници! Дайте ми ушите си.“ — всички се разсмиват, когато на главите им израстват животински уши и започват да се оглеждат един друг.

„Както знаете“ — продължава шегаджията, — „фокусите ми обикновено траят само ден. Но с радост Ви съобщавам, че открих по-лесен начин да си осигурим постоянно забавление, без да трябва да понасяме тежестта на неспирните си задължения. Скъпи хабитиканци, посрещнете моя вълшебен приятел… Озадачителя!“

Lemoness внезапно пребледнява и изпуска ордьовъра си. „Чакайте! Не вярвайте…“

Но изведнъж в стаята започва да навлиза мъгла, светеща и гъста, която се завихря около Първоаприлския шегаджия и започва да формира мъгляви пера и удължен врат. Тълпата е безмълвна; пред погледите на всички се образува чудовищна птица със светещи, призрачни крила, която избухва в ужасяващ, писклив смях:

„О, от векове не е имало толкова глупав хабитиканец, който да ме призове! Колко прекрасно е чувството най-после да имам истинска форма!“

Ужасени, вълшебните пчели на Мъглоград напускат летящия град, реещ се в небето. Едно по едно, прекрасните пролетни цветя повяхват и изчезват.

„Скъпи мои приятели, защо сте толкова уплашени?“ — изграчва Озадачителят, пляскайки с криле — „Вече няма нужда да се трудите за наградите си. Аз мога да ви дам всичко, което пожелаете!“

От небето се изсипва дъжд от монети, които се удрят в земята със страшна сила, а тълпата започва да пищи и се разбягва, за да намери подслон. „Това някаква шега ли е?“ — изкрещява Baconsaur, когато златота започва да чупи прозорците и да пробива покривите.

PainterProphet заляга, когато започват да удрят светкавици, а мъгла закрива слънцето. — „Не, този път мисля, че не е!“

Бързо, хабитиканци, нека не позволяваме на този световен главатар да ни разсее от целите ни! Концентрирайте се върху задачите, които трябва да изпълните, за да можем да спасим Мъглоград… както и себе си.", "questBewilderCompletion": "Озадачителят е ПОБЕДЕН!

Успяхме! Озадачителят изревава и се завърта във въздуха, разпръсквайки перата си като силен дъжд. Бавно и постепенно, той се превръща в ефирна, искряща мъгла. Открилото се отново слънце пробива мъглата и прогаря всичко лошо, откривайки кашлящите, човешки форми на Бейли, Мат, Алекс… и самия Първоаприлски шегаджия.

Мъглоград е спасен!

Първоаприлският шегаджия е достатъчно засрамен, че да се прави на полу-заспал: „О, хм“ — казва той, — може би малко се… отнесох.“

Тълпата започва да недоволства. По тротоарите има донесени от водата подгизнали цветя. Някъде в далечината с грандиозен трясък се срутва покрив.

„Ами, да“ — казва Първоаприлският шегаджия, — „това… което исках да кажа, е че ужасно съжалявам.“ — той въздъхва — „Предполагам, че човек не може само да се забавлява. Не е лошо понякога да се концентрирам. Може би ще започна отрано със шегите за следващата година.“

Redphoenix се изкашля нарочно.

„Исках да кажа, че ще започна отрано тазгодишното пролетно почистване!“ — поправя се Първоаприлският шегаджия — „Не се притеснявайте, за нула време ще почистя Хабитград. За щастие никой не е по-добър от мен в размахването на две метли.“

Окуражени, всички се връщат към нормалния си живот.

Много скоро всичко в Хабитград отново е нормално. Освен това, след като Озадачителят е унищожен, вълшебните пчели на Мъглоград се връщат на работа и много скоро цветята разцъфват и градът отново се носи над водата.

Докато хабитиканците прегръщат жужащите вълшебни пчели, очите на Първоаприлския шегаджия светват: „О, дойде ми една идея! Защо не задържите някои от тези пчели като любимци и превози? Това е подарък, който идеално изразява равновесието между усърдната работа и сладките награди, ако трябва да се изразя скучно.“ — намигва той — „Освен това, те нямат жила! Честна шегаджийска дума.“", "questBewilderCompletionChat": "`Озадачителят е ПОБЕДЕН!`\n\nУспяхме! Озадачителят изревава и се завърта във въздуха, разпръсквайки перата си като силен дъжд. Бавно и постепенно, той се превръща в ефирна, искряща мъгла. Открилото се отново слънце пробива мъглата и прогаря всичко лошо, откривайки кашлящите, човешки форми на Бейли, Мат, Алекс… и самия Първоаприлски шегаджия.\n\n`Мъглоград е спасен!`\n\nПървоаприлският шегаджия е достатъчно засрамен, че да се прави на полу-заспал: „О, хм“ — казва той, — може би малко се… отнесох.“\n\nТълпата започва да недоволства. По тротоарите има донесени от водата подгизнали цветя. Някъде в далечината с грандиозен трясък се срутва покрив.\n\n„Ами, да“ — казва Първоаприлският шегаджия, — „това… което исках да кажа, е че ужасно съжалявам.“ — той въздъхва — „Предполагам, че човек не може само да се забавлява. Не е лошо понякога да се концентрирам. Може би ще започна отрано със шегите за следващата година.“\n\nRedphoenix се изкашля нарочно.\n\n„Исках да кажа, че ще започна отрано тазгодишното пролетно почистване!“ — поправя се Първоаприлският шегаджия — „Не се притеснявайте, за нула време ще почистя Хабитград. За щастие никой не е по-добър от мен в размахването на две метли.“\n\nОкуражени, всички се връщат към нормалния си живот.\n\nМного скоро всичко в Хабитград отново е нормално. Освен това, след като Озадачителят е унищожен, вълшебните пчели на Мъглоград се връщат на работа и много скоро цветята разцъфват и градът отново се носи над водата.\n\nДокато хабитиканците прегръщат жужащите вълшебни пчели, очите на Първоаприлския шегаджия светват: „О, дойде ми една идея! Защо не задържите някои от тези пчели като любимци и превози? Това е подарък, който идеално изразява равновесието между усърдната работа и сладките награди, ако трябва да се изразя скучно.“ — намигва той — „Освен това, те нямат жила! Честна шегаджийска дума.“", "questBewilderBossRageTitle": "Разсейващ удар", @@ -442,7 +442,7 @@ "questStoikalmCalamity1DropDesertPotion": "Пустинна излюпваща отвара", "questStoikalmCalamity1DropArmor": "Броня на мамутоездач", "questStoikalmCalamity2Text": "Споколандското бедствие, част 2: Търсенето на ледените пещери", - "questStoikalmCalamity2Notes": "Величествената зала на ездачите на мамути е неприветлив архитектурен шедьовър, но е също така и съвсем празна. Няма никакви мебели, липсват и оръжията, и дори по колоните няма никакви украси.

„Черепите пометоха всичко“ — казва лейди Глетчер, а гласът ѝ напомня надигаща се буря. — „Унизително! Да не съм чула някой да казва за това на Първоаприлския шегаджия, защото няма да отговарям за действията си!“

„Колко загадъчно!“ — казва @Beffymaroo — „Но те къде…“

„Пещерите на ледения дракон“ — лейди Глетчер посочва някакви блещукащи монети, разпилени по снега отвън. — „Небрежна работа.“

„Но ледените дракони не са ли честни създания с предостатъчни количества собствени съкровища?“ — пита @Beffymaroo — „Защо биха…“

„Контрол над съзнанието“ — казва лейди Глетчер, съвсем спокойно, — „или нещо също толкова мелодраматично и неприятно.“ — Тя тръгва към изхода на залата. — „Какво чакате?“

Бързо, трябва да последвате следата на ледените монети!", + "questStoikalmCalamity2Notes": "Величествената зала на ездачите на мамути е неприветлив архитектурен шедьовър, но е също така и съвсем празна. Няма никакви мебели, липсват и оръжията, и дори по колоните няма никакви украси.

„Черепите пометоха всичко“ — казва лейди Глетчер, а гласът ѝ напомня надигаща се буря. — „Унизително! Да не съм чула някой да казва за това на Първоаприлския шегаджия, защото няма да отговарям за действията си!“

„Колко загадъчно!“ — казва @Beffymaroo — „Но те къде…“

„Пещерите на ледения дракон“ — лейди Глетчер посочва някакви блещукащи монети, разпилени по снега отвън. — „Небрежна работа.“

„Но ледените дракони не са ли честни създания с предостатъчни количества собствени съкровища?“ — пита @Beffymaroo — „Защо биха…“

„Контрол над съзнанието“ — казва лейди Глетчер, съвсем спокойно, — „или нещо също толкова мелодраматично и неприятно.“ — Тя тръгва към изхода на залата. — „Какво чакате?“

Бързо, трябва да последвате следата на ледените монети!", "questStoikalmCalamity2Completion": "Ледените монети ви отвеждат до заровения вход на добре прикрита пещера. Въпреки че времето навън е спокойно и приятно, а слънчевите лъчи блестят по снежната покривка, вътре има страшно течение, като пронизващ леден вятър. Лейди Глетчер прави гримаса и ти подава шлем на мамутоездач: „Сложи си това“ — казва тя, — „ще ти трябва.“", "questStoikalmCalamity2CollectIcicleCoins": "Ледени монети", "questStoikalmCalamity2DropHeadgear": "Шлем на мамутоездач (защита за главата)", @@ -460,7 +460,7 @@ "questGuineaPigDropGuineaPigEgg": "Морско свинче (яйце)", "questGuineaPigUnlockText": "Отключва възможността за купуване на яйца на морско свинче от пазара.", "questPeacockText": "Паунът Бутни-Дръпни", - "questPeacockNotes": "Правейки поредния си тежък преход през Задачев лес, ти се чудиш коя от съблазнителните си нови цели трябва да преследваш първо. Навлизайки все по-навътре в гората, осъзнаваш, че не си сам в нерешителността си. „Мога да изучавам нов език, или да започна да тренирам…“ — мърмори си @Cecily Perez. — „Може да спя повече“ — размишлява на глас @Lilith of Alfheim, — „или да прекарвам повече време с приятелите си…“. Изглежда @PainterProphet, @Pfeffernusse и @Draayder са озадачени от огромния брой възможности.

Осъзнаваш, че тези все по-натрапчиви чувства не са твои собствени… паднал си право в капана на пагубния паун Бутни-Дръпни! Преди да успееш да избягаш, той изскача от храстите. Всяка от главите му те тегли в различни посоки и започваш да усещаш как те обзема невероятна умора. Не можеш да победиш и двамата противници едновременно, така че имаш само един избор — да се концентрираш върху най-близката задача, за да отвърнеш!", + "questPeacockNotes": "Правейки поредния си тежък преход през Задачев лес, ти се чудиш коя от съблазнителните си нови цели трябва да преследваш първо. Навлизайки все по-навътре в гората, осъзнаваш, че не си сам в нерешителността си. „Мога да изучавам нов език, или да започна да тренирам…“ — мърмори си @Cecily Perez. — „Може да спя повече“ — размишлява на глас @Lilith of Alfheim, — „или да прекарвам повече време с приятелите си…“. Изглежда @PainterProphet, @Pfeffernusse и @Draayder са озадачени от огромния брой възможности.

Осъзнаваш, че тези все по-натрапчиви чувства не са твои собствени… паднал си право в капана на пагубния паун Бутни-Дръпни! Преди да успееш да избягаш, той изскача от храстите. Всяка от главите му те тегли в различни посоки и започваш да усещаш как те обзема невероятна умора. Не можеш да победиш и двамата противници едновременно, така че имаш само един избор — да се концентрираш върху най-близката задача, за да отвърнеш!", "questPeacockCompletion": "Изненадваш пауна Бутни-Дръпни с неочакваната си решителност. Победен от концентрираното си мислене, той слива главите си в една, превръщайки се в най-красивото същество, което някога си виждал. „Благодаря ти“ — казва паунът, — „толкова дълго се разкъсвах в различни посоки, че вече бях забравил какво искам всъщност. Моля, приеми тези яйца като знак за благодарността ми.“", "questPeacockBoss": "Паунът Бутни-Дръпни", "questPeacockDropPeacockEgg": "Паун (яйце)", @@ -488,7 +488,7 @@ "questMayhemMistiflying2CollectRedMistiflies": "Червени мъгливи пеперуди", "questMayhemMistiflying2CollectBlueMistiflies": "Сини мъгливи пеперуди", "questMayhemMistiflying2CollectGreenMistiflies": "Зелени мъгливи пеперуди", - "questMayhemMistiflying2DropHeadgear": "Качулка на закачливия куриер с цветовете на дъгата (защита за главата)", + "questMayhemMistiflying2DropHeadgear": "Качулка на закачливия куриер с цветовете на дъгата (защита за главата)", "questMayhemMistiflying3Text": "Хаос в Мъглоград, част 3: В която един пощальон е много груб", "questMayhemMistiflying3Notes": "Мъгливите пеперуди се въртят толкова изкусно из торнадото, че е много трудно да бъдат забелязани. Присвивайки очи, забелязваш многокрил силует, реещ се в средата на ущасяващия вихър.

„О!“ — възкликва Първоаприлският шегаджия, който за малко да бъде повален от вятъра. — „Изглежда Вятърчо е бил обладан. Много неприятно. Може да се случи на всекиго.“

„Майсторът на вятъра!“ — изкрещява към теб @Beffymaroo. — „Той е най-талантливият вълшебник-куриер на Мъглоград, тъй като е много добър в заклинанията, влияещи на времето. Обикновено е много мил пощальон!“

Сякаш за да опровергае това, майсторът на вятъра изкрещява бясно, при което бурята така ви връхлита, че въпреки вълшебната си мантия, едва успяваш да се задържиш върху превоза си.

„Тази неприятна маска е нова,“ — отбелязва Първоаприлският шегаджия. — „Може би трябва да му я свалите?““

Това е добра идея… но разяреният вълшебник няма да я даде без бой.", "questMayhemMistiflying3Completion": "Тъкмо когато си мислиш, че няма да издържиш нито секунда повече на вятъра, успяваш да откачиш маската от лицето на майстора на вятъра. Торнадото изведнъж спира, оставяйки само лек ветрец и слънчеви лъчи след себе си. Майсторът на вятъра се оглежда учуден. — „Къде отиде тя?“

„Коя?“ — пита приятелят ти @khdarkwolf.

„Онази приятна жена, която искаше да ми предаде пратка. Тзина.“ — Когато оглежда одуханият град по себе си, лицето му помръква. — „Е, може би не беше толкова приятна.“

Първоаприлският шегаджия го потупва по гърба, а след това ти подава две блещукащи писма. — „Ето. Защо не оставиш този приятел малко да си почине, и не се погрижиш за пощата? Чух, че магията в тези пликове ще си заслужава усилията.“", @@ -606,7 +606,7 @@ "aquaticAmigosText": "Пакет мисии „Водни дружки“", "aquaticAmigosNotes": "Съдържа: „Вълшебният саламандър“, „Кракенът на незавършеността“ и „Зовът на Октотулу“. Наличен до 30 юни.", "questSeaSerpentText": "Опасност в дълбините: Нападението на морския змей!", - "questSeaSerpentNotes": "С всичките си серии се чувстваш като късметлия – и сега е идеално време за посещение на хиподрума за морски кончета. Качваш се на подводницата от пристанище Усърдие и се настаняваш удобно за пътуването до Мудноград, но едва се потапяте, когато нещо удря подводницата и запраща всички пътници на пода. „Какво става“ — крещи @AriesFaries?

Поглеждаш през близкия люк и ужас виждаш как покрай него преминава стена от блестящи люспи. „Морски змей“ — обявява капитан @Witticaster по вътрешното радио! — „Пригответе се, връща се!“ Сграбчвайки подлакътниците на седалката си, виждаш незавършените си задачи да преминават пред погледа ти. „Може би, ако работим заедно и ги завършим“, мислиш си, „ще прогоним чудовището!“", + "questSeaSerpentNotes": "С всичките си серии се чувстваш като късметлия – и сега е идеално време за посещение на хиподрума за морски кончета. Качваш се на подводницата от пристанище Усърдие и се настаняваш удобно за пътуването до Мудноград, но едва се потапяте, когато нещо удря подводницата и запраща всички пътници на пода. „Какво става“ — крещи @AriesFaries?

Поглеждаш през близкия люк и ужас виждаш как покрай него преминава стена от блестящи люспи. „Морски змей“ — обявява капитан @Witticaster по вътрешното радио! — „Пригответе се, връща се!“ Сграбчвайки подлакътниците на седалката си, виждаш незавършените си задачи да преминават пред погледа ти. „Може би, ако работим заедно и ги завършим“, мислиш си, „ще прогоним чудовището!“", "questSeaSerpentCompletion": "Сломен от усърдието ви, морският змей отстъпва и изчезва в дълбините. Когато пристигаш в Мудноград, най-после си отдъхваш, и забелязваш, че @*~Seraphina~ се приближава с три яйца. „Ето, вземи ги“ — казва тя. — „Явно знаеш как да се оправяш с морските змейове!“ Когато вземаш яйцата, отново се заричаш да бъдеш по-сериозен със задачите си, за да не се повтори тази случка.", "questSeaSerpentBoss": "Могъщият морски змей", "questSeaSerpentDropSeaSerpentEgg": "Морски змей (яйце)", diff --git a/website/common/locales/bg/settings.json b/website/common/locales/bg/settings.json index a9e0941a9a..cff5680a47 100644 --- a/website/common/locales/bg/settings.json +++ b/website/common/locales/bg/settings.json @@ -30,9 +30,9 @@ "xml": "(XML)", "json": "(JSON)", "customDayStart": "Персонализирано начало на деня", - "sureChangeCustomDayStartTime": "Наистина ли искате да промените персонализираното начало на деня си? Ежедневните Ви задачи ще бъдат подновени при първото влизане в Хабитика след <%= time %>. Уверете се, че сте изпълнили ежедневните си задачи преди това време!", + "sureChangeCustomDayStartTime": "Наистина ли искате да промените персонализираното начало на деня си? Ежедневните Ви задачи ще бъдат подновени при първото влизане в Хабитика след <%= time %>. Уверете се, че сте изпълнили ежедневните си задачи преди това време!", "customDayStartHasChanged": "Вашето персонализирано начало на деня беше променено.", - "nextCron": "Ежедневните Ви задачи ще бъдат подновени при първото влизане в Хабитика след <%= time %>. Уверете се, че сте изпълнили ежедневните си задачи преди това!", + "nextCron": "Ежедневните Ви задачи ще бъдат подновени при първото влизане в Хабитика след <%= time %>. Уверете се, че сте изпълнили ежедневните си задачи преди това!", "customDayStartInfo1": "По подразбиране Хабитика проверява и нулира ежедневните Ви задачи в полунощ Ваше време, всеки ден. Можете да промените това време тук.", "misc": "Разни", "showHeader": "Показване на горната част", @@ -55,7 +55,6 @@ "APIToken": "Жетон за ППИ (Това е на практика парола — вижте предупреждението по-горе!)", "showAPIToken": "Показване на жетона за ППИ", "hideAPIToken": "Скриване на жетона за ППИ", - "APITokenWarning": "Ако Ви трябва нов жетон за ППИ (ако например старият Ви вече не е таен), пишете на <%= hrefTechAssistanceEmail %>, посочвайки потребителския си идентификатор и текущия си жетон. След като той бъде подновен, ще трябва отново да разрешите достъпа на всичко, което сте използвали, като излезете от профила си в уеб сайта и мобилното приложение, и след това въведете новия си жетон във всички инструменти за Хабитика, които използвате.", "thirdPartyApps": "Външни приложения", "resetDo": "Потвърждавам, нулирайте профила ми!", "resetComplete": "Нулирането е завършено!", diff --git a/website/common/locales/cs/faq.json b/website/common/locales/cs/faq.json index 1f18a35526..ddf94439dd 100644 --- a/website/common/locales/cs/faq.json +++ b/website/common/locales/cs/faq.json @@ -9,7 +9,7 @@ "commonQuestions": "Časté otázky", "faqQuestion25": "Jaké různé úkoly existují?", "faqQuestion26": "Jaké úkoly mohu například vytvořit?", - "webFaqAnswer28": "Jistě! Tlačítko \"Pozastavit Škody\" je k nalezení v nastavení. Tak můžež zabránit ztrátě bodů za promeškané denní úkoly. To je užitečné např. na dovolené, pokud sipotřebuješ odpočinout nebo musíš z jiného důvodu udělat přestávku v plnění denních úkolů. Pokud se právě nacházíš na výpravě se svou družinou, tvůj zásah proti nepříteli se pozastaví, ale stále můžeš být vystaven zranění, pokud ostatní členové družiny neplní své úkoly. \n\nPokud chceš pozastavit pouze některé úkoly, můžeš je upravit, tak že se opakují v 0 dnech a ponechat je v aplikaci, dokud nebudeš připraven je začít znovu plnit.", + "webFaqAnswer28": "Jistě! Tlačítko \"Pozastavit Škody\" je k nalezení v nastavení. Tak můžež zabránit ztrátě bodů za promeškané denní úkoly. To je užitečné např. na dovolené, pokud sipotřebuješ odpočinout nebo musíš z jiného důvodu udělat přestávku v plnění denních úkolů. Pokud se právě nacházíš na výpravě se svou družinou, tvůj zásah proti nepříteli se pozastaví, ale stále můžeš být vystaven zranění, pokud ostatní členové družiny neplní své úkoly. \n\nPokud chceš pozastavit pouze některé úkoly, můžeš je upravit, tak že se opakují v 0 dnech a ponechat je v aplikaci, dokud nebudeš připraven je začít znovu plnit.", "faqQuestion29": "Jak získám zpět Zdraví?", "webFaqAnswer29": "Můžeš získat 15 bodů zdraví zakoupením Lektvaru zdraví ze sloupce Odměny za 25 zlaťáků. Navíc, pokud postoupíš do další úrovně, tak se ti všechno zdraví automaticky obnoví!", "faqQuestion30": "Co se stane, když mi dojde zdraví?", diff --git a/website/common/locales/cs/front.json b/website/common/locales/cs/front.json index 3a9b22ebb5..ce27538702 100644 --- a/website/common/locales/cs/front.json +++ b/website/common/locales/cs/front.json @@ -66,7 +66,7 @@ "pkQuestion3": "Why did you add social features?", "pkAnswer3": "Social pressure is a huge motivating factor for a lot of people, so we knew that we wanted to have a strong community that would hold each other accountable for their goals and cheer for their successes. Luckily, one of the things that multiplayer video games do best is foster a sense of community among their users! Habitica’s community structure borrows from these types of games; you can form a small Party of close friends, but you can also join a larger, shared-interest groups known as a Guild. Although some users choose to play solo, most decide to form a support network that encourages social accountability through features such as Quests, where Party members pool their productivity to battle monsters together.", "pkQuestion4": "Why does skipping tasks remove your avatar’s health?", - "pkAnswer4": "If you skip one of your daily goals, your avatar will lose health the following day. This serves as an important motivating factor to encourage people to follow through with their goals because people really hate hurting their little avatar! Plus, the social accountability is critical for a lot of people: if you’re fighting a monster with your friends, skipping your tasks hurts their avatars, too.", + "pkAnswer4": "If you skip one of your daily goals, your avatar will lose health the following day. This serves as an important motivating factor to encourage people to follow through with their goals because people really hate hurting their little avatar! Plus, the social accountability is critical for a lot of people: if you’re fighting a monster with your friends, skipping your tasks hurts their avatars, too.", "pkQuestion5": "What distinguishes Habitica from other gamification programs?", "pkAnswer5": "One of the ways that Habitica has been most successful at using gamification is that we've put a lot of effort into thinking about the game aspects to ensure that they are actually fun. We've also included many social components, because we feel that some of the most motivating games let you play with friends, and because research has shown that it's easier to form habits when you have accountability to other people.", "pkQuestion6": "Who is the typical user of Habitica?", diff --git a/website/common/locales/cs/gear.json b/website/common/locales/cs/gear.json index 417a28ecba..db714acf00 100644 --- a/website/common/locales/cs/gear.json +++ b/website/common/locales/cs/gear.json @@ -522,7 +522,7 @@ "armorSpecialSummer2015MageText": "Věštecké roucho", "armorSpecialSummer2015MageNotes": "Moc se skrývá v nadýchaných rukávech. Zvyšuje Inteligenci o <%= int %>. Limitovaná edice letní výbavy 2015.", "armorSpecialSummer2015HealerText": "Námořníkovo brnění", - "armorSpecialSummer2015HealerNotes": "Toto brnění dává všem najevo, že jsi čestný námořní kupec, který by se nikdy nechoval jako křivák. Zvyšuje Obranu o <%= con %>. Limitovaná edice letní výbavy 2015.", + "armorSpecialSummer2015HealerNotes": "Toto brnění dává všem najevo, že jsi čestný námořní kupec, který by se nikdy nechoval jako křivák. Zvyšuje Obranu o <%= con %>. Limitovaná edice letní výbavy 2015.", "armorSpecialFall2015RogueText": "Netopýří brnění", "armorSpecialFall2015RogueNotes": "Odleť do bitvy. Zvyšuje Vnímání o <%= per %>. Limitovaná edice podzimní výbavy 2015.", "armorSpecialFall2015WarriorText": "Strašákovo brnění", @@ -538,7 +538,7 @@ "armorSpecialWinter2016MageText": "Snowboarďácká větrovka", "armorSpecialWinter2016MageNotes": "Ten nejmoudřejší z čarodějů je v zimě pořádně zachumlaný. Zvyšuje Inteligenci o <%= int %>. Limitovaná edice zimní výbavy 2015-2016.", "armorSpecialWinter2016HealerText": "Sváteční vílí plášť", - "armorSpecialWinter2016HealerNotes": "Sváteční víly se halí do svých křídel, aby se chránily, zatímco po zemi Habitica létají pomocí křídel na hlavě rychlostí až 160km/h, doručují dárky a házejí na lidi konfety. Jak vtipné. Zvyšuje Obranu o <%= con %>. Limitovaná edice zimní výbavy 2015-2016.", + "armorSpecialWinter2016HealerNotes": "Sváteční víly se halí do svých křídel, aby se chránily, zatímco po zemi Habitica létají pomocí křídel na hlavě rychlostí až 160km/h, doručují dárky a házejí na lidi konfety. Jak vtipné. Zvyšuje Obranu o <%= con %>. Limitovaná edice zimní výbavy 2015-2016.", "armorSpecialSpring2016RogueText": "Maskáčový oblek", "armorSpecialSpring2016RogueNotes": "Chytré štěně ví, že si má vybrat jasnější převlek pro to aby se skryl, když je vše zelené a zvučné. Zvyšuje vnímání o <%= per %>. Limitované edice Jarní výbavy 2016.", "armorSpecialSpring2016WarriorText": "Mocné brnění", @@ -660,7 +660,7 @@ "armorMystery201504Text": "Oděv pilné včelky", "armorMystery201504Notes": "V tomto okouzlujícím oděvu budeš produktivní jako pilná včelka! Nepřináší žádný benefit. Předmět pro předplatitele Duben 2015.", "armorMystery201506Text": "Neopren na šnorchlování", - "armorMystery201506Notes": "Zašnorchluj si u korálového útesu v tomto zářivě barevném úboru! Nepřináší žádný benefit. Předmět pro předplatitele červen 2015.", + "armorMystery201506Notes": "Zašnorchluj si u korálového útesu v tomto zářivě barevném úboru! Nepřináší žádný benefit. Předmět pro předplatitele červen 2015.", "armorMystery201508Text": "Kostým geparda", "armorMystery201508Notes": "Utíkej rychle jako blesk s tímhle huňatým kostýmem geparda! Nepřináší žádný benefit. Předmět pro předplatitele srpen 2015.", "armorMystery201509Text": "Kostým vlkodlaka", @@ -710,7 +710,7 @@ "armorMystery201810Text": "Dark Forest Robes", "armorMystery201810Notes": "These robes are extra warm to protect you from the ghastly cold of haunted realms. Confers no benefit. October 2018 Subscriber Item.", "armorMystery301404Text": "Steampunk oblek", - "armorMystery301404Notes": "Elegantní a fešácký, joj! Nepřináší žádný benefit. Předmět pro předplatitele únor 3015.", + "armorMystery301404Notes": "Elegantní a fešácký, joj! Nepřináší žádný benefit. Předmět pro předplatitele únor 3015.", "armorMystery301703Text": "Steampunk Peacock Gown", "armorMystery301703Notes": "This elegant gown is well-suited for even the most extravagant gala! Confers no benefit. March 3017 Subscriber Item.", "armorMystery301704Text": "Steampunk Pheasant Dress", @@ -724,9 +724,9 @@ "armorArmoireGoldenTogaText": "Zlatá tóga", "armorArmoireGoldenTogaNotes": "Tato třpytivá tóga je nošena pouze pravými hrdiny. Zvyšuje Sílu a Obranu o <%= attrs %> každou. Začarovaná almara: Set zlaté tógy (předmět 1 ze 3).", "armorArmoireHornedIronArmorText": "Železné brnění s rohy", - "armorArmoireHornedIronArmorNotes": "Zprudka ukuto z oceli, toto brnění je skoro nerozbitné. Zvyšuje Obranu o <%= con %> a Vnímání o <%= per %>. Začarovaná almara: Set helmy s rohy (předmět 2 ze 3).", + "armorArmoireHornedIronArmorNotes": "Zprudka ukuto z oceli, toto brnění je skoro nerozbitné. Zvyšuje Obranu o <%= con %> a Vnímání o <%= per %>. Začarovaná almara: Set helmy s rohy (předmět 2 ze 3).", "armorArmoirePlagueDoctorOvercoatText": "Zimník Morového Lékaře", - "armorArmoirePlagueDoctorOvercoatNotes": "Autentický zimník nošený doktory, kteří vzdorují Moru Otálení! Zvyšuje Inteligenci o <%= int %>, Sílu o <%= str %> a Obranu o <%= con %>. Začarovaná almara: Set Morových Lékařů (Předmět 3 ze 3).", + "armorArmoirePlagueDoctorOvercoatNotes": "Autentický zimník nošený doktory, kteří vzdorují Moru Otálení! Zvyšuje Inteligenci o <%= int %>, Sílu o <%= str %> a Obranu o <%= con %>. Začarovaná almara: Set Morových Lékařů (Předmět 3 ze 3).", "armorArmoireShepherdRobesText": "Oděv pastýře", "armorArmoireShepherdRobesNotes": "Látka je chladivá a prodyšná, perfektní pro horký den pasení gryfů v poušti. Zvyšuje Sílu a Vnímání o <%= attrs %> každé. Začarovaná almara: Set pastýře (předmět 2 ze 3).", "armorArmoireRoyalRobesText": "Královský oděv", @@ -850,17 +850,17 @@ "headWizard5Text": "Královský klobouk pro mága", "headWizard5Notes": "Vyzařuje autoritu nad jměním, počasím a nižšími mágy. Zvyšuje Vnímání o <%= per %>.", "headHealer1Text": "Křišťálová čelenka", - "headHealer1Notes": "Čelenka zdobená kameny pro soustředění se na úkol. Zvyšuje Inteligenci o <%= int %>.", + "headHealer1Notes": "Čelenka zdobená kameny pro soustředění se na úkol. Zvyšuje Inteligenci o <%= int %>.", "headHealer2Text": "Ametystová čelenka", - "headHealer2Notes": "Ochutnávka luxusu pro skromnou profesi. Zvyšuje Inteligenci o <%= int %>.", + "headHealer2Notes": "Ochutnávka luxusu pro skromnou profesi. Zvyšuje Inteligenci o <%= int %>.", "headHealer3Text": "Safírová čelenka", - "headHealer3Notes": "Září na znamení toho, že trpící budou brzy spaseni. Zvyšuje Inteligenci o <%= int %>.", + "headHealer3Notes": "Září na znamení toho, že trpící budou brzy spaseni. Zvyšuje Inteligenci o <%= int %>.", "headHealer4Text": "Smaragdová čelenka", "headHealer4Notes": "Vyzařuje auru života a růstu. Zvyšuje Inteligenci o <%= int %>.", "headHealer5Text": "Královská čelenka", - "headHealer5Notes": "Pro krále, královnu, či konatele zázraků. Zvyšuje Inteligenci o <%= int %>.", + "headHealer5Notes": "Pro krále, královnu, či konatele zázraků. Zvyšuje Inteligenci o <%= int %>.", "headSpecial0Text": "Stínová helma", - "headSpecial0Notes": "Krev a popel, láva a obsidián dávají této helmě její kouzlo a sílu. Zvyšuje Inteligenci o <%= int %>.", + "headSpecial0Notes": "Krev a popel, láva a obsidián dávají této helmě její kouzlo a sílu. Zvyšuje Inteligenci o <%= int %>.", "headSpecial1Text": "Křišťálová přilba", "headSpecial1Notes": "The favored crown of those who lead by example. Increases all Stats by <%= attrs %>.", "headSpecial2Text": "Bezejmenná přilba", @@ -1162,9 +1162,9 @@ "headMystery201901Text": "Polaris Helm", "headMystery201901Notes": "The glowing gems on this helm contain light magically captured from winter auroras. Confers no benefit. January 2019 Subscriber Item.", "headMystery301404Text": "Fešný cylindr", - "headMystery301404Notes": "Fešný cylindr pro ty největší džentlmeny. Předmět pro předplatitele leden 2015. Nepřináší žádný benefit.", + "headMystery301404Notes": "Fešný cylindr pro ty největší džentlmeny. Předmět pro předplatitele leden 2015. Nepřináší žádný benefit.", "headMystery301405Text": "Obyčejný cylindr", - "headMystery301405Notes": "Obyčejný cylindr, který si přímo žádá o doplnění nějakým fešáckým ohozem. Nepřináší žádný benefit. Předmět pro předplatitele květen 3015.", + "headMystery301405Notes": "Obyčejný cylindr, který si přímo žádá o doplnění nějakým fešáckým ohozem. Nepřináší žádný benefit. Předmět pro předplatitele květen 3015.", "headMystery301703Text": "Fancy Feather Hat", "headMystery301703Notes": "The feathers for this hat were donated by Miss Prue's Finishing School for Fancy Peacocks. Wear them with pride! Confers no benefit. March 3017 Subscriber Item.", "headMystery301704Text": "Pheasant Plume Hat", @@ -1186,7 +1186,7 @@ "headArmoireGoldenLaurelsText": "Zlaté vavříny", "headArmoireGoldenLaurelsNotes": "Tyto zlaté vavříny odměňují ty, kteří pokořili zlozvyky. Zvyšuje Vnímání a Obranu o <%= attrs %> každou. Začarovaná almara: Set zlaté tógy (předmět 2 ze 3).", "headArmoireHornedIronHelmText": "Železná helma s rohy", - "headArmoireHornedIronHelmNotes": "Zprudka ukuto z oceli, tato helma je skoro nerozbitná. Zvyšuje Obranu o <%= con %> a Sílu o <%= str %>. Začarovaná almara: Set helmy s rohy (předmět 1 ze 3).", + "headArmoireHornedIronHelmNotes": "Zprudka ukuto z oceli, tato helma je skoro nerozbitná. Zvyšuje Obranu o <%= con %> a Sílu o <%= str %>. Začarovaná almara: Set helmy s rohy (předmět 1 ze 3).", "headArmoireYellowHairbowText": "Žlutá mašle do vlasů", "headArmoireYellowHairbowNotes": "Become perceptive, strong, and smart while wearing this beautiful Yellow Hairbow! Increases Perception, Strength, and Intelligence by <%= attrs %> each. Enchanted Armoire: Yellow Hairbow Set (Item 1 of 2).", "headArmoireRedFloppyHatText": "Červený měkký klobouk", @@ -1297,7 +1297,7 @@ "shieldSpecialTakeThisText": "Take This Shield", "shieldSpecialTakeThisNotes": "This shield was earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.", "shieldSpecialGoldenknightText": "Mustainův Milník drtící řemdih", - "shieldSpecialGoldenknightNotes": "Meetingy, monstra, neduhy: zvládnuto! Prásk! Zvyšuje Obranu a Vnímání o <%= attrs %> každé.", + "shieldSpecialGoldenknightNotes": "Meetingy, monstra, neduhy: zvládnuto! Prásk! Zvyšuje Obranu a Vnímání o <%= attrs %> každé.", "shieldSpecialMoonpearlShieldText": "Štít z měsíční perly", "shieldSpecialMoonpearlShieldNotes": "Zkonstruován k rychlému plavání a také nějaké té obraně. Zvyšuje Obranu o <%= con %>.", "shieldSpecialMammothRiderHornText": "Mammoth Rider's Horn", @@ -1409,7 +1409,7 @@ "shieldMystery201802Text": "Love Bug Shield", "shieldMystery201802Notes": "Although it may look like brittle candy, this shield is resistant to even the strongest Shattering Heartbreak attacks! Confers no benefit. February 2018 Subscriber Item.", "shieldMystery301405Text": "Štít z hodin", - "shieldMystery301405Notes": "Čas je na tvé straně s tímhle štítem z hodin! Nepřináší žádný benefit. Předmět pro předplatitele červen 3015.", + "shieldMystery301405Notes": "Čas je na tvé straně s tímhle štítem z hodin! Nepřináší žádný benefit. Předmět pro předplatitele červen 3015.", "shieldMystery301704Text": "Fluttery Fan", "shieldMystery301704Notes": "This fine fan will keep you feeling cool and looking fancy! Confers no benefit. April 3017 Subscriber Item.", "shieldArmoireGladiatorShieldText": "Štít gladiátora", @@ -1417,7 +1417,7 @@ "shieldArmoireMidnightShieldText": "Půlnoční štít", "shieldArmoireMidnightShieldNotes": "Tento štít je nejmocnější úderem půlnoci! Zvyšuje Obranu o <%= con %> a Sílu o <%= str %>. Začarovaná almara: Nezávislý předmět.", "shieldArmoireRoyalCaneText": "Královská hůlka", - "shieldArmoireRoyalCaneNotes": "Sláva vládci, oslavovaného v písních! Zvyšuje Obranu, Inteligenci a Vnímání o <%= attrs %> každé. Začarovaná almara: Královský set (předmět 2 ze 3).", + "shieldArmoireRoyalCaneNotes": "Sláva vládci, oslavovaného v písních! Zvyšuje Obranu, Inteligenci a Vnímání o <%= attrs %> každé. Začarovaná almara: Královský set (předmět 2 ze 3).", "shieldArmoireDragonTamerShieldText": "Štít krotitele draků", "shieldArmoireDragonTamerShieldNotes": "Znejisti své nepřátele tímto štítem ve tvaru draka. Zvyšuje Vnímání o <%= per %>. Začarovaná almara: Set krotitele draků (předmět 2 ze 3).", "shieldArmoireMysticLampText": "Mystická lampa", @@ -1542,11 +1542,11 @@ "bodyBase0Text": "Žádné doplňky", "bodyBase0Notes": "Žádné doplňky.", "bodySpecialWonderconRedText": "Rubínový límec", - "bodySpecialWonderconRedNotes": "Atraktivní rubínový límec! Speciální edice běžné zbroje. Nepřináší žádný benefit.", + "bodySpecialWonderconRedNotes": "Atraktivní rubínový límec! Speciální edice běžné zbroje. Nepřináší žádný benefit.", "bodySpecialWonderconGoldText": "Zlatý límec", - "bodySpecialWonderconGoldNotes": "Atraktivní zlatý límec! Speciální edice běžné zbroje. Nepřináší žádný benefit.", + "bodySpecialWonderconGoldNotes": "Atraktivní zlatý límec! Speciální edice běžné zbroje. Nepřináší žádný benefit.", "bodySpecialWonderconBlackText": "Ebenový límec", - "bodySpecialWonderconBlackNotes": "Atraktivní ebenový límec! Speciální edice běžné zbroje. Nepřináší žádný benefit.", + "bodySpecialWonderconBlackNotes": "Atraktivní ebenový límec! Speciální edice běžné zbroje. Nepřináší žádný benefit.", "bodySpecialTakeThisText": "Take This Pauldrons", "bodySpecialTakeThisNotes": "These pauldrons were earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.", "bodySpecialAetherAmuletText": "Aether Amulet", @@ -1659,7 +1659,7 @@ "headAccessoryMystery201812Text": "Arctic Fox Ears", "headAccessoryMystery201812Notes": "You hear the subtle sound of snowflakes falling upon the landscape. Confers no benefit. December 2018 Subscriber Item.", "headAccessoryMystery301405Text": "Brýle na čele", - "headAccessoryMystery301405Notes": "\"Brýle jsou na oči,\" říkali. \"Nikdo nechce nosit brýle na čele,\" říkali. Ha! Teď jsi jim to natřel! Nepřináší žádný benefit. Předmět pro předplatitele srpen 3015.", + "headAccessoryMystery301405Notes": "\"Brýle jsou na oči,\" říkali. \"Nikdo nechce nosit brýle na čele,\" říkali. Ha! Teď jsi jim to natřel! Nepřináší žádný benefit. Předmět pro předplatitele srpen 3015.", "headAccessoryArmoireComicalArrowText": "Komický šíp", "headAccessoryArmoireComicalArrowNotes": "This whimsical item sure is good for a laugh! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", "headAccessoryArmoireGogglesOfBookbindingText": "Goggles of Bookbinding", @@ -1692,7 +1692,7 @@ "eyewearSpecialWonderconBlackText": "Záludná maska", "eyewearSpecialWonderconBlackNotes": "Tvé motivy jsou bezpochyby legitimní. Nepřináší žádný benefit. Speciální edice běžné zbroje.", "eyewearMystery201503Text": "Akvamarínová maska", - "eyewearMystery201503Notes": "Ať ti třpytivé krystaly nevypíchnou oko! Nepřináší žádný benefit. Předmět pro předplatitele březen 2015.", + "eyewearMystery201503Notes": "Ať ti třpytivé krystaly nevypíchnou oko! Nepřináší žádný benefit. Předmět pro předplatitele březen 2015.", "eyewearMystery201506Text": "Neonový šnorchl", "eyewearMystery201506Notes": "Tento neonový šnorchl umožňuje svému nositeli vidět pod vodou. Nepřináší žádný benefit. Předmět pro předplatitele červen 2015.", "eyewearMystery201507Text": "Čupr sluneční brýle", @@ -1700,9 +1700,9 @@ "eyewearMystery201701Text": "Nadčasové Sluneční Brýle", "eyewearMystery201701Notes": "Tyto sluneční brýle ochrání tvé oči před škodlivými paprsky a budou vypadat skvěle, ať už se objevíš kdekoliv a kdykoliv! Nepřináší žádný benefit. Leden 2017 - Předmět pro předplatitele.", "eyewearMystery301404Text": "Brýle na oči", - "eyewearMystery301404Notes": "Nic na oči nemůže být trendovějšího než brýle - možná tedy kromě monoklu. Nepřináší žádný benefit. Předmět pro předplatitele duben 3015.", + "eyewearMystery301404Notes": "Nic na oči nemůže být trendovějšího než brýle - možná tedy kromě monoklu. Nepřináší žádný benefit. Předmět pro předplatitele duben 3015.", "eyewearMystery301405Text": "Monokl", - "eyewearMystery301405Notes": "Není nic stylovějšího než monokl - možná tedy kromě brýlí. Nepřináší žádný benefit. Předmět pro předplatitele červenec 3015.", + "eyewearMystery301405Notes": "Není nic stylovějšího než monokl - možná tedy kromě brýlí. Nepřináší žádný benefit. Předmět pro předplatitele červenec 3015.", "eyewearMystery301703Text": "Peacock Masquerade Mask", "eyewearMystery301703Notes": "Perfect for a fancy masquerade or for stealthily moving through a particularly well-dressed crowd. Confers no benefit. March 3017 Subscriber Item.", "eyewearArmoirePlagueDoctorMaskText": "Maska Morového Lékaře", diff --git a/website/common/locales/cs/groups.json b/website/common/locales/cs/groups.json index e1336afd51..bb3afd3d11 100644 --- a/website/common/locales/cs/groups.json +++ b/website/common/locales/cs/groups.json @@ -246,7 +246,7 @@ "partyDescriptionPlaceholder": "This is our Party's description. It describes what we do in this Party. If you want to learn more about what we do in this Party, read the description. Party on.", "guildGemCostInfo": "A Gem cost promotes high quality Guilds and is transferred into your Guild's bank.", "noGuildsTitle": "Nejsi členem žádného cechu.", - "noGuildsParagraph1": "Guilds are social groups created by other players that can offer you support, accountability, and encouraging chat.", + "noGuildsParagraph1": "Guilds are social groups created by other players that can offer you support, accountability, and encouraging chat.", "noGuildsParagraph2": "Click the Discover tab to see recommended Guilds based on your interests, browse Habitica's public Guilds, or create your own Guild.", "noGuildsMatchFilters": "We couldn't find any matching Guilds.", "privateDescription": "A private Guild will not be displayed in Habitica's Guild directory. New members can be added by invitation only.", diff --git a/website/common/locales/cs/npc.json b/website/common/locales/cs/npc.json index 65681a2264..b83990e19b 100644 --- a/website/common/locales/cs/npc.json +++ b/website/common/locales/cs/npc.json @@ -63,7 +63,7 @@ "mustPurchaseToSet": "Musíte koupit <%= val %> k nastavení na <%= key %>.", "typeRequired": "Je požadován typ", "positiveAmountRequired": "Pozitivní množství je požadováno", - "notAccteptedType": "Typ musí být v [vajíčka, líhnoucíLektvary, prémiovéLíhnoucíLektvary, jídlo, výpravy, výbava]", + "notAccteptedType": "Typ musí být v [vajíčka, líhnoucíLektvary, prémiovéLíhnoucíLektvary, jídlo, výpravy, výbava]", "contentKeyNotFound": "Klíč nenalezen pro Obsah <%= type %>", "plusGem": "+<%= count %> Drahokam", "typeNotSellable": "Nelze prodat. Lze prodat pouze <%= acceptedTypes %>", diff --git a/website/common/locales/cs/pets.json b/website/common/locales/cs/pets.json index e21f427e38..16d9a9dae8 100644 --- a/website/common/locales/cs/pets.json +++ b/website/common/locales/cs/pets.json @@ -56,7 +56,7 @@ "mountMasterText": "Zkrotil všech 90 zvířátek ( šíleně obtížné, zaslouží si uznání!)", "mountMasterText2": " a vypustil všech svých 90 zvířat celkem <%= count %>krát", "triadBingoName": "Bingo trojice", - "triadBingoText": "Našel všech 90 mazlíčků, zkrotil všech 90 zkrocených zvířat, a našel všech 90 mazlíčků ZNOVU (JAK JSI TO UDĚLAL!)", + "triadBingoText": "Našel všech 90 mazlíčků, zkrotil všech 90 zkrocených zvířat, a našel všech 90 mazlíčků ZNOVU (JAK JSI TO UDĚLAL!)", "triadBingoText2": " a vypustil plnou stáj celkem <%= count %>krát", "triadBingoAchievement": "Získal jsi ocenění \"Bingo trojice\" za nalezení všech mazlíčků, zkrocení všech zvířat, a znovunalezení všech mazlíčku ještě jednou!", "hatchedPet": "Vylíhnul jsi nového <%= potion %><%= egg %>!", diff --git a/website/common/locales/cs/questscontent.json b/website/common/locales/cs/questscontent.json index b354b6abaf..43a3d3ce3c 100644 --- a/website/common/locales/cs/questscontent.json +++ b/website/common/locales/cs/questscontent.json @@ -117,7 +117,7 @@ "questBasilistCompletion": "Bazi-lístek se rozpadl ve změť papírů, které se ve vzduchu blýskají jako duha. \"Ufff!\" říká @Arcosine. \"Dobře, že jste tu byli!\" Nabytí zkušenostmi posbíráte popadané zlato mezi papíry.", "questBasilistBoss": "Bazi-lístek", "questEggHuntText": "Sbírání Vajec", - "questEggHuntNotes": "Přes noc se všude objevila podivná obyčejná vejce: v Mattově stáji, za pokladnou v krčme, a dokonce mezi vejci zvířat na tržišti! Jaká to nepříjemnost! \"Nikdo neví odkud pochází, nebo co by se z nich mohlo vylíhnout,\" říká Megan, \"Ale nemůžeme je nechat válet se jen tak kolem! Tvrdě pracuj a pořádně hledej, abys pomohl shromáždit všechna tato záhadný vajíčka. Možná, když jich shromáždíš dostatek, zbudou nějaká i pro tebe...\"", + "questEggHuntNotes": "Přes noc se všude objevila podivná obyčejná vejce: v Mattově stáji, za pokladnou v krčme, a dokonce mezi vejci zvířat na tržišti! Jaká to nepříjemnost! \"Nikdo neví odkud pochází, nebo co by se z nich mohlo vylíhnout,\" říká Megan, \"Ale nemůžeme je nechat válet se jen tak kolem! Tvrdě pracuj a pořádně hledej, abys pomohl shromáždit všechna tato záhadný vajíčka. Možná, když jich shromáždíš dostatek, zbudou nějaká i pro tebe...\"", "questEggHuntCompletion": "Zvládli jste to! Z vděčnosti ti Megan dá deset vajec. \"Vsadím se, že je líhnoucí lektvary obarví do úžasných barviček! A jsem zvědavá, co se stane, až je vykrmíš...\"", "questEggHuntCollectPlainEgg": "Obyčejná vejce", "questEggHuntDropPlainEgg": "Obyčejné vejce", @@ -201,7 +201,7 @@ "questBunnyText": "Zabijácký králíček", "questBunnyNotes": "Po mnoha těžkých dnech konečně staneš na vrcholu Hory Flákání a stojíš před impozantními dveřmi do Pevnosti Zanedbání. Přečteš si nápis na kameni. \"Uvnitř sídlí stvoření, které ztělesňuje tvůj největší strach, důvod tvého nicnedělání. Zaklepej a postav se svým démonům!\" Třeseš se a představuješ si ten horor za dveřmi a cítíš, že bys raději utekl jako tolikrát předtím. @Draayder tě zadrží. \"neboj, příteli! Přišel tvůj čas. Tohle musíš udělat!\"

Zaklepeš na dveře a ty se otevřou. Zevnitř slyšíš hrůzný řev a vytasíš svou zbraň.", "questBunnyBoss": "Zabijácký králíček", - "questBunnyCompletion": "Posledním úderem srážíš zabijáckého králíčka k zemi. Třpytivá mlha se zvedne z jejího těla a smrskne se na obyčejného králíčka... vůbec nevypadá jako ta obluda, se kterou ses bil před chvílí. Její nosík se zaklepe a odhopká pryč zanechávajíc za sebou vejce. @Gully se směje. \"Hora Flákání dokáže z malých výzev udělat skoro neporazitelné. Vezměme tato vejce a pojďme domů.\"", + "questBunnyCompletion": "Posledním úderem srážíš zabijáckého králíčka k zemi. Třpytivá mlha se zvedne z jejího těla a smrskne se na obyčejného králíčka... vůbec nevypadá jako ta obluda, se kterou ses bil před chvílí. Její nosík se zaklepe a odhopká pryč zanechávajíc za sebou vejce. @Gully se směje. \"Hora Flákání dokáže z malých výzev udělat skoro neporazitelné. Vezměme tato vejce a pojďme domů.\"", "questBunnyDropBunnyEgg": "Králíček (vejce)", "questBunnyUnlockText": "Odemyká vejce Králíčka na Trhu", "questSlimeText": "Želésprávce", @@ -567,8 +567,8 @@ "questPterodactylDropPterodactylEgg": "Pterodactyl (Egg)", "questPterodactylUnlockText": "Unlocks purchasable Pterodactyl eggs in the Market", "questBadgerText": "Stop Badgering Me!", - "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", - "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", + "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", + "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", "questBadgerBoss": "The Badgering Bother", "questBadgerDropBadgerEgg": "Badger (Egg)", "questBadgerUnlockText": "Unlocks purchasable Badger eggs in the Market", @@ -651,7 +651,7 @@ "questDolphinText": "Delfín Pochyností", "questDolphinNotes": "Procházíš se po březích Zálivu Nedodělků, hlavu plnou náročné práce, která tě očekává. Zaujme tě žblunknutí na vodní hladině. Překrásný delfín přeskočí mezi vlnami. Sluneční svit se odráží na jeho ploutvích. Ale počkej... to není sluneční světlo a delfín se nezanoří zpět do moře. Zahledí se na @khdarkwolf.

“Já své denní úkoly nikdy nezvládnu” hlesne @khdarkwolf.

“Asi nejsem dost dobrý, abych dosáhl svých cílů,” fňukne @confusedcicada když delfín přesune svůj přísný pohled na něj.

“Proč se vůbec namáhat?” zeptá se @mewrose a rozstřese se pod pohledem příšery.

Pak se delfín podívá na tebea ty cítíš, jak tvé odhodlání mizí pod záplavou pochybností. A vzchopíš se; Někdo musí tu příšeru zastavit a budeš to právě ty!", "questBronzeNotes": "Během osvěžující přestávky mezi výpravami se ty a tví přátelé touláte po lesních stezkách v Taskwoodu. Najednou narazíte na velký padlý vykotlaný strom a z jeho dutiny se něco zaleskne.

A je to skrýš plná kouzelných líhnoucích lektvarů! Třpytivá bronzová tekutina se převaluje v lahvičkách a @Hachiseiko se po jedné natáhne, aby si ji prohlédl.

\"Nechej to!\" zasyčí za tebou neznámý hlas. Je to obrovský brouk s krovkami z lesklého bronzu a pozvedá proti tobě klepeta v bojovném postoji. \"To jsou mé lektvary a pokud si je chcete zasloužit, musíte se osvědčit v rytířském souboji!\"", - "evilSantaAddlNotes": "Dávej pozor, Pytlačící Ježíšek a Najdi Mládě mají sice na sebe navazující úspěchy z výprav, ale vzácného mazlíčka a jezdecké zvíře dostaneš pouze jednou.", + "evilSantaAddlNotes": "Dávej pozor, Pytlačící Ježíšek a Najdi Mládě mají sice na sebe navazující úspěchy z výprav, ale vzácného mazlíčka a jezdecké zvíře dostaneš pouze jednou.", "questDolphinBoss": "Delfín Pochybností", "mythicalMarvelsNotes": "Obsahuje výpravy na získání vajec jednorožce, grifona a mořského hada: Přesvědčení Královny Jednorožců, Ohnivý Grifon a Nebezpečí v Hlubinách: Mořský Had Útočí!" } diff --git a/website/common/locales/cs/settings.json b/website/common/locales/cs/settings.json index 1d300627c8..ef0bfa17df 100644 --- a/website/common/locales/cs/settings.json +++ b/website/common/locales/cs/settings.json @@ -55,7 +55,6 @@ "APIToken": "API token (toto je heslo - přečti si upozornění nahoře!)", "showAPIToken": "Ukázat API Token", "hideAPIToken": "Skrýt API Token", - "APITokenWarning": "Jestli potřebuješ nový API Token (např., pokud jsi jej omylem sdílel), napiš email na <%= hrefTechAssistanceEmail %> obsahující tvé Uživatelské ID a aktuální Token. Jakmile se Token resetuje, budeš potřebovat znovu autorizovat vše pomocí odhlášení se ze stránky a mobilní appky, a poté poskytnout nový Token jakémukoliv jinému Habitica nástroji, který používáš.", "thirdPartyApps": "Programy třetí strany", "resetDo": "Udělej to, zresetuj můj účet!", "resetComplete": "Reset dokončen!", diff --git a/website/common/locales/cs/tasks.json b/website/common/locales/cs/tasks.json index 0498466fee..1cab496645 100644 --- a/website/common/locales/cs/tasks.json +++ b/website/common/locales/cs/tasks.json @@ -70,7 +70,7 @@ "startDate": "Datum začátku", "streaks": "Ocenění za série úspěšnosti", "streakName": "<%= count %> ocenění za sérii úspěšnosti", - "streakText": "Získal <%= count %> ocenění za splnění 21-denní série plnění každodenních úkolů", + "streakText": "Získal <%= count %> ocenění za splnění 21-denní série plnění každodenních úkolů", "streakSingular": "Sériář", "streakSingularText": "Právě završil 21 dní dlouhou sérii úspěšnosti na denním úkolu", "perfectName": "<%= count %> Perfektních dní", @@ -87,7 +87,7 @@ "taskAliasAlreadyUsed": "Alias úkolu byl již použit na jiném úkolu.", "invalidTaskType": "Typ úkolu musí být „zvyk\", „denní úkol\", „úkol\" nebo „odměna\".", "invalidTasksType": "Typ úkolu musí být jeden z „zvyky\", „denní úkoly\", „úkoly\", nebo „odměny\".", - "invalidTasksTypeExtra": "Typ úkolu musí být jeden z „zvyky\", „denní úkoly\", „úkoly\", „odměny\", \"dokončené úkoly\".", + "invalidTasksTypeExtra": "Typ úkolu musí být jeden z „zvyky\", „denní úkoly\", „úkoly\", „odměny\", \"dokončené úkoly\".", "cantDeleteChallengeTasks": "Úkol náležící výzvě nelze vymazat.", "checklistOnlyDailyTodo": "Seznamy jsou podporovány pouze pro denní úkoly a klasické úkoly", "checklistItemNotFound": "Na seznamu nenalezen žádný předmět s tímto id.", diff --git a/website/common/locales/da/content.json b/website/common/locales/da/content.json index e975c6036f..35fe35e1a4 100644 --- a/website/common/locales/da/content.json +++ b/website/common/locales/da/content.json @@ -182,7 +182,7 @@ "questEggVelociraptorText": "Velociraptor", "questEggVelociraptorMountText": "Velociraptor", "questEggVelociraptorAdjective": "en vaks", - "eggNotes": "Find en udrugningseliksir til at hælde på dit æg, og det vil udklække <%= eggAdjective(locale) %> <%= eggText(locale) %>.", + "eggNotes": "Find en udrugningseliksir til at hælde på dit æg, og det vil udklække <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Almindelig", "hatchingPotionWhite": "Hvid", "hatchingPotionDesert": "Ørken", diff --git a/website/common/locales/da/front.json b/website/common/locales/da/front.json index 4360e1153a..614fc64aec 100644 --- a/website/common/locales/da/front.json +++ b/website/common/locales/da/front.json @@ -160,7 +160,7 @@ "battleMonstersDesc": "Kæmp monstre med andre Habiticanere! Brug det Guld du tjener i spillet ved at købe spilgenstande eller personlige belønninger, som fx at se en episode af din yndlingsserie.", "playersUseToImprove": "Spillere bruger Habitica til at forbedre sig", "healthAndFitness": "Sundhed og velvære", - "healthAndFitnessDesc": "Er du aldrig motiveret til at bruge tandtråd? Har du svært ved at komme til fitness? Habitica gør det endelig sjovt at være sund.", + "healthAndFitnessDesc": "Er du aldrig motiveret til at bruge tandtråd? Har du svært ved at komme til fitness? Habitica gør det endelig sjovt at være sund.", "schoolAndWork": "Skole og arbejde", "schoolAndWorkDesc": "Uanset om du forbereder en rapport til din lærer eller din chef, er det let at holde styr på dine fremskridt mens du tackler dine sværeste opgaver.", "muchmuchMore": "Og meget, meget mere!", diff --git a/website/common/locales/da/gear.json b/website/common/locales/da/gear.json index e0f29b8ee0..2a2f9340bd 100644 --- a/website/common/locales/da/gear.json +++ b/website/common/locales/da/gear.json @@ -82,9 +82,9 @@ "weaponSpecial1Text": "Krystalklinge", "weaponSpecial1Notes": "Dets glitrende facetter fortæller historien om en helt. Forøger alle Egenskaber med <%= attrs %>.", "weaponSpecial2Text": "Stephen Webers Dragestav", - "weaponSpecial2Notes": "Mærk dragens kraft strømme indeni! Øger Styrke og Opfattelse med <%= attrs %> hver.", + "weaponSpecial2Notes": "Mærk dragens kraft strømme indeni! Øger Styrke og Opfattelse med <%= attrs %> hver.", "weaponSpecial3Text": "Mustaines Milepæls-masende Morgenstjerne", - "weaponSpecial3Notes": "Møder, monstre, modløshed: håndteret! Mast! Øger Styrke, Intelligens og Konstitution med <%= attrs %> hver.", + "weaponSpecial3Notes": "Møder, monstre, modløshed: håndteret! Mast! Øger Styrke, Intelligens og Konstitution med <%= attrs %> hver.", "weaponSpecialCriticalText": "Kritisk Kryb-Hammer", "weaponSpecialCriticalNotes": "Denne mægtige kriger slog en særlig stædig fjende fra GitHub, hvor mange andre måtte give fortabt. Denne hammer, skabt af knoglerne fra bugs, rammer plet hver gang. Forøger Styrke og Opfattelse med <%= attrs %> hver.", "weaponSpecialTakeThisText": "Tag dette sværd", @@ -92,7 +92,7 @@ "weaponSpecialTridentOfCrashingTidesText": "Trefork af Brydende Bølger", "weaponSpecialTridentOfCrashingTidesNotes": "Giver dig evnen til at herske over fiskene og giver også dine opgaver nogle mægtige hug. Øger Intelligens med <%= int %>.", "weaponSpecialTaskwoodsLanternText": "Taskwoods Lanterne", - "weaponSpecialTaskwoodsLanternNotes": "Givet i tidernes morgen til Taskwood Plantagens vogtende spøgelse, denne lanterne kan oplyse det dybeste mørke og væve kraftfulde besværgelser. Øger Opfattelse og Intelligens med <%= attrs %> hver.", + "weaponSpecialTaskwoodsLanternNotes": "Givet i tidernes morgen til Taskwood Plantagens vogtende spøgelse, denne lanterne kan oplyse det dybeste mørke og væve kraftfulde besværgelser. Øger Opfattelse og Intelligens med <%= attrs %> hver.", "weaponSpecialBardInstrumentText": "Skjaldens Lute", "weaponSpecialBardInstrumentNotes": "Slå en munter tone an på denne magiske lute! øger Intelligens og Opfattelse med hver <%= attrs %>.", "weaponSpecialLunarScytheText": "Måne Le", @@ -200,7 +200,7 @@ "weaponSpecialSummer2016MageText": "Havskum Stav", "weaponSpecialSummer2016MageNotes": "Alle havenes kræfter filtrerer gennem denne stav. Øger Intelligens med <%= int %> og Opfattelse med <%= per %>. Specielt 2016 Sommerudstyr.", "weaponSpecialSummer2016HealerText": "Helende Trefork", - "weaponSpecialSummer2016HealerNotes": "Én pik skader, den anden helbreder. Øger Intelligens med <%= int %>. Specielt 2016 Sommerudstyr.", + "weaponSpecialSummer2016HealerNotes": "Én pik skader, den anden helbreder. Øger Intelligens med <%= int %>. Specielt 2016 Sommerudstyr.", "weaponSpecialFall2016RogueText": "Edderkoppebidskniv", "weaponSpecialFall2016RogueNotes": "Mærk den stikkende smerte af et edderkoppebid! Forøger Styrke med <%= str %>. Begrænset udstyr fra efteråret 2016.", "weaponSpecialFall2016WarriorText": "Angribende Rødder", @@ -572,13 +572,13 @@ "armorSpecialWinter2017HealerText": "Skinnende kronbladsrustning", "armorSpecialWinter2017HealerNotes": "Selvom den er blød, har denne rustning af kronblade fantastiske beskyttende kræfter. Forøger Konstitution med <%= con %>. Begrænset udstyr fra vinteren 2016-2017.", "armorSpecialSpring2017RogueText": "Knivskarp kanindragt", - "armorSpecialSpring2017RogueNotes": "Blød men stærk, denne dragt lader dig snige dig gennem haver med ekstra list. Øger Opfattelse med <%= per %>. Specielt 2017 Forårsudstyr.", + "armorSpecialSpring2017RogueNotes": "Blød men stærk, denne dragt lader dig snige dig gennem haver med ekstra list. Øger Opfattelse med <%= per %>. Specielt 2017 Forårsudstyr.", "armorSpecialSpring2017WarriorText": "Hundeharnisk", - "armorSpecialSpring2017WarriorNotes": "Denne lækre rustning er så skinnende som din fint behandlede pels, men med øget modstand mod angreb. Øger Konstitution med <%= con %>. Specielt 2017 Forårsudstyr.", + "armorSpecialSpring2017WarriorNotes": "Denne lækre rustning er så skinnende som din fint behandlede pels, men med øget modstand mod angreb. Øger Konstitution med <%= con %>. Specielt 2017 Forårsudstyr.", "armorSpecialSpring2017MageText": "Hundeheksers Rober", "armorSpecialSpring2017MageNotes": "Magisk med vilje, blød som bonus. Forøger Intelligens med <%= int %>. Begrænset udstyr fra foråret 2017.", "armorSpecialSpring2017HealerText": "Roens rober", - "armorSpecialSpring2017HealerNotes": "Blødheden af disse rober giver komfort til dig og trøst til alle der har brug for din helbredende hjælp! Øger Konstitution med <%= con %>. Specielt 2017 Forårsudstyr.", + "armorSpecialSpring2017HealerNotes": "Blødheden af disse rober giver komfort til dig og trøst til alle der har brug for din helbredende hjælp! Øger Konstitution med <%= con %>. Specielt 2017 Forårsudstyr.", "armorSpecialSummer2017RogueText": "Sødragehale", "armorSpecialSummer2017RogueNotes": "Disse farvestrålende klæder forvandler bæreren til en ægte Sødrage! Forøger Opfattelse med <%= per %>. Begrænset udstyr fra sommeren 2017.", "armorSpecialSummer2017WarriorText": "Sandpanser", @@ -1297,7 +1297,7 @@ "shieldSpecialTakeThisText": "Tag Dette Skjold", "shieldSpecialTakeThisNotes": "This shield was earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.", "shieldSpecialGoldenknightText": "Mustaines Milepæls-masende Morgenstjerne", - "shieldSpecialGoldenknightNotes": "Møder, monstre, modløshed: håndteret! Mast! Øger Konstitution og Opfattelse med <%= attrs %> hver.", + "shieldSpecialGoldenknightNotes": "Møder, monstre, modløshed: håndteret! Mast! Øger Konstitution og Opfattelse med <%= attrs %> hver.", "shieldSpecialMoonpearlShieldText": "Måneperleskjold", "shieldSpecialMoonpearlShieldNotes": "Designet til at svømme hurtigt i, men har også indbygget forsvar. Øger Konstitution med <%= con %>.", "shieldSpecialMammothRiderHornText": "Mammut-riders horn", diff --git a/website/common/locales/da/groups.json b/website/common/locales/da/groups.json index 68094aab02..15460c1c1e 100644 --- a/website/common/locales/da/groups.json +++ b/website/common/locales/da/groups.json @@ -146,7 +146,7 @@ "emailsMustBeAnArray": "Invitationer med e-mailadresse skal indtastes korrekt i tabellen.", "usernamesMustBeAnArray": "Invitationer med brugernavn skal indtastes korrekt i tabellen.", "canOnlyInviteMaxInvites": "Du kan kun invitere \"<%= maxInvites %>\" ad gangen", - "partyExceedsMembersLimit": "Holdets størrelse er begrænset til <%= maxMembersParty %> medlemmer", + "partyExceedsMembersLimit": "Holdets størrelse er begrænset til <%= maxMembersParty %> medlemmer", "onlyCreatorOrAdminCanDeleteChat": "Du har ikke rettigheder til at slette denne besked!", "onlyGroupLeaderCanEditTasks": "Du har ikke rettigheder til at administrere opgaver!", "onlyGroupTasksCanBeAssigned": "Kun gruppeopgaver kan blive tildelt", diff --git a/website/common/locales/da/pets.json b/website/common/locales/da/pets.json index 88dda77d5d..36b12ac02f 100644 --- a/website/common/locales/da/pets.json +++ b/website/common/locales/da/pets.json @@ -43,7 +43,7 @@ "noFoodAvailable": "Du har ikke noget Dyrefoder.", "noSaddlesAvailable": "Du har ikke nogle sadler.", "dropsExplanation": "Du kan få fat i disse ting hurtigere med ædelsten, hvis du ikke længere vil vente på at finde dem når du gennemfører en opgave.
Lær mere om drop-systemet.", - "dropsExplanationEggs": "Brug Ædelsten for hurtigere at få æg, hvis du ikke vil vente på at få standard-æg som drops, eller gentage Quests for at vinde Quest-æg. Læs mere om dropsystemet her.", + "dropsExplanationEggs": "Brug Ædelsten for hurtigere at få æg, hvis du ikke vil vente på at få standard-æg som drops, eller gentage Quests for at vinde Quest-æg. Læs mere om dropsystemet her.", "premiumPotionNoDropExplanation": "Magiske udrugningseliksirer kan ikke blive brugt på æg, der er modtaget fra quests. Den eneste måde at få en magisk udrugningseliksir på, er ved at købe dem nedenfor, ikke fra tilfældige drop.", "beastMasterProgress": "Dyretæmmerfremskridt", "beastAchievement": "Du har opnået \"Dyretæmmer\"-præstationen ved at samle alle kæledyr!", diff --git a/website/common/locales/da/questscontent.json b/website/common/locales/da/questscontent.json index fe3b48d5f9..390a32aed0 100644 --- a/website/common/locales/da/questscontent.json +++ b/website/common/locales/da/questscontent.json @@ -130,7 +130,7 @@ "questDilatoryDropMantisShrimpMount": "Knælerreje (Ridedyr)", "questDilatoryBossRageTavern": "Den Frygtelige Drag'e af Forhaling slår sit FORSØMMELSESSLAG!\n\nÅh nej! På trods af vores indsats lod vi nogle Daglige slippe fra os, og deres mørkerøde farve har tiltrukket Drag'ens vrede! Med dens frygtelige Forsømmelsesslag har den ødelagt Værtshuset! Heldigvis har vi bygget en Kro i en by tæt på, og du kan blive ved med at chatte på stranden... men stakkels Kroejer Daniel så lige sin elskede bygning falde sammen!\n\nJeg håber ikke, at monstret angriber igen!", "questDilatoryBossRageStables": "Den Frygtelige Drag'e af Forhaling slår sit FORSØMMELSESSLAG!\n\nUps! Igen har vi ladet for mange Daglige slippe fra os. Drag'en har sendt sit Forsømmelsesslag mod Matt og staldene! Kæledyr er flygtet i alle retninger. Heldigvis ser det ud til, at dine er i sikkerhed!\n\nStakkels Habitica! Jeg håber ikke, at det sker igen. Skynd dig at udføre alle dine opgaver!", - "questDilatoryBossRageMarket": "Den Frygtelige Drag'e af Forhaling slår sit FORSØMMELSESSLAG!\n\nÅh nej! Købmanden Alex har lige fået sin butik slået til plukfisk af Drag'ens Forsømmelsesslag! Men det ser ud til, at vi virkelig er ved at få has på dette bæst. Jeg tvivler på, at det har energi nok til et slag til.\n\nSå fortvivl ikke, Habitica! Lad os fordrive dette bæst fra vores kyster!", + "questDilatoryBossRageMarket": "Den Frygtelige Drag'e af Forhaling slår sit FORSØMMELSESSLAG!\n\nÅh nej! Købmanden Alex har lige fået sin butik slået til plukfisk af Drag'ens Forsømmelsesslag! Men det ser ud til, at vi virkelig er ved at få has på dette bæst. Jeg tvivler på, at det har energi nok til et slag til.\n\nSå fortvivl ikke, Habitica! Lad os fordrive dette bæst fra vores kyster!", "questDilatoryCompletion": "Sejren Over Den Frygtelige Drag'e af Forhaling\n\nVi klarede det! Med et sidste brøl kollapser Den Frygtelige Drag'e og svømmer langt, langt væk. Grupper af jublende Habitikanere fylder strandene! Vi har hjulpet Matt, Daniel og Alex genopbygge deres bygninger. Men hvad er dette?\n\n`Beboerne Vender Tilbage!`\n\nNu da Drag'en er flygtet bevæger tusindvis af glinsende farver sig gennem havet. Det er en regnbuesværm af Knælerrejer... og mellem dem, hundredevis af havfolk!\n\n\"Vi er de fortable beboere fra Forhaling!\" forklarer deres leder, Manta. \"Da Forhaling sank brugte Knælerrejerne, der boede i havet, en fortryllelse, der gjorde os til havfolk så vi kunne overleve. Men i sin vrede fangede Den Frygtelige Drag'e os i den mørke sprække. Vi har været fanget dér i hundredevis af år - men nu er vi endelig frie til at genopbygge vores by!\"\n\n\"Som tak,\" siger hans ven @Ottl, \"giver vi jer dette Knælerreje-kæledyr og dette Knælerreje-ridedyr, samt XP, Guld og vores evige taknemmelighed.\"\n\n`Belønning`\n* Knælerreje-kæledyr\n* Knælerreje-ridedyr\n* Chokolade, Blå Candyfloss, Lyserød Candyfloss, Fisk, Honning, Kød, Mælk, Kartoffel, Råddent Kød, Jordbær", "questSeahorseText": "Forhalings-Derby", "questSeahorseNotes": "Det er Derby-dag, og Habitikanere fra hele kontinentet er rejst til Forhaling for at få deres kælesøheste til at svømme væddeløb. Pludselig er der en masse plask, og en snerren kan høres over hele væddeløbsbanen, og du kan høre Søhestepasseren @Kiwibot råbe over bølgernes brusen. \"Samlingen af søheste har tiltrukket en bidsk Søhingst!\" råber hun. \"Han ødelægger alle staldende og den ældgamle bane! Kan nogen berolige ham?\"", @@ -259,7 +259,7 @@ "questCheetahDropCheetahEgg": "Gepard (Æg)", "questCheetahUnlockText": "Åbner for køb af Gepardæg på Markedet", "questHorseText": "Tag på Mare-Ridt", - "questHorseNotes": "Mens du slapper af i Værtshuset med @beffymaroo og @JessicaChase falder snakken over i godhjertet pralen om dine eventyrlige bedrifter. Stolt af dine handlinger, og måske en smule over gevind, du siger, at du kan løse enhver opgave det skulle være. En fremmed ved et bord tæt ved vender sig mod dig og smiler. Det ene øje glimter, da han beder dig om at bevise din påstand ved at ride hans hest. \nMens I alle går mod stalden, @UncommonCriminal hvisker: \"Du har måske taget munden lidt for fuld. Det er ikke nogen almindelig hest - det bliver et Mare-Ridt!\" Da du ser dyrets stampende hove begynder du at fortryde dine ord...", + "questHorseNotes": "Mens du slapper af i Værtshuset med @beffymaroo og @JessicaChase falder snakken over i godhjertet pralen om dine eventyrlige bedrifter. Stolt af dine handlinger, og måske en smule over gevind, du siger, at du kan løse enhver opgave det skulle være. En fremmed ved et bord tæt ved vender sig mod dig og smiler. Det ene øje glimter, da han beder dig om at bevise din påstand ved at ride hans hest. \nMens I alle går mod stalden, @UncommonCriminal hvisker: \"Du har måske taget munden lidt for fuld. Det er ikke nogen almindelig hest - det bliver et Mare-Ridt!\" Da du ser dyrets stampende hove begynder du at fortryde dine ord...", "questHorseCompletion": "Det kræver alle dine færdigheder, men til slut stamper hesten med sine hove, og sætter mulen mod din skulder, før den giver dig lov til at sætte dig op. Du rider kortvarigt, men stolt rundt i Værtshuset mens dine venner råber opmuntrende. Den fremmede bryder ud i et bredt smil.\n\"Jeg kan se, det ikke var tom pralen! Din beslutsomhed er i sandhed imponerende. Tag disse æg og opdræt dine gene heste, og en dag vil vi måske mødes igen.\" Du tage æggene. Den fremmede kipper med hatten... og forsvinder.", "questHorseBoss": "Ride-Mare", "questHorseDropHorseEgg": "Hest (Æg)", @@ -567,8 +567,8 @@ "questPterodactylDropPterodactylEgg": "Pterodactyl (Egg)", "questPterodactylUnlockText": "Unlocks purchasable Pterodactyl eggs in the Market", "questBadgerText": "Stop Badgering Me!", - "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", - "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", + "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", + "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", "questBadgerBoss": "The Badgering Bother", "questBadgerDropBadgerEgg": "Badger (Egg)", "questBadgerUnlockText": "Unlocks purchasable Badger eggs in the Market", diff --git a/website/common/locales/da/settings.json b/website/common/locales/da/settings.json index d17fc295c6..fd2dce38a0 100644 --- a/website/common/locales/da/settings.json +++ b/website/common/locales/da/settings.json @@ -55,7 +55,6 @@ "APIToken": "API-nøgle (det er et kodeord - se advarsel ovenfor!)", "showAPIToken": "Vis API-nøgle", "hideAPIToken": "Skjul API-nøgle", - "APITokenWarning": "Hvis du har brug for en ny API-nøgle (f.eks. hvis du har delt den ved et uheld), så send en e-mail til <%= hrefTechAssistanceEmail %> med dit Bruger-ID og din nuværende Nøgle. Når den er nulstillet, skal du godkende alt på ny ved at logge ud af hjemmesiden og mobil-appen, og forsyne alle dine andre Habitica-værktøjer med den nye nøgle.", "thirdPartyApps": "Tredjeparts-apps", "resetDo": "Gør det, nulstil min konto!", "resetComplete": "Nulstilling gennemført!", @@ -89,7 +88,7 @@ "invitedGuild": "Du fik en Klaninvitation", "importantAnnouncements": "Påmindelser om check-in for at fuldføre opgaver og modtage belønninger", "weeklyRecaps": "Oversigt over aktiviteter på din konto den sidste uge (Bemærk: dette er midlertidigt slået fra grundet ydelsesproblemer, men vi håber snarest at have det oppe at køre og sende e-mails igen!)", - "onboarding": "Hjælp til opsætning af din Habitica-konto", + "onboarding": "Hjælp til opsætning af din Habitica-konto", "majorUpdates": "Vigtige meddelelser", "questStarted": "Din Quest er begyndt", "invitedQuest": "Questinvitation", diff --git a/website/common/locales/de/backgrounds.json b/website/common/locales/de/backgrounds.json index 737ed1b1ed..4ad2977022 100644 --- a/website/common/locales/de/backgrounds.json +++ b/website/common/locales/de/backgrounds.json @@ -906,5 +906,11 @@ "backgroundTrailThroughAForestNotes": "Wandere einen Weg Durch Einen Wald entlang.", "backgrounds062025": "SET 133: Veröffentlicht im Juni 2025", "backgroundSummerSeashoreText": "Sommer Meeresstrand", - "backgroundSummerSeashoreNotes": "Erwisch eine Welle an einem Sommer Meeresstrand." + "backgroundSummerSeashoreNotes": "Erwisch eine Welle an einem Sommer Meeresstrand.", + "backgrounds072025": "SET 134: Veröffentlicht im Juli 2025", + "backgroundSirensLairText": "Höhle der Sirene", + "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." } diff --git a/website/common/locales/de/character.json b/website/common/locales/de/character.json index 3ab5f84462..cba17c0955 100644 --- a/website/common/locales/de/character.json +++ b/website/common/locales/de/character.json @@ -83,7 +83,7 @@ "allocatePerPop": "Erhöhe Wahrnehmung um einen Punkt", "allocateInt": "Zugewiesene Intelligenzpunkte:", "allocateIntPop": "Erhöhe Intelligenz um einen Punkt", - "noMoreAllocate": "Jetzt, nach dem Erreichen von Level 100, wirst Du keine weiteren Attributpunkte erhalten. Du kannst weiterspielen, oder ein neues Abenteuer auf Level 1 anfangen, in dem Du die Sphäre der Wiedergeburt benutzt!", + "noMoreAllocate": "Jetzt, nach dem Erreichen von Level 100, wirst Du keine weiteren Attributpunkte erhalten. Du kannst weiter aufsteigen oder ein neues Abenteuer auf Level 1 anfangen, indem Du die Sphäre der Wiedergeburt benutzt!", "stats": "Attributwerte", "strength": "Stärke", "strText": "Stärke erhöht die Wahrscheinlichkeit zufälliger \"kritischer Treffer\" und die Rate mit der durch sie Gold, Beute und Erfahrung gewonnen wird. Und hilft auch dabei, Boss-Monstern Schaden zuzufügen.", @@ -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!", "optOutOfClasses": "Später entscheiden", "chooseClass": "Wähle Deine Klasse", - "chooseClassLearnMarkdown": "[Erfahre mehr über Habiticas Klassensystem](https://habitica.fandom.com/de/wiki/Klassen)", - "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.", + "chooseClassLearnMarkdown": "[Erfahre mehr über Habiticas Klassensystem](/static/faq#what-classes)", + "optOutOfClassesText": "Noch nicht bereit zu wählen? Keine Eile! Wenn du ablehnst, kannst du zu jeder Klasse in unseren FAQ nachlesen und in den Einstellungen das Klassen-System aktivieren, wenn du bereit bist.", "selectClass": "Wähle <%= heroClass %>", "select": "Auswählen", "stealth": "Schleichen", @@ -184,8 +184,8 @@ "chatCastSpellUser": "<%= username %> wendet <%= spell %> auf <%= target %> an.", "purchasePetItemConfirm": "Dieser Einkauf würde die Anzahl der Gegenstände überschreiten, die Du zum Schlüpfen aller möglichen <%= itemText %>-Tiere benötigst. Bist du sicher?", "notEnoughGold": "Nicht genügend Gold.", - "chatCastSpellPartyTimes": "<%= username %> verwendet <%= spell %> <%= times %> Male für Deine Party <%= times %>.", - "chatCastSpellUserTimes": "<%= username %> spricht <%= times %> mal <%= spell %> auf <%= target %>.", + "chatCastSpellPartyTimes": "<%= username %> wendet <%= spell %> <%= times %> mal für Deine Party an.", + "chatCastSpellUserTimes": "<%= username %> wendet <%= times %> mal <%= spell %> auf <%= target %> an.", "nextReward": "Nächste Anmelde-Belohnung", "skins": "Hautfarben", "titleHaircolor": "Haarfarben", diff --git a/website/common/locales/de/contrib.json b/website/common/locales/de/contrib.json index f9dc546954..41e2428cd2 100644 --- a/website/common/locales/de/contrib.json +++ b/website/common/locales/de/contrib.json @@ -40,10 +40,10 @@ "backerTier": "Trägerstufe", "playerTiers": "Spielerstufen", "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!", "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!", - "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 Edelsteine, exklusive Ausrüstung und angesehene Titel verdient. Auch Du kannst Habitica unterstützen! Hier erfährst Du mehr dazu.", + "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 Edelsteine, exklusive Ausrüstung und angesehene Titel verdient. Auch Du kannst Habitica unterstützen! Hier erfährst Du mehr dazu.", "noPrivAccess": "Du besitzt nicht die erforderlichen Berechtigungen." } diff --git a/website/common/locales/de/faq.json b/website/common/locales/de/faq.json index 9c7d00d46f..97d1889e65 100644 --- a/website/common/locales/de/faq.json +++ b/website/common/locales/de/faq.json @@ -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.", "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.", - "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": "Linguists
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 Übersetzungswebsite.", "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\"", @@ -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.", "sunsetFaqPara6": "Der Service für Tavernen sowie öffentliche und private Gilden endet und diese Räume werden am August 8, 2023 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.", - "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.", "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 1. August 2023eine 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.", "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?", - "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." } diff --git a/website/common/locales/de/front.json b/website/common/locales/de/front.json index 0f971bea70..6ab49517df 100644 --- a/website/common/locales/de/front.json +++ b/website/common/locales/de/front.json @@ -25,32 +25,32 @@ "invalidEmail": "Um das Passwort zurückzusetzen, ist eine gültige E-Mail-Adresse notwendig.", "login": "Anmelden", "logout": "Abmelden", - "marketing1Header": "Verbessere spielerisch Deinen Lebensstil mit Habitica", - "marketing1Lead1Title": "Dein Leben, das Rollenspiel", - "marketing1Lead1": "Habitica ist ein Computerspiel, welches Dir dabei hilft, Deine Gewohnheiten im realen Leben zu verbessern. Es \"gamifiziert\" Dein Leben, indem es all Deine Aufgaben (Gewohnheiten, Tagesaufgaben und To-Dos) in kleine Monster verwandelt, die Du besiegen musst. Je besser Du Dich dabei anstellst, umso weiter kommst Du im Spiel. Wenn Du in Deinem realen Leben nachlässt, beginnt Dein Charakter im Spiel zurückzufallen.", - "marketing1Lead2Title": "Bekomme coole Ausrüstung", - "marketing1Lead2": "Verbessere Deine Gewohnheiten, um Deinen Avatar aufzubauen. Gib' ordentlich an mit all der Ausrüstung, die Du verdient hast!", - "marketing1Lead3Title": "Finde zufällige Preise", - "marketing1Lead3": "Für manche ist es das Glücksspiel, was sie motiviert: das System der \"zufälligen Belohnungen\". Habitica kombiniert alle Stile des bestärkenden Lernens: positiv, negativ, erwartet oder zufällig.", - "marketing2Header": "Messe Dich mit Freunden", + "marketing1Header": "Verbessere deine Gewohnheiten mit jedem Level!", + "marketing1Lead1Title": "Mache dein Leben zum 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", + "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", + "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": "Schließe dich mit Freunden zusammen", "marketing2Lead1Title": "Soziale Produktivität", - "marketing2Lead1": "Obwohl Du Habitica im Alleingang spielen kannst, wird es erst richtig spaßig, wenn Du anfängst, mit anderen zusammenzuarbeiten, zu wetteifern und einander zur Verantwortung zu ziehen. Der effektivste Teil von allen Persönlichkeitsentwicklungsprogrammen ist die soziale Verantwortlichkeit - und wo gibt es eine bessere Umgebung für Verantwortung und Wettkampf als in einem Videospiel?", - "marketing2Lead2Title": "Bezwinge Monster", - "marketing2Lead2": "Was ist schon ein Rollenspiel ohne Kämpfe? Bezwinge Monster mit Deiner Party. Monster sind der \"super Verantwortlichkeitsmodus\": wenn Du an einem Tag nicht ins Fitnessstudio gehst, dann verletzt das Monster *alle!*", + "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", + "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", - "marketing2Lead3": "Bei Herausforderungen kannst Du Dich mit Freunden und Unbekannten messen. Wer sich bis zum Ende der Herausforderung am besten schlägt, gewinnt besondere Preise.", - "marketing3Header": "Apps und Erweiterungen", - "marketing3Lead1": "Mit den **iPhone & Android** Apps kannst Du alles von Unterwegs erledigen. Wir wissen, dass sich auf einer Webseite einzuloggen, um Knöpfe zu drücken, manchmal anstrengend sein kann.", - "marketing3Lead2Title": "Einbindungen", - "marketing3Lead2": "Andere **Tools von Drittanbietern** binden Habitica in unterschiedlichen Bereichen Deines Lebens ein. Unser API stellt eine einfache Verknüpfung z.B. mit [Chrome Extension](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US) her, die es ermöglicht, für das Besuchen unproduktiver Webseiten Punkte zu verlieren oder für das Besuchen produktiver Webseiten Punkte zu erhalten. [Mehr dazu hier](https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).", - "marketing4Header": "Verwendung für Organisationen", - "marketing4Lead1": "Bildung ist einer der besten Bereiche für Gamifizierung. Wir wissen alle, wie sehr Schüler*innen dieser Tage an ihren Handys und Spielen hängen; nutze diese Macht! Lasse sie in freundlichen Wettbewerben gegeneinander antreten und belohne gutes Verhalten mit seltenen Preisen. Schaue zu, wie sich ihre Noten und ihr Verhalten verbessern.", - "marketing4Lead1Title": "Betrachtungswinkel Ausbildung", - "marketing4Lead2": "Die Kosten für medizinische Versorgung steigen und irgendjemand muss sie tragen. Zahlreiche Pläne wurden entwickelt, um Kosten zu reduzieren und das Wohlbefinden zu verbessern. Wir glauben, dass Habitica einen wesentlichen Beitrag zu gesünderen Lebensstilen leisten kann.", - "marketing4Lead2Title": "Betrachtungswinkel Gesundheit und Erholung", - "marketing4Lead3-1": "Willst Du Dein Leben einmal als Spiel betrachten?", + "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": "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.", + "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!", + "marketing4Header": "Mehr als nur Hausarbeit", + "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", + "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", + "marketing4Lead3-1": "Bereit Spaß zu haben beim Erledigen von Aufgaben?", "marketing4Lead3-2": "Willst Du eine Gruppe für Ausbildung, Wohlbefinden usw. leiten?", - "marketing4Lead3Title": "Mache Alles zum Spiel", + "marketing4Lead3Title": "Starte deine Reise!", "mobileAndroid": "Android App", "mobileIOS": "iOS App", "oldNews": "Neuigkeiten", @@ -111,7 +111,7 @@ "missingPassword": "Fehlendes Passwort.", "missingNewPassword": "Fehlendes neues Passwort.", "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.", "notAnEmail": "Ungültige E-Mail-Adresse.", "emailTaken": "Diese E-Mail-Adresse wird bereits von einem Konto verwendet.", @@ -180,5 +180,8 @@ "emailUsernamePlaceholder": "z.B., habitrabbit oder gryphon@beispiel.com", "footerProduct": "Produkt", "incorrectResetPhrase": "Bitte tippe <%= magicWord %> in Großbuchstaben um deinen Account zurückzusetzen.", - "translateHabitica": "Habitica übersetzen" + "translateHabitica": "Habitica übersetzen", + "marketing3Lead1Title": "Android & iOS Apps", + "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." } diff --git a/website/common/locales/de/gear.json b/website/common/locales/de/gear.json index 5f907848f3..2d5c2fba17 100644 --- a/website/common/locales/de/gear.json +++ b/website/common/locales/de/gear.json @@ -2485,7 +2485,7 @@ "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.", "armorSpecialWinter2022RogueText": "Strahlende Explosion", - "armorSpecialWinter2022WarriorText": "Samtiger Strumpf", + "armorSpecialWinter2022WarriorText": "Flauschiger Strumpf", "armorSpecialWinter2022MageText": "Granatapfel-Schutzrüstung", "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.", @@ -2494,7 +2494,7 @@ "headSpecialWinter2022MageText": "Granatapfelhelm", "headSpecialWinter2022HealerText": "Kristallklare Krone aus Eis", "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.", "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", @@ -2708,7 +2708,7 @@ "weaponSpecialWinter2023RogueText": "Grüne Satin Schärpe", "weaponSpecialWinter2023WarriorText": "Stoßzahn Speer", "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", "weaponSpecialSummer2023WarriorText": "Wasserelementar-Schwert", "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).", "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).", - "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).", - "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).", + "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ßes Lounge-Kleidungsset (Gegenstand 2 von 3).", "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).", "armorArmoireYellowStripedSwimsuitText": "Gelb gestreifter Badeanzug", @@ -2954,7 +2954,7 @@ "armorArmoireGreenFluffTrimmedCoatText": "Mantel mit grünem Flauschband", "armorArmoireSchoolUniformSkirtText": "Schuluniform mit Rock", "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).", "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)", @@ -3084,7 +3084,7 @@ "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.", "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", "headMystery202304Notes": "Dieser Helm gewährt dir Immuni-Tee-t. April 2023 Abonnentengegenstand.", "headMystery202310Text": "Narrenkappe", @@ -3295,7 +3295,7 @@ "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.", "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", "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).", @@ -3329,5 +3329,51 @@ "weaponSpecialSummer2025RogueText": "Tintenfisch Tentakel", "weaponSpecialSummer2025RogueNotes": "Dieser Tentakel wird deine Ziele eng umklammern, so dass du den Schwung nicht verlierst, wenn du deine Aufgaben erledigst. Erhöht Stärke um <%= str %>. Limitierte Ausgabe Sommerausrüstung 2025.", "weaponSpecialSummer2025HealerText": "Ruderschnecken Flügelpaddel", - "weaponSpecialSummer2025HealerNotes": "Beschreibe rudernd einen Doppelkreis, während du dich vorwärts bewegst, und bei deinen Aufgaben tolle Fortschritte machst. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe Sommerausrüstung 2025." + "weaponSpecialSummer2025HealerNotes": "Beschreibe rudernd einen Doppelkreis, während du dich vorwärts bewegst, und bei deinen Aufgaben tolle Fortschritte machst. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe Sommerausrüstung 2025.", + "weaponArmoireBeekeepersSmokerNotes": "Benutze dies, um deine Bienen zu beruhigen, damit du den Honig besser holen kannst. Die Bienen wird es nicht stören. Ehrlich, wir alle könnten von Zeit zu Zeit ein paar extra Minuten Ruhe gebrauchen. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Imker Set (Gegenstand 3 von 4)", + "weaponArmoireBeekeepersSmokerText": "Smoker", + "armorSpecialSummer2025WarriorText": "Kammmuschel Rüstung", + "armorSpecialSummer2025WarriorNotes": "Diese Rüstung macht dich nicht nur robust, sondern auch schnell. Kampf oder Flucht - es ist deine Wahl! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe Sommerausrüstung 2025.", + "armorSpecialSummer2025RogueNotes": "Dieser Anzug ändert nicht nur nach Lust und Laune seine Farbe, sondern kann auch eine Tintenwolke ausstoßen. Ablenken oder Tarnen - du hast die Wahl! Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe Sommerausrüstung 2025.", + "armorSpecialSummer2025RogueText": "Tintenfisch Anzug", + "armorSpecialSummer2025HealerText": "Ruderschnecken Anzug", + "armorSpecialSummer2025HealerNotes": "Dieser Anzug macht dich nicht nur anmutig, sondern auch stromlinienförmig. Treibe oder schwimme - du hast die Wahl! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe Sommerausrüstung 2025.", + "armorSpecialSummer2025MageText": "Zwerglippfisch Anzug", + "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", + "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 Sommer 2025 Ausrüstung.", + "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", + "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.", + "headSpecialSummer2025RogueText": "Tintenfischmaske", + "headSpecialSummer2025HealerText": "Ruderschnecken Helm", + "headSpecialSummer2025HealerNotes": "Glückwunsch, jetzt bist du ein Seeschmetterling. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe Sommerausrüstung 2025.", + "headSpecialSummer2025MageText": "Feenlippfisch Kopfschmuck", + "headSpecialSummer2025MageNotes": "Alle werden davon hypnotisiert sein, wie sich deine Flossen mit der Strömung bewegen. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe Sommerausrüstung 2025.", + "headMystery202507Notes": "Umgedrehte Mützen sind immer noch cool, oder? Gewährt keinen Attributbonus. Juli 2025 Abonnentengegenstand.", + "headMystery202507Text": "Draufgängerische Skater Mütze", + "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)", + "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." } diff --git a/website/common/locales/de/generic.json b/website/common/locales/de/generic.json index e40290b140..abb3addc78 100644 --- a/website/common/locales/de/generic.json +++ b/website/common/locales/de/generic.json @@ -189,7 +189,7 @@ "dismissAll": "Alle entfernen", "messages": "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": "<%- user %> hat Dir eine Nachricht gesendet", "letsgo": "Auf geht's!", "selected": "Ausgewählt", diff --git a/website/common/locales/de/npc.json b/website/common/locales/de/npc.json index c32652d7b3..3df3cf717f 100644 --- a/website/common/locales/de/npc.json +++ b/website/common/locales/de/npc.json @@ -79,7 +79,7 @@ "newBaileyUpdate": "Neues Update von Bailey!", "tellMeLater": "Erzähl es mir später", "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", "paymentMethods": "Kauf mit", "paymentSuccessful": "Die Zahlung war erfolgreich!", @@ -125,7 +125,7 @@ "limitedAvailabilityMinutes": "Für <%= minutes %>min <%= seconds %>sek 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", - "amountExp": "<%= amount %> Exp", + "amountExp": "<%= amount %> XP", "helpSupportHabitica": "Hilf dabei, Habitica zu unterstützen", "groupsPaymentSubBilling": "Dein nächstes Rechnungsdatum ist <%= renewalDate %>.", "groupsPaymentAutoRenew": "Dieses Abonnement läuft automatisch weiter, bis es gekündigt wird. Du kannst es im Gruppen-Abrechnungs-Tab kündigen.", diff --git a/website/common/locales/de/questscontent.json b/website/common/locales/de/questscontent.json index 2c22c3d202..1e8a9fb2dd 100644 --- a/website/common/locales/de/questscontent.json +++ b/website/common/locales/de/questscontent.json @@ -161,7 +161,7 @@ "questOwlDropOwlEgg": "Eule (Ei)", "questOwlUnlockText": "Schaltet den Kauf von Euleneiern auf dem Marktplatz frei", "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.

\"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!\"

\"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 abkühlen 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.

\"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!\"

\"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 abkühlen.", "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.

@Rattify lacht. \"Vielleicht werden diese Pinguine ein bisschen ... gechillter sein?\"", "questPenguinBoss": "Frostpinguin", "questPenguinDropPenguinEgg": "Pinguin (Ei)", @@ -289,7 +289,7 @@ "questSnakeDropSnakeEgg": "Schlange (Ei)", "questSnakeUnlockText": "Schaltet den Kauf von Schlangeneiern auf dem Marktplatz frei", "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.", "questUnicornBoss": "Die Einhornkönigin", "questUnicornDropUnicornEgg": "Einhorn (Ei)", @@ -314,8 +314,8 @@ "questSnailUnlockText": "Schaltet den Kauf von Schneckeneiern auf dem Marktplatz frei", "questBewilderText": "Der Verwirrer", "questBewilderNotes": "Die Party beginnt wie jede Andere.

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.

Als die Uhr des Mistiflying Uhrturms Mitternacht schlägt, springt der April-Scherzkeks auf die Bühne um eine Rede zu halten.

\"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.

\"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!\"

Lemoness wird plötzlich bleich und lässt ihre Häppchen fallen. \"Wartet! Traut ihm ni--\"

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.

\"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!\"

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.

\"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!\"

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.

PainterProphet duckt sich, als Blitze über den Himmel schießen und Nebel die Sonne verdunkelt. \"Nein! Diesmal ist es glaube ich kein Scherz!\"

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": "Der Verwirrer ist BESIEGT!

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.

Mistiflying ist gerettet!

Der April-Scherzkeks schämt sich immerhin genug, um etwas verlegen dazustehen. \"Oh, ähm,\" sagt er. \"Vielleicht habe ich mich ein wenig ... gehen lassen.\"”

Die Menschenmenge murrt. Durchnässte Blumen werden auf Gehsteigen angeschwemmt. Irgendwo in der Ferne stürzt ein Dach mit spektakulärem Krachen ein.

\"Ä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.\"

Redphoenix räuspert sich vielsagend.

\"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.\"

Ermuntert beginnt die Kapelle zu spielen.

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.

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.\"", - "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.\"", + "questBewilderCompletion": "Der Verwirrer ist BESIEGT!

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.

Mistiflying ist gerettet!

Der April-Scherzkeks schämt sich immerhin genug, um etwas verlegen dazustehen. \"Oh, ähm,\" sagt er. \"Vielleicht habe ich mich ein wenig ... gehen lassen.\"”

Die Menschenmenge murrt. Durchnässte Blumen werden auf Gehsteigen angeschwemmt. Irgendwo in der Ferne stürzt ein Dach mit spektakulärem Krachen ein.

\"Ä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.\"

Redphoenix räuspert sich vielsagend.

\"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.\"

Ermuntert beginnt die Kapelle zu spielen.

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.

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\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", "questBewilderBossRageDescription": "Wenn dieser Balken voll ist, wird der Verwirrer seinen Wirrschlag über Habitica entfesseln!", "questBewilderDropBumblebeePet": "Magische Biene (Haustier)", @@ -409,7 +409,7 @@ "questMoon1CollectShards": "Mondscherben", "questMoon1DropHeadgear": "Mondkriegerhelm (Kopfbedeckung)", "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.\"", "questMoon2Boss": "Überschattender Stress", "questMoon2DropArmor": "Mondkriegerrüstung (Rüstung)", @@ -473,7 +473,7 @@ "questButterflyUnlockText": "Schaltet den Kauf von Raupeneiern auf dem Marktplatz frei", "questGroupMayhemMistiflying": "Chaos in Mistiflying", "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.

Keiner von euch hat den April-Scherzkeks erwartet, der am Küchentisch lehnt.

“Oh, hallo”, sagt er. “Wie schön, euch zu sehen. Darf ich euch etwas von diesem köstlichen Tee anbieten?”

“Das...” setzt @Kiwibot an. “Das ist MEIN—”

“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.”

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.

Keiner von euch hat den April-Scherzkeks erwartet, der am Küchentisch lehnt.

“Oh, hallo”, sagt er. “Wie schön, euch zu sehen. Darf ich euch etwas von diesem köstlichen Tee anbieten?”

“Das...” setzt @Kiwibot an. “Das ist MEIN—”

“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.”

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.", "questMayhemMistiflying1Boss": "Luftschädelschwarm", "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.", "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!", - "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!", "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!", @@ -588,7 +588,7 @@ "questsRageStrikeHeader": "Der Questladen wurde angegriffen!", "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!", - "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!", "questDysheartenerDropHippogriffPet": "Hoffnungsfroher Hippogreif (Haustier)", "questDysheartenerDropHippogriffMount": "Hoffnungsfroher Hippogreif (Reittier)", @@ -706,7 +706,7 @@ "questWindupText": "Zähme die zankenden Zahnräder", "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.

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!\"

\"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...\"

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.

\"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.

\"Kä-! Kä-! Kä-!\" klingelt er, die Arme umher werfend. Sein Getriebe malt und quietscht unter Protest.

\"Mein Roboter \"Klangton\" ist verrückt geworden! Er will mich umbringen!\" kreischt der angeblich mächtige Uhrmacher.

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!

\"Kä-! Kä-! Kä-!\", singt Klangton bei jedem Schlag. \"Miau!\"

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.

\"Ki-! Ki-! Ki!\" klingelt er, die Arme umher werfend. Sein Getriebe malt und quietscht unter Protest.

\"Mein Roboter \"Klangton\" ist verrückt geworden! Er will mich umbringen!\" kreischt der angeblich mächtige Uhrmacher.

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!

\"Ki-! Ki-! Ki!\", singt Klangton bei jedem Schlag. \"Miau!\"

Moment mal, war das ein mechanisches Miauen inmitten der mörderischen Monotonie?", "questTurquoiseText": "Türkisgrüne Schatzsuchtortur", "questTurquoiseUnlockText": "Schaltet den Kauf von Türkisen Schlüpfelixieren auf dem Marktplatz frei", "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!", "questPlatypusRageEffect": "Das Perfektionisten Schnabeltier taucht unter Wasser und spritzt dich naß! Die MP deiner Party sind reduziert!", "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!

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!

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.

„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.

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!

„Jetzt verstehe ich!“, sagst Du dem Otter, „dieser Quatsch hat mir tatsächlich geholfen, darüber nachzudenken, welche Aufgaben ich priorisieren muss.“

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.

„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.“

Du siehst auf dein durchnässtes Arbeitsblatt. „Ja …“

„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!

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.

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.

„Warum hast du das gemacht? Jetzt muss das jemand nochmal machen!“, beklagst du dich.

„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!“

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.

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.

„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.

„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ß …“

„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.

„Beschreiben Sie, wie sich ein Tier an das Leben im Fluss anpassen könnte? Puh, keine Ahnung…“

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.

„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.

„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.

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" } diff --git a/website/common/locales/de/settings.json b/website/common/locales/de/settings.json index 5a33780398..85c302b485 100644 --- a/website/common/locales/de/settings.json +++ b/website/common/locales/de/settings.json @@ -55,7 +55,6 @@ "APIToken": "API-Token (Das ist ein Passwort – die obige Warnung gilt auch hier!)", "showAPIToken": "API-Token anzeigen", "hideAPIToken": "API-Token verbergen", - "APITokenWarning": "Wenn Du einen neuen API-Token brauchst (z.B. weil Du ihn versehentlich geteilt hast), schreibe eine E-Mail an <%= hrefTechAssistanceEmail %> mit Deiner Benutzer ID und dem aktuellen Schlüssel. Sobald er zurückgesetzt ist, wirst Du Dich auf der Webseite und der mobilen App aus- und neu einloggen müssen und den Schlüssel in jedem anderen Habitica Tool, das Du nutzt, einstellen müssen.", "thirdPartyApps": "Apps von Drittanbietern", "resetDo": "Ja, setzt mein Konto jetzt zurück!", "resetComplete": "Zurückgesetzt!", @@ -117,7 +116,7 @@ "generate": "Erstelle", "getCodes": "Codes erhalten", "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.

Weitere Informationen und Beispiele findest Du bei den API Docs.", + "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.

Weitere Informationen und Beispiele findest Du bei den API Docs.", "enabled": "Aktiviert", "webhookURL": "WebHook-URL", "invalidUrl": "Ungültige URL", @@ -197,7 +196,7 @@ "giftSubscriptionRateText": "$<%= price %> $(USD) für <%= months %> Monate", "transaction_admin_update_balance": "Admin gegeben", "transaction_admin_update_hourglasses": "Admin aktualisiert", - "transaction_create_bank_challenge": "Bankherausforderung erstellt", + "transaction_create_bank_challenge": "Bank-Herausforderung erstellt", "passwordIssueLength": "Passwörter müssen zwischen 8 und 64 Zeichen lang sein.", "timestamp": "Zeitstempel", "amount": "Menge", @@ -242,7 +241,7 @@ "addWebhook": "Webhook hinzufügen", "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.", - "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.", "enableAudio": "Aktiviere Audio", "playDemoAudio": "Spiele Demo ab", @@ -256,7 +255,7 @@ "connected": "Verbunden", "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.", - "APITokenDisclaimer": "Dein API Token ist wie ein Passwort. Teile es nicht öffentlich.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.

Hinweis: Wenn du ein neues API Token brauchst (z.B., wenn du es aus Versehen geteilt hast), schreib eine Email an admin@habitica.com 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": "Dein API-Schlüssel ist wie ein Passwort. Teile ihn niemals öffentlich. Du wirst ggf. nach deiner Benutzer-ID gefragt, aber schreibe deinen API-Schlüssel niemals dort, wo andere ihn sehen könnten bspw. Github.

Hinweis: 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 Habitica Wiki.", "transaction_subscription_bonus": "Abonnement-Bonus" } diff --git a/website/common/locales/de/subscriber.json b/website/common/locales/de/subscriber.json index abdd84c219..c2aa877e12 100644 --- a/website/common/locales/de/subscriber.json +++ b/website/common/locales/de/subscriber.json @@ -21,7 +21,7 @@ "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!", "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.", "mysterySetNotFound": "Überraschungsset nicht gefunden, oder Set wurde bereits erworben.", "mysteryItemIsEmpty": "Mysteriöse Gegenstände sind leer", @@ -264,5 +264,7 @@ "mysterySet202503": "Jade Juggernaut Set", "mysterySet202504": "Scheues Yeti Set", "mysterySet202505": "Hochfliegender Schwalbenschwanz Set", - "mysterySet202506": "Sonnenschein Set" + "mysterySet202506": "Sonnenschein Set", + "mysterySet202507": "Draufgängerisches Skater Set", + "mysterySet202508": "Strahlendes Klingen Set" } diff --git a/website/common/locales/en/admin.json b/website/common/locales/en/admin.json new file mode 100644 index 0000000000..9e21dcc161 --- /dev/null +++ b/website/common/locales/en/admin.json @@ -0,0 +1,7 @@ +{ + "adminPanel": "Admin Panel", + "siteBlockers": "Site Blockers", + "newsroom": "Newsroom", + "adminBlockerTypeDescription": "IP-Address - 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." +} diff --git a/website/common/locales/en/backgrounds.json b/website/common/locales/en/backgrounds.json index f8d1b582ff..8b9b760f39 100644 --- a/website/common/locales/en/backgrounds.json +++ b/website/common/locales/en/backgrounds.json @@ -1035,6 +1035,9 @@ "backgroundSirensLairText": "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", "backgroundAirshipText": "Airship", "backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.", diff --git a/website/common/locales/en/front.json b/website/common/locales/en/front.json index 003a6f0247..62eb77db5a 100644 --- a/website/common/locales/en/front.json +++ b/website/common/locales/en/front.json @@ -26,32 +26,34 @@ "invalidEmail": "A valid email address is required in order to perform a password reset.", "login": "Login", "logout": "Log Out", - "marketing1Header": "Improve Your Habits by Playing a Game", - "marketing1Lead1Title": "Your Life, the Role Playing Game", - "marketing1Lead1": "Habitica is a video game to help you improve real life habits. It \"gamifies\" your life by turning all your tasks (Habits, Dailies, and To Do's) into little monsters you have to conquer. The better you are at this, the more you progress in the game. If you slip up in life, your character starts backsliding in the game.", - "marketing1Lead2Title": "Get Sweet Gear", - "marketing1Lead2": "Improve your habits to build up your avatar. Show off the sweet gear you've earned!", - "marketing1Lead3Title": "Find Random Prizes", - "marketing1Lead3": "For some, it's the gamble that motivates them: a system called \"stochastic rewards.\" Habitica accommodates all reinforcement and punishment styles: positive, negative, predictable, and random.", - "marketing2Header": "Compete with Friends", - "marketing2Lead1Title": "Social Productivity", - "marketing2Lead1": "While you can play Habitica solo, the lights really turn on when you start collaborating, competing, and holding each other accountable. The most effective part of any self-improvement program is social accountability, and what better an environment for accountability and competition than a video game?", - "marketing2Lead2Title": "Fight Monsters", - "marketing2Lead2": "What's a Role Playing Game without battles? Fight monsters with your party. Monsters are \"super accountability mode\" - a day you miss the gym is a day the monster hurts *everyone!*", - "marketing2Lead3Title": "Challenge Each Other", - "marketing2Lead3": "Challenges let you compete with friends and strangers. Whoever does the best at the end of a challenge wins special prizes.", - "marketing3Header": "Apps and Extensions", - "marketing3Lead1": "The **iPhone & Android** apps let you take care of business on the go. We realize that logging into the website to click buttons can be a drag.", - "marketing3Lead2Title": "Integrations", - "marketing3Lead2": "Other **3rd Party Tools** tie Habitica into various aspects of your life. Our API provides easy integration for things like the [Chrome Extension](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US), for which you lose points when browsing unproductive websites, and gain points when on productive ones. [See more here](https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).", - "marketing4Header": "Organizational Use", - "marketing4Lead1": "Education is one of the best sectors for gamification. We all know how glued to phones and games students are these days; harness that power! Pit your students against each other in friendly competition. Reward good behavior with rare prizes. Watch their grades and behavior soar.", - "marketing4Lead1Title": "Gamification In Education", - "marketing4Lead2": "Health care costs are on the rise, and something's gotta give. Hundreds of programs are built to reduce costs and improve wellness. We believe Habitica can pave a substantial path towards healthy lifestyles.", - "marketing4Lead2Title": "Gamification In Health and Wellness", - "marketing4Lead3-1": "Want to gamify your life?", + "marketing1Header": "Build better habits one level at a time!", + "marketing1Lead1Title": "Gamify your life", + "marketing1Lead1": "Habitica is the perfect app for anyone who struggles with to-do lists. We use familiar game mechanics like rewarding you with Gold, Experience, and items to help you feel productive and boost your sense of accomplishment when you complete tasks. The better you are at your tasks, the more you progress in the game.", + "marketing1Lead2Title": "Gear up in style", + "marketing1Lead2": "Collect swords, armor, and much more with the Gold you earn from completing tasks. With hundreds of pieces to collect and choose from, you'll never run out of combinations to try. Optimize for stats, style, or both! ", + "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! ", + "marketing2Header": "Team up with friends", + "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.", + "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!", + "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!", + "marketing3Header": "More ways to use Habitica", + "marketing3Lead1Title": "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.", + "marketing3Lead2Title": "Open-Source community", + "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/habitica/wiki/Contributing-to-Habitica) to learn more!", + "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.", + "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!", + "marketing4Lead2Title": "Gamification In health and wellness", + "marketing4Lead3-1": "Ready to have fun getting things done?", "marketing4Lead3-2": "Interested in running a group in education, wellness, and more?", - "marketing4Lead3Title": "Gamify Everything", + "marketing4Lead3Title": "Start your journey!", + "marketing4Lead3Button": "Get Started Today", "mobileAndroid": "Android App", "mobileIOS": "iOS App", "oldNews": "News", @@ -107,12 +109,14 @@ "tweet": "Tweet", "checkOutMobileApps": "Check out our mobile apps!", "missingAuthHeaders": "Missing authentication headers.", + "missingClientHeader": "Missing x-client headers.", "missingUsernameEmail": "Missing username or email.", "missingEmail": "Missing email.", "missingUsername": "Missing username.", "missingPassword": "Missing password.", "missingNewPassword": "Missing new password.", "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.\"", "incorrectDeletePhrase": "Please type <%= magicWord %> in all capital letters to delete your account.", "incorrectResetPhrase": "Please type <%= magicWord %> in all capital letters to reset your account.", diff --git a/website/common/locales/en/gear.json b/website/common/locales/en/gear.json index 59b6348782..822735b8d2 100644 --- a/website/common/locales/en/gear.json +++ b/website/common/locales/en/gear.json @@ -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.", "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.", + "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", "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)", "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)", + "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", "headgearCapitalized": "Headgear", @@ -2452,7 +2456,7 @@ "headMystery202504Text": "Elusive Yeti Cowl", "headMystery202504Notes": "Wear this mysterious visage to dwell undetected among the world’s most obscure cyptids. Confers no benefit. April 2025 Subscriber Item.", "headMystery202507Text": "Spunky Skater Cap", - "headMystery202507Notes": "Backwards hats are still cool right? Confers no benefit. July 2025 Subscriber Item.", + "headMystery202507Notes": "Backwards hats are still cool, right? Confers no benefit. July 2025 Subscriber Item." "headMystery301404Text": "Fancy Top Hat", "headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.", @@ -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)", "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)", + "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", "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.", "shieldMystery202506Text": "Solar Shine Shield", "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", "shieldMystery301405Notes": "Time is on your side with this towering clock shield! Confers no benefit. June 3015 Subscriber Item.", diff --git a/website/common/locales/en/settings.json b/website/common/locales/en/settings.json index 6cf2665eda..3b653e5a65 100644 --- a/website/common/locales/en/settings.json +++ b/website/common/locales/en/settings.json @@ -87,13 +87,12 @@ "API": "API", "APICopied": "API token copied to clipboard.", "APITokenTitle": "API Token", - "APITokenDisclaimer": "Your API Token is like a password; Do not share it publicly. You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.

Note: If you need a new API Token (e.g., if you accidentally shared it), email admin@habitica.com with your User ID and current Token. Once it is reset you will need to re-authorize 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": "Your API Token is like a password; Do not share it publicly. You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.

If you need a new API Token (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.", "APIv3": "API v3", "APIText": "Copy these for use in third party applications. However, think of your API Token like a password, and do not share it publicly. You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.", "APIToken": "API Token (this is a password - see warning above!)", "showAPIToken": "Show API Token", "hideAPIToken": "Hide API Token", - "APITokenWarning": "If you need a new API Token (e.g., if you accidentally shared it), email <%= hrefTechAssistanceEmail %> with your User ID and current Token. Once it is reset you will need to re-authorize everything by logging out of the website and mobile app and by providing the new Token to any other Habitica tools that you use.", "thirdPartyApps": "Third Party Apps", "thirdPartyTools": "Find third party apps, extensions, and all kinds of other tools you can use with your account on the Habitica wiki.", "resetDo": "Do it, reset my account!", @@ -212,7 +211,7 @@ "changeUsernameDisclaimer": "Your username is used for invitations, @mentions in chat, and messaging. It must be 1 to 20 characters, containing only letters a to z, numbers 0 to 9, hyphens, or underscores, and cannot include any inappropriate terms.", "changeEmailDisclaimer": "This is the email address that you use to log in to Habitica, as well as receive notifications.", "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.", "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!", "enableAudio": "Enable Audio", diff --git a/website/common/locales/en/subscriber.json b/website/common/locales/en/subscriber.json index f4eba78f95..95331b2105 100644 --- a/website/common/locales/en/subscriber.json +++ b/website/common/locales/en/subscriber.json @@ -32,7 +32,7 @@ "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!", "timeTravelers": "Time Travelers", - "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 Travelers Shop!", "timeTravelersPopover": "Your Mystic Hourglass has opened our time portal! Choose what you’d like us to fetch from the past or future.", "mysticHourglassNeededNoSub": "This item requires a Mystic Hourglass. You earn Mystic Hourglasses by being a Habitica subscriber.", "mysterySetNotFound": "Mystery set not found, or set already owned.", @@ -176,6 +176,7 @@ "mysterySet202505": "Soaring Swallowtail Set", "mysterySet202506": "Solar Shine Set", "mysterySet202507": "Spunky Skater Set", + "mysterySet202508": "Brilliant Blade Set", "mysterySet301404": "Steampunk Standard Set", "mysterySet301405": "Steampunk Accessories Set", "mysterySet301703": "Peacock Steampunk Set", diff --git a/website/common/locales/en_GB/backgrounds.json b/website/common/locales/en_GB/backgrounds.json index 35b9bd0529..b7229708ee 100644 --- a/website/common/locales/en_GB/backgrounds.json +++ b/website/common/locales/en_GB/backgrounds.json @@ -906,5 +906,8 @@ "backgroundSummerSeashoreNotes": "在夏日海滨乘风破浪.", "backgrounds052025": "第 132 组:于2025 年 5 月发布", "backgroundTrailThroughAForestText": "穿越森林的小径", - "backgroundTrailThroughAForestNotes": "沿着穿过森林的小径漫步。" + "backgroundTrailThroughAForestNotes": "沿着穿过森林的小径漫步。", + "backgrounds072025": "SET 134: Released July 2025", + "backgroundSirensLairText": "Siren's Lair", + "backgroundSirensLairNotes": "Dare to dive into a Siren’s Lair." } diff --git a/website/common/locales/en_GB/faq.json b/website/common/locales/en_GB/faq.json index c16475f23f..2595537cfd 100644 --- a/website/common/locales/en_GB/faq.json +++ b/website/common/locales/en_GB/faq.json @@ -240,5 +240,8 @@ "sunsetFaqHeader12": "What will happen to Guild Bank Gems?", "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?", - "contactAdmin": "Contact admin@habitica.com" + "contactAdmin": "Contact admin@habitica.com", + "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." } diff --git a/website/common/locales/en_GB/front.json b/website/common/locales/en_GB/front.json index 4190009446..1970c6f45c 100644 --- a/website/common/locales/en_GB/front.json +++ b/website/common/locales/en_GB/front.json @@ -25,32 +25,32 @@ "invalidEmail": "A valid email address is required in order to perform a password reset.", "login": "Login", "logout": "Log Out", - "marketing1Header": "Improve Your Habits by Playing a Game", - "marketing1Lead1Title": "Your Life, the Role Playing Game", - "marketing1Lead1": "Habitica is a video game to help you improve real life habits. It \"gamifies\" your life by turning all your tasks (Habits, Dailies, and To Do's) into little monsters you have to conquer. The better you are at this, the more you progress in the game. If you slip up in life, your character starts backsliding in the game.", - "marketing1Lead2Title": "Get Sweet Gear", - "marketing1Lead2": "Improve your habits to build up your avatar. Show off the sweet gear you've earned!", - "marketing1Lead3Title": "Find Random Prizes", - "marketing1Lead3": "For some, it's the gamble that motivates them: a system called \"stochastic rewards.\" Habitica accommodates all reinforcement and punishment styles: positive, negative, predictable, and random.", - "marketing2Header": "Compete with Friends", - "marketing2Lead1Title": "Social Productivity", - "marketing2Lead1": "While you can play Habitica solo, the lights really turn on when you start collaborating, competing, and holding each other accountable. The most effective part of any self-improvement program is social accountability, and what better an environment for accountability and competition than a video game?", - "marketing2Lead2Title": "Fight Monsters", - "marketing2Lead2": "What's a Role Playing Game without battles? Fight monsters with your party. Monsters are \"super accountability mode\" - a day you miss the gym is a day the monster hurts *everyone!*", - "marketing2Lead3Title": "Challenge Each Other", - "marketing2Lead3": "Challenges let you compete with friends and strangers. Whoever does the best at the end of a challenge wins special prizes.", - "marketing3Header": "Apps and Extensions", - "marketing3Lead1": "The **iPhone & Android** apps let you take care of business on the go. We realise that logging into the website to click buttons can be a drag.", - "marketing3Lead2Title": "Integrations", - "marketing3Lead2": "Other **3rd Party Tools** tie Habitica into various aspects of your life. Our API provides easy integration for things like the [Chrome Extension](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US), for which you lose points when browsing unproductive websites, and gain points when on productive ones. [See more here](https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).", - "marketing4Header": "Organisational Use", - "marketing4Lead1": "Education is one of the best sectors for gamification. We all know how glued to phones and games students are these days; harness that power! Pit your students against each other in friendly competition. Reward good behavior with rare prizes. Watch their grades and behavior soar.", - "marketing4Lead1Title": "Gamification In Education", - "marketing4Lead2": "Health care costs are on the rise, and something's gotta give. Hundreds of programmes are built to reduce costs and improve wellness. We believe Habitica can pave a substantial path towards healthy lifestyles.", - "marketing4Lead2Title": "Gamification In Health And Wellness", - "marketing4Lead3-1": "Want to gamify your life?", + "marketing1Header": "Build better habits one level at a time!", + "marketing1Lead1Title": "Gamify your life", + "marketing1Lead1": "Habitica is the perfect app for anyone who struggles with to-do lists. We use familiar game mechanics like rewarding you with Gold, Experience, and items to help you feel productive and boost your sense of accomplishment when you complete tasks. The better you are at your tasks, the more you progress in the game.", + "marketing1Lead2Title": "Gear up in style", + "marketing1Lead2": "Collect swords, armor, and much more with the Gold you earn from completing tasks. With hundreds of pieces to collect and choose from, you'll never run out of combinations to try. Optimize for stats, style, or both! ", + "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! ", + "marketing2Header": "Team up with friends", + "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.", + "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!", + "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!", + "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.", + "marketing3Lead2Title": "Open-Source Community", + "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", + "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", + "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", + "marketing4Lead3-1": "Ready to have fun getting things done?", "marketing4Lead3-2": "Interested in running a group in education, wellness, and more?", - "marketing4Lead3Title": "Gamify Everything", + "marketing4Lead3Title": "Start Your Journey", "mobileAndroid": "Android App", "mobileIOS": "iOS App", "oldNews": "News", @@ -66,7 +66,7 @@ "pkQuestion3": "Why did you add social features?", "pkAnswer3": "Social pressure is a huge motivating factor for a lot of people, so we knew that we wanted to have a strong community that would hold each other accountable for their goals and cheer for their successes. Luckily, one of the things that multiplayer video games do best is foster a sense of community among their users! Habitica’s community structure borrows from these types of games. Although some users choose to play solo, most decide to form a support network in a small Party of close friends that encourages social accountability through features such as Quests, where Party members pool their productivity to battle monsters together.", "pkQuestion4": "Why does skipping tasks remove your avatar’s health?", - "pkAnswer4": "If you skip one of your daily goals, your avatar will lose health the following day. This serves as an important motivating factor to encourage people to follow through with their goals because people really hate hurting their little avatar! Plus, the social accountability is critical for a lot of people: if you’re fighting a monster with your friends, skipping your tasks hurts their avatars, too.", + "pkAnswer4": "If you skip one of your daily goals, your avatar will lose health the following day. This serves as an important motivating factor to encourage people to follow through with their goals because people really hate hurting their little avatar! Plus, the social accountability is critical for a lot of people: if you’re fighting a monster with your friends, skipping your tasks hurts their avatars, too.", "pkQuestion5": "What distinguishes Habitica from other gamification programs?", "pkAnswer5": "One of the ways that Habitica has been most successful at using gamification is that we've put a lot of effort into thinking about the game aspects to ensure that they are actually fun. We've also included many social components, because we feel that some of the most motivating games let you play with friends, and because research has shown that it's easier to form habits when you have accountability to other people.", "pkQuestion6": "Who is the typical user of Habitica?", @@ -133,7 +133,7 @@ "invalidReqParams": "Invalid request parameters.", "memberIdRequired": "\"member\" must be a valid UUID.", "heroIdRequired": "\"heroId\" must be a valid UUID.", - "cannotFulfillReq": "Your request cannot be fulfilled. Email admin@habitica.com if this error persists.", + "cannotFulfillReq": "Your request cannot be fulfilled. Email admin@habitica.com if this error persists.", "modelNotFound": "This model does not exist.", "signUpWithSocial": "Sign up with <%= social %>", "loginWithSocial": "Log in with <%= social %>", @@ -180,5 +180,8 @@ "emailUsernamePlaceholder": "e.g., habitrabbit or gryphon@example.com", "incorrectResetPhrase": "Please type <%= magicWord %> in all capital letters to reset your account.", "enterHabitica": "Enter Habitica", - "translateHabitica": "Translate Habitica" + "translateHabitica": "Translate Habitica", + "marketing3Lead1Title": "Android & iOS apps", + "marketing4Lead3Button": "Get Started Today", + "missingClientHeader": "Missing x-client headers." } diff --git a/website/common/locales/en_GB/groups.json b/website/common/locales/en_GB/groups.json index 870371ac5d..2dcca37a51 100644 --- a/website/common/locales/en_GB/groups.json +++ b/website/common/locales/en_GB/groups.json @@ -246,7 +246,7 @@ "partyDescriptionPlaceholder": "This is our Party's description. It describes what we do in this Party. If you want to learn more about what we do in this Party, read the description. Party on.", "guildGemCostInfo": "A Gem cost promotes high quality Guilds and is transferred into your Guild's bank.", "noGuildsTitle": "You aren't a member of any Guilds.", - "noGuildsParagraph1": "Guilds are social groups created by other players that can offer you support, accountability, and encouraging chat.", + "noGuildsParagraph1": "Guilds are social groups created by other players that can offer you support, accountability, and encouraging chat.", "noGuildsParagraph2": "Click the Discover tab to see recommended Guilds based on your interests, browse Habitica's public Guilds, or create your own Guild.", "noGuildsMatchFilters": "We couldn't find any matching Guilds.", "privateDescription": "A private Guild will not be displayed in Habitica's Guild directory. New members can be added by invitation only.", diff --git a/website/common/locales/en_GB/quests.json b/website/common/locales/en_GB/quests.json index b7825f331b..5ff647d060 100644 --- a/website/common/locales/en_GB/quests.json +++ b/website/common/locales/en_GB/quests.json @@ -59,7 +59,7 @@ "loginIncentiveQuest": "To unlock this quest, check in to Habitica on <%= count %> different days!", "loginReward": "<%= count %> Check-ins", "questBundles": "Discounted Quest Bundles", - "noQuestToStart": "Try checking out the \">Quest Shop for new releases!", + "noQuestToStart": "Try checking out the \">Quest Shop for new releases!", "pendingDamage": "<%= damage %> pending damage", "pendingDamageLabel": "pending damage", "bossHealth": "<%= currentHealth %> / <%= maxHealth %> Health", diff --git a/website/common/locales/en_GB/questscontent.json b/website/common/locales/en_GB/questscontent.json index ae417241ec..6f407c8698 100644 --- a/website/common/locales/en_GB/questscontent.json +++ b/website/common/locales/en_GB/questscontent.json @@ -567,8 +567,8 @@ "questPterodactylDropPterodactylEgg": "Pterodactyl (Egg)", "questPterodactylUnlockText": "Unlocks Pterodactyl Eggs for purchase in the Market", "questBadgerText": "Stop Badgering Me!", - "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To Do's and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", - "questBadgerCompletion": "You finally drive away the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To Do's. The den is otherwise abandoned, except for three eggs that look ready to hatch.", + "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To Do's and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", + "questBadgerCompletion": "You finally drive away the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To Do's. The den is otherwise abandoned, except for three eggs that look ready to hatch.", "questBadgerBoss": "The Badgering Bother", "questBadgerDropBadgerEgg": "Badger (Egg)", "questBadgerUnlockText": "Unlocks Badger Eggs for purchase in the Market", diff --git a/website/common/locales/en_GB/settings.json b/website/common/locales/en_GB/settings.json index 045270925f..292d12a406 100644 --- a/website/common/locales/en_GB/settings.json +++ b/website/common/locales/en_GB/settings.json @@ -55,7 +55,6 @@ "APIToken": "API Token (this is a password—see warning above!)", "showAPIToken": "Show API Token", "hideAPIToken": "Hide API Token", - "APITokenWarning": "If you need a new API Token (e.g., if you accidentally shared it), email <%= hrefTechAssistanceEmail %> 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.", "thirdPartyApps": "Third Party Apps", "resetDo": "Do it, reset my account!", "resetComplete": "Reset complete!", @@ -168,7 +167,7 @@ "contentRelease": "Content releases + Events", "bannedWordUsedInProfile": "Your Display Name or About text contained inappropriate language.", "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.", "enableAudio": "Enable Audio", "playDemoAudio": "Play Demo", @@ -196,7 +195,7 @@ "remove": "Remove", "resetTextLocal": "If you're absolutely certain, type your password into the text box below.", "resetTextSocial": "If you're absolutely certain, type \"<%= magicWord %>\" into the text box below.", - "APITokenDisclaimer": "Your API Token is like a password; Do not share it publicly. You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.

Note: If you need a new API Token (e.g., if you accidentally shared it), email admin@habitica.com 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": "Your API Token is like a password; Do not share it publicly. You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.

If you need a new API Token (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.", "gemCap": "Gem Cap", "nextHourglass": "Next Mystic Hourglass Delivery", diff --git a/website/common/locales/en_GB/subscriber.json b/website/common/locales/en_GB/subscriber.json index 65579f1171..1b8f5b8d90 100644 --- a/website/common/locales/en_GB/subscriber.json +++ b/website/common/locales/en_GB/subscriber.json @@ -7,7 +7,7 @@ "reachedGoldToGemCapQuantity": "Your requested amount <%= quantity %> exceeds the amount you can buy for this month (<%= convCap %>). The full amount becomes available within the first three days of each month. Thanks for subscribing!", "mysteryItem": "Exclusive monthly items", "mysteryItemText": "Each month you will receive a unique cosmetic item for your avatar! Plus, for every three months of consecutive subscription, the Mysterious Time Travelers will grant you access to historic (and futuristic!) cosmetic items.", - "exclusiveJackalopePet": "Exclusive pet", + "exclusiveJackalopePet": "Special Pet", "giftSubscription": "Want to gift the benefits of a subscription to someone else?", "giftSubscriptionText4": "Thanks for supporting Habitica!", "groupPlans": "Group Plans", @@ -21,7 +21,7 @@ "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!", "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.", "mysterySetNotFound": "Mystery set not found, or set already owned.", "mysteryItemIsEmpty": "Mystery items are empty", @@ -91,7 +91,7 @@ "mysterySet301703": "Peacock Steampunk Set", "mysterySet301704": "Pheasant Steampunk Set", "mysterySetwondercon": "Wondercon", - "subUpdateCard": "Update Credit Card", + "subUpdateCard": "Edit Credit Card", "subUpdateTitle": "Update", "notEnoughHourglasses": "You don't have enough Mystic Hourglasses.", "petsAlreadyOwned": "Pet already owned.", @@ -120,11 +120,11 @@ "gemBenefit2": "Backgrounds to immerse your avatar in the world of Habitica!", "gemBenefit3": "Exciting Quest chains that drop pet eggs.", "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!", - "subscriptionBenefit3": "Discover even more items in Habitica with a 2x daily drop-cap.", - "subscriptionBenefit4": "Unique cosmetic item for you to decorate your avatar each month.", - "subscriptionBenefit5": "Receive the Royal Purple Jackalope pet when you become a new subscriber.", - "subscriptionBenefit6": "Earn Mystic Hourglasses to purchase items in the Time Traveler’s Shop!", + "subscriptionBenefit1": "Get up to 50 Gold-purchasable Gems in the Market to buy Quests, Customizations, Pets, and more!", + "subscriptionBenefit3": "Find double the Eggs, Hatching Potions, and Food each day to grow your Pet collection!", + "subscriptionBenefit4": "Stay decked out in the latest exclusive gear. Subscribe now to get <%= month %>’s <%= currentMysterySetName %>!", + "subscriptionBenefit5": "Get the exclusive Royal Purple Jackalope when you subscribe today!", + "subscriptionBenefit6": "Never miss an item with 1 Mystic Hourglass a month to use in the Time Travellers Shop!", "purchaseAll": "Purchase Set", "gemsRemaining": "remaining", "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", "mysterySet202002": "Stylish Sweetheart Set", "cancelSubAlternatives": "If you're having technical problems or Habitica doesn't seem to be working out for you, please consider contacting us. 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?", "needToUpdateCard": "Need to update your card?", - "subMonths": "Sub Months", + "subMonths": "Months Subscribed", "subscriptionStats": "Subscription Stats", "subscriptionInactiveDate": "Your subscription benefits will become inactive on
<%= date %>", "subscriptionCanceled": "Your subscription is canceled", "youAreSubscribed": "You are subscribed to Habitica", "doubleDropCap": "Double the Drops", - "monthlyMysteryItems": "Monthly Mystery Items", - "subscribersReceiveBenefits": "Subscribers receive these useful benefits!", + "monthlyMysteryItems": "Limited Monthly Gear Sets", + "subscribersReceiveBenefits": "Stay motivated with even more rewards when you subscribe", "giftASubscription": "Gift a Subscription", "mysterySet202003": "Barbed Battler Set", "mysterySet202004": "Mighty Monarch Set", @@ -231,5 +231,6 @@ "mysterySet202305": "Eventide Dragon Set", "mysterySet202302": "Trickster Tabby Set", "mysterySet202304": "Tiptop Teapot Set", - "mysterySet202310": "Ghostlight Wraith Set" + "mysterySet202310": "Ghostlight Wraith Set", + "monthlyMysticHourglass": "Monthly Mystic Hourglass" } diff --git a/website/common/locales/es/achievements.json b/website/common/locales/es/achievements.json index 4b4848cbbe..8920f32fb4 100644 --- a/website/common/locales/es/achievements.json +++ b/website/common/locales/es/achievements.json @@ -156,7 +156,7 @@ "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!", "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", "achievementDuneBuddyModalText": "¡Has conseguido todas las mascotas de desierto!", "achievementRoughRiderModalText": "¡Has conseguido todos los colores básicos de las mascotas y monturas incómodas!", diff --git a/website/common/locales/es/backgrounds.json b/website/common/locales/es/backgrounds.json index 2ad10f8fbb..6fd9fa0986 100644 --- a/website/common/locales/es/backgrounds.json +++ b/website/common/locales/es/backgrounds.json @@ -906,5 +906,11 @@ "backgroundTrailThroughAForestNotes": "Dembulando bajo en un sendero en el bosque.", "backgrounds062025": "Conjunto 133: Publicado en Junio 2025", "backgroundSummerSeashoreText": "Verano en la Costa", - "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", + "backgroundSirensLairText": "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." } diff --git a/website/common/locales/es/front.json b/website/common/locales/es/front.json index 37a19d0830..515515ba97 100644 --- a/website/common/locales/es/front.json +++ b/website/common/locales/es/front.json @@ -25,32 +25,32 @@ "invalidEmail": "Para restablecer la contraseña, se necesita una dirección de correo electrónico válida.", "login": "Iniciar sesión", "logout": "Cerrar sesión", - "marketing1Header": "Mejora tus hábitos al jugar un juego", - "marketing1Lead1Title": "Tu vida, el Juego de Rol", - "marketing1Lead1": "Habitica es un videojuego pensado para mejorar tus hábitos en la vida real que \"gamifica\" tu vida, convirtiendo todas tus tareas (hábitos, tareas diarias y pendientes) en pequeños monstruos a los que debes vencer. Cuanto mejor lo hagas, más progresarás en el juego. Si no cumples algo en la vida real, tu personaje empezará a sufrir las consecuencias en el juego.", - "marketing1Lead2Title": "Consigue artículos de equipamiento increíbles", - "marketing1Lead2": "Mejora tus hábitos para dar forma a tu avatar. ¡Presume de la gran equipación que has obtenido!", - "marketing1Lead3Title": "Encuentra Premios Aleatorios", - "marketing1Lead3": "Para algunos, es el juego lo que los motiva: un sistema llamado \"recompensas estocásticas.\" Habitica integra todos los estilos de refuerzo y castigo: positivo, negativo, predecible, y aleatorio.", - "marketing2Header": "Compite con Amigos", + "marketing1Header": "¡Adquiere mejores hábitos nivel a nivel!", + "marketing1Lead1Title": "Traslada tu vida al juego", + "marketing1Lead1": "Habitica es la aplicación perfecta para aquellos que les cuesta completar su lista de tareas pendientes. Usamos mecánicas conocidas en los juegos como recompensar con monedas de Oro, Experiencia, y artículos, para ayudarte a sentirte productivo y fortalecer tu sentido de logro cuando completes tus tareas. Cuando mejor y más eficazmente logres tu tareas, más progresarás en el juego.", + "marketing1Lead2Title": "Equípate con estilo", + "marketing1Lead2": "Colecciona espadas, armaduras, y mucho más con las monedas de Oro que vas a obtener por completar tus tareas. Con cientos de piezas que coleccionar y que seleccionar, nunca se te acabarán las combinaciones a probar. ¡Optimiza tus estadísticas, tu estilo, o ambas! ", + "marketing1Lead3Title": "Obtén recompensas por tus esfuerzos", + "marketing1Lead3": "Tener un objetivo hacia el que encaminar tus esfuerzos puede significar una clara diferencia entre hacer una tarea, o posponerla por semanas. ¡Cuando en la vida real no hay una recompensa clara, Habitica te la ofrece! Obtendrás recompensas por cada tarea, además hay sorpresas esperándote en cada esquina, así que ¡mantén un buen ritmo de progreso! ", + "marketing2Header": "Haz un grupo con tus amigos", "marketing2Lead1Title": "Productividad social", - "marketing2Lead1": "Aunque puedes jugar en solitario a Habitica, la gracia realmente está en colaborar, competir y ser responsable de otras personas. La parte más efectiva de cualquier programa de automejora es la responsabilidad social, ¿y qué mejor que un entorno preparado para que puedas competir con tus responsabilidades que un videojuego?", - "marketing2Lead2Title": "Lucha contra monstruos", - "marketing2Lead2": "¿Qué es un Juego de Rol sin las batallas? Lucha contra monstruos con tu equipo. Los monstruos son \"modo súper-responsable\" - ¡Un día que no vayas al gimnasio es un día que el monstruo hiere a *todos!*", - "marketing2Lead3Title": "Retaos uno a otro", - "marketing2Lead3": "Los Desafíos te permiten competir con amigos y desconocidos. Quien lo haya hecho mejor al final del desafío gana un premio especial.", - "marketing3Header": "Aplicaciones y extensiones", - "marketing3Lead1": "Las apps **iPhone & Android** te permiten encargarte de tus cosas sobre la marcha. Sabemos que iniciar sesión en la web para pulsar botones puede ser un fastidio.", - "marketing3Lead2Title": "Integraciones", - "marketing3Lead2": "Otras **Herramientas de Terceros** unen Habitica a otros aspectos de tu vida. Nuestra API ofrece una integración sencilla a cosas como la [Extensión de Chrome](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US), con la que pierdes puntos cuando visitas webs improductivas, y los ganas cuando visitas webs productivas. [Más información aquí](https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).", - "marketing4Header": "Uso Organizacional", - "marketing4Lead1": "La educación es uno de los mejores sectores para la gamificación. Todos sabemos lo enganchados que están los estudiantes a los teléfonos y a los juegos hoy en día; ¡Aprovechemos ese poder! Enfrenta a tus estudiantes en competiciones amistosas. Recompensa el buen comportamiento con premios excepcionales. Observa cómo sus notas y su comportamiento se elevan.", - "marketing4Lead1Title": "Juegos en la Educación", - "marketing4Lead2": "Los cuidados de salud actualmente cuestan mucho dinero, y algo hay que hacer. Cientos de programas se crean para reducir costes y aumentar el bienestar. Nosotros creemos que Habitica puede pavimentar un camino hacia estilos de vida más sanos.", - "marketing4Lead2Title": "Juegos en la Salud y el Bienestar", - "marketing4Lead3-1": "¿Quieres convertir tu vida en un juego?", + "marketing2Lead1": "¡Fortalece tu motivación al colaborar, competir, y interactuar con otros! Habitica está diseñado para aprovechar la parte más efectiva de cualquier programa de superación personal: la responsabilidad social.", + "marketing2Lead2Title": "Ve a la batalla contra poderosos monstruos en las Misiones", + "marketing2Lead2": "Elige una de entre las cientos de Misiones con tu Equipo de amigos para comenzar la refriega. Los monstruos de la Misiones forzarán tu responsabilidad hacia tu Equipo al máximo. ¡No cumplir con las tareas se traducirá en daño colectivo a tu Equipo!", + "marketing2Lead3Title": "Retaos el uno al otro", + "marketing2Lead3": "Únete a los Desafíos creados por nuestra comunidad para obtener una variedad de listas de tareas que encajen con tus intereses y objetivos. ¡Dalo todo y completa lo que te pide para así ser merecedor del premio en Gemas para el ganador!", + "marketing3Header": "Más maneras de usar Habitica", + "marketing3Lead1": "Puedes descargarte Habitica en tu dispositivo Android o iOS, y así marcar tus tareas completadas donde quiera que estés. Pueba nuestras aplicaciones premiadas para darle un giro refrescante a tu forma de hacer las cosas.", + "marketing3Lead2Title": "Comunidad de Código-Abierto", + "marketing3Lead2": "Estamos orgullosos de ser un proyecto de código-abierto donde todos los colaboradores de nuestra comunidad entregada son bienvenidos. Haz que Habitica se adapte a tus propias necesidades o colabora para mejorar la experiencia de todos nuestros jugadores alrededor del mundo. ¡Visítanos en [GitHub](https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica) para saber más!", + "marketing4Header": "Más allá de las tareas del hogar", + "marketing4Lead1": "¡La educación es uno de los mejores sectores que transformar en un juego! Rompe con la monotonía del día a día en clase, añadiendo un componente lúdico. Habitica puede ser una forma divertida de realizar un seguimiento de las tareas, crear Desafíos en el aula y permitir que tus estudiantes muestren sus logros.", + "marketing4Lead1Title": "Juegos como forma de educación", + "marketing4Lead2": "Llevar un estilo de vida más saludable puede convertirse en algo abrumador. Habitica te ayuda a hacer un seguimiento de todos los aspectos de tus objetivos deportivos con horarios e intensidades flexibles que se adaptan a tus necesidades. ¡Así que diviértete mientras te esfuerzas por mejorar tu salud!", + "marketing4Lead2Title": "Juegos adaptados a la salud y el bienestar", + "marketing4Lead3-1": "¿Estás dispuesto a divertirte mientras consigues tus objetivos?", "marketing4Lead3-2": "¿Estás interesado en llevar un grupo de educación, bienestar y mucho más?", - "marketing4Lead3Title": "Juega con Todo", + "marketing4Lead3Title": "¡Comienza tu aventura!", "mobileAndroid": "Aplicación de Android", "mobileIOS": "Aplicación de iOS", "oldNews": "Noticias", @@ -180,5 +180,9 @@ "socialAlreadyExists": "Esta identificación social ya está vinculado a una cuenta Habitica existente.", "footerProduct": "Producto", "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", + "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." } diff --git a/website/common/locales/es/gear.json b/website/common/locales/es/gear.json index fa5e6027a0..96816c096c 100644 --- a/website/common/locales/es/gear.json +++ b/website/common/locales/es/gear.json @@ -2991,7 +2991,7 @@ "shieldSpecialFall2023HealerText": "Roca Musgosa", "weaponArmoireHattersShearsText": "Tijeras Afiladas", "weaponArmoireHattersShearsNotes": "Dale un buen corte al agobio y las complicaciones. También puedes usar estas tijeras para cortar tela por supuesto. Aumenta la Fuerza en <%= str %>. Armario Encantado: Conjunto de Sombrerero (Artículo 3 de 4).", - "armorArmoireSoftWhiteSuitNotes": "El blanco es el color de la paz. Ya sea que estés a punto de meterte en la cama o de pisar un hermoso y terrorífico manto de nieve recién caída, tendrás la mente despejada y lista. Aumenta la Constitución en <% con %> y la Percepción en <%= per %>. Armario Encantado: Conjunto Ropa de Casa Blanca (Artículo 2 de 3).", + "armorArmoireSoftWhiteSuitNotes": "El blanco es el color de la paz. Ya sea que estés a punto de meterte en la cama o de pisar un hermoso y terrorífico manto de nieve recién caída, tendrás la mente despejada y lista. Aumenta la Constitución en <%= con %> y la Percepción en <%= per %>. Armario Encantado: Conjunto Ropa de Casa Blanca (Artículo 2 de 3).", "weaponMystery202403Text": "Espadón Esmeralda Afortunada", "weaponMystery202403Notes": "¡Empuñar el espadón más grande es una buena manera de crear tu propia buena suerte! No otorga ningún beneficio. Artículo de Suscriptor Marzo 2024.", "armorArmoireSoftWhiteSuitText": "Ropa Mullidita Blanca", @@ -3090,7 +3090,7 @@ "armorMystery202406Notes": "¡Hostiga cruelmente a tus enemigos con estilo y elegancia! No otorga ningún beneficio. Artículo de Suscriptor Junio 2024.", "armorArmoireYellowStripedSwimsuitText": "Clásico Bañador de Rallas Amarillas", "armorArmoireYellowStripedSwimsuitNotes": "¿Qué podría hacer que te regodearas y disfrutaras más que una batalla marina contra horripilantes criaturas salidas de las profundidades desde la comodidad de la playa? Aumenta la Constitución en <%= con %>. Armario Encantado: Conjunto a Pie de Playa (Artículo 1 de 4).", - "shieldArmoireBuoyantBeachBallNotes": "¿Tratando de mantener demasiadas pelotas en el aire al mismo tiempo? Puede que esto ayude, aquí tienes una que puedes dejar caer, hacerla rodar y rebotar una y otra vez... Aumenta la Fuerza en <%= str %>. Armario Encantado: Conjunto a Pie de Playa (Artículo 4 de 4).", + "shieldArmoireBuoyantBeachBallNotes": "¿Tratando de mantener demasiadas pelotas en el aire al mismo tiempo? Puede que esto ayude, aquí tienes una que puedes dejar caer, hacerla rodar y rebotar una y otra vez... Aumenta la Fuerza en <%= str %>. Armario Encantado: Conjunto a Pie de Playa (Artículo 4 de 4).", "weaponArmoireShadyBeachUmbrellaNotes": "La sombra de esta sombrilla de color arcoíris te protege por breves periodos del potente astro rey y de otras molestias indeseadas. Aumenta la Percepción en <%= per %>. Armario Encantado: Conjunto a Pie de Playa (Artículo 3 de 4).", "armorArmoireBlueStripedSwimsuitNotes": "¿Qué hacer que te regodearas y disfrutaras más que una batalla marina contra horripilantes criaturas salidas de las profundidades desde la comodidad de la playa? Aumenta la Constitución en <%= con %>. Armario Encantado: Conjunto a Pie de Playa (Artículo 2 de 4).", "eyewearMystery202406Text": "Máscara de Bucanero Fantasmal", @@ -3365,5 +3365,23 @@ "shieldSpecialSummer2025HealerText": "Escudo Ángel de Mar", "shieldArmoireBeekeepersHiveText": "Panal", "backMystery202506Text": "Aureola de Brillo Solar", - "backMystery202506Notes": "Derrocha un aura de calidez mientras completas tus tareas diarias. No otorga ningún beneficio. Artículo de Suscriptor Junio 2025." + "backMystery202506Notes": "Derrocha un aura de calidez mientras completas tus tareas diarias. No otorga ningún beneficio. Artículo de Suscriptor Junio 2025.", + "armorArmoireFlyFishingWadersText": "Katiuskas para Pesca Fluvial", + "armorArmoireFlyFishingWadersNotes": "Te mantienen perfectamente calentito y seco mientras te dedicas a lo tuyo ya sea dentro de un arroyo, estanque, lago o río. Aumenta la fuerza y la constitución en <%= attrs %> cada uno. Armario Encantado: Conjunto Pescador Fluvial (Artículo 2 de 3)", + "headMystery202507Text": "Gorra de Patinador Audaz", + "headMystery202507Notes": "Llevar la gorra hacia atrás o ladeada es aún guay, ¿verdad tronco, fliiipas? No otorga ningún beneficio. Artículo de Suscriptor Julio 2025.", + "headArmoireFlyFishingHatText": "Gorro de Pescador Fluvial", + "headArmoireFlyFishingHatNotes": "Con un ala ancha y su espacio para colocar un señuelo de repuesto, no salgas a pescar con mosca sin esta hermosura. Aumenta la Fuerza y la Percepción en <%= attrs %> cada uno. Armario Encantado: Conjunto de Pescador Fluvial (Artículo 1 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", + "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.", + "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)" } diff --git a/website/common/locales/es/quests.json b/website/common/locales/es/quests.json index 593527abc0..6c381cd697 100644 --- a/website/common/locales/es/quests.json +++ b/website/common/locales/es/quests.json @@ -59,7 +59,7 @@ "loginIncentiveQuest": "¡Para desbloquear esta misión, entra en Habitica durante <%= count %> días distintos!", "loginReward": "Registros: <%= count %>", "questBundles": "Packs de Misiones en Descuento", - "noQuestToStart": "¡Echale un ojo a la \">Tienda de Misiones para encontrar nuevas Misiones!", + "noQuestToStart": "¡Echale un ojo a la \">Tienda de Misiones para encontrar nuevas Misiones!", "pendingDamage": "<%= damage %> daño pendiente", "pendingDamageLabel": "daño pendiente", "bossHealth": "<%= currentHealth %> / <%= maxHealth %> Salud", diff --git a/website/common/locales/es/settings.json b/website/common/locales/es/settings.json index 6b346153fa..b4fd191943 100644 --- a/website/common/locales/es/settings.json +++ b/website/common/locales/es/settings.json @@ -55,7 +55,6 @@ "APIToken": "API Token (esto es una contraseña - mira la advertencia de arriba!)", "showAPIToken": "Enseñar la ficha API", "hideAPIToken": "Esconder la ficha API", - "APITokenWarning": "Si necesitas un nuevo API Token (e.g. si accidentalmente has compartido el tuyo), envía un email a <%= hrefTechAssistanceEmail %> con tu Número de Usuario y API Token actual. Una vez sea restablecido tu nuevo API Token, tendrás que volver a autorizar cualquier dispositivo cerrando la sesión pasada en la web y la aplicación móvil e ingresando el nuevo Token en cualquier dispositivo en el que uses Habitica.", "thirdPartyApps": "Aplicaciones de terceros", "resetDo": "¡Adelante! ¡Reinicia mi cuenta!", "resetComplete": "¡Reseteo completado!", @@ -215,7 +214,7 @@ "showHatchPetModal": "Al eclosionar una mascota", "baileyAnnouncement": "Último anuncio de Bailey", "view": "Ver", - "APITokenDisclaimer": "Tu token de API Token es como una contraseña; no lo compartas. Es posible que se te pida tu ID de usuario, pero nunca publiques tu token de API donde otras personas puedan verlo, incluido Github.

Nota: Si necesitas un nuevo token de API (p. ej., si lo has compartido por error), envía un correo electrónico a admin@habitica.com con tu ID de usuario y tu token actual. Una vez se haya restaurado, necesitarás volver a autorizarlo todo cerrando sesión de la versión web y móvil y añadiendo el nuevo token a todas las herramientas de Habitica que uses.", + "APITokenDisclaimer": "Tu token de API Token es como una contraseña; no lo compartas. Es posible que se te pida tu ID de usuario, pero nunca publiques tu token de API donde otras personas puedan verlo, incluido Github.

Si necesitas un nuevo token de API (p. ej., si lo has compartido por error), puedes simplemente cambiar tu contraseña para obtener uno nuevo. Una vez se haya restaurado, necesitarás volver a acceder de nuevo en todos los dispositivos en los que estés usando Habitica y añadir el nuevo token de API a todas las herramientas de terceros que uses.", "thirdPartyTools": "Encuentra aplicaciones de terceros, extensiones y todo tipo de herramientas que puedes utilizar con tu cuenta en la wiki de Habitica.", "transaction_create_bank_challenge": "Desafío de banco creado", "showRaisePetModal": "Al transformar una mascota en montura", @@ -242,7 +241,7 @@ "addWebhook": "Añadir Webhook", "changeEmailDisclaimer": "Este es el correo electrónico que usarás para iniciar sesión en Habitica y en el que recibirás notificaciones.", "changeDisplayNameDisclaimer": "Este es el nombre que aparecerá junto a tu avatar en Habitica.", - "changePasswordDisclaimer": "La contraseña debe tener al menos 8 caracteres. Recomendamos usar una contraseña fuerte que no estés usando en ningún otro servicio.", + "changePasswordDisclaimer": "La contraseña debe tener al menos 8 caracteres. Al cambiar tu contraseña tendrás que volver a acceder en otros dispositivos y en herramientas de terceros que estés usando.", "dateFormatDisclaimer": "Ajustar el formato de fecha de Habitica.", "enableAudio": "Activar audio", "playDemoAudio": "Reproducir demostración", diff --git a/website/common/locales/es/subscriber.json b/website/common/locales/es/subscriber.json index 70332febdc..e96d6b6806 100644 --- a/website/common/locales/es/subscriber.json +++ b/website/common/locales/es/subscriber.json @@ -21,7 +21,7 @@ "subGemName": "Gemas de suscriptor", "maxBuyGems": "Has comprado todas las Gemas que podías comprar este mes. Habrá más gemas disponibles a partir de los tres primeros días de cada mes. ¡Gracias por suscribirte!", "timeTravelers": "Viajeros del tiempo", - "timeTravelersPopoverNoSubMobile": "Parece que necesitarás un Reloj de Arena Místico para abrir el portal del tiempo y convocar a los Misteriosos Viajeros del Tiempo.", + "timeTravelersPopoverNoSubMobile": "¡Los suscriptores reciben uno de los raros Relojes de arena Místico cada mes para usarlo en la Tienda de los Viajeros del Tiempo!", "timeTravelersPopover": "¡Tu Reloj de Arena Místico ha abierto nuestro portal del tiempo! Elige lo que deseas que obtengamos del pasado o futuro.", "mysterySetNotFound": "El conjunto misterioso no se ha encontrado, o bien ya lo tienes.", "mysteryItemIsEmpty": "Artículos misteriosos están vacíos", @@ -264,5 +264,7 @@ "mysterySet202503": "Conjunto de Juggernaut Jade", "mysterySet202504": "Conjunto de Yeti Esquivo", "mysterySet202505": "Conjunto Mariposa Macaón Masiva", - "mysterySet202506": "Conjunto Brillo Solar" + "mysterySet202506": "Conjunto Brillo Solar", + "mysterySet202507": "Conjunto de Patinador Audaz", + "mysterySet202508": "Conjunto Cuchilla Brillante" } diff --git a/website/common/locales/es_419/backgrounds.json b/website/common/locales/es_419/backgrounds.json index be3613e1d3..fb321bde52 100644 --- a/website/common/locales/es_419/backgrounds.json +++ b/website/common/locales/es_419/backgrounds.json @@ -783,5 +783,9 @@ "backgroundInAnAquariumText": "En el acuario", "backgroundInAnAquariumNotes": "Date un baño tranquilo con los peces En el acuario.", "backgroundInsideAdventurersHideoutText": "En la guarida de un aventurero", - "backgroundInsideAdventurersHideoutNotes": "Planea tu travesía en la Guarida de un Aventurero." + "backgroundInsideAdventurersHideoutNotes": "Planea tu travesía en la Guarida de un Aventurero.", + "backgrounds042023": "CONJUNTO 107: Publicado en abril de 2023", + "backgroundCraterLakeText": "Lago del Cráter", + "backgroundCraterLakeNotes": "Admira un Lago del Cráter hermoso.", + "backgrounds072023": "CONJUNTO 110: Publicado en Julio de 2023" } diff --git a/website/common/locales/es_419/faq.json b/website/common/locales/es_419/faq.json index e11f0f217e..b83dfc6805 100644 --- a/website/common/locales/es_419/faq.json +++ b/website/common/locales/es_419/faq.json @@ -179,7 +179,7 @@ "contentAnswer30": "Las tiendas rotarán una selección de sus objetos cada mes. Esto ayudará a mantener la cantidad de contenido manejable y fácil de explorar. El nuevo calendario ofrecerá objetos nuevos cada mes para los jugadores recientes, mientras que los coleccionistas veteranos tendrán un cronograma predecible.", "contentAnswer41": "¿Cuáles serán estas nuevas incorporaciones?", "contentAnswer51": "Las personalizaciones que poseas (tanto las estándar como las compradas) estarán disponibles desde la interfaz actual de Personalización del Avatar.", - "contentAnswer301": "7. de cada mes:Se añaden nuevos objetos al Armario Encantado y se lanza un nuevo fondo.Los nuevos disponibles en la Tienda de Personalizacion rotan.", + "contentAnswer301": "7. de cada mes:Se añaden nuevos objetos al Armario Encantado y se lanza un nuevo fondo.Los nuevos disponibles en la Tienda de Personalizacion rotan.", "contentAnswer60": "¡Todos los demás eventos continuarán con normalidad! Todos seguirán recibiendo sus recompensas especiales y comida temática como hasta ahora.", "contentAnswer61": "Las tarjetas del Día de San Valentín y de Año Nuevo se lanzarán en fechas específicas.", "contentAnswer410": "¡Quédate para descubrirlo! Muchas de las nuevas incorporaciones fueron muy solicitadas y se lanzarán a lo largo del año.", diff --git a/website/common/locales/es_419/groups.json b/website/common/locales/es_419/groups.json index 87e36dcec8..7fd22cfa88 100644 --- a/website/common/locales/es_419/groups.json +++ b/website/common/locales/es_419/groups.json @@ -246,7 +246,7 @@ "partyDescriptionPlaceholder": "Esta es la descripción de nuestro Equipo. Describe lo que hacemos en este Equoi. Si quieres saber más sobre lo que hacemos en este Equipo, lee la descripción. Equipo Activo.", "guildGemCostInfo": "Un costo de gema promueve Gremios de alta calidad y se transfiere al banco de tu gremio.", "noGuildsTitle": "No eres miembro de algún gremio.", - "noGuildsParagraph1": "Los gremios son grupos sociales creados por otros jugadores que pueden ofrecerte apoyo, soporte, y mensajes alentadores.", + "noGuildsParagraph1": "Los gremios son grupos sociales creados por otros jugadores que pueden ofrecerte apoyo, soporte, y mensajes alentadores.", "noGuildsParagraph2": "Haz clic en la pestaña Descubrir para ver los Gremios recomendados según tus intereses, explora los Gremios públicos de Habitica o crea tu propio Gremio.", "noGuildsMatchFilters": "No pudimos encontrar ningún gremio que coincida.", "privateDescription": "Un gremio privado no se mostrará en el directorio de gremios de Habitica. Solo se pueden agregar nuevos miembros mediante invitación.", diff --git a/website/common/locales/es_419/settings.json b/website/common/locales/es_419/settings.json index 3277e26478..ee9955e8ef 100644 --- a/website/common/locales/es_419/settings.json +++ b/website/common/locales/es_419/settings.json @@ -55,7 +55,6 @@ "APIToken": "Ficha API (ésta es una contraseña - ¡lee el aviso de arriba!)", "showAPIToken": "Mostrar ficha API", "hideAPIToken": "Ocultar ficha API", - "APITokenWarning": "Si necesitas una nueva Ficha API (ej. si accidentalmente la compartiste) Manda un email a <%= hrefTechAssistanceEmail %> con tu ID de usuario y tu Ficha actual. Una vez que se cambie la Ficha tendrás que re-autorizar todo saliendo de tu cuenta en la pagina y en la aplicación móvil, y dando una nueva Ficha a cualquier otra herramienta de Habitica que uses.", "thirdPartyApps": "Aplicaciones de terceros", "resetDo": "¡Adelante, reinicia mi cuenta!", "resetComplete": "Reseteo completo!", diff --git a/website/common/locales/fr/backgrounds.json b/website/common/locales/fr/backgrounds.json index fc2443092d..07ed8e61fd 100644 --- a/website/common/locales/fr/backgrounds.json +++ b/website/common/locales/fr/backgrounds.json @@ -906,5 +906,11 @@ "backgroundTrailThroughAForestNotes": "Randonnez sur les Chemins d'une Forêt.", "backgrounds062025": "Ensemble 133 : Sortie en Juin 2025", "backgroundSummerSeashoreText": "Bord de Mer Estival", - "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", + "backgroundSirensLairText": "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." } diff --git a/website/common/locales/fr/front.json b/website/common/locales/fr/front.json index bccd1b91b7..2a62c4f0c7 100644 --- a/website/common/locales/fr/front.json +++ b/website/common/locales/fr/front.json @@ -25,32 +25,32 @@ "invalidEmail": "Une adresse courriel valide est nécessaire pour lancer une réinitialisation du mot de passe.", "login": "Connexion", "logout": "Déconnexion", - "marketing1Header": "Améliorez vos habitudes de manière ludique", - "marketing1Lead1Title": "Votre vie, le jeu de rôle", - "marketing1Lead1": "Habitica est un jeu vidéo qui vous aide à améliorer vos habitudes dans la vraie vie. Il \"ludifie\" votre vie en transformant toutes vos tâches (habitudes, quotidiennes ou à faire) en petits monstres que vous devez vaincre. Plus vous êtes doué pour cela, plus vous progressez dans le jeu. Si vous dérapez dans la vraie vie, votre personnage commence à rétrograder dans le jeu.", - "marketing1Lead2Title": "Obtenez un super équipement", - "marketing1Lead2": "Améliorez vos habitudes pour développer votre avatar. Frimez avec l'équipement que vous avez obtenu !", - "marketing1Lead3Title": "Gagnez des prix aléatoires", - "marketing1Lead3": "Certains trouvent leur motivation dans le jeu et le hasard : un système appelé \"récompense stochastique\". Habitica accueille touts les styles de consolidations et de punitions : positives, négatives, prévisibles et aléatoires.", - "marketing2Header": "Soyez en compétition avec vos amis", + "marketing1Header": "Adoptez de nouvelles habitudes, un niveau à la fois !", + "marketing1Lead1Title": "Ludifiez votre vie", + "marketing1Lead1": "Habitica est l'application idéale pour ce·ux·lles dépassées par leurs listes de tâches. Nous utilisons des mécaniques de jeu connues comme vous offrir des récompenses en Or, Expérience, et des objets pour vous aider à vous sentir producti·f·ve et cultiver un sentiment d'accomplissement en effectuant des tâches. Plus vous êtes efficace dans vos tâches, plus vous évoluez en jeu.", + "marketing1Lead2Title": "Équipez-vous avec classe", + "marketing1Lead2": "Collectez des armes, des armures et bien plus encore avec l'Or que vous obtenez en accomplissant vos tâches. Avec des centaines d'objets à collectionner et à essayer, vous ne serez jamais à court de combinaisons à tester. Optimisez vos choix pour les stats, le style, ou les deux ! ", + "marketing1Lead3Title": "Obtenez des récompenses pour vos efforts", + "marketing1Lead3": "Avoir un objectif clair et une récompense à la clef peut faire toute la différence pour accomplir une tâche, plutôt que de la garder en tête pendant des semaines. Quand la vie ne vous fait pas de cadeaux, Habitica s'en occupe ! Vous serez récompensé·e pour chaque tâche accomplie, et d'autres surprises pourraient apparaître de temps à autres, alors ne relâchez pas vos efforts ! ", + "marketing2Header": "Faites équipe avec des ami·e·s", "marketing2Lead1Title": "Productivité sociale", - "marketing2Lead1": "Même si vous pouvez jouer en solo à Habitica, tout devient réellement intéressant dès lors que vous commencez à vous associer, à entrer en compétition et à rendre des comptes. La partie la plus efficace de n'importe quel programme d'amélioration personnelle est la responsabilité sociale, et quel meilleur environnement pour la responsabilité et la compétition qu'un jeu vidéo ?", - "marketing2Lead2Title": "Combattez des monstres", - "marketing2Lead2": "Qu'est-ce qu'un jeu de rôle sans batailles ? Combattez des monstres avec votre équipe. Les monstres vous mettent en mode \"super responsable\" : un jour où vous loupez la gym, c'est un jour où le monstre attaque *tout le monde !*", - "marketing2Lead3Title": "Défiez-vous les uns les autres", - "marketing2Lead3": "Les défis vous permettent d'être en compétition avec vos amis ou des inconnus. Celui ou celle qui a fait de son mieux à la fin du défi remporté des prix spéciaux.", - "marketing3Header": "Applications et extensions", - "marketing3Lead1": "Les applications iPhone et Android vous permettent de vous occuper de vos affaires en déplacement. Nous somme conscients que se connecter sur le site web pour cliquer sur des boutons peut être un frein.", - "marketing3Lead2Title": "Intégrations", - "marketing3Lead2": "D'autres **outils tiers** connectent Habitica à d'autres aspects de votre vie. Notre API permet l’intégration facile de choses comme l'[extension Chrome](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=fr-FR), avec laquelle vous perdez des points en naviguant sur des sites non-productifs, et en gagnez sur des sites productifs. [Plus d'informations ici](https://habitica.fandom.com/fr/wiki/Extensions,_modules_compl%C3%A9mentaires_et_personnalisations).", - "marketing4Header": "Utilisation par une organisation", - "marketing4Lead1": "L'éducation est l'un des meilleurs domaines pour la ludification. Nous savons tous à quel point les étudiants sont collés à leurs téléphones ; exploitez ce pouvoir ! Dressez vos élèves les uns contre les autres dans une compétition amicale. Récompensez les bons résultats avec des récompenses rares. Observez leurs notes et leur comportement monter en flèche.", + "marketing2Lead1": "Obtenez un surplus de motivation en collaborant, interagissant et/ou en vous mesurant à d'autres personnes ! Habitica a été conçu pour utiliser une partie essentielle du développement personnel : la dynamique de groupe.", + "marketing2Lead2Title": "Mesurez-vous à des monstres via des Quêtes", + "marketing2Lead2": "Participez à des centaines de Quêtes avec une Équipe d'ami·e·s pour vous jete dans la bataille. Les monstres de Quêtes vous encouragent toujours plus à effectuer vos tâches. Si vous oubliez de faire votre lit, et toute votre équipe prendra des dégâts !", + "marketing2Lead3Title": "Défiez-vous les un·e·s les autres", + "marketing2Lead3": "Rejoignez des Défis créés par notre communauté pour accomplir des tâches pré-définies qui correspondent à vos intérêts et vos objectifs. Faites de votre mieux pour obtenir les Gemmes qui seront obtenues par l·e·a gagnant·e !", + "marketing3Header": "Plus de façons d'exploiter Habitica", + "marketing3Lead1": "Vous pouvez utiliser Habitica sur votre appareil Android ou iOS pour valider vos tâches où que vous soyez. Consultez notre application primée pour aborder vos tâches sous un nouvel angle.", + "marketing3Lead2Title": "Communauté Open-Source", + "marketing3Lead2": "Nous sommes fier·ère·s de porter un projet open-source qui accueille les contributions de notre communauté dévouée. Adaptez Habitica à vos besoins ou participez à l'amélioration de l'expérience pour tou·te·s les joueur·euse·s à travers le monde. Rendez-vous sur [GitHub](https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica) (site Anglais) pour en savoir plus !", + "marketing4Header": "Au-delà des tâches domestiques", + "marketing4Lead1": "L’apprentissage devient bien plus motivant avec un soupçon de ludification ! Brisez la routine quotidienne de votre classe en ajoutant que une expérience de jeu unique. Habitica peut offrir une manière ludique de suivre les devoirs, de créer des Défis en classe et de permettre aux élèves de mettre en valeur leurs réussites.", "marketing4Lead1Title": "La ludification dans l'éducation", - "marketing4Lead2": "Les coûts liés à la santé augmentent et quelqu'un doit forcément les payer. Des centaines de programmes sont conçus pour réduire ces coûts et améliorer le bien-être général. Nous sommes convaincus qu'Habitica peut apporter une réelle solution vers un mode de vie plus sain.", + "marketing4Lead2": "Adopter un mode de vie plus sain peut vite sembler décourageant. Habitica vous aide à suivre tous les aspects de vos objectifs fitness grâce à un planning flexible et une intensité adaptable à votre rythme. De quoi joindre l’utile à l’agréable sur le chemin du mieux-être !", "marketing4Lead2Title": "La ludification dans la santé et le bien-être", - "marketing4Lead3-1": "Vous voulez faire de votre vie un jeu ?", + "marketing4Lead3-1": "Prêt·e à joindre l’utile à l’agréable ?", "marketing4Lead3-2": "Intéressé par la gestion d'un groupe dans l'éducation, le bien-être, et davantage ?", - "marketing4Lead3Title": "Transformez tout en jeu", + "marketing4Lead3Title": "Commencez votre voyage !", "mobileAndroid": "Application Android", "mobileIOS": "Application iOS", "oldNews": "Nouvelles", @@ -180,5 +180,8 @@ "emailUsernamePlaceholder": "par exemple habitrabbit ou gryphon@example.com", "footerProduct": "Produit", "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", + "marketing4Lead3Button": "Commencez dès Aujourd'hui", + "missingClientHeader": "En-têtes x-client manquants." } diff --git a/website/common/locales/fr/gear.json b/website/common/locales/fr/gear.json index cc5b1524fe..55ed58e672 100644 --- a/website/common/locales/fr/gear.json +++ b/website/common/locales/fr/gear.json @@ -2979,7 +2979,7 @@ "weaponArmoireScholarlyTextbooksText": "Livres d'École", "headSpecialNye2023Notes": "Vous avez reçu un Chapeau Ridicule de Fête ! Portez le avec fierté en clochetant vers la nouvelle année. Ne confère aucun avantage.", "armorArmoireSoftWhiteSuitText": "Costard Blanc Doux", - "armorArmoireSoftWhiteSuitNotes": "Le blanc est une couleur apaisante. Que vous soyez en face d'un drap de lit d'un blanc frais ou de la couverture d'une récente neige fraîche, vous aurez un esprit clair et apprêté. Augmente la Constitution de <%= con %> et la Perception de <%= per %>. Armoire Enchantée : Ensemble de Costard Blanc (objet 2 sur 3).", + "armorArmoireSoftWhiteSuitNotes": "Le blanc est une couleur apaisante. Que vous soyez en face d'un drap de lit d'un blanc frais ou d'un manteau de neige immaculée, vous aurez l'esprit clair et apprêté. Augmente la Constitution de <%= con %> et la Perception de <%= per %>. Armoire Enchantée : Ensemble de Costard Blanc (Objet 2 sur 3).", "armorSpecialWinter2024RogueText": "Toges de la Chouette des Neiges", "armorSpecialWinter2024RogueNotes": "Oùùùù iras tu quand tu porteras cette toge ? Recouverte de plumes et de duvet, tu seras à la fois au chaud et discret ! Augmente la Perception de <%= per %>. Édition Limitée 2023-2024 Équipement Hivernal.", "armorSpecialWinter2024WarriorNotes": "Il se trouve que du chocolat, de la menthe et un glaçage forment une matière plus résistante que tu ne le pense ! Augmente la Constitution de <%= con %>. Édition Limitée 2023-2024 Équipement Hivernal.", @@ -3365,5 +3365,23 @@ "shieldArmoireBeekeepersHiveNotes": "Les ruches servent à la fois de domicile et de lieu de travail. Il faudrait peut-être discuter d'un bon équilibre entre vie professionnelle et vie privée avec vos abeilles. Augmente la Force de <%= str %>. Armoire Enchantée : Ensemble d'Apicult·eur·rice (Objet 4 sur 4)", "backMystery202506Text": "Auréole de Rayonnement Solaire", "backMystery202506Notes": "Apporte une douce chaleur à vos tâches quotidiennes. Ne confère aucun bonus. Équipement d'Abonnement Juin 2025.", - "shieldSpecialSummer2025RogueNotes": "Ce tentacule sembles fébrile, mais ses ventouses ont une sacrée poigne. Ennemi·e·s, gare à vous ! Augmente la Force de <%= str %>. Équipement Édition Limitée Été 2025." + "shieldSpecialSummer2025RogueNotes": "Ce tentacule sembles fébrile, mais ses ventouses ont une sacrée poigne. Ennemi·e·s, gare à vous ! Augmente la Force de <%= str %>. Équipement Édition Limitée Été 2025.", + "armorArmoireFlyFishingWadersNotes": "Restez au chaud et au sec en vous immergeant dans un ruisseau, une mare, un lac ou une rivière. Augmente la Force et la Constitution de <%= attrs %> chacune. Armoire Enchantée : Ensemble Pêche à la Mouche (Objet 2 sur 3)", + "headArmoireFlyFishingHatNotes": "Avec sa large visière et son espace prévu pour fixer un leurre supplémentaire, n'oubliez pas de l'emporter avec pour partir à la pêche à la mouche. Augmente la Force et la Perception de <%= attrs %> chacune. Armoire Enchantée : Ensemble Pêche à la Mouche (Objet 1 sur 3)", + "shieldArmoireFlyFishingRodNotes": "Metter un appât sur cette canne longue et flexible, et les poissons penseront à chaque fois que c'est un insecte. Augmente la Force et l'Intelligence de <%= attrs %> chacune. Armoire Enchantée : Ensemble Pêche à la Mouche (Objet 3 sur 3)", + "armorArmoireFlyFishingWadersText": "Cuissardes de Pêche à la Mouche", + "headMystery202507Text": "Casquette Skateu·r·se Stylé·e", + "headMystery202507Notes": "La casquette à l'envers est toujours à la mode, hein ? Ne confère aucun bonus. Équipement d'Abonnement Juillet 2025.", + "headArmoireFlyFishingHatText": "Chapeau de Pêche à la Mouche", + "shieldArmoireFlyFishingRodText": "Canne à Mouche", + "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.", + "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." } diff --git a/website/common/locales/fr/settings.json b/website/common/locales/fr/settings.json index e19f58dc39..db188afbef 100644 --- a/website/common/locales/fr/settings.json +++ b/website/common/locales/fr/settings.json @@ -55,7 +55,6 @@ "APIToken": "Jeton d'API (ceci est un mot de passe - voir l'avertissement ci-dessus !)", "showAPIToken": "Montrer le jeton d'API", "hideAPIToken": "Cacher le jeton d'API", - "APITokenWarning": "Si vous avez besoin d'un nouveau jeton d'API (par exemple si vous l'avez partagé par erreur), envoyez un courriel à <%= hrefTechAssistanceEmail %> avec votre ID d'utilisateur et votre jeton d'API actuel. Une fois celui-ci réinitialisé, vous devrez tout ré-autoriser en vous déconnectant du site web et de l'application mobile, et en fournissant le nouveau jeton à tous les outils Habitica que vous utilisez.", "thirdPartyApps": "Applications tierces", "resetDo": "Allez-y, réinitialisez mon compte !", "resetComplete": "Réinitialisation terminée !", @@ -240,7 +239,7 @@ "addWebhook": "Ajouter un Webhook", "changeEmailDisclaimer": "C'est l'adresse courriel que vous utilisez pour vous connecter à Habitica, ainsi que pour recevoir des notifications.", "changeDisplayNameDisclaimer": "C'est le nom qui sera affiché pour votre Avatar dans Habitica.", - "changePasswordDisclaimer": "Le Mot de passe doit faire 8 caractères ou plus. Nous recommandons d'utiliser un Mot de passe fort que vous n'utilisez nul part ailleurs.", + "changePasswordDisclaimer": "Les mots de passe doivent contenir 8 caractères ou plus. Changer votre mot de passe vous déconnectera des autres plateformes et add-ons sur lesquels vous êtes connecté·e.", "dateFormatDisclaimer": "Ajuster le format de la date sur tout Habitica.", "enableAudio": "Activer l'Audio", "playDemoAudio": "Jouer la Démo", @@ -254,7 +253,7 @@ "connect": "Se Connecter", "remove": "Retirer", "resetDetail4": "Vous allez perdre tout votre équipement sauf vos Objets Mystères d'Abonné·e et les Objets commémoratifs gratuits. Vous pourrez racheter les objets supprimés, y compris tous les équipements d'édition limitée (vous devez être dans la classe correspondante pour racheter les Équipements spécifique à la classe).", - "APITokenDisclaimer": "Votre Clé API est comme un mot de passe ; ne le partagez pas en public. Il pourra occasionnellement vous être demandé votre ID d'Utilisat·eur·rice, mais ne postez jamais votre Clé API où d'autres personnes pourront le voir, y compris sur Github.

À noter : Si vous avez besoin d'une nouvelle Clé API (si vous l'avez accidentellement partagé, par exemple), écrivez un email à admin@habitica.com avec votre ID d'Utilisat·eur·rice and Clé API acutelle. Une fois réinitialisée, vous devez tout ré-autoriser en vous déconnectant du site web et de l'appli mobile en fournissant la nouvelle Clé aux autres outils Habitica que vous utilisez.", + "APITokenDisclaimer": "Votre Clé API est comme un mot de passe ; ne le partagez pas sur des plateformes publiques. Votre ID Utilisat·eur·rice pourrait occasionnellement vous être demandé, mais ne postez jamais votre Clé API où d'autres personnes pourront le voir, y compris sur Github.

Si vous avez besoin d'une nouvelle Clé API (si vous l'avez accidentellement partagé, par exemple), vous pouvez modifier votre mot de passe pour la réinitialiser. Une fois cela fait, vous devrez vous reconnecter sur tous les appareils sur lesquels vous utilisez Habitica et fournir votre nouvelle Clé API aux add-ons que vous utilisez.", "contentRelease": "Sorties de contenu + Évènements", "resetTextSocial": "Si vous êtes absolument sûr·e, tapez \"<%= magicWord %>\" dans le champ de texte ci-dessous.", "resetTextLocal": "Si vous êtes absolument sûr·e, tapez votre mot de passe dans le champ de texte ci-dessous.", diff --git a/website/common/locales/fr/subscriber.json b/website/common/locales/fr/subscriber.json index 4b6392aa88..bd23170124 100644 --- a/website/common/locales/fr/subscriber.json +++ b/website/common/locales/fr/subscriber.json @@ -21,7 +21,7 @@ "subGemName": "Gemmes d'abonnement", "maxBuyGems": "Vous avez acheté toutes vos gemmes pour ce mois-ci. De nouvelles sont remises en circulation chaque mois, au cours des trois premiers jours !", "timeTravelers": "Voyageurs temporels", - "timeTravelersPopoverNoSubMobile": "Il semblerait que vous ayez besoin d'un sablier mystique pour ouvrir le portail temporel et invoquer les mystérieux voyageurs temporels.", + "timeTravelersPopoverNoSubMobile": "Les Abonné·e·s reçoivent un Sablier Mystique à dépenser dans la Boutique des Voyageu·r·se·s Temporel·le·s tous les mois !", "timeTravelersPopover": "Votre sablier mystique a ouvert notre portail temporel ! Choisissez ce que vous voudriez que l'on récupère dans le passé ou dans le futur.", "mysterySetNotFound": "Ensemble mystère non trouvé, ou ensemble déjà possédé.", "mysteryItemIsEmpty": "Les objets mystère sont vides", @@ -264,5 +264,7 @@ "mysterySet202503": "Ensemble Poids Lourd de Jade", "mysterySet202504": "Ensemble Yéti Insaisissable", "mysterySet202505": "Ensemble Machaon Majestueux", - "mysterySet202506": "Ensemble Rayonnement Solaire" + "mysterySet202506": "Ensemble Rayonnement Solaire", + "mysterySet202507": "Ensemble Skateu·r·se Stylé·e", + "mysterySet202508": "Ensemble Lame Lumineuse" } diff --git a/website/common/locales/he/challenge.json b/website/common/locales/he/challenge.json index ed87994d8c..93e3b2e754 100644 --- a/website/common/locales/he/challenge.json +++ b/website/common/locales/he/challenge.json @@ -86,15 +86,23 @@ "summaryRequired": "סיכום דרוש", "summaryTooLong": "הסיכום ארוך מדי", "descriptionRequired": "תיאור דרוש", - "locationRequired": "מיקום האתגר דרוש (\"הוספה אל\")", + "locationRequired": "חובה לציין את מיקום האתגר (\"הוספה אל\")", "categoiresRequired": "לפחות קטגוריה אחת חייבת להיבחר", "viewProgressOf": "הצגת ההתקדמות של", "viewProgress": "להצגת ההתקדמות", "selectMember": "בחירת משתתף", - "confirmKeepChallengeTasks": "לשמור את המטלות מהאתגר?", + "confirmKeepChallengeTasks": "לשמור את המשימות מהאתגר?", "selectParticipant": "בחירת משתתף", "yourReward": "הפרס שלך", "filters": "מסננים", "wonChallengeDesc": "ניצחת באתגר \"<%= challengeName %>\"! הניצחון שלך נרשם בהישגים שלך.", - "removeTasks": "הסרת המשימות" + "removeTasks": "הסרת המשימות", + "abuseFlagModalBodyChallenge": "יש לדווח אך ורק על אתגרים שמפרים את <%= firstLinkStart %>הנחיות הקהילה<%= linkEnd %> ו/או <%= secondLinkStart %>תנאי השימוש<%= linkEnd %>. דיווח לשווא מהווה הפרה של תנאי הקהילה של הביטיקה.", + "cannotClose": "לא ניתן לסגור אתגר זה מכיוון ששחקן אחד או יותר דיווחו עליו כבלתי־הולם. עובדי צוות יצרו איתך קשר בקרוב ויתנו לך הנחיות. אם עברו יותר מ־48 שעות ולא פנו אליך, נא לשלוח דואר אלקטרוני לכתובת admin@habitica.com לצורך קבלת סיוע.", + "messageChallengeFlagOfficial": "לא ניתן לדווח על אתגרים רשמיים.", + "whyReportingChallenge": "למה בחרת לדווח על האתגר הזה?", + "whyReportingChallengePlaceholder": "הסיבה לדיווח", + "cannotClone": "לא ניתן לשכפל אתגר זה מכיוון ששחקן אחד או יותר דיווחו עליו כבלתי־הולם. עובדי צוות יצרו איתך קשר בקרוב ויתנו לך הנחיות. אם עברו יותר מ־48 שעות ולא פנו אליך, נא לשלוח דואר אלקטרוני לכתובת admin@habitica.com לצורך קבלת סיוע.", + "messageChallengeFlagAlreadyReported": "כבר דיווחת על אתגר זה.", + "cannotMakeChallenge": "אין לך אפשרות ליצור אתגרים ציבוריים מכיוון שאין לחשבונך הרשאות התכתבות ברשת כעת. נא ליצור קשר עם הכתובת admin@habitica.com לקבלת מידע נוסף." } diff --git a/website/common/locales/he/character.json b/website/common/locales/he/character.json index 7a088957b6..e751ff18ab 100644 --- a/website/common/locales/he/character.json +++ b/website/common/locales/he/character.json @@ -2,7 +2,7 @@ "communityGuidelinesWarning": "אנא זכרו ששם התצוגה שלכם, תמונת הפרופיל והתיאור חייבים לעמוד בתנאי תקנון הקהילה (למשל ללא מילים גסות, תכנים בוטים, עלבונות וכו'). אם אינכם בטוחים אם דבר מסוים עומד בתנאי התקנון או לא, אנא הרגישו חופשיים לשלוח מייל ל-<%= hrefBlankCommunityManagerEmail %>!", "profile": "פרופיל", "avatar": "התאמת הדמות", - "editAvatar": "עריכת הדמות", + "editAvatar": "התאמה אישית של הדמות", "noDescription": "הביטיקן זה לא הוסיף תיאור.", "noPhoto": "הביטיקן זה לא הוסיף תצלום.", "other": "שונות", @@ -83,7 +83,7 @@ "allocatePerPop": "הוספת נקודה לתפיסה שלך", "allocateInt": "נקודות שהוקצו לתבונה:", "allocateIntPop": "הוספת נקודה לתבונה שלך", - "noMoreAllocate": "עכשיו כשהגעת לרמה 100, לא תקבל יותר נקודות למדדים. תוכל להמשיך לעלות ברמות, או להתחיל מסע חדש ברמה 1, באמצעות שימוש ב-עין התחייה!", + "noMoreAllocate": "עכשיו כשהגעת לרמה 100, לא תקבל יותר נקודות למדדים. תוכל להמשיך לעלות ברמות, או להתחיל מסע חדש ברמה 1, באמצעות שימוש ב-כדור ההיוולדות מחדש!", "stats": "נתונים", "strength": "כוח", "strText": "כוח מעלה את הסיכוי של \"פגיעות קריטיות\" אקראיות והזהב, ניסיון והסיכוי לקבל חבילות מקבל חיזוק מהם. זה גם עוזר לפגוע יותר בבוסים.", @@ -108,7 +108,7 @@ "mystery": "מסתורין", "changeClass": "שינוי מקצוע, החזרת נקודות מדדים", "lvl10ChangeClass": "כדי לשנות מקצוע עליכם להיות לפחות בדרגה 10.", - "changeClassConfirmCost": "לשנות את המקצוע שלך תמורת 3 אבני חן?", + "changeClassConfirmCost": "להחליף מקצוע בתמורה ל־3 יהלומים?", "invalidClass": "מקצוע שגוי. נא לציין 'warrior', 'rogue', 'wizard', או 'healer'.", "levelPopover": "כל דרגה מזכה אותך בנקודה אחת שניתן להקצות למדד לבחירתך. ניתן לעשות זאת באופן ידני, או לתת למשחק להחליט עבורך באמצעות שימוש באחת מאפשרויות ההקצאה האוטומטיות.", "unallocated": "נקודות לא מוקצות", @@ -129,8 +129,8 @@ "healerText": "מרפאים הם חסינים לכל פגע, והם מציעים את ההגנה הזו גם לחבריהם. מטלות יומיות והרגלים רעים לא ממש מזיזים להם, ויש להם דרכים לרפא את הבריאות שלהם לאחר כישלון. שחק מרפא אם אתה נהנה לעזור לחברים שלך במשחק, או אם הרעיון לרמות את המוות דרך עבודה קשה קוסם לך!", "optOutOfClasses": "וותר", "chooseClass": "בחרו את המקצוע שלכם", - "chooseClassLearnMarkdown": "[תלמדו עוד על מערכת המקצועות של הביטיקה](http://habitica.fandom.com/wiki/Class_System)", - "optOutOfClassesText": "אין לכם זמן להתעסק עם המקצוע? רוצים לבחור אחר כך? בסדר - אתם תהיו לוחמים בלי יכולות מיוחדות. אתם יכולים לקרוא על זה במערכת המקצועות יותר מאוחר בעמוד הויקי ולפאשר את המקצוע שתרצו בכל רגע על ידי: סמליל של משתמש -> הגדרות.", + "chooseClassLearnMarkdown": "[למידע נוסף על מערכת המקצועות של הביטיקה](/static/faq#what-classes)", + "optOutOfClassesText": "קשה לבחור? לא נורא! גם אם העדפת שלא לבחור, עדיין ניתן לקרוא על כל מקצוע בתשובות שלנו לשאלות הנפוצות, ולהפעיל את מערכת המקצועות דרך ההגדרות כשתרגיש/י לנכון.", "selectClass": "לבחור <%= heroClass %>", "select": "בחר", "stealth": "חשאיות", @@ -167,8 +167,8 @@ "photo": "תמונה", "info": "מידע", "joined": "הצטרפת", - "totalLogins": "סה\"כ ימי התחברות", - "latestCheckin": "התחברות אחרונה", + "totalLogins": "סה״כ כניסות לחשבון", + "latestCheckin": "הכניסה האחרונה לחשבון", "editProfile": "עריכת הפרופיל", "challengesWon": "אתגרים שנוצחו", "questsCompleted": "הרפתקאות שהושלמו", @@ -183,5 +183,10 @@ "purchaseForGold": "לרכוש בתמורת <%= cost %> מטבעות זהב?", "purchasePetItemConfirm": "הרכישה הזאת תחרוג ממספר הפריטים שאותם אתם צריכים כדי לבקוע את כל חיות המחמד ה <%= itemText %>. האם אתם בטוחים?", "chatCastSpellParty": "<%= username %> הטיל קסם <%= spell %> עבור החבורה.", - "chatCastSpellUser": "<%= username %> הטיל קסם <%= spell %> על <%= target %>.." + "chatCastSpellUser": "<%= username %> הטיל קסם <%= spell %> על <%= target %>..", + "skins": "צבעי עור", + "titleFacialHair": "שיער פנים", + "titleHaircolor": "צבעי שיער", + "titleHairbase": "סגנונות שיער", + "customizations": "התאמה אישית" } diff --git a/website/common/locales/he/communityguidelines.json b/website/common/locales/he/communityguidelines.json index 6a1e485dfd..fcfca49bc9 100644 --- a/website/common/locales/he/communityguidelines.json +++ b/website/common/locales/he/communityguidelines.json @@ -3,39 +3,39 @@ "lastUpdated": "עדכון אחרון:", "commGuideHeadingWelcome": "ברוך בואך להביטיקה!", "commGuidePara001": "ברכות, הרפתקן/ית! ברוך בואך להביטיקה, ארץ של פרודוקטיביות, חיים בריאים ולעיתים של הגרייפון המשתולל. יש לנו קהילת מאירת פנים מלאה באנשים שתומכים אחד בשני בדרך לשיפור עצמי. על מנת להשתלב, כל מה שנדרש זו גישה חיובית ומכבדת, וההבנה שלכל אחד יש כוחות והגבלות שונות -- לרבות אותך! ההביטיקאנים מראים סבלנות אחד כלפי השני ומנסים לעזור מתי שאפשר.", - "commGuidePara002": "כדי לשמור שכולם יהיו בטוחים, שמחים, ופרודקטיביים בקהילה, יש לנו מספר הנחיות. יצרנו אותן בקפידה כדי שהן יהיו חברותיות וקריאוֹת ככל שאפשר. נא לקחת זמן ולקרוא אותן לפני שתתחיל/י להתכתב.", - "commGuidePara003": "ההנחיות הללו תקפות לגבי כל המרחבים החברתיים שאנו משתמשים בהם, הכוללים (בין היתר) את Trello,‏ Github,‏ Weblate ועמוד הוויקיא (בקיצור ויקי). מדי פעם מצבים בלתי צפויים יצוצו לפתע בדרכנו, כמו מחרחרי ריב זדוניים או בעלי אוב מרושעים. כאשר דבר מעין זה קורה, העורכים רשאים להגיב ע״י עריכת ההנחיות הללו כדי לשמור על הקהילה בטוחה מפני איומים חדשים. אל חשש: דוברת העיר שלנו, ביילי, תודיע לכם על כל שינוי בהנחיות.", + "commGuidePara002": "על מנת לוודא שכולם יהיו בטוחים, שמחים ויעילים, יש לנו מספר הנחיות לאתגרים, פרופילים של משתמשים, התכתבויות קבוצתיות והודעות פרטיות. ניסחנו את ההנחיות בקפידה על מנת לוודא שהן ידידותיות ומובנות ככל האפשר. נא לקחת את הזמן ולקרוא אותן לפני שמתחילים ליצור קשר עם שחקנים אחרים.", + "commGuidePara003": "הנחיות אלה עשויות להשתנות מעט מעת לעת. כאשר יופיעו כאן שינויים מהותיים בכללי הקהילה, נודיע לך על כך דרך הכרזות של ביילי ו/או בחשבונות שלנו ברשתות החברתיות!", "commGuideHeadingInteractions": "אינטראקציה בהביטיקה", "commGuidePara015": "", - "commGuidePara016": "בעודך נודד בין המרחבים הציבוריים של הביטיקה, ישנם מספר חוקים שנועדו לשמור את כולם בטוחים ומאושרים. אלו אמורים להיות קלים לשמירה עבור הרפתקן כמוך!", + "commGuidePara016": "בעת השימוש בהיבט החברתי של הביטיקה, ישנם מספר כללים כלליים שנועדו לוודא שכולם יהיו בטוחים ושמחים.", "commGuideList02A": "Respect each other. Be courteous, kind, friendly, and helpful. Remember: Habiticans come from all backgrounds and have had wildly divergent experiences. This is part of what makes Habitica so cool! Building a community means respecting and celebrating our differences as well as our similarities. Here are some easy ways to respect each other.", - "commGuideList02C": "Do not post images or text that are violent, threatening, or sexually explicit/suggestive, or that promote discrimination, bigotry, racism, sexism, hatred, harassment or harm against any individual or group. Not even as a joke. This includes slurs as well as statements. Not everyone has the same sense of humor, and so something that you consider a joke may be hurtful to another. Attack your Dailies, not each other.", - "commGuideList02D": "Keep discussions appropriate for all ages. We have many young Habiticans who use the site! Let's not tarnish any innocents or hinder any Habiticans in their goals.", - "commGuideList02E": "Avoid profanity. This includes milder, religious-based oaths that may be acceptable elsewhere. We have people from all religious and cultural backgrounds, and we want to make sure that all of them feel comfortable in public spaces. If a moderator or staff member tells you that a term is disallowed on Habitica, even if it is a term that you did not realize was problematic, that decision is final. Additionally, slurs will be dealt with very severely, as they are also a violation of the Terms of Service.", + "commGuideList02C": "", + "commGuideList02D": "", + "commGuideList02E": "", "commGuideList02G": "Comply immediately with any Mod request. This could include, but is not limited to, requesting you limit your posts in a particular space, editing your profile to remove unsuitable content, asking you to move your discussion to a more suitable space, etc.", "commGuideList02J": "", "commGuideList02K": "", "commGuideList02L": "", - "commGuidePara037": "", + "commGuidePara037": "אין ליצור קבוצות או צוותים במטרה לתקוף שום קבוצה או אדם פרטי. אנחנו אמורים להילחם בהרגלים הרעים, לא בהרפתקנים אחרים!", "commGuideHeadingInfractionsEtc": "עבירות, השלכות ותיקונן", "commGuideHeadingInfractions": "עבירות", - "commGuidePara050": "באופן כללי, ההביטיקנים עוזרים זה לזה, מכבדים אחד את השני, ופועלים יחד כדי להפוך את הקהילה כולה לנעימה וחברותית. אולם, לעיתים רחוקות מאוד, מעשהו של הביטיקן עשוי להפר את אחד מהחוקים הנ\"ל. כאשר זה קורה, המנהלים ינקטו בכל פעולה שנראית להם הכרחית כדי להשאיר את הביטיקה בטוחה ונוחה עבור כולם.", + "commGuidePara050": "בגדול, ההביטיקנים עוזרים זה לזה, מכבדים אחד את השני, ופועלים יחד כדי לדאוג שהאווירה כאן תהיה נעימה וחברותית. אולם, לעיתים רחוקות מאוד, מעשהו של הביטיקן עשוי להפר את אחד מהחוקים הנ״ל. כאשר זה קורה, המנהלים ינקטו בכל פעולה שנראית להם הכרחית כדי להשאיר את הביטיקה בטוחה ונוחה עבור כולם.", "commGuidePara051": "", "commGuideHeadingSevereInfractions": "עבירות חמורות", "commGuidePara052": "עבירות חמורות הן אלו שפוגעות פגיעה אנושה בביטחון קהילת הביטיקה ומשתמשיה, וכתוצאה מכך יש להן גם השלכות חמורות.", "commGuidePara053": "להלן רשימת דוגמאות לעבירות חמורות, זו איננה רשימה כוללת.", - "commGuideList05A": "הפרה של תנאי השימוש", + "commGuideList05A": "", "commGuideList05B": "הפצת מילות/תמונות שנאה, הטרדה/מעקב, בריונות-רשת, וכחנות והצקה", "commGuideList05C": "הפרה של תנאי תקופת מבחן", - "commGuideList05D": "Impersonation of Staff or Moderators", + "commGuideList05D": "", "commGuideList05E": "ביצוע עבירות בינוניות בצורה חוזרת ונשנית", - "commGuideList05F": "", + "commGuideList05F": "יצירת העתק של החשבון במטרה להימנע מהשלכות", "commGuideList05G": "", "commGuideHeadingModerateInfractions": "עבירות בדרגת חומרה בינונית", "commGuidePara054": "עבירות בינוניות אינן פוגעות בביטחון הקהילה, אך הן יוצרות חוויה לא נעימה. לעבירות כאלו יהיו השלכות מתונות. אם ייעשו עבירות נוספות, ייתכן ויהיו לכך השלכות חמורות יותר.", "commGuidePara055": "להלן רשימת דוגמאות לעבירות בינוניות. זו איננה רשימה כוללת.", "commGuideList06A": "", - "commGuideList06C": "", + "commGuideList06C": "דיווח על אתגרים, פרופילים, או הודעות שאינם מהווים הפרה של ההנחיות, מתוך מניעים אישיים.", "commGuideList06E": "", "commGuideHeadingMinorInfractions": "עבירות משניות", "commGuidePara056": "עבירות משניות, למרות שאינן רצויות, מובילות רק להשלכות משניות. אם ביצוע העבירות ממשיך לחזור, הן עשויות להוביל להשלכות חמורות יותר.", @@ -44,23 +44,23 @@ "commGuideList07B": "", "commGuidePara057A": "", "commGuideHeadingConsequences": "השלכות", - "commGuidePara059": " בדומה לכך, לכל עבירה יש השלכה ישירה. דוגמאות להשלכות אפשריות רשומות מטה.", + "commGuidePara059": "לכל עבירה בקהילה יש השלכה ישירה. דוגמאות להשלכות אפשריות רשומות מטה.", "commGuideHeadingSevereConsequences": "דוגמאות להשלכות חמורות", "commGuideList09A": "", - "commGuideList09C": "מניעת (״הקפאת״) ההתקדמות ברמות תורם לצמיתות", + "commGuideList09C": "עצירה לתמיד של ההתקדמות ברמות תורם", "commGuideHeadingModerateConsequences": "דוגמאות להשלכות מתונות", - "commGuideList10D": "מניעת (״הקפאת״) ההתקדמות ברמות תורם באופן זמני", + "commGuideList10D": "השהייה זמנית של ההתקדמות ברמות תורם", "commGuideHeadingMinorConsequences": "דוגמאות להשלכות שוליות", - "commGuideList11A": "תזכורות לגבי החוקים הקהילתיים", + "commGuideList11A": "תזכורות לגבי ההנחיות", "commGuideList11B": "אזהרות", "commGuideList11C": "בקשות", - "commGuideList11D": "מחיקה (עורכים / חברי הצוות יכולים למחוק תוכן בעייתי)", - "commGuideList11E": "עריכה (עורכים / חברי הצוות יכולים לערוך תוכן בעייתי)", + "commGuideList11D": "מחיקה של תוכן בעייתי על ידי הצוות", + "commGuideList11E": "עריכה של תוכן בעייתי על ידי הצוות", "commGuideHeadingRestoration": "שחזור", "commGuidePara061": "", "commGuidePara062": "", "commGuidePara063": "", - "commGuideHeadingMeet": "", + "commGuideHeadingMeet": "הכירו את הצוות", "commGuidePara007": "לצוות יש תגיות סגולות המסומנות בכתרים. התואר שלהם הוא \"הירואי\".", "commGuidePara009": "חברי הצוות הנוכחיים הם (משמאל לימין):", "commGuideAKA": "", @@ -74,9 +74,12 @@ "commGuidePara067": "So there you have it, brave Habitican -- the Community Guidelines! Wipe that sweat off of your brow and give yourself some XP for reading it all. If you have any questions or concerns about these Community Guidelines, please reach out to us via the Moderator Contact Form and we will be happy to help clarify things.", "commGuidePara068": "עכשיו התקדמו לכם, הרפתקנים אמיצים, והרגו כמה מטלות יומיומיות!", "commGuideHeadingLinks": "קישורים שימושיים", - "commGuideLink02": "The Wiki: the biggest collection of information about Habitica.", - "commGuideLink03": "GitHub: for bug reports or helping with code!", - "commGuideLink04": "The Main Trello: for site feature requests.", + "commGuideLink02": "", + "commGuideLink03": "", + "commGuideLink04": "", "commGuidePara069": "האמנים המוכשרים הבאים תרמו ליצירת איורים אלו:", - "commGuideList01A": "התנאים וההתניות חלים על כל המרחבים, לרבות גילדות פרטיות, צ׳אט חבורה, והודעות." + "commGuideList01A": "התנאים וההתניות חלים על כל המרחבים, לרבות גילדות פרטיות, צ׳אט חבורה, והודעות.", + "commGuideList09D": "הסרה או הנמכה של דרגות התורם", + "commGuideList02Q": "אין לנסות לעקוף חסימה. אם מישהו חסם אותך מהאפשרות לשלוח לו הודעות, אין ליצור איתו קשר במקום אחר בשביל לבקש ממנו להסיר את החסימה.", + "commGuideList02M": "אין לבקש או להתחנן לקבלת יהלומים, תוכניות למנויים, או חברות בתוכניות קבוצתיות. אם קיבלת הודעות לא רצויות המבקשות ממך לתת פריטים בתשלום, נא לדווח עליהן. התחננות חוזרת ונשנית לקבלת יהלומים או תוכניות למנויים, במיוחד לאחר קבלת אזהרה, עלולה לגרום להשעיית החשבון." } diff --git a/website/common/locales/he/death.json b/website/common/locales/he/death.json index cc55aa0e9e..7aa0604606 100644 --- a/website/common/locales/he/death.json +++ b/website/common/locales/he/death.json @@ -1,15 +1,15 @@ { - "lostAllHealth": "אזלו לך נקודות הבריאות!", - "dontDespair": "לא להתייאש!", + "lostAllHealth": "מד הבריאות שלך התרוקן!", + "dontDespair": "אין שום ייאוש!", "deathPenaltyDetails": "ירדת בדרגה, איבדת את מטבעות הזהב שלך ופריט ציוד אחד, אבל אפשר להשיג אותם בחזרה עם עבודה קשה! בהצלחה – יהיה בסדר.", - "refillHealthTryAgain": "מילוי נקודות הבריאות וניסיון חוזר", + "refillHealthTryAgain": "מילוי מד הבריאות והתחלה חדשה", "dyingOftenTips": "זה קורה לעיתים קרובות? הינה כמה עצות!", - "losingHealthWarning": "זהירות - נקודות הבריאות אוזלות לך!", - "losingHealthWarning2": "לא לתת לבריאות שלך לרדת לאפס! אחרת, הדמות שלך תרד בדרגה, תאבד את כל מטבעות הזהב, וגם פריט ציוד.", - "toRegainHealth": "כדי לצבור נקודות בריאות בחזרה:", + "losingHealthWarning": "זהירות - מד הבריאות שלך מתרוקן!", + "losingHealthWarning2": "אסור לתת למד הבריאות להתרוקן! אחרת, הדמות שלך תרד בדרגה, תאבד את כל מטבעות הזהב, וגם פריט ציוד.", + "toRegainHealth": "בשביל למלא את מד הבריאות:", "lowHealthTips1": "יש לעלות בדרגה כדי להחלים לגמרי!", - "lowHealthTips2": "רכשו שיקוי בריאות בעמודת הפרסים כדי להחזיר 15 נקודות בריאות.", - "losingHealthQuickly": "נקודות הבריאות אוזלות מהר?", + "lowHealthTips2": "אפשר לקנות שיקוי בריאות בטור הפרסים בשביל להחזיר 15 נקודות בריאות.", + "losingHealthQuickly": "מד הבריאות מתרוקן מהר?", "lowHealthTips3": "מטלות יומיומיות שלא הושלמו יפגעו בך במשך הלילה, יש להיזהר שלא להתחיל עם יותר מדי!", "lowHealthTips4": "אם משימה יומיומית לא תקפה ליום מסוים, אפשר להשבית אותה בעזרת לחיצה על סמל העיפרון.", "goodLuck": "בהצלחה!", diff --git a/website/common/locales/he/defaulttasks.json b/website/common/locales/he/defaulttasks.json index c0ab72b509..3c9c6514f0 100644 --- a/website/common/locales/he/defaulttasks.json +++ b/website/common/locales/he/defaulttasks.json @@ -1,12 +1,12 @@ { - "defaultHabit1Text": "עבודה פורייה (יש ללחוץ על העיפרון כדי לערוך)", - "defaultHabit2Text": "אכילת זלולת (יש ללחוץ על העיפרון כדי לערוך)", + "defaultHabit1Text": "עבודה ביעילות (יש ללחוץ על העיפרון כדי לערוך)", + "defaultHabit2Text": "אכילה של ג׳אנק־פוד (יש ללחוץ על העיפרון כדי לערוך)", "defaultHabit3Text": "שימוש במדרגות/מעלית (יש ללחוץ על העיפרון כדי לערוך)", "defaultHabit4Text": "הוספת משימה להביטיקה", "defaultHabit4Notes": "היא יכולה להיות הרגל, מטלה יומיומית, או משימה לביצוע", "defaultTodo1Text": "הצטרפות להביטיקה (סמנו אותי!)", "defaultTodoNotes": "אפשר להשלים את המשימה לביצוע, לערוך או למחוק אותה.", - "defaultReward1Text": "הפסקה של 15 דקות", + "defaultReward1Text": "הפסקה של רבע שעה", "defaultReward2Text": "לתת לעצמך פרס", "defaultReward2Notes": "לצפות בטלוויזיה, לשחק במשחק, לאכול משהו טעים, החלטה שלך!", "defaultTag1": "עבודה", @@ -18,9 +18,9 @@ "defaultTag7": "יצירתיות", "exerciseDailyNotes": "יש ללחוץ כדי לבחור את הזמנים שלך ולפרט פעילויות!", "exerciseDailyText": "מתיחות >> שגרת התעמלות יומיומית", - "exerciseHabit": "10 דקות כושר >> + 10 דקות כושר", + "exerciseHabit": "10 דקות של אימון סיבולת >> + 10 דקות של אימון סיבולת", "workTodoProjectNotes": "יש ללחוץ כדי לציין את שם הפרויקט הנוכחי + להוסיף תאריך יעד!", - "workTodoProject": "פרויקט עבודה >> השלמת פרויקט שקשור לעבודה", + "workTodoProject": "פרויקט בעבודה >> השלמת פרויקט שקשור לעבודה", "workDailyImportantTaskNotes": "יש ללחוץ כדי לבחור את המשימה החשובה ביותר", "workDailyImportantTask": "המשימה החשובה ביותר >> לעבוד על המשימה החשובה ביותר להיום", "creativityDailyText": "עבודה על פרויקט יצירתי", @@ -43,5 +43,8 @@ "creativityTodoNotes": "אפשר ללחוץ כאן כדי לציין את שם המיזם שלך", "schoolDailyNotes": "אפשר ללחוץ כאן ולשנות את שעת שיעורי הבית שלך!", "creativityTodoText": "השלמת מיזם יצירתי", - "schoolTodoNotes": "לחץ כאן על מנת לתת שם למטלה ולבחירת תאריך יעד!" + "schoolTodoNotes": "לחץ כאן על מנת לתת שם למטלה ולבחירת תאריך יעד!", + "healthDailyText": "העברת חוט דנטלי", + "choresTodoText": "סידור הארון >> פחות בלגן", + "selfCareTodoNotes": "יש ללחוץ בשביל לציין מה מתוכנן!" } diff --git a/website/common/locales/he/faq.json b/website/common/locales/he/faq.json index 7572436814..79327427d2 100644 --- a/website/common/locales/he/faq.json +++ b/website/common/locales/he/faq.json @@ -3,7 +3,8 @@ "iosFaqStillNeedHelp": "אם יש לך שאלה שאינה מופיעה ברשימה או ב[וויקי שאלות נפוצות](https://habitica.fandom.com/wiki/FAQ), אנחנו מזמינים אותך לשאול בשיחת הפונדק תחת תפריט > פונדק! נשמח לעזור.", "androidFaqStillNeedHelp": "אם יש לך שאלה שאינה מופיעה ברשימה או ב[וויקי שאלות נפוצות](https://habitica.fandom.com/wiki/FAQ), אנחנו מזמינים אותך לשאול בשיחת הפונדק תחת תפריט > פונדק! נשמח לעזור.", "webFaqStillNeedHelp": "", - "webFaqAnswer25": "בHabitica יש שלוש סוגי משימות על מנת לענות על כל הצרכים שלך: הרגלים, משימות חוזרות, ומשימה", + "webFaqAnswer25": "הביטיקה משתמשת בשלושה סוגי משימות שונים כדי להתאים לצרכים שלך: הרגלים, משימות יומיות ומשימות.\n\nהרגלים יכולים להיות חיוביים או שליליים ולייצג משהו שרוצים לעקוב אחריו מספר פעמים ביום, או בלוח זמנים לא מוגדר. הרגלים חיוביים יספקו לך תגמולים, כמו מטבעות זהב ונקודות ניסיון (Exp), בעוד שהרגלים שליליים יגרמו לך לאבד נקודות בריאות (HP).\n\nמשימות יומיות הן משימות חוזרות שרוצים להשלים בלוח זמנים מובנה יותר. לדוגמה, פעם ביום, שלוש פעמים בשבוע או ארבע פעמים בחודש. החמצת משימות יומיות גורמת לך לאבד נקודות חיים, אך ככל שהן קשות יותר, כך התגמולים טובים יותר!\n\nמטלות הן משימות חד פעמיות המספקות תגמולים לאחר שמשלימים אותן. למשימות יכול להיות תאריך יעד, אך לא ירדו נקודות חיים אם מפספסים אותו.\n\nיש לבחור את סוג המשימה המתאים ביותר למה שרוצים להשיג!", "commonQuestions": "שאלות נפוצות", - "faqQuestion25": "מהן סוגי המשימות השונות?" + "faqQuestion25": "מהן סוגי המשימות השונות?", + "parties": "חבורות" } diff --git a/website/common/locales/he/front.json b/website/common/locales/he/front.json index caa310cac0..e7febe4575 100644 --- a/website/common/locales/he/front.json +++ b/website/common/locales/he/front.json @@ -7,8 +7,8 @@ "communityFacebook": "פייסבוק", "companyAbout": "איך זה עובד", "companyBlog": "בלוג", - "companyContribute": "התנדבות", - "companyDonate": "תרומה", + "companyContribute": "התנדבות בהביטיקה", + "companyDonate": "תרומה להביטיקה", "forgotPassword": "שכחת את הסיסמה?", "emailNewPass": "שליחת דוא״ל עם קישור לאיפוס הסיסמה", "forgotPasswordSteps": "נא לציין את שם המשתמש שלך או את כתובת הדוא״ל איתה נרשמת לחשבון הביטיקה שלך.", @@ -25,34 +25,34 @@ "invalidEmail": "לאיפוס הסיסמה נדרשת כתובת דוא״ל תקינה.", "login": "כניסה", "logout": "יציאה", - "marketing1Header": "שיפור ההרגלים שלך בעזרת משחק", - "marketing1Lead1Title": "החיים שלך, בתור משחק תפקידים", - "marketing1Lead1": "הביטיקה הוא משחק שנועד לשפר את ההרגלים שלך בחיים האמיתיים. הוא הופך את המשימות שלך (הרגלים, מטלות יומיות, ומשימות) למפלצות קטנות שצריך להביס. ככל שמשתפרים במשחק, מתקדמים בו. אם נכשלים בביצוע המשימות בחיים האמיתיים, הדמות במשחק תתחיל גם היא להתדרדר.", + "marketing1Header": "בונים הרגלים טובים יותר, שלב אחד בכל פעם!", + "marketing1Lead1Title": "לשחק אותה בחיים האמיתיים", + "marketing1Lead1": "הביטיקה היא היישום המושלם לכל מי שמתקשה עם רשימות של משימות לביצוע. אנחנו משתמשים במכניקות משחק ידידותיות כמו להעניק לך פרסים כגון זהב, נקודות ניסיון, ופריטים שיסייעו לך לתחושת יעילות ולהגברת תחושב ההישג בעת השלמת משימות. ככל שמשתפרים בהשלמת משימות, כך מתקדמים יותר במשחק.", "marketing1Lead2Title": "השיגו ציוד מטריף", "marketing1Lead2": "", - "marketing1Lead3Title": "מצאו פרסים מדהימים", + "marketing1Lead3Title": "מקבלים פרסים על המאמץ", "marketing1Lead3": "For some, it's the gamble that motivates them: a system called \"stochastic rewards.\" Habitica accommodates all reinforcement and punishment styles: positive, negative, predictable, and random.", - "marketing2Header": "התחרו בחברייכם, הצטרפו לקבוצות עניין", - "marketing2Lead1Title": "Social Productivity", + "marketing2Header": "נלחמים לצד החברים", + "marketing2Lead1Title": "יעילות חברתית", "marketing2Lead1": "While you can play Habitica solo, the lights really turn on when you start collaborating, competing, and holding each other accountable. The most effective part of any self-improvement program is social accountability, and what better an environment for accountability and competition than a video game?", - "marketing2Lead2Title": "לחימה במפלצות", + "marketing2Lead2Title": "מסעות לחימה במפלצות", "marketing2Lead2": "What's a Role Playing Game without battles? Fight monsters with your party. Monsters are \"super accountability mode\" - a day you miss the gym is a day the monster hurts *everyone!*", - "marketing2Lead3Title": "Challenge Each Other", + "marketing2Lead3Title": "מאתגרים את החברים", "marketing2Lead3": "Challenges let you compete with friends and strangers. Whoever does the best at the end of a challenge wins special prizes.", - "marketing3Header": "יישומים והרחבות", - "marketing3Lead1": "The **iPhone & Android** apps let you take care of business on the go. We realize that logging into the website to click buttons can be a drag.", - "marketing3Lead2Title": "Integrations", + "marketing3Header": "עוד דרכים להשתמש בהביטיקה", + "marketing3Lead1": "", + "marketing3Lead2Title": "קהילת קוד פתוח", "marketing3Lead2": "", - "marketing4Header": "שימוש ארגוני", - "marketing4Lead1": "Education is one of the best sectors for gamification. We all know how glued to phones and games students are these days; harness that power! Pit your students against each other in friendly competition. Reward good behavior with rare prizes. Watch their grades and behavior soar.", - "marketing4Lead1Title": "חינוך באמצעות משחקים", + "marketing4Header": "מעבר למטלות אחזקת הבית", + "marketing4Lead1": "", + "marketing4Lead1Title": "לשחק אותה בחינוך", "marketing4Lead2": "העלויות של טיפולים רפואיים בעלייה, וזה לא יכול להמשיך ככה. אין ספור תוכניות נבנו על מנת לעזור לנו לשפר את המצב הבריאותי וכתוצאה גם להפחית בהוצאות הרפואיות. אנחנו מאמינים שהביטיקה יכול לעזור לסלול דרך משמעותית לעבר סגנון חיים בריא יותר.", - "marketing4Lead2Title": "משחקים בתחום הבריאות", - "marketing4Lead3-1": "רוצה לשחק אותה בחיים האמיתיים?", + "marketing4Lead2Title": "לשחק אותה בתחום הבריאות והרווחה האישית", + "marketing4Lead3-1": "מוכנים להכניס קצת כיף למשימות שלכם?", "marketing4Lead3-2": "מתעניין בניהול קבוצת חינוך, רווחה, ועוד?", - "marketing4Lead3Title": "לשחק אותה בכל תחומי החיים", - "mobileAndroid": "אנדרואיד", - "mobileIOS": "iOS", + "marketing4Lead3Title": "מתחילים את המסע!", + "mobileAndroid": "יישום לאנדרואיד", + "mobileIOS": "יישום ל־iOS", "oldNews": "חדשות", "setNewPass": "הגדר סיסמה חדשה", "password": "סיסמה", @@ -73,7 +73,7 @@ "pkAnswer6": "", "pkQuestion7": "", "pkAnswer7": "", - "pkQuestion8": "", + "pkQuestion8": "איך הביטיקה עזרה לאנשים בחיים האמיתיים?", "pkAnswer8": "", "pkMoreQuestions": "", "pkPromo": "פרומואים", @@ -88,13 +88,13 @@ "tasks": "משימות", "teams": "צוותים", "terms": "תנאי השימוש", - "tumblr": "", + "tumblr": "טאמבלר", "localStorageTryFirst": "", "localStorageTryNext": "אם הבעיה נמשכת, נא <%= linkStart %>לדווח על התקלה<%= linkEnd %> - אם לא עשית זאת כבר.", "localStorageClear": "ניקוי הנתונים", "localStorageClearExplanation": "", "username": "שם משתמש", - "emailOrUsername": "", + "emailOrUsername": "כתובת דואר אלקטרוני או שם משתמש (יש הבחנה בין אותיות גדולות לקטנות)", "work": "עבודה", "reportAccountProblems": "דווח על בעיות בחשבון משתמש", "reportCommunityIssues": "דווח על בעיות בקהילה", @@ -111,12 +111,12 @@ "missingPassword": "חסרה סיסמה.", "missingNewPassword": "חסרה סיסמה חדשה.", "invalidEmailDomain": "אינכם יכולים להרשם עם מיילים מהמתחמים (דומיינים) הבאים: <%= domains %>", - "wrongPassword": "סיסמה שגויה.", - "incorrectDeletePhrase": "Please type <%= magicWord %> in all caps to delete your account.", + "wrongPassword": "הסיסמה שגויה. אם שכחת את הסיסמה, נא ללחוץ על \"שכחתי את הסיסמה\".", + "incorrectDeletePhrase": "", "notAnEmail": "כתובת מייל לא תקנית.", "emailTaken": "כתובת המייל כבר בשימוש על ידי חשבון אחר.", "newEmailRequired": "חסרה כתובת מייל חדשה.", - "usernameTime": "", + "usernameTime": "זמן ליצור שם משתמש!", "usernameInfo": "", "usernameTOSRequirements": "", "usernameTaken": "שם המשתמש כבר תפוס.", @@ -170,11 +170,15 @@ "joinMany": "אנחנו מזמינים אותך להצטרף אל למעלה מ־<%= userCountInMillions %> משתמשים שמגיעים ליעדים שלהם בכיף!", "joinToday": "הצטרפות להביטיקה", "signup": "הרשמה", - "getStarted": "מתחילים!", + "getStarted": "מתחילים", "mobileApps": "יישומים לנייד", "learnMore": "למידע נוסף", "communityInstagram": "אינסטגרם", "minPasswordLength": "על הסיסמה להכיל 8 תווים ומעלה.", "enterHabitica": "כניסה להביטיקה", - "emailUsernamePlaceholder": "למשל: habitrabbit או gryphon@example.com" + "emailUsernamePlaceholder": "למשל: habitrabbit או gryphon@example.com", + "footerProduct": "מוצר", + "marketing3Lead1Title": "יישומים לאנדרואיד ו־iOS", + "marketing4Lead3Button": "מתחילים היום", + "translateHabitica": "לסיוע בתרגום הביטיקה" } diff --git a/website/common/locales/he/gear.json b/website/common/locales/he/gear.json index 894150191a..86b89020a8 100644 --- a/website/common/locales/he/gear.json +++ b/website/common/locales/he/gear.json @@ -28,9 +28,9 @@ "weaponWarrior2Text": "גרזן", "weaponWarrior2Notes": "נשק חיתוך כפול. מגביר כוח ב <%= str %>.", "weaponWarrior3Text": "כוכב שחר", - "weaponWarrior3Notes": "נבוט כבר עם קוצים אכזריים שיזמברו את אויביך. מגביר את הכוח שלך ב <%= str %> .", + "weaponWarrior3Notes": "נבוט כבר עם קוצים אכזריים שיזמברו את אויביך. מגביר את הכוח שלך ב <%= str %> .", "weaponWarrior4Text": "להב ספיר", - "weaponWarrior4Notes": "לא להתבלבל עם להב סנפיר, זוהי חרב שמכותיה נושכות כמו הכפור של הרוח הצפונית. מגבירה את הכוח שלך ב <%= str %>.", + "weaponWarrior4Notes": "לא להתבלבל עם להב סנפיר, זוהי חרב שמכותיה נושכות כמו הכפור של הרוח הצפונית. מגבירה את הכוח שלך ב <%= str %>.", "weaponWarrior5Text": "חרב אודם", "weaponWarrior5Notes": "החרב שצבעה כמו אבני האודם היקרות זוהרת תמיד באור הכבשן בו חושלה. מגבירה את הכוח שלך ב <%= str %>.", "weaponWarrior6Text": "חרב זהב", @@ -44,7 +44,7 @@ "weaponRogue3Text": "קוקרי", "weaponRogue3Notes": "סכין יעיל במיוחד לגיזום שיחים, גדיעת ענפים, וכריתת גפיים. מגביר את הכוח שלך ב <%= str %>.", "weaponRogue4Text": "נונצ'אקו", - "weaponRogue4Notes": "פיסות עץ המסתחררות על קצהה של פיסת שרשרת, דרך נהדרת לתבל את מכותייך בריחו של עץ קנדי משובח. מגביר את הכוח שלך ב <%= str %> נקודות.", + "weaponRogue4Notes": "פיסות עץ המסתחררות על קצהה של פיסת שרשרת, דרך נהדרת לתבל את מכותייך בריחו של עץ קנדי משובח. מגביר את הכוח שלך ב <%= str %> נקודות.", "weaponRogue5Text": "נינג'ה-טו", "weaponRogue5Notes": "חרב חמקמקה וקטלנית כמו הנינג'ות בעצמם, שימושית במיוחד לרציחות חסויות באישון ליל. מגבירה את הכוח שלך ב <%= str %> נקודות.", "weaponRogue6Text": "חרב קרס", @@ -56,7 +56,7 @@ "weaponWizard2Text": "מטה מעוטר", "weaponWizard2Notes": "כעת ניתן לתעל את כוחך דרך אבן החן המשובצת בקצה המטה, ולהמטיר אבדון על אויביך. מגביר את התבונה שלך ב <%= int %> ואת התפיסה שלך ב <%= per %> נקודות.", "weaponWizard3Text": "מטה ברזל", - "weaponWizard3Notes": "מכוסה בלוחות מתכת המתעלים חום, קור וברקים, כך שמשום מה זה יותר שווה מאבן חן נוצצת ומגניבה. מגביר את התבונה שלך ב <%= int %> ואת התפיסה שלך ב <%= per %> נקודות.", + "weaponWizard3Notes": "מצופה במתכת המוליכה חום, קור וברקים. מגביר את התבונה ב־<%= int %> ואת התפיסה ב־<%= per %>.", "weaponWizard4Text": "מטה פליז", "weaponWizard4Notes": "האויבים שלך עשויים לצחוק על המתכת פליז, אבל הם בטוח לא יצחקו כשהם יופצצו עם אנרגיה מיסטית רבת עצמה. מגביר את התבונה שלך ב <%= int %> ואת התפיסה שלך ב <%= per %> נקודות.", "weaponWizard5Text": "מטה הרב-מג", @@ -82,9 +82,9 @@ "weaponSpecial1Text": "להב קריסטל", "weaponSpecial1Notes": "ההיבטים הנוצצים מספרים סיפור של גיבור. מגביר את כל המדדים ב <%= attrs %>.", "weaponSpecial2Text": "מוט הדרקון של סטיבן וובר", - "weaponSpecial2Notes": "חוש בכוח הדרקון מתפרץ מתוכך, כמו לבה מתוך הר געש! מגביר את ערכי הכוח והחוסן ב<%= attrs %> נקודות כל אחד.", + "weaponSpecial2Notes": "חוש בכוח הדרקון מתפרץ מתוכך, כמו לבה מתוך הר געש! מגביר את ערכי הכוח והחוסן ב<%= attrs %> נקודות כל אחד.", "weaponSpecial3Text": "כוכב השחר המנתץ של מאסטין", - "weaponSpecial3Notes": "פגישות, מפלצות, דיכאון: טופל! נמחץ! נותץ! פוצץ! מגביר את ערכי הכוח, התבונה והחוסן ב<%= attrs %> נקודות לכל אחד.", + "weaponSpecial3Notes": "פגישות, מפלצות, דיכאון: טופל! נמחץ! נותץ! פוצץ! מגביר את ערכי הכוח, התבונה והחוסן ב<%= attrs %> נקודות לכל אחד.", "weaponSpecialCriticalText": "פטיש מדהים של תיקון באגים", "weaponSpecialCriticalNotes": "", "weaponSpecialTakeThisText": "חרב Take This", @@ -922,7 +922,7 @@ "headSpecialSummerMageText": "כובע כרוך־אצות", "headSpecialSummerMageNotes": "מה יכול להיות קסום יותר מכובע עטוף אצות? מגביר תפיסה ב־<%= per %>. מהדורה מוגבלת 2014, ציוד קיץ.", "headSpecialSummerHealerText": "כתר אלמוגים", - "headSpecialSummerHealerNotes": "מאפשר ללובש לרפא אלמוגים פגועים. מגביר תבונה ב <%= int %>. מהדורה מוגבלת 2014, ציוד קיץ.", + "headSpecialSummerHealerNotes": "מאפשר ללובש לרפא אלמוגים פגועים. מגביר תבונה ב <%= int %>. מהדורה מוגבלת 2014, ציוד קיץ.", "headSpecialFallRogueText": "כיפה אדומה כדם", "headSpecialFallRogueNotes": "זהותו של מחסל ערפדים תמיד צריכה להיות חסויה. מגביר תפיסה ב <%= per %>. מהדורה מוגבלת 2014, ציוד אביב.", "headSpecialFallWarriorText": "קרקפת מדע מפלצתית", @@ -1112,7 +1112,7 @@ "headMystery201603Text": "כובע מזל", "headMystery201603Notes": "כובע זה הוא קמע מזל קסום. לא מקנה יתרון. מרץ 2016, פריט מנויים.", "headMystery201604Text": "כתר פרחים", - "headMystery201604Notes": "הפרחים השזורים האלו יוצרים קסדה חזקה באופן מפתיע! לא מקנה יתרון. אפריל 2016, פריט מנויים.", + "headMystery201604Notes": "הפרחים השזורים האלו יוצרים קסדה חזקה באופן מפתיע! לא מקנה יתרון. אפריל 2016, פריט מנויים.", "headMystery201605Text": "כובע משורר צעדן", "headMystery201605Notes": "שבעים ושישה דרקונים הובילו את המצעד הגדול, עם מאה ועשרה גריפונים בקרבת יד! לא מקנה יתרון. פריט מנויים ממאי 2016.", "headMystery201606Text": "כובע כלב־ים", @@ -1275,7 +1275,7 @@ "shieldWarrior2Text": "מגן יד", "shieldWarrior2Notes": "קליל ועמיד, זריז לשימוש בהגנה. מגביר את ערך החוסן שלך ב<%= con %> נקודות.", "shieldWarrior3Text": "מגן מחוזק", - "shieldWarrior3Notes": "עשוי מעץ אך מחוזק ברצועות מתכת. נראה את אויביך פורצים דרך זה. מגביר את ערך החוסן שלך ב<%= con %> נקודות.", + "shieldWarrior3Notes": "עשוי מעץ אך מחוזק ברצועות מתכת. נראה את אויביך פורצים דרך זה. מגביר את ערך החוסן שלך ב<%= con %> נקודות.", "shieldWarrior4Text": "מגן אדום", "shieldWarrior4Notes": "הודף התקפות עם פרץ להבות מרתיע. מגביר את ערך החוסן שלך ב<%= con %> נקודות.", "shieldWarrior5Text": "מגן זהב", @@ -1419,7 +1419,7 @@ "shieldArmoireRoyalCaneText": "מקל רועים מלכותי", "shieldArmoireRoyalCaneNotes": "הידד לשליט, ראוי לשיר! מגביר חוסן, תבונה ותפיסה ב <%= attrs %> כל אחד. ארמואר קסום: סט מלכותי (פריט 2 מתוך 3).", "shieldArmoireDragonTamerShieldText": "מגן מאלף דרקונים", - "shieldArmoireDragonTamerShieldNotes": "הסיחו את דעתם של אויבים עם מגן בצורת דרקון זה. מגביר תפיסה ב <%= per %>. ארמואר קסום: סט מאלף דרקונים (פריט 2 מתוך 3).", + "shieldArmoireDragonTamerShieldNotes": "הסיחו את דעתם של אויבים עם מגן בצורת דרקון זה. מגביר תפיסה ב <%= per %>. ארמואר קסום: סט מאלף דרקונים (פריט 2 מתוך 3).", "shieldArmoireMysticLampText": "מנורה מיסטית", "shieldArmoireMysticLampNotes": "האירו את המערות החשוכות ביותר עם מנורה מיסטית זו! מגביר תפיסה ב־<%= per %>. ארמואר קסום: פריט עצמאי.", "shieldArmoireFloralBouquetText": "זר פרחים", @@ -1692,7 +1692,7 @@ "eyewearSpecialWonderconBlackText": "מסכה מתגנבת", "eyewearSpecialWonderconBlackNotes": "המניעים שלך לגמרי ראויים. לא מקנה יתרון. מהדורה מוגבלת, פריט כנס.", "eyewearMystery201503Text": "לבוש עיניים כחלחל", - "eyewearMystery201503Notes": "שאבני החן הבוהקות הללו לא ייתקעו לך בעיניים! לא מקנות יתרון. מרץ 2015, פריט מנויים.", + "eyewearMystery201503Notes": "רק שהיהלומים הבוהקים האלה לא ייתקעו לך בעיניים! לא מקנים יתרון. מרץ 2015, פריט מנויים.", "eyewearMystery201506Text": "שנורקל נאון", "eyewearMystery201506Notes": "שנורקל הנאון הזה מאפשר למי שלובש אותו לראות מתחת למים. לא מקנות יתרון. פריט מנויים, יוני 2015.", "eyewearMystery201507Text": "משקפי שמש נועזות", diff --git a/website/common/locales/he/generic.json b/website/common/locales/he/generic.json index 7462ee1a98..dd721bc2e2 100644 --- a/website/common/locales/he/generic.json +++ b/website/common/locales/he/generic.json @@ -25,7 +25,7 @@ "user": "משתמש", "market": "שוק", "newSubscriberItem": "יש לכם חפצים מסתוריים חדשים", - "subscriberItemText": "בכל חודש, מנויים יקבלו פריט מסתורי. הוא הופך לזמין בתחילת החודש. ראו בוויקי את הדף 'Mystery Item' למידע נוסף.", + "subscriberItemText": "מנויים יקבלו פריט מסתורי חדש בתחילת כל חודש!", "all": "הכול", "none": "כלום", "more": "עוד <%= count %>", @@ -90,7 +90,7 @@ "reportBug": "דיווח על תקלה", "overview": "סיור למשתמשים חדשים", "dateFormat": "פורמט תאריך", - "achievementStressbeast": "מושיע של השארוגועים", + "achievementStressbeast": "מושיע השלוונים", "achievementStressbeastText": "סייע בהבסת המפלחץ המתועב במהלך אירועי חורף הפלאות של 2014!", "achievementBurnout": "מציל השדות הפורחים", "achievementBurnoutText": "סייע להביס ״שחיקה״ ולהשיב את ״הרוחות המותשות״ במהלך אירוע פסטיבל השלכת 2015!", @@ -109,7 +109,7 @@ "greeting2": "׳מנפנף בטירוף׳", "greeting3": "הי את/ה!", "greetingCardAchievementTitle": "חבר עליז", - "greetingCardAchievementText": "", + "greetingCardAchievementText": "שלום! אהלן! היי! נשלחו או התקבלו <%= count %> כרטיסי ברכה.", "thankyouCard": "כרטיס תודה", "thankyouCardExplanation": "שניכם מקבלים הישג של מודה מאוד!", "thankyouCardNotes": "שלח כרטיס תודה לחבר חבורה.", @@ -148,7 +148,7 @@ "goodluckCardExplanation": "", "goodluckCardNotes": "", "goodluck0": "", - "goodluck1": "", + "goodluck1": "מאחלים לך הצלחה בשפע!", "goodluck2": "", "goodluckCardAchievementTitle": "", "goodluckCardAchievementText": "", @@ -180,9 +180,9 @@ "health_fitness": "בריאות + כושר", "hobbies_occupations": "Hobbies + Occupations", "location_based": "על סמך מיקום", - "mental_health": "", + "mental_health": "בריאות הנפש + טיפוח עצמי", "getting_organized": "", - "self_improvement": "", + "self_improvement": "שיפור עצמי", "spirituality": "רוחניות", "time_management": "", "recovery_support_groups": "קבוצות שיקום + תמיכה", @@ -193,7 +193,7 @@ "userSentMessage": "<%- user %> sent you a message", "letsgo": "קדימה!", "selected": "נבחרו", - "howManyToBuy": "כמה ברצונך לקנות?", + "howManyToBuy": "כמה ברצונך לרכוש?", "contactForm": "יצירת קשר עם צוות המנהלים", "onboardingAchievs": "הישגי הסתגלות", "options": "אפשרויות", @@ -227,7 +227,7 @@ "leaveHabitica": "אתה עומד לצאת מ- Habitica.com", "unbanPlayer": "ביטול חסימת פעילות משתמש", "adminTools": "כלים למנהל", - "viewAdminPanel": "צפייה בלוח מנהל", + "viewAdminPanel": "צפייה בלוח הניהול", "shadowMute": "השתקה שקטה", "mutePlayer": "השתקה", "playerReportModalBody": "דווח על משתמש אך ורק במידה והוא מפר את <%= firstLinkStart %>הנחיות הקהילה<%= linkEnd %> ו/או <%= secondLinkStart %>תנאי השירות<%= linkEnd %>. שליחת דיווח כוזב הינה הפרה של הנחיות הקהילה של Habitica.", @@ -238,5 +238,6 @@ "questionEmailText": "נעשה בזאת שימוש אך ורק על מנת ליצור עמך קשר בנוגע לשאלתך.", "questionDescriptionText": "תוכל לכתוב את השאלה בשפתך במידה ואינך שולט באופן מספק בשפה האנגלית.", "refreshList": "רענון הרשימה", - "skipExternalLinkModal": "לחצו CTRL (ווינדוס) או Command (מאק) בעת לחיצה על קישור כדי לדלג על המודל הזה" + "skipExternalLinkModal": "לחצו CTRL (ווינדוס) או Command (מאק) בעת לחיצה על קישור כדי לדלג על המודל הזה", + "newMessage": "הודעה חדשה" } diff --git a/website/common/locales/he/groups.json b/website/common/locales/he/groups.json index 1913b58767..e35c0581bc 100644 --- a/website/common/locales/he/groups.json +++ b/website/common/locales/he/groups.json @@ -45,7 +45,7 @@ "description": "תיאור", "public": "ציבורי", "inviteOnly": "הזמנה בלבד", - "gemCost": "מחיר אבני החן תומך בגילדות בעלות רמה גבוהה, ומועבר לבנק אבני החן של הגילדה לשימוש באתגרים עתידיים!", + "gemCost": "עלות היהלומים תומכת בגילדות ברמה גבוהה, ומועברת לבנק היהלומים של הגילדה לשימוש באתגרים עתידיים!", "search": "חיפוש", "createGuild": "יצירת גילדה", "guild": "גילדה", @@ -86,7 +86,7 @@ "notAuthorizedToSendMessageToThisUser": "אתם לא יכולים לשלוח הודעות למשתמש הזה כי הם בחרו לחסום הודעות.", "privateMessageGiftGemsMessage": "שלום <%= receiverName %>, <%= senderName %> שלח לך <%= gemAmount %> יהלומים!", "cannotSendGemsToYourself": "לא ניתן לשלוח יהלומים לעצמך. כדאי לנסות להירשם למינוי במקום.", - "badAmountOfGemsToSend": "הסכום חייב להיות בין 1 אל כמות אבני החן שכרגע ברשותך.", + "badAmountOfGemsToSend": "על הסכום להיות בין יהלום אחד לבין כמות היהלומים הנוכחית שברשותך.", "report": "Report", "abuseFlagModalHeading": "דווח על הפרה", "abuseFlagModalBody": "אתם בטוחים שתרצו לדווח על המודעה הזה? אתם צריכים לדווח רק מודעות המפרות את <%= firstLinkStart %>הנחיות הקהילה<%= linkEnd %> ו\\או <%= secondLinkStart %>תנאי השירות<%= linkEnd %>. דיווח לא נאות של מודעות הוא הפרה של הנחיות הקהילה ויכול לזקוף הפרה לזכותכם.", @@ -254,7 +254,7 @@ "removeMember": "", "sendMessage": "Send Message", "promoteToLeader": "העברת הבעלות", - "inviteFriendsParty": "מזמינים חברים להצטרף לחבורה ומקבלים מגילת הרפתקה
נדירה למלחמה נגד רשימת המלטלות!", + "inviteFriendsParty": "אפשר להזמין שחקנים אחרים לחבורה שלך
ולקבל את מגילת ההרפתקה האקסקלוסיבית של הרשימה המפלצתית.", "createParty": "יצירת חבורה", "inviteMembersNow": "", "playInPartyTitle": "", diff --git a/website/common/locales/he/npc.json b/website/common/locales/he/npc.json index b395cfb053..73f41ed56f 100644 --- a/website/common/locales/he/npc.json +++ b/website/common/locales/he/npc.json @@ -97,7 +97,7 @@ "tourStatsPage": "זהו דף התכונות שלכם! הרוויחו הישגים על ידי השלמת המשימות מהרשימות.", "tourTavernPage": "", "tourPartyPage": "החבורה שלכם תסייע לכם להישאר מחויבים. הזמינו חברים כדי לשחרר מגילת הרפתקה!", - "tourChallengesPage": "אתגרים הם רשימות של משימות לפי נושאים, שנוצרים על-ידי משתמשים! הצטרפות לאתגר תוסיף את המשימות שלו לחשבון שלכם. התחרו במשתמשים אחרים כדי לזכות בפרסים של אבני חן!", + "tourChallengesPage": "אתגרים הם רשימות של משימות לפי נושאים, שאותן יוצרים המשתמשים! הצטרפות לאתגר תוסיף את המשימות שלו לחשבון שלך. אפשר להתחרות במשתמשים אחרים ואולי לזכות ביהלומים!", "tourMarketPage": "בכל פעם בה משלימים משימה, יש סיכוי לקבלת ביצה, שיקוי בקיעה, או חתיכת מזון לחיות המחמד באקראי. אפשר גם לקנות פריטים אלו כאן.", "tourHallPage": "ברוך בואך להיכל התהילה, המקום שבו עושים כבוד לתורמי הקוד הפתוח להביטיקה. אם בקוד, עיצוב, מוזיקה, כתיבה או אפילו \"רק\" הצעת עזרה, הם זכו ביהלומים, ציוד ייחודי, ותארים נחשבים. גם באפשרותך לתרום להביטיקה!", "tourPetsPage": "This is the Stable! After reaching level 3, you will gather pet eggs and hatching potions as you complete tasks. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 3, and they'll grow into powerful mounts.", diff --git a/website/common/locales/he/overview.json b/website/common/locales/he/overview.json index b7da359c44..1177bf301d 100644 --- a/website/common/locales/he/overview.json +++ b/website/common/locales/he/overview.json @@ -3,7 +3,8 @@ "step1": "Step 1: Enter Tasks", "webStep1Text": "אין שום טעם בהביטיקה בלי מטרות מהעולם האמיתי, אז תייצרו לכם כמה משימות. תוכלו להוסיף עוד בהמשך ככל שתחשבו עליהן! ניתן ליצור את כל סוגי המשימות באמצעות לחיצה על כפתור הפלוס.\n* **Set up [To Do's](https://habitica.fandom.com/wiki/To_Do%27s):** Enter tasks you do once or rarely in the To Do's column, one at a time. You can click on the tasks to edit them and add checklists, due dates, and more!\n* **הכינו [Dailies](https://habitica.fandom.com/wiki/Dailies):** Enter activities you need to do daily or on a particular day of the week, month, or year in the Dailies column. Click task to edit when it will be due and/or set a start date. You can also make it due on a repeating basis, for example, every 3 days.\n* **Set up [Habits](https://habitica.fandom.com/wiki/Habits):** Enter habits you want to establish in the Habits column. You can edit the Habit to change it to just a good habit :heavy_plus_sign: or a bad habit :heavy_minus_sign:\n* **Set up [Rewards](https://habitica.fandom.com/wiki/Rewards):** In addition to the in-game Rewards offered, add activities or treats which you want to use as a motivation to the Rewards column. It's important to give yourself a break or allow some indulgence in moderation!\n* If you need inspiration for which tasks to add, you can look at the wiki's pages on [Sample Habits](https://habitica.fandom.com/wiki/Sample_Habits), [Sample Dailies](https://habitica.fandom.com/wiki/Sample_Dailies), [Sample To Do's](https://habitica.fandom.com/wiki/Sample_To_Do%27s), and [Sample Rewards](https://habitica.fandom.com/wiki/Sample_Custom_Rewards).", "step2": "Step 2: Gain Points by Doing Things in Real Life", - "webStep2Text": "Now, start tackling your goals from the list! As you complete tasks and check them off in Habitica, you will gain [Experience](http://habitica.fandom.com/wiki/Experience_Points), which helps you level up, and [Gold](http://habitica.fandom.com/wiki/Gold_Points), which allows you to purchase Rewards. If you fall into bad habits or miss your Dailies, you will lose [Health](http://habitica.fandom.com/wiki/Health_Points). In that way, the Habitica Experience and Health bars serve as a fun indicator of your progress toward your goals. You'll start seeing your real life improve as your character advances in the game.", + "webStep2Text": "", "step3": "שלב 3: התאמה אישית וסיור בהביטיקה", - "webStep3Text": "" + "webStep3Text": "", + "overviewQuestionsRevised": "יש שאלות? אפשר להעיף מבט בעמוד השאלות הנפוצות! אם אין שם תשובה לשאלה שלך, ניתן לבקש סיוע בטופס הזה: " } diff --git a/website/common/locales/he/pets.json b/website/common/locales/he/pets.json index ce5ba28344..7653aff553 100644 --- a/website/common/locales/he/pets.json +++ b/website/common/locales/he/pets.json @@ -42,8 +42,8 @@ "food": "מזון לחיות מחמד ואוכפים", "noFoodAvailable": "אין לך אוכל.", "noSaddlesAvailable": "אין לך אוכפים.", - "dropsExplanation": "ניתן לזרז קבלת פריטים אלו עם אבני חן, אם אינך מעוניין/ת לחכות שיפלו בעת השלמת משימות. למידע נוסף על מערכת הנפילות.", - "dropsExplanationEggs": "השתמשו באבני חן על מנת לקבל ביצים מהר יותר, אם אינכם רוצים לחכות שיופיעו ביצים סטנדרטיות, או לחזור על הרפתקאות כדי להרוויח ביצי הרפתקאות. קראו עוד על מערכת נפילות.", + "dropsExplanation": "ניתן לקבל פריטים אלו מהר יותר בעזרת יהלומים אם אין לך עניין לחכות עד שייפלו בעת השלמת משימה. למידע נוסף על מערכת נפילת הפריטים.", + "dropsExplanationEggs": "ניתן לקבל את הביצים מהר יותר בעזרת יהלומים אם אין לך עניין לחכות עד שייפלו בעת השלמת משימה. למידע נוסף על מערכת נפילת הפריטים.", "premiumPotionNoDropExplanation": "לא ניתן להשתמש בשיקויי בקיעה קסומים על ביצים שהתקבלו מהרפתקאות. הדרך היחידה לקבל שיקויי הבקעה קסומים היא על ידי שימוש בהם למטה, לא מנפילות אקראיות.", "beastMasterProgress": "התקדמות אדון החיות", "beastAchievement": "הרווחת את הישג \"אדון החיות\" על איסוף כל חיות המחמד!", diff --git a/website/common/locales/he/quests.json b/website/common/locales/he/quests.json index 6bde33bbba..00b70e05e2 100644 --- a/website/common/locales/he/quests.json +++ b/website/common/locales/he/quests.json @@ -14,15 +14,15 @@ "inviteParty": "הזמינו את החבורה להרפתקה", "questInvitation": "הזמנה להרפתקה: ", "invitedToQuest": "הוזמנת להרפתקה <%= quest %>", - "askLater": "שאלו אחר כך", - "buyQuest": "קנו הרפתקה", + "askLater": "לשאול אחר כך", + "buyQuest": "קניית הרפתקה", "accepted": "מוסכם", - "declined": "סירבו", - "rejected": "נדחה", - "pending": "ממתין לתשובה", + "declined": "התקבל סירוב", + "rejected": "התקבלה דחייה", + "pending": "ממתינים לתשובה", "questCollection": "+ <%= val %> חפצ(ים) של ההרפתקה נמצאו", - "begin": "התחל", - "bossHP": "נק\"פ של הבוס", + "begin": "התחלה", + "bossHP": "מד הבריאות של האויב", "bossStrength": "עוצמת האויב", "rage": "זעם", "collect": "לאסוף", @@ -36,14 +36,14 @@ "questConfirm": "בטוחים שאתם רוצים להתחיל את ההרפתקה? לא כל חברי החבורה אישרו את ההזמנה. הרפתקאות מתחילות באופן אוטומטי אחרי שכל חברי החבורה השיבו להזמנה.", "sureCancel": "האם אתם בטוחים שברצונכם לבטל את ההרפתקה? ביטול ההרפתקה תבטל את כל ההזמנות שנשלחו, גם עבור אלה שהסכימו כבר להשתתף, והמגילה תחזור לרשותכם.", "sureAbort": "האם אתם בטוחים שברצונכם לבטל את ההרפתקה הזו? כל ההתקדמות שלכם תאבד. המגילה תשוב לידי בעליה.", - "bossRageDescription": "כאשר המד הזה יתמלא, הבוס יבצע התקפה מיוחדת!", + "bossRageDescription": "כאשר המד הזה יתמלא, האויב יבצע התקפה מיוחדת!", "startQuest": "התחל הרפתקה", "questInvitationDoesNotExist": "לא נשלחה עדיין הזמנה להרפתקה.", "questInviteNotFound": "לא נמצאה הזמנה להרפתקה.", "guildQuestsNotSupported": "לא ניתן להזמין גילדות להרפתקה.", "questNotOwned": "המגילה הזאת לא נמצאת ברשותך.", "questNotGoldPurchasable": "לא ניתן לרכוש את ההרפתקה \"<%= key %>\" באמצעות זהב.", - "questNotGemPurchasable": "לא ניתן לרכוש את ההרפתקה \"<%= key %>\" עם אבני חן.", + "questNotGemPurchasable": "לא ניתן לרכוש את ההרפתקה \"<%= key %>\" עם יהלומים.", "questAlreadyUnderway": "החבורה שלך נמצאת כבר במהלכה של הרפתקה. נסו שוב כשזו תסתיים.", "questAlreadyAccepted": "כבר הסכמת להצטרף להרפתקה.", "questLeaderCannotLeaveQuest": "מנהיג ההרפתקה לא רשאי לעזוב אותה", @@ -88,9 +88,9 @@ "questAlreadyStartedFriendly": "ההרפתקה כבר החלה, אבל תמיד ניתן להצטרף לבאה אחריה!", "membersParticipating": "<%= accepted %> / <%= invited %> חברים משתתפים", "chatQuestAborted": "<%= username %> הפסיק את ההרפתקה <%= questName %>.", - "bossDamage": "פגעת בבוס!", + "bossDamage": "פגעת באויב!", "questInvitationNotificationInfo": "הוזמנת להצטרף להרפתקה", "questItemsPending": "<%= amount %> חפצים ממתינים", - "hatchingPotionQuests": "הרפתקאות של שיקויי הבקיעה הקסומים", + "hatchingPotionQuests": "הרפתקאות של שיקויי הבקעה קסומים", "sureLeaveInactive": "בטוחים שאתם רוצים לעזוב את ההרפתה? אתם לא תוכלו להשתתף." } diff --git a/website/common/locales/he/questscontent.json b/website/common/locales/he/questscontent.json index bf5cd60d74..907ddb290c 100644 --- a/website/common/locales/he/questscontent.json +++ b/website/common/locales/he/questscontent.json @@ -112,10 +112,10 @@ "questGoldenknight3DropGoldenPotion": "שיקוי בקיעה מוזהב", "questGoldenknight3DropWeapon": "Mustaine's Milestone Mashing Morning Star (Off-hand Weapon)", "questGroupEarnable": "Earnable Quests", - "questBasilistText": "רשימת המלטלות", - "questBasilistNotes": "יש המולה בשוק--מהסוג שאמור לגרום לכם לברוח. מתוקף היותכם הרפתקנים, אתם רצים במקום זאת אליה, ומגלים רשימת מלטלות, מורכבת מחתיכות של משימות לא גמורות! הביטיקנים בסביבה משותקים מפחד, מהאורך של רשימת המלטלות, ולא מסוגלים להתחיל לעבוד. מאיפשהו בסביבה, אתם שומעים את @Arcosine צועק: ״מהר! השלימו את המשימות שלכם והמטלות היומיות כדי להוציא מהמפלצת את הארס, לפני שמישהו יקבל פייפרקאט!״ הכה מהר, הרפתקן, וסמן שסיימת משהו - אך היזהר! אם תשאירו מטלות יומיות לא גמורות, רשימת המלטלות תתקיף אותך ואת חבורתך!", - "questBasilistCompletion": "רשימת המלטלות התפזרה לחתיכות ניירה, שזוהרות בעדינות בצבעי הקשת. ״פיו!״ אומר @Arcosine. ״טוב שהייתם פה, חבר׳ה!״ מרגישים יותר מנוסים מלפני כן, אתם אוספים קצת מטבעות זהב שנפלו מבין הדפים.", - "questBasilistBoss": "רשימת המלטלות", + "questBasilistText": "הרשימה המפלצתית", + "questBasilistNotes": "יש המולה בשוק -- מהסוג שגורם לאנשים לברוח. במקום זאת, הדמות שלך רצה לכיוון הנגדי מתוקף היותכם הרפתקנים אמיצים, וגילתה רשימה מפלצתית, המורכבת ממשימות שלא הושלמו, שהתחברו אחת לשנייה! ההביטיקנים שנמצאים בקרבת מקום משותקים מפחד מפני אורכה של הרשימה המפלצתית, בלי שום יכולת להתחיל לפעול. פתאום נשמע קול מאיפשהו, @Arcosine צעקה לכיוון הדמות שלך: \"מהר! צריך להשלים את המטלות והמשימות היומיומיות ולהביס את המפלצת, לפני שמישהו יקבל חתך־נייר!\" הגיע הזמן להכות מהר, הרפתקן/ית, ולסמן משימה כלשהי - אבל זהירות! אם מזניחים משימות יומיומיות ולא מבצעים אותן, הרשימה המפלצתית עלולה לתקוף אותך ואת החבורה שלך!", + "questBasilistCompletion": "הרשימה המפלצתית נקרעה לגזרים, הזוהרים בעדינות בצבעי הקשת. „פיו!” אומר @Arcosine. „טוב שהייתם פה, חבר׳ה!” אתם מרגישים יותר מנוסים מקודם, ו אוספים קצת מטבעות זהב שנפלו מבין הדפים.", + "questBasilistBoss": "הרשימה המפלצתית", "questEggHuntText": "מצוד ביצים", "questEggHuntNotes": "Overnight, strange plain eggs have appeared everywhere: in Matt's stables, behind the counter at the Tavern, and even among the pet eggs at the Marketplace! What a nuisance! \"Nobody knows where they came from, or what they might hatch into,\" says Megan, \"but we can't just leave them laying around! Work hard and search hard to help me gather up these mysterious eggs. Maybe if you collect enough, there will be some extras left over for you...\"", "questEggHuntCompletion": "עשיתם זאת! כאות תודה, מייגן נותנת לכם עשר מהביצים. ״אני מתערבת ששיקויי ההבקעה יצבעו אותם בצבעים מרהיבים! ואני תוהה מה יקרה כשיהפכו לחיות רכיבה...״", @@ -137,7 +137,7 @@ "questSeahorseCompletion": "סוס-הים-המגה-אולטרה-סופר-דופר שבדיוק הצלחת לאלף שוחה לצידך בצייתנות. \"הביטו וראו!\" אומרת קיוויבוט. \"הוא רוצה שנטפל בילדיו.\" היא מעניקה לך שלוש ביצים. \"גדלו אותם היטב,\" היא אומרת. \"אתם מוזמנים למירוץ של עצלניה בכל יום!\"", "questSeahorseBoss": "סוס-הים-המגה-אולטרה-סופר-דופר", "questSeahorseDropSeahorseEgg": "סוס-ים (ביצה)", - "questSeahorseUnlockText": "פותח אפשרות לקניית ביצי סוס-ים בשוק", + "questSeahorseUnlockText": "פותח אפשרות לקניית ביצי סוס ים בשוק", "questGroupAtom": "Attack of the Mundane", "questAtom1Text": "מתקפת המשעמם, חלק 1: אסון כלים!", "questAtom1Notes": "עם הגיעך לחופו של האגם הסחוף, לקצת רגיעה ומנוחה, מתגלה לעינייך... שהאגם שרוי בזוהמה נוראית! כולו כלים מלוכלכים, כיצד זה קרה? ובכן, לא ייתכן שנאפשר לאגם להישאר במצב הזה. ישנה רק אפשרות אחת: להדיח את הכלים ולהציל את מקום הנופש שלך! כדאי שנמצא קצת סבון כדי לנקות את כל זה. בעצם הרבה סבון...", @@ -166,8 +166,8 @@ "questPenguinBoss": "פינגווין קרח", "questPenguinDropPenguinEgg": "פינגווין (ביצה)", "questPenguinUnlockText": "פותח אפשרות לקניית ביצי פינגווין בשוק", - "questStressbeastText": "המפלחץ המתועב של ערבות השארוגועים", - "questStressbeastNotes": "השלימו מטלות יומיות ומשימות כדי לפגוע באויב העולמי! מטלות יומיות לא מושלמות ממלאות את מד מתקפת הלחץ. כאשר מד מתקפת הלחץ מלא, האויב העולמי יתקוף דמות לא־אנושית. אויב עולמי לעולם לא יפגע בשחקנים בשום צורה. רק לחשבונות פעילים שלא נחים בפונדק יסוכמו המטלות שלא הושלמו.

~*~

הדבר הראשון שאנחנו שומעים הם את צעדיו הרועמים איטיים יותר ויותר ממנוסת הבהלה. אחד אחד, הביטיקנים מסתכלים מחוץ לדלתות שלהם, ומילים מכשילות אותם

כולנו ראינו את המפלחץ לפני כן, כמובן - יצורים מרושעים זעירים התוקפים בזמנים קשים. אבל זה? זה מתנשא גבוה יותר מהבניינים, עם טפרים שיכולים למחוץ דרקון בקלות. קרח מתנדנד מהפרווה המסריחה שלה, וכשהיא שואגת, פיצוץ קחוני קורע את הגגות מהבתים שלנו. מפלצת בסדר גודל כזה מעולם לא הוזכרה מחוץ לאגדה רחוקה.

\"היזהרו הביטיקנים!\" צועק חתול-ניב. \"חיסמו את עצמכם בתוך הבית - זהו המפלחץ המתועב בכבודו ובעצמו!\"

\"הוא בטח נוצרה ממאות שנים של לחץ!\" קיוויבוט אומר, נועל את דלת הפונדק בחוזקה ומגיף את החלונות.

\"ערבות השארוגועים,\" למונס אומרת, בפנים עגומות. \"כל הזמן הזה, חשבנו שהם שלווים ורגועים, אבל הם בוודאי הסתירו את הלחץ שלהם אי שם. במהלך דורות, הם גדלו לתוך הדבר הזה, ועכשיו זה השתחרר ותקף אותם - ואותנו\"

יש רק דרך אחת לגרש מפלחץ - מתועב או לא, וזה לתקוף אותה עם מטלות ומשימות מושלמות! בואו נתאחד כולנו ולהילחם באויב המפחיד הזה - אבל היו בטוחים שלא להתעצל במשימותיכם, או שהמטלות היומיות שלנו עשויות להכעיס את זה כל כך שהיא תשתלח...", + "questStressbeastText": "המפלחץ המתועב של ערבות השַׁלְוָונִים", + "questStressbeastNotes": "השלימו מטלות יומיות ומשימות כדי לפגוע באויב העולמי! מטלות יומיות לא מושלמות ממלאות את מד מתקפת הלחץ. כאשר מד מתקפת הלחץ מלא, האויב העולמי יתקוף דמות לא־אנושית. אויב עולמי לעולם לא יפגע בשחקנים בשום צורה. רק לחשבונות פעילים שלא נחים בפונדק יסוכמו המטלות שלא הושלמו.

~*~

הדבר הראשון שאנחנו שומעים הם את צעדיו הרועמים איטיים יותר ויותר ממנוסת הבהלה. אחד אחד, הביטיקנים מסתכלים מחוץ לדלתות שלהם, ומילים מכשילות אותם

כולנו ראינו את המפלחץ לפני כן, כמובן - יצורים מרושעים זעירים התוקפים בזמנים קשים. אבל זה? זה מתנשא גבוה יותר מהבניינים, עם טפרים שיכולים למחוץ דרקון בקלות. קרח מתנדנד מהפרווה המסריחה שלה, וכשהיא שואגת, פיצוץ קחוני קורע את הגגות מהבתים שלנו. מפלצת בסדר גודל כזה מעולם לא הוזכרה מחוץ לאגדה רחוקה.

\"היזהרו הביטיקנים!\" צועק חתול-ניב. \"חיסמו את עצמכם בתוך הבית - זהו המפלחץ המתועב בכבודו ובעצמו!\"

\"הוא בטח נוצרה ממאות שנים של לחץ!\" קיוויבוט אומר, נועל את דלת הפונדק בחוזקה ומגיף את החלונות.

\"ערבות השַׁלְוָונִים,\" למונס אומרת, בפנים עגומות. \"כל הזמן הזה, חשבנו שהם שלווים ורגועים, אבל הם בוודאי הסתירו את הלחץ שלהם אי שם. במהלך דורות, הם גדלו לתוך הדבר הזה, ועכשיו זה השתחרר ותקף אותם - ואותנו\"

יש רק דרך אחת לגרש מפלחץ - מתועב או לא, וזה לתקוף אותה עם מטלות ומשימות מושלמות! בואו נתאחד כולנו ולהילחם באויב המפחיד הזה - אבל היו בטוחים שלא להתעצל במשימותיכם, או שהמטלות היומיות שלנו עשויות להכעיס את זה כל כך שהיא תשתלח...", "questStressbeastBoss": "המפלחץ המתועב", "questStressbeastBossRageTitle": "מכת לחץ", "questStressbeastBossRageDescription": "כאשר מתמלא המד, המפלחץ המתועב יטיח את מכת הלחץ שלו על הביטיקה!", @@ -177,14 +177,14 @@ "questStressbeastBossRageBailey": "`המפלחץ המתועב משתמשת במכת לחץ!`\n\nפרץ המתח מרפא את המפלחץ המתועב!\n\nאהה!!! המטלות הלא מושלמות שלנו גרמו למפלחץ המתועב להיות מטורף מתמיד ולקבל חזרה חלק מבריאותו! ביילי, מבשרת העיירה צעקה לאזרחים לסור למקום מבטחים, וכעת היא נתפסה ביד השנייה שלה! תראו אותה, מדווחת באומץ על החדשות בזמן שהמפלחץ מנופף בה באכזריות... בואו נהיה ראויים לגבורתה על ידי כך שנהייה פרודוקטיביים כמו שאנחנו יכולים, כדי להציל את הדמות הלא־אנושית שלנו!", "questStressbeastBossRageGuide": "`המפלחץ המתועב משתמש במכת לחץ!`\n\nפרץ המתח מרפא את המפלחץ המתועב!\n\nהיזהרו! דן המדריך מנסה להסיח את המפלחץ על ידי ריצה סביב קרסוליו, צועק עצות פרודוקטיביות! המפלחץ המתועב דורך בטירוף, אבל זה נראה כאילו אנחנו באמת מתישים את החיה. אני בספק אם יש לה מספיק אנרגיה לעוד מכה. אל תוותרו... אנחנו כל כך קרובים לחיסולה!", "questStressbeastDesperation": "`המפלחץ המתועב מגיע לבריאות 500K! המפלחץ המתועב משתמשת בהגנה נואשת! `\n\nאנחנו כמעט שם, הביטיקנים! עם חריצות ומטלות יומיות, דרדרנו את הבריאות של המפלחץ לכדי 500K! היצור שואג ומנופף בייאוש, זעם הולך ומצטבר מהר יותר מאשר אי פעם. ביילי ומַאט צועקים באימה כשהיא מתחילה לנופף אותם סביב בקצב מפחיד, מעלה סופת שלגים מסנוורת שמקשה לפגוע בה.\n\nנצטרך להכפיל את מאמצינו, אבל שימו לב - זהו סימן כי המפלחץ יודע שהוא עומד להיות מובס. אל תוותרו עכשיו!", - "questStressbeastCompletion": "המפלחץ הובס!

עשינו זאת! בשאגתו האחרונה, המפלחץ המתועב מתפוגג לתוך ענן שלג. הפתיתים יורדים ומנצנצים כשהביטיקנים מריעים אוחזים בחיות המחמד וחיות הרכיבה שלהם. בעלי החיים והדמויות הלא־אנושיות שלנו בטוחים שוב!

השארוגועים ניצלה!

חתול-ניב מדבר בעדינות לחתולוניב קטן. \"בבקשה מיצאו את אזרחי ערבות השארוגועים והביאו אותם אלינו\", הוא אומר. כמה שעות מאוחר יותר, חוזר חתולוניב, עם עדר של רוכבי ממותה מזדחל מאחוריו. אתם מזהים את הרוכבת בראש כליידי גלסיאט, מנהיגת השארוגועים.

\"הביטיקנים חזקים,\" היא אומרת, \"האזרחים שלי ואני חייבים לכם את התודה העמוקה ביותר, וההתנצלויות העמוקות ביותר. במאמץ להגן על ערבותינו ממהומה, התחלנו לגרש בסתר את כל הלחץ שלנו אל הרי הקרח. לא היה לנו מושג שזה יהפוך במשך דורות למפלחץ שראיתם! כשהשתחררה, היא לכדה את כולנו בהרים והמשיכה להשתולל נגד בעלי החיים האהובים שלנו.\" המבט העצוב שלה עקב אחר השלג הנופל. \"שמנו את כולם בסיכון עם הטיפשות שלנו. היו סמוכים ובטוחים כי בעתיד, אנחנו נבוא עם הבעיות שלנו אליכם לפני שהבעיות שלנו יבואו אליכם.\"

היא פונה למקום שבו בקונזאור מתכרבל עם כמה תינוקות הממותה. \"הבאנו לבעלי החיים שלכם מזון כדי להתנצל על הפחדתם, וכסמל של אמון, נשאיר כמה מחיות המחמד והממותות שלנו איתכם. אנחנו יודעים שתטפלו בהם היטב.\"", - "questStressbeastCompletionChat": "`המפלחץ הובסה!`\n\nעשינו זאת! בשאגתה הסופית, המפלחץ המתועב מתפוגג לתוך ענן שלג. הפתיתים יורדים ומנצנצים כשהביטיקנים מריעים אוחזים בחיות המחמד וחיות הרכיבה שלהם. בעלי החיים והדמויות הלא־אנושיות שלנו בטוחים שוב!\n\n`השארוגועים ניצלה!`\n\nחתול-ניב מדבר בעדינות לחתולוניב קטן. \"בבקשה מיצאו את אזרחי ערבות השארוגועים והביאו אותם אלינו\", הוא אומר. כמה שעות מאוחר יותר, חוזר חתולוניב, עם עדר של רוכבי ממותה מזדחל מאחוריו. אתם מזהים את הרוכבת בראש כליידי גלסיאט, מנהיגת השארוגועים.\n\n\"הביטיקנים חזקים,\" היא אומרת, \"האזרחים שלי ואני חייבים לכם את התודה העמוקה ביותר, וההתנצלויות העמוקות ביותר. במאמץ להגן על ערבותינו ממהומה, התחלנו לגרש בסתר את כל הלחץ שלנו אל הרי הקרח. לא היה לנו מושג שזה יהפוך במשך דורות למפלחץ שראיתם! כשהשתחררה, היא לכדה את כולנו בהרים והמשיכה להשתולל נגד בעלי החיים האהובים שלנו.\" המבט העצוב שלה עקב אחר השלג הנופל. \"שמנו את כולם בסיכון עם הטיפשות שלנו. היו סמוכים ובטוחים כי בעתיד, אנחנו נבוא עם הבעיות שלנו אליכם לפני שהבעיות שלנו יבואו אליכם.\"\n\nהיא פונה למקום שבו בקונזאור מתכרבל עם כמה תינוקות הממותה. \"הבאנו לבעלי החיים שלכם מזון כדי להתנצל על הפחדתם, וכסמל של אמון, נשאיר כמה מחיות המחמד והממותות שלנו איתכם. אנחנו יודעים שתטפלו בהם היטב.\"", + "questStressbeastCompletion": "המפלחץ הובס!

עשינו זאת! בשאגתו האחרונה, המפלחץ המתועב מתפוגג לתוך ענן שלג. הפתיתים יורדים ומנצנצים כשהביטיקנים מריעים אוחזים בחיות המחמד וחיות הרכיבה שלהם. בעלי החיים והדמויות הלא־אנושיות שלנו בטוחים שוב!

השַׁלְוָונִים ניצלה!

חתול-ניב מדבר בעדינות לחתולוניב קטן. \"בבקשה מיצאו את אזרחי ערבות השַׁלְוָונִים והביאו אותם אלינו\", הוא אומר. כמה שעות מאוחר יותר, חוזר חתולוניב, עם עדר של רוכבי ממותה מזדחל מאחוריו. אתם מזהים את הרוכבת בראש כליידי גלסיאט, מנהיגת שַׁלְוָונִים.

\"הביטיקנים חזקים,\" היא אומרת, \"האזרחים שלי ואני חייבים לכם את התודה העמוקה ביותר, וההתנצלויות העמוקות ביותר. במאמץ להגן על ערבותינו ממהומה, התחלנו לגרש בסתר את כל הלחץ שלנו אל הרי הקרח. לא היה לנו מושג שזה יהפוך במשך דורות למפלחץ שראיתם! כשהשתחררה, היא לכדה את כולנו בהרים והמשיכה להשתולל נגד בעלי החיים האהובים שלנו.\" המבט העצוב שלה עקב אחר השלג הנופל. \"שמנו את כולם בסיכון עם הטיפשות שלנו. היו סמוכים ובטוחים כי בעתיד, אנחנו נבוא עם הבעיות שלנו אליכם לפני שהבעיות שלנו יבואו אליכם.\"

היא פונה למקום שבו בקונזאור מתכרבל עם כמה תינוקות הממותה. \"הבאנו לבעלי החיים שלכם מזון כדי להתנצל על הפחדתם, וכסמל של אמון, נשאיר כמה מחיות המחמד והממותות שלנו איתכם. אנחנו יודעים שתטפלו בהם היטב.\"", + "questStressbeastCompletionChat": "`המפלחץ הובסה!`\n\nעשינו זאת! בשאגתה הסופית, המפלחץ המתועב מתפוגג לתוך ענן שלג. הפתיתים יורדים ומנצנצים כשהביטיקנים מריעים אוחזים בחיות המחמד וחיות הרכיבה שלהם. בעלי החיים והדמויות הלא־אנושיות שלנו בטוחים שוב!\n\n`השַׁלְוָונִים ניצלו!`\n\nחתול-ניב מדבר בעדינות לחתולוניב קטן. \"אנא מצאו את אזרחי ערבות השַׁלְוָונִים והביאו אותם אלינו\", הוא אומר. כמה שעות מאוחר יותר, חוזר חתולוניב, עם עדר של רוכבי ממותה מזדחל מאחוריו. אתם מזהים את הרוכבת בראש כליידי גלסיאט, מנהיגת השַׁלְוָונִים.\n\n\"הביטיקנים חזקים,\" היא אומרת, \"האזרחים שלי ואני חייבים לכם את התודה העמוקה ביותר, וההתנצלויות העמוקות ביותר. במאמץ להגן על ערבותינו ממהומה, התחלנו לגרש בסתר את כל הלחץ שלנו אל הרי הקרח. לא היה לנו מושג שזה יהפוך במשך דורות למפלחץ שראיתם! כשהשתחררה, היא לכדה את כולנו בהרים והמשיכה להשתולל נגד בעלי החיים האהובים שלנו.\" המבט העצוב שלה עקב אחר השלג הנופל. \"שמנו את כולם בסיכון עם הטיפשות שלנו. היו סמוכים ובטוחים כי בעתיד, אנחנו נבוא עם הבעיות שלנו אליכם לפני שהבעיות שלנו יבואו אליכם.\"\n\nהיא פונה למקום שבו בקונזאור מתכרבל עם כמה תינוקות הממותה. \"הבאנו לבעלי החיים שלכם מזון כדי להתנצל על הפחדתם, וכסמל של אמון, נשאיר כמה מחיות המחמד והממותות שלנו איתכם. אנחנו יודעים שתטפלו בהם היטב.\"", "questTRexText": "מלך הדינוזאורים", - "questTRexNotes": "כעת כשיצורים עתיקים מערבות השארוגועים משוטטים ברחבי כל הביטיקה, @Urse החליט לאמץ טירנוזאור בוגר. מה כבר יכול להשתבש?

הכול.", + "questTRexNotes": "כעת, כשיצורים עתיקים מערבות השַׁלְוָונִים משוטטים ברחבי כל הביטיקה, @Urse החליט לאמץ טירנוזאור בוגר. מה כבר יכול להשתבש?

הכול.", "questTRexCompletion": "הדינוזאור הפראי סוף סוף עוצר את השתוללותו ומתיישב כדי להתחבר עם תרנגולי הענק. @Urse משקיף על כך מלמעלה. \"הן לא כאלה חיות מחמד גרועות אחרי הכול! הן רק צריכות קצת משמעת. הינה, קחו כמה ביצי טירנוזאור לעצמכם.\"", "questTRexBoss": "טירנוזאור בשר ודם", "questTRexUndeadText": "הדינוזאור קם לתחייה", - "questTRexUndeadNotes": "בזמן שהדינוזאור העתיק מערבות השארוגועים משוטט בהביטיקה, קריאה של אימה עולה מהמוזיאון הגדול. @Baconsaur צועק, ״שלד הטירנוזאור במוזיאון מתעורר! הוא בטח מרגיש את בן משפחתו!״ החיה העוצמתית נושאת את שיניה ומשקשקת בדרך אליכם. איך תוכלו להביס יצור שהוא כבר מת? תצטרכו להכות מהר לפני שהיא תחלים את עצמה!", + "questTRexUndeadNotes": "בזמן שהדינוזאור העתיק מערבות השַׁלְוָונִים משוטט בהביטיקה, קריאה של אימה עולה מהמוזיאון הגדול. @Baconsaur צועק, ״שלד הטירנוזאור במוזיאון מתעורר! הוא בטח מרגיש את בן משפחתו!״ החיה העוצמתית נושאת את שיניה ומשקשקת בדרך אליכם. איך תוכלו להביס יצור שהוא כבר מת? תצטרכו להכות מהר לפני שהיא תחלים את עצמה!", "questTRexUndeadCompletion": "העיניים הזוהרות של הטירנוזאור נהפכות לכהות, והוא חוזר למעמד המוכר. כולם נושמים לרווחה. ״תסתכלו!״ אומר @Baconsaur. ״כמה מהביצים המאובנות נראות חדשות וזוהרות! אולי הן יבקעו בשבילכם.״", "questTRexUndeadBoss": "טירנוזאור שלדי", "questTRexUndeadRageTitle": "שלד מחלים", @@ -216,9 +216,9 @@ "questSheepCompletion": "מתרשם מהחריצות שלכם, אייל הרעם נרגע מהזעם שלו. הוא משליך שלושה כדורי ברד ענקיים בכיוונכם, ונעלם בקול עמום. כשאתם מסתכלים מקרוב, אתם מגלים שכדורי הברד הם למעשה ביצים נוציות. אתם אוספים אותן, ומתהלכים בנחת הביתה תחת שמיים כחולים.", "questSheepDropSheepEgg": "כבשה (ביצה)", "questSheepUnlockText": "פותח אפשרות לקניית ביצי כבשה בשוק", - "questKrakenText": "הקראקן מלאמושלמייה", - "questKrakenNotes": "זה יום חם ושטוף שמש כשאתם מפליגים דרך מפרץ לאמושלמייה, אבל על מחשבותיכם מעיבות דאגות על כל מה שאתם עדיין צריכים לעשות. נראה כי ברגע שאתם מסיימים משימה אחת, מתגנבת אחרת, ואז עוד אחת...

לפתע, הסירה מטלטלת בצורה נוראה, וזרועות חלקלקות קופצות מתוך המים מכל עבר! \"אנחנו מותקפים על ידי הקראקן מלאמושלמייה!\" @Wolvenhalo זועק.

\"מהר!\" למונס קוראת לכם. \"חסלו זרועות ומשימות רבות ככל שאתם יכולים, לפני שחדשות יקחו את מקומן!\"", - "questKrakenBoss": "הקראקן מלאמושלמייה", + "questKrakenText": "הקראקן ממפרץ הדחי", + "questKrakenNotes": "זה יום חם ושטוף שמש כשאתם מפליגים דרך מפרץ הדחי, אבל על מחשבותיכם מעיבות דאגות על כל מה שאתם עדיין צריכים לעשות. נראה כי ברגע שאתם מסיימים משימה אחת, מתגנבת אחרת, ואז עוד אחת...

לפתע, הסירה מטלטלת בצורה נוראה, וזרועות חלקלקות קופצות מתוך המים מכל עבר! \"אנחנו מותקפים על ידי הקראקן ממפרץ הדחי!\" @Wolvenhalo זועק.

\"מהר!\" למונס קוראת לכם. \"חסלו זרועות ומשימות רבות ככל שאתם יכולים, לפני שחדשות יקחו את מקומן!\"", + "questKrakenBoss": "הקראקן ממפרץ הדחי", "questKrakenCompletion": "בזמן שהקראקן בורח, כמה ביצים צפות אל פני המים. לֵמוֹנֶס בוחנת אותן, והחשד שלה הופך לשמחה. \"ביצי דיונון!\" היא אומרת. \"הינה, קחו אותן כגמול על כל מה שהשלמתם.\"", "questKrakenDropCuttlefishEgg": "דיונון (ביצה)", "questKrakenUnlockText": "פותח אפשרות לקניית ביצי דיונון בשוק", @@ -336,7 +336,7 @@ "questTreelingDropTreelingEgg": "עצון (ביצה)", "questTreelingUnlockText": "פותח אפשרות לקניית ביצי עצון בשוק", "questAxolotlText": "האקסולוטל הקסום", - "questAxolotlNotes": "ממעמקי האגם הסחוף אתם רואים בועות מבעבעות ו... אש? אקסולוטל קטן עולה מהמים החשוכים ויורק בשלל צבעים. לפתע הוא מחל לפתוח את פיו ו@streak צועק, \"זהירות!\" ברגע שהאקסולוטל הקסום מתחיל לשאוב את כוח הרצון שלכם!

האקסולוטל הקסום מתמלא בשכפים, ומתגרה בכם. \"שמעתם על כוחות הריפוי שלי? אתם תתעייפו לפני!\"

\"אנחנו יכולים להביס אותך עם ההרגלים הטובים שבנינו!| צועק @PainterProphet בבטחון. אתם מכינים את עצמכם להיות פרודקטיבים על מנת להביס את האקסולוטל הקסום ולהחזיר את כוח הרצון שנגנב לכם!", + "questAxolotlNotes": "ממעמקי האגם הסחוף אתם רואים בועות מבעבעות ו... אש? אקסולוטל קטן עולה מהמים החשוכים ויורק בשלל צבעים. לפתע הוא מחל לפתוח את פיו ו@streak צועק, \"זהירות!\" ברגע שהאקסולוטל הקסום מתחיל לשאוב את כוח הרצון שלכם!

האקסולוטל הקסום מתמלא בשכפים, ומתגרה בכם. \"שמעתם על כוחות הריפוי שלי? אתם תתעייפו לפני!\"

\"אנחנו יכולים להביס אותך עם ההרגלים הטובים שבנינו!| צועק @PainterProphet בבטחון. אתם מכינים את עצמכם להיות פרודקטיבים על מנת להביס את האקסולוטל הקסום ולהחזיר את כוח הרצון שנגנב לכם!", "questAxolotlCompletion": "לאחר הבסת האקסולוטל הקסום, הבנתם שהשגתם את כוח הרצון שלכם בכוחות עצמכם.

\"כוח הרצון? כוחות הריפוי? כל זה היה רק אשליה?\" @Kiwibot שואל.

\"רוב הקסמים הם אשליה,\" עונה האקסולוטל הקסום. \"אני מצטער שהולכתי אתכם שולל. אנא קחו את הביצים האלו בתור התנצלות. אני בוטח בכם שתחנכו אותם להשתמש בקסם שלהם להרגיל טובים ולא רעים!

אתם ו@hazel40 אוחזים את הביצים החדשות שלכם ביד אחת ומנופפים לשלום עם השניה בזמן שהאקסולוטל הקסום חוזר לאגם.", "questAxolotlBoss": "אקסולוטל קסום", "questAxolotlDropAxolotlEgg": "אקסולוטל (ביצה)", @@ -345,7 +345,7 @@ "questAxolotlRageDescription": "מד זה מתמלא כאשר אתם לא מבצעים את המטלות היומיות שלכם. כאשר הוא מלא, האקסולוטל הקסום ירפא 30% מהחיים הנותרים שלו!", "questAxolotlRageEffect": "`האקסולוטל הקסום השתמש בריפוי אקסולוטל!`\n\n`מסך של בועות צבעוניות מסתיר את המפלצת לרגע, וכאשר המסך מתבהר, חלק מפצעיה התרפאו!`", "questTurtleText": "הנחו את הצבה", - "questTurtleNotes": "הצילו! צבת הים הענקית הזו לא מצליחה למצוא את דרכה לחוף הקינון שלה. היא חוזרת לשם כל שנה כדי להטיל ביצים, אבל השנה מפרץ לאמושלמייה מלא בפסולת משימות רעילה העשויה ממטלות יומיות אדומות ומשימות שלא הושלמו. \"היא חובטת בבהלה!\" @JessicaChase אומרת.

@UncommonCriminal מהנהן, \"זה בגלל שחושי הניווט שלה מעורפלים ומבולבלים.\"

@Scarabsi תופס את היד שלכם. \"אתם יכולים לעזור לנקות את פסולת המשימות שחוסם את דרכה? זה עלול להיות מסוכן, אבל אנחנו חייבים לעזור לה!\"", + "questTurtleNotes": "הצילו! צבת הים הענקית הזו לא מצליחה למצוא את דרכה לחוף הקינון שלה. היא חוזרת לשם כל שנה כדי להטיל ביצים, אבל השנה מפרץ הדחי מלא בפסולת משימות רעילה העשויה ממטלות יומיומיות אדומות ומשימות שנדחו. \"היא חובטת בבהלה!\" @JessicaChase אומרת.

@UncommonCriminal מהנהן, \"זה בגלל שחושי הניווט שלה מעורפלים ומבולבלים.\"

@Scarabsi תופס את היד שלכם. \"אתם יכולים לעזור לנקות את פסולת המשימות שחוסם את דרכה? זה עלול להיות מסוכן, אבל אנחנו חייבים לעזור לה!\"", "questTurtleCompletion": "העבודה האמיצה שלכם ניקתה את המים, וכעת צבת הים שלנו תוכל למצוא את החוף שלה. אתם, @Bambin, ו@JaizakAripaik צופים בה קוברת את הביצים עמוק בחול כך שיוכלו לגדול ולבקוע למאות צבי ים קטנים. כזו גברת, היא נותנת לכל אחד ואחת מכם שלוש ביצים, ומבקשת שתאכילו ותגדלו אותם כך שיום יבוא והם יהפכו לצבי ים ענקיים בעצמם.", "questTurtleBoss": "פסולת משימות", "questTurtleDropTurtleEgg": "צב (ביצה)", @@ -398,10 +398,10 @@ "questFerretBoss": "Nefarious Ferret", "questFerretDropFerretEgg": "Ferret (Egg)", "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!", "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", "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?\"", @@ -567,8 +567,8 @@ "questPterodactylDropPterodactylEgg": "Pterodactyl (Egg)", "questPterodactylUnlockText": "Unlocks purchasable Pterodactyl eggs in the Market", "questBadgerText": "Stop Badgering Me!", - "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", - "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", + "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", + "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", "questBadgerBoss": "The Badgering Bother", "questBadgerDropBadgerEgg": "Badger (Egg)", "questBadgerUnlockText": "Unlocks purchasable Badger eggs in the Market", @@ -634,5 +634,6 @@ "questVelociraptorCompletion": "You burst through the grass, confronting the Veloci-Rapper.

See here, rapper, you’re no quitter,
You’re Bad Habits' hardest hitter!
Check off your To-Dos like a boss,
Don’t mourn over one day’s loss!


Filled with renewed confidence, it bounds off to freestyle another day, leaving behind three eggs where it sat.", "questVelociraptorBoss": "Veloci-Rapper", "questVelociraptorDropVelociraptorEgg": "Velociraptor (Egg)", - "questVelociraptorUnlockText": "Unlocks purchasable Velociraptor eggs in the Market" + "questVelociraptorUnlockText": "Unlocks purchasable Velociraptor eggs in the Market", + "questDolphinNotes": "הדמות שלך הולכת על פני החוף של מפרד הדחי, תוך כדי שהיא מהרהרת בנוגע לעבודה הקשה שעוד לפניכם. לפתע, מתז מים מסיט את תשומת לבה של הדמות. דולפין מרהיב קופץ מבין הגלים. אור השמש מנצנץ מבין סנפיריו וזנבו. אבל רגע... זה לא אור שמש, והדולפין לא צולל בחזרה לתוך המים. הוא בוהה בדמותו של @khdarkwolf.

„לעולם לא אסיים את המטלות היומיומיות האלה,” אמר @khdarkwolf.

. „אין לי יכולת טובה מספיק בשביל להשיג את המטרות שלי”, אמרה הדמות של @confusedcicada מיד לאחר שהדולפין הסתכל לעברה.

„למה אני אפילו מנסה?” אמר @mewrose, כאשר היצור בהה בו.

כשהמבט של הדמות שלך נפגש עם זה של הדולפין, היא מרגישה כיצד המחשבות שלה מתחילות לשקוע בספק המתגבר כמו הגלים בים. הדמות שלך מתעשתת, מישהו צריך להביס את היצור הזה, ואלה אתם!" } diff --git a/website/common/locales/he/settings.json b/website/common/locales/he/settings.json index bba97b6cd8..27b8a7694d 100644 --- a/website/common/locales/he/settings.json +++ b/website/common/locales/he/settings.json @@ -2,7 +2,7 @@ "settings": "הגדרות", "language": "שפה", "americanEnglishGovern": "במקרה של חוסר נאמנות למקור, הגרסה האנגלית האמריקאית היא שקובעת.", - "helpWithTranslation": "רוצה לעזור בתרגום הביטיקה? נהדר! נא לבקר בגילדת ידעני השפות המתחילים!", + "helpWithTranslation": "מעניין אותך לעזור בתרגום הביטיקה? נהדר! נא לבקר בגילדת ידעני השפות המתחילים!", "stickyHeader": "כותרת דביקה", "newTaskEdit": "פתיחת מטלות חדשות במצב עריכה", "reverseChatOrder": "הצג הודעות שיחה בסדר הפוך", @@ -18,7 +18,7 @@ "resetAccPop": "התחלה מחדש, תוך הסרת כל המטבעות, הרמות, הציוד, ההיסטוריה, והמשימות.", "deleteAccount": "מחיקת החשבון", "deleteAccPop": "לביטול והסרת חשבון הביטיקה שלך.", - "feedback": "אם ברצונך לתת לנו משוב, נא לכתוב אותו למטה - נשמח לדעת מה אהבת או לא אהבת בהביטיקה! האנגלית שלך לא טובה במיוחד? שום בעיה! אפשר להשתמש בשפה המועדפת עליך.", + "feedback": "אם ברצונך לתת לנו משוב, נא לכתוב אותו למטה - נשמח לשמוע את המשוב שלך! הוא יישלח בעילום שם אלא אם תבחר/י לציין את פרטי הקשר שלך. האנגלית שלך לא טובה במיוחד? שום בעיה! אפשר להשתמש בשפה המועדפת עליך.", "dataExport": "ייצוא נתונים", "saveData": "הינה כמה אפשרויות לשמירת הנתונים שלך.", "habitHistory": "היסטוריית הרגלים", @@ -27,8 +27,8 @@ "userData": "נתוני משתמש", "exportUserData": "ייצוא נתוני משתמש:", "export": "ייצוא", - "xml": "(XML)", - "json": "(JSON)", + "xml": "XML", + "json": "JSON", "customDayStart": "התחלת יום מותאמת אישית", "sureChangeCustomDayStartTime": "", "customDayStartHasChanged": "מועד תחילת היום המותאם אישית שהגדרתם שונה.", @@ -45,9 +45,9 @@ "confirmPass": "אימות הסיסמה החדשה", "newUsername": "שם משתמש חדש", "dangerZone": "אזור מסוכן", - "resetText1": "אזהרה! פעולה זו תמחק חלקים רבים מהמשתמש שלך. זה ממש לא מומלץ, כי יאבד מידע היסטורי, השימושי למעקב אחר התקדמותך לאורך זמן, אם כי, ישנם אנשים שהדבר שימושי עבורם אחרי שהם משחקים בהביטיקה מזה זמן.", + "resetText1": "זהירות! פעולה זו תמחק חלקים רבים מהמשתמש שלך. זה ממש לא מומלץ, כי יאבד מידע היסטורי, השימושי למעקב אחר התקדמותך לאורך זמן, אם כי, ישנם אנשים שהדבר שימושי עבורם אחרי שהם משחקים בהביטיקה מזה זמן.", "resetText2": "", - "deleteLocalAccountText": "האם אתם בטוחים? פעולה זו תמחק את החשבון שלכם לצמיתות, ולא ניתן יהיה לשחזרו! עליכה יהיה ליצור חשבון חדש על מנת להשתמש בHabitica שוב. לא יתקבל החזר כספי עבור אבני-חן. אם אתם בטוחים לחלוטין, הקלידו את הסיסמה שלכם בתיבת הטקסט.", + "deleteLocalAccountText": "בטוח/ה? פעולה זו תמחק את חשבונך לצמיתות, ולא יהיה ניתן לשחזר אותו! בשביל להשתמש שוב בהביטיקה יהיה צורך ביצירת חשבון חדש. לא תקבל/י החזר כספי על יהלומים שקנית. אם את/ה בטוח/ה לחלוטין בהחלטתך, נא להקליד את הסיסמה שלך בתיבת הטקסט למטה.", "deleteSocialAccountText": "להמשיך? פעולה זו תמחק את החשבון שלך לתמיד, ולעולם לא יהיה ניתן לשחזר אותו! יהיה עליך להירשם לחשבון חדש כדי להשתמש בהביטיקה שוב. אין החזרים על יהלומים שצברת או בזבזת. אם עדיין ברצונך להמשיך, יש להקליד \"<%= magicWord %>\" בתיבת הטקסט שלמטה.", "API": "מנגנון API", "APIv3": "API גרסה 3", @@ -55,7 +55,6 @@ "APIToken": "אסימון ממשק (זוהי סיסמה של ממש - כדאי לעיין באזהרה למעלה!)", "showAPIToken": "הצגת אסימון API", "hideAPIToken": "הסתרת אסימון API", - "APITokenWarning": "", "thirdPartyApps": "אפליקציות צד שלישי", "resetDo": "כן, ברצוני לאפס את חשבוני!", "resetComplete": "האיפוס הושלם!", @@ -80,7 +79,7 @@ "wonChallenge": "זכית באתגר!", "newPM": "קיבלת הודעה פרטית חדשה", "giftedGems": "יהלומים שזכית בהם", - "giftedGemsInfo": "קיבלתם <%= amount %> אבני-חן כמתנה מ<%= name %>", + "giftedGemsInfo": "קיבלת <%= amount %> יהלומים כמתנה מ<%= name %>", "giftedGemsFull": "שלום <%= username %>, נשלחו אליך <%= gemAmount %> מ־<%= sender %>!", "giftedSubscription": "מינוי במתנה", "giftedSubscriptionInfo": "", @@ -134,7 +133,7 @@ "purchasedPlanExtraMonths": "יש לך <%= months %> חודשים נוספים ליתרת המינוי.", "consecutiveSubscription": "מינוי רצוף", "consecutiveMonths": "חודשים רצופים:", - "gemCapExtra": "סף אבני-חן נוספות", + "gemCapExtra": "סף יהלומים נוספים", "mysticHourglasses": "שעוני-חול מיסטיים:", "mysticHourglassesTooltip": "", "paypal": "פיי-פאל", @@ -177,5 +176,20 @@ "transaction_create_challenge": "יצירת אתגר", "generalSettings": "הגדרות כלליות", "siteData": "נתוני האתר", - "taskSettings": "הגדרות משימות" + "taskSettings": "הגדרות משימות", + "confirmCancelChanges": "בטוח/ה? השינויים שלא נשמרו יאבדו.", + "account": "חשבון", + "loginMethods": "שיטות כניסה לחשבון", + "character": "דמות", + "siteLanguage": "שפת האתר", + "showHatchPetModal": "בעת הבקעת חיית מחמד", + "baileyAnnouncement": "הכרזה החדשה של ביילי", + "downloadAs": "הורדה בתור", + "downloadCSV": "הורדה בתור קובץ CSV", + "yourUserData": "נתוני המשתמש שלך", + "taskHistory": "היסטוריית משימות", + "developerMode": "מצב מפתחים", + "api": "API", + "currentPass": "הסיסמה הנוכחית", + "resetDetail1": "כל השלבים, המטבעות הזהב ונקודות הניסיון שלך יאבדו." } diff --git a/website/common/locales/hr/death.json b/website/common/locales/hr/death.json index 5e44660882..40c39ba7bb 100755 --- a/website/common/locales/hr/death.json +++ b/website/common/locales/hr/death.json @@ -1,7 +1,7 @@ { "lostAllHealth": "Ostao/la si bez Zdravlja!", "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", "dyingOftenTips": "Događa li ti se ovo često? Evo nekoliko savjeta!", "losingHealthWarning": "Pripazi- gubiš Zdravlje!", diff --git a/website/common/locales/hr/gear.json b/website/common/locales/hr/gear.json index ced19939a3..a1d4230ce6 100755 --- a/website/common/locales/hr/gear.json +++ b/website/common/locales/hr/gear.json @@ -70,7 +70,7 @@ "weaponHealer2Text": "Štap od kvarca", "weaponHealer2Notes": "Ukrašen draguljem ljekovitih svojstava. Povećava Inteligenciju za <%= int %>.", "weaponHealer3Text": "Štap od ametista", - "weaponHealer3Notes": "Pročišćava otrove na dodir. Povećava Inteligenciju za <%= int %>.", + "weaponHealer3Notes": "Pročišćava otrove na dodir. Povećava Inteligenciju za <%= int %>.", "weaponHealer4Text": "Liječnikov štap", "weaponHealer4Notes": "Simbol je dužnosti jednako koliko i alat iscjeljivanja. Povećava Inteligenciju za <%= int %>.", "weaponHealer5Text": "Kraljevsko žezlo", @@ -96,7 +96,7 @@ "weaponSpecialBardInstrumentText": "Bardska lutnja", "weaponSpecialBardInstrumentNotes": "Sviraj sretnu melodiju na ovoj magičnoj lutnji! Povećava Inteligenciju i Percepciju za <%= attrs %> svaku.", "weaponSpecialLunarScytheText": "Mjesečev srp", - "weaponSpecialLunarScytheNotes": "Redovito premazuj ovaj srp voskom ili će njegova moć opasti. Povećava Snagu i Percepciju za <%= attrs %> svaku.", + "weaponSpecialLunarScytheNotes": "Redovito premazuj ovaj srp voskom ili će njegova moć opasti. Povećava Snagu i Percepciju za <%= attrs %> svaku.", "weaponSpecialMammothRiderSpearText": "Koplje Jahača mamuta", "weaponSpecialMammothRiderSpearNotes": "Ovo koplje s vrškom od ružičastog kvarca će te prožeti drevnim magijskim moćima. Povećava Inteligenciju za <%= int %>.", "weaponSpecialPageBannerText": "Zastava stranice", @@ -238,7 +238,7 @@ "weaponSpecialFall2017WarriorText": "Koplje gumenih bombona", "weaponSpecialFall2017WarriorNotes": "Svi tvoji neprijatelji će se tresti pred ovim ukusnim kopljem, bez obzira bili oni duhovi, čudovišta ili crveni Zadaci. Povećava Snagu za <%= str %>. Posebno izdanje jesenske opreme 2017.", "weaponSpecialFall2017MageText": "Sablasni štap", - "weaponSpecialFall2017MageNotes": "Oči užarene lubanje na ovom štapu isijavaju magiju i tajnovitost. Povećava Inteligenciju za <%= int %> i Percepciju za <%= per %>. Posebno izdanje jesenske opreme 2017.", + "weaponSpecialFall2017MageNotes": "Oči užarene lubanje na ovom štapu isijavaju magiju i tajnovitost. Povećava Inteligenciju za <%= int %> i Percepciju za <%= per %>. Posebno izdanje jesenske opreme 2017.", "weaponSpecialFall2017HealerText": "Zastrašujući svijećnjaci", "weaponSpecialFall2017HealerNotes": "Ovo svjetlo tjera strah i daje drugima do znanja da si tu za pomoći. Povećava Inteligenciju za <%= int %>. Posebno izdanje jesenske opreme 2017.", "weaponSpecialWinter2018RogueText": "Pepermint kuka", @@ -288,13 +288,13 @@ "weaponMystery201505Text": "Koplje Zelenog viteza", "weaponMystery201505Notes": "Ovo zeleno-srebrno koplje je zbacilo mnošto neprijatelja s njihovih jahaćih životinja. Ne donosi nikakve prednosti. Pretplatnički predmet za svibanj 2015.", "weaponMystery201611Text": "Obilni rog izobilja", - "weaponMystery201611Notes": "Razne vrste ukusne i zdrave hrane ispadaju iz ovog roga. Uživaj u gozbi! Ne donosi nikakve prednosti. Pretplatnički predmet za studeni 2016.", + "weaponMystery201611Notes": "Razne vrste ukusne i zdrave hrane ispadaju iz ovog roga. Uživaj u gozbi! Ne donosi nikakve prednosti. Pretplatnički predmet za studeni 2016.", "weaponMystery201708Text": "Mač lave", - "weaponMystery201708Notes": "Vatreni sjaj ovog mača će čak i najtamnije crvene Zadatke pretvoriti u lagan posao! Ne donosi nikakve prednosti. Pretplatnički predmet za kolovoz 2017.", + "weaponMystery201708Notes": "Vatreni sjaj ovog mača će čak i najtamnije crvene Zadatke pretvoriti u lagan posao! Ne donosi nikakve prednosti. Pretplatnički predmet za kolovoz 2017.", "weaponMystery201811Text": "Štap Sjajnog čarobnjaka", "weaponMystery201811Notes": "Ovaj čarobni štap je jednako moćan koliko je elegantan. Ne donosi nikakve prednosti. Pretplatnički predmet za studeni 2018.", "weaponMystery301404Text": "Steampunk štap", - "weaponMystery301404Notes": "Odličan za đir po gradu. Pretplatnički predmet za ožujak 3015. Ne donosi nikakve prednosti.", + "weaponMystery301404Notes": "Odličan za đir po gradu. Pretplatnički predmet za ožujak 3015. Ne donosi nikakve prednosti.", "weaponArmoireBasicCrossbowText": "Obični samostrel", "weaponArmoireBasicCrossbowNotes": "Ovaj samostrel može probiti oklop zadatka s iznimno velike udaljenosti! Povećava Snagu za <%= str %>, Percepciju za <%= per %> i Konstituciju za <%= con %>. Začarani Ormar: samostalni artikal.", "weaponArmoireLunarSceptreText": "Umirujuće lunarno žezlo", @@ -323,7 +323,7 @@ "weaponArmoireJesterBatonNotes": "Uz zamah palicom i duhovit odgovor, čak i najsloženije situacije postanu jasne. Povećava Inteligenciju i Percepciju za <%= attrs %> svaku. Začarani ormar: Komplet Lakrdijaša (artikal 3 od 3).", "weaponArmoireMiningPickaxText": "Rudarski budak", "weaponArmoireMiningPickaxNotes": "Zaradi maksimalnu količinu zlatnika za svoje zadatke! Povećava Percepciju za <%= per %>. Začarani ormar: Komplet rudara (artikal 3 od 3).", - "weaponArmoireBasicLongbowText": "Bazični luk", + "weaponArmoireBasicLongbowText": "Bazični luk", "weaponArmoireBasicLongbowNotes": "Pogodan polovni luk. Povećava snagu za <%= str %>. Začarani ormar: Osnovni komplet Strijelca (artikal 1 od 3).", "weaponArmoireHabiticanDiplomaText": "Diploma Habitičana", "weaponArmoireHabiticanDiplomaNotes": "Potvrda značajnog postignuća - bravo! Povećava Inteligenciju za <%= int %>. Začarani ormar: Komplet Diplomca (artikal 1 od 3).", @@ -376,7 +376,7 @@ "armor": "oklop", "armorCapitalized": "Oklop", "armorBase0Text": "Obična odjeća", - "armorBase0Notes": "Obična odjeća. Ne donosi nikakve prednosti.", + "armorBase0Notes": "Obična odjeća. Ne donosi nikakve prednosti.", "armorWarrior1Text": "Kožni oklop", "armorWarrior1Notes": "Kožuh od čvrste prokuhane kože. Povećava Konstituciju za <%= con %>.", "armorWarrior2Text": "Pancir", @@ -450,7 +450,7 @@ "armorSpecialSamuraiArmorText": "Oklop Samuraja", "armorSpecialSamuraiArmorNotes": "Ovaj snažni, ljuskasti oklop na okupu drže elegantni, svileni konopci. Povećava Percepciju za <%= per %>.", "armorSpecialTurkeyArmorBaseText": "Pureći oklop", - "armorSpecialTurkeyArmorBaseNotes": "Tvojim batacima će biti toplo i udobno u ovom pernatom oklopu! Ne donosi nikakve prednosti.", + "armorSpecialTurkeyArmorBaseNotes": "Tvojim batacima će biti toplo i udobno u ovom pernatom oklopu! Ne donosi nikakve prednosti.", "armorSpecialTurkeyArmorGildedText": "Pozlaćeni oklop purice", "armorSpecialTurkeyArmorGildedNotes": "Šepuri se u ovoj sezonski sjajnom oklopu! Ne donosi nikakve prednosti.", "armorSpecialYetiText": "Halja Krotitelja Jetija", @@ -626,7 +626,7 @@ "armorSpecialFall2018HealerText": "Halja mesožderstva", "armorSpecialFall2018HealerNotes": "Napravljena je od biljaka, ali to ne znači da je vegetarijanska. Loše Navike je strah pristupiti u krugu od nekoliko milja od ove halje. Povećava Konstituciju za <%= con %>. Posebno izdanje jesenske opreme 2018.", "armorSpecialWinter2019RogueText": "Oklop od božićne zvijezde", - "armorSpecialWinter2019RogueNotes": "Sa blagdanskim zelenilom posvuda, nitko neće primijetiti dodatni grm! Možeš se s lakoćom kriomice kretati kroz sezonska okupljanja. Povećava Percepciju za <%= per %>. Posebno izdanje zimske opreme 2018.-2019.", + "armorSpecialWinter2019RogueNotes": "Sa blagdanskim zelenilom posvuda, nitko neće primijetiti dodatni grm! Možeš se s lakoćom kriomice kretati kroz sezonska okupljanja. Povećava Percepciju za <%= per %>. Posebno izdanje zimske opreme 2018.-2019.", "armorSpecialWinter2019WarriorText": "Ledeni oklop", "armorSpecialWinter2019WarriorNotes": "Ovaj oklop će ti održavati glavu hladnom i održavati spremnim/om za akciju u samom srcu bitke. Povećava Konstituciju za <%= con %>. Posebno izdanje zimske opreme 2018.-2019.", "armorSpecialWinter2019MageText": "Halja goruće inspiracije", @@ -870,7 +870,7 @@ "headSpecialPyromancersTurbanText": "Piromantov turban", "headSpecialPyromancersTurbanNotes": "Ovaj čarobni turban će ti pomoći disati čak u najgušćem dimu. Uz to je izvanredno udoban! Povećava Snagu za <%= str %>.", "headSpecialBardHatText": "Bardska kapa", - "headSpecialBardHatNotes": "Natakni pero na svoju kapu i nazovi to \"produktivnošću\"! Povećava Inteligenciju za <%= int %>.", + "headSpecialBardHatNotes": "Natakni pero na svoju kapu i nazovi to \"produktivnošću\"! Povećava Inteligenciju za <%= int %>.", "headSpecialLunarWarriorHelmText": "Šljem Mjesečevog ratnika", "headSpecialLunarWarriorHelmNotes": "Moć mjeseca će ti podariti dodatnu snagu u bitci! Povećava Snagu i Inteligenciju za <%= attrs %> svaku.", "headSpecialMammothRiderHelmText": "Šljem Jahača mamuta", diff --git a/website/common/locales/hr/overview.json b/website/common/locales/hr/overview.json index 2fed4d0325..f927f46d18 100755 --- a/website/common/locales/hr/overview.json +++ b/website/common/locales/hr/overview.json @@ -5,5 +5,5 @@ "step2": "Korak 2: Stječi bodove radeći stvari u stvarnom životu", "webStep2Text": "Sada se počnite baviti svojim ciljevima s popisa! Dok izvršavate zadatke i označavate ih u Habitici, dobit ćete [Iskustvo](https://habitica.fandom.com/wiki/Experience_Points), koje vam pomaže da prijeđete na višu razinu, i [Zlato](https://habitica. fandom.com/wiki/Gold_Points), koji vam omogućuje kupnju nagrada. Ako steknete loše navike ili propustite dnevni zadatak, izgubit ćete [zdravlje](https://habitica.fandom.com/wiki/Health_Points). Na taj način Habitica Iskustvo i Zdravlje barovi služe kao zabavni pokazatelj vašeg napretka prema vašim ciljevima. Počet ćete vidjeti kako se vaš stvarni život poboljšava kako vaš lik napreduje u igri.", "step3": "Korak 3: Prilagodi i istraži Habiticu", - "webStep3Text": "Nakon što se upoznate s osnovama, možete izvući još više od Habitice pomoću ovih izvrsnih značajki:\n * Organizirajte svoje zadatke pomoću [oznaka](https://habitica.fandom.com/wiki/Tags) (uredite zadatak da biste ih dodali).\n * Prilagodite svoj [Avatar](https://habitica.fandom.com/wiki/Avatar) klikom na ikonu korisnika u gornjem desnom kutu.\n * Kupite svoju [Opremu](https://habitica.fandom.com/wiki/Oprema) pod Nagradama ili u [Trgovinama](<%= shopUrl %>) i promijenite je pod [Inventar > Oprema](<% = equipUrl %>).\n * Povežite se s drugim korisnicima putem [Krčme](https://habitica.fandom.com/wiki/Tavern).\n * Izlezite [kućne ljubimce](https://habitica.fandom.com/wiki/Pets) skupljanjem [jaja](https://habitica.fandom.com/wiki/Eggs) i [napitaka za izlijeganje](https:// habitica.fandom.com/wiki/Hatching_Potions). [Feed](https://habitica.fandom.com/wiki/Food) ih za stvaranje [Mounts](https://habitica.fandom.com/wiki/Mounts).\n * Na razini 10: odaberite određeni [razred](https://habitica.fandom.com/wiki/Class_System) i zatim koristite [vještine] specifične za razred (https://habitica.fandom.com/wiki/Skills) (razine 11 do 14).\n * Formirajte zabavu sa svojim prijateljima (klikom na [Zabava](<%= partyUrl %>) na navigacijskoj traci) kako biste ostali odgovorni i osvojili svitak misije.\n * Porazite čudovišta i skupljajte predmete na [Misijama](https://habitica.fandom.com/wiki/Quests) (dobit ćete misiju na razini 15)." + "webStep3Text": "Nakon što se upoznate s osnovama, možete izvući još više od Habitice pomoću ovih izvrsnih značajki:\n * Organizirajte svoje zadatke pomoću [oznaka](https://habitica.fandom.com/wiki/Tags) (uredite zadatak da biste ih dodali).\n * Prilagodite svoj [Avatar](https://habitica.fandom.com/wiki/Avatar) klikom na ikonu korisnika u gornjem desnom kutu.\n * Kupite svoju [Opremu](https://habitica.fandom.com/wiki/Oprema) pod Nagradama ili u [Trgovinama](<%= shopUrl %>) i promijenite je pod [Inventar > Oprema](<% = equipUrl %>).\n * Povežite se s drugim korisnicima putem [Krčme](https://habitica.fandom.com/wiki/Tavern).\n * Izlezite [kućne ljubimce](https://habitica.fandom.com/wiki/Pets) skupljanjem [jaja](https://habitica.fandom.com/wiki/Eggs) i [napitaka za izlijeganje](https:// habitica.fandom.com/wiki/Hatching_Potions). [Feed](https://habitica.fandom.com/wiki/Food) ih za stvaranje [Mounts](https://habitica.fandom.com/wiki/Mounts).\n * Na razini 10: odaberite određeni [razred](https://habitica.fandom.com/wiki/Class_System) i zatim koristite [vještine] specifične za razred (https://habitica.fandom.com/wiki/Skills) (razine 11 do 14).\n * Formirajte zabavu sa svojim prijateljima (klikom na [Zabava](<%= partyUrl %>) na navigacijskoj traci) kako biste ostali odgovorni i osvojili svitak misije.\n * Porazite čudovišta i skupljajte predmete na [Misijama](https://habitica.fandom.com/wiki/Quests) (dobit ćete misiju na razini 15)." } diff --git a/website/common/locales/hr/questscontent.json b/website/common/locales/hr/questscontent.json index 70eee68646..9e7f7d1061 100755 --- a/website/common/locales/hr/questscontent.json +++ b/website/common/locales/hr/questscontent.json @@ -295,7 +295,7 @@ "questUnicornDropUnicornEgg": "Jednorog (jaje)", "questUnicornUnlockText": "Otključava jaja Jednoroga za kupovinu na Tržnici", "questSabretoothText": "Sabljozuba mačka", - "questSabretoothNotes": "Bučno čudovište terorizira Habiticu! Biće se šulja uokolo po divljini i šumama i skače u napadu prije nego što opet nestane. U posljednje vrijeme lovi nedužne pande i straši leteće svinje, tjerajući ih iz njihovih obora pa se moraju skrivati u stablima. @InspectorCaracal i @icefelis objašnjavaju da je zombi Sabljozuba mačka bila puštena na slobodu dok su oni iskopavali drevna, netaknuta ledena polja Stepa Stoïmirno. \"Isprva je bila savršeno prijateljski nastrojena - ne znam što se dogodilo. Molimo te, trebaš nam je pomoći ponovno zarobiti! Samo prvak Habitice može obuzdati ovu prapovijesnu zvijer!\"", + "questSabretoothNotes": "Bučno čudovište terorizira Habiticu! Biće se šulja uokolo po divljini i šumama i skače u napadu prije nego što opet nestane. U posljednje vrijeme lovi nedužne pande i straši leteće svinje, tjerajući ih iz njihovih obora pa se moraju skrivati u stablima. @InspectorCaracal i @icefelis objašnjavaju da je zombi Sabljozuba mačka bila puštena na slobodu dok su oni iskopavali drevna, netaknuta ledena polja Stepa Stoïmirno. \"Isprva je bila savršeno prijateljski nastrojena - ne znam što se dogodilo. Molimo te, trebaš nam je pomoći ponovno zarobiti! Samo prvak Habitice može obuzdati ovu prapovijesnu zvijer!\"", "questSabretoothCompletion": "Nakon dugačke, umarajuće bitke, oboriš zombi Sabljozubu mačku na tlo. Sad kad joj se konačno možeš približiti, primjećuješ ružni karijes u jednom od njenih sabljastih zubi. Shvaćajući pravi uzrok mačkine srdžbe, nagovoriš @Fandekaspa da izliječi karijes i savjetuješ svima da u budućnosti izbjegnu hranjenje mačke slatkišima. Sabljozuba mačka procvate i, u znak zahvalnosti, njeni krotitelji ti pošalju velikodušnu nagradu – leglo jaja sabljozube mačke!", "questSabretoothBoss": "Zombi Sabljozuba mačka", "questSabretoothDropSabretoothEgg": "Sabljozubi tigar (jaje)", diff --git a/website/common/locales/hr/settings.json b/website/common/locales/hr/settings.json index 66d48c6577..70b8f8141f 100755 --- a/website/common/locales/hr/settings.json +++ b/website/common/locales/hr/settings.json @@ -55,7 +55,6 @@ "APIToken": "API token (ovo je lozinka - vidi upozorenje poviše!)", "showAPIToken": "Prikaži API token", "hideAPIToken": "Sakrij API token", - "APITokenWarning": "Ako ti treba novi API token (npr. ako si ga slučajno podijelio/la), pošalji e-mail na <%= hrefTechAssistanceEmail %> sa svojim Korisničkim ID-em i trenutnim tokenom. Kad ga se resetira, trebat ćeš sve ponovno autorizirati odjavom sa stranice i mobilne aplikacije i unošenjem novog tokena na drugim, dodatnim alatima Habitice koje koristiš.", "thirdPartyApps": "Aplikacije treće strane", "resetDo": "Hajde, resetiraj moj račun!", "resetComplete": "Resetiranje je obavljeno!", @@ -117,7 +116,7 @@ "generate": "Generiraj", "getCodes": "Preuzmi kodove", "webhooks": "Webhookovi", - "webhooksInfo": "Habitica nudi webhookove tako da, kad se određena radnja dogodi na tvom računu, podaci mogu biti poslani skripti na drugoj web-stranici. Te skripte možeš odrediti ovdje. Pripazi s ovom opcijom jer navođenje krivog URL-a može uzrokovati greške ili usporavanje Habitice. Za dodatne informacije pogledaj Webhooks wiki stranicu.", + "webhooksInfo": "Habitica nudi webhookove tako da, kad se određena radnja dogodi na tvom računu, podaci mogu biti poslani skripti na drugoj web-stranici. Te skripte možeš odrediti ovdje. Pripazi s ovom opcijom jer navođenje krivog URL-a može uzrokovati greške ili usporavanje Habitice. Za dodatne informacije pogledaj Webhooks wiki stranicu.", "enabled": "Omogućeno", "webhookURL": "Webhook URL", "invalidUrl": "Nevažeći url", diff --git a/website/common/locales/hr/subscriber.json b/website/common/locales/hr/subscriber.json index af2abb48da..2175206e78 100755 --- a/website/common/locales/hr/subscriber.json +++ b/website/common/locales/hr/subscriber.json @@ -22,7 +22,7 @@ "maxBuyGems": "Kupio/la si sve Dragulje koje možeš za ovaj mjesec. Više ih postane dostupno unutar prva tri dana svakog mjeseca. Zahvaljujemo ti na pretplati!", "timeTravelers": "Vremenski putnici", "timeTravelersPopoverNoSubMobile": "Izgleda da će ti trebati Mistični pješčani sat da bi otvorio/la vremenski portal i prizvao/la misteriozne Vremenske putnike.", - "timeTravelersPopover": "Tvoj Mistični pješčani sat je otvorio naš vremenski portal! Odaberi što bi htio/la da ti donesemo iz prošlosti ili budućnosti.", + "timeTravelersPopover": "Tvoj Mistični pješčani sat je otvorio naš vremenski portal! Odaberi što bi htio/la da ti donesemo iz prošlosti ili budućnosti.", "mysterySetNotFound": "Tajni komplet nije pronađen ili ga već posjeduješ.", "mysteryItemIsEmpty": "Nema tajnih artikala", "mysteryItemOpened": "Otvoren tajni artikal.", diff --git a/website/common/locales/hu/backgrounds.json b/website/common/locales/hu/backgrounds.json index 0d78d66384..fa036dd9b9 100644 --- a/website/common/locales/hu/backgrounds.json +++ b/website/common/locales/hu/backgrounds.json @@ -906,5 +906,8 @@ "backgroundTrailThroughAForestNotes": "Barangolj egy ösvényen az erdőn át.", "backgrounds062025": "KÉSZLET 133: Megjelent 2025. június", "backgroundSummerSeashoreText": "Nyári tengerpart", - "backgroundSummerSeashoreNotes": "Kapj el egy hullámot a nyári tengerparton." + "backgroundSummerSeashoreNotes": "Kapj el egy hullámot a nyári tengerparton.", + "backgrounds072025": "KÉSZLET 134: Megjelent 2025. július", + "backgroundSirensLairText": "A szirén búvóhelye", + "backgroundSirensLairNotes": "Merészkedj le egy szirén búvóhelyére." } diff --git a/website/common/locales/hu/front.json b/website/common/locales/hu/front.json index 3e3e9f1328..4a554d85aa 100644 --- a/website/common/locales/hu/front.json +++ b/website/common/locales/hu/front.json @@ -25,32 +25,32 @@ "invalidEmail": "A jelszó visszaállításhoz érvényes e-mail cím megadása szükséges.", "login": "Bejelentkezés", "logout": "Kijelentkezés", - "marketing1Header": "Javítsd a szokásaid játék közben", - "marketing1Lead1Title": "Az életed, mint szerepjáték", - "marketing1Lead1": "A Habitica egy videojáték, amely segít a való életbeli szokásaid fejlesztésében. \"Játékká alakítja\" az életed azzal, hogy minden feladatodat (szokásokat, napi teendőket és a tennivalókat) apró szörnyekké változtatja, akiket le kell győznöd. Minél jobban teljesítesz, annál tovább jutsz a játékban. Ha viszont elhanyagolod a feladataidat, a karaktered is visszaesik.", - "marketing1Lead2Title": "Szerezd meg a menő felszereléseket", - "marketing1Lead2": "Fejleszd a szokásaidat, és építsd fel az avatárod. Mutasd meg a menő felszereléseidet, amiket kiérdemeltél!", - "marketing1Lead3Title": "Találj véletlenszerű jutalmakat", - "marketing1Lead3": "Vannak, akiket a szerencsejáték izgalma motivál: ezt nevezik „stochasztikus jutalmazási rendszernek”. A Habitica mindenféle megerősítési és büntetési stílust támogat: pozitív, negatív, kiszámítható és véletlenszerű rendszereket egyaránt.", - "marketing2Header": "Versenyezz a barátaiddal", - "marketing2Lead1Title": "Közösségi produktivitás", - "marketing2Lead1": "A Habiticát játszhatod egyedül is, de igazán akkor lesz izgalmas, amikor együttműködtök, versenyeztek és felelősségre vonjátok egymást. Minden önfejlesztő program leghatásosabb eleme a közösségi felelősségvállalás – és mi lenne jobb hely erre, mint egy videojáték?", - "marketing2Lead2Title": "Harcoljatok szörnyekkel", - "marketing2Lead2": "Mi lenne egy szerepjáték csaták nélkül? Harcolj szörnyekkel a csapatoddal! A szörnyek az „ultra felelősségvállalási módot” képviselik – ha egy nap kihagyod az edzést, azzal *mindenki* sebzést szenved el!", + "marketing1Header": "Egyre jobb szokások, szintenként!", + "marketing1Lead1Title": "Tedd játékossá az életed", + "marketing1Lead1": "A Habitica tökéletes app mindenkinek, aki nehezen boldogul a tennivalólistákkal. Ismerős játékmechanikákat használunk, mint például az arany, TP és tárgyjutalmak, hogy produktívabbnak érezd magad, és elégedettséggel töltsön el, amikor elvégzel egy feladatot. Minél jobban teljesítesz, annál gyorsabban haladsz a játékban.", + "marketing1Lead2Title": "Öltözz stílusosan", + "marketing1Lead2": "Gyűjts kardokat, páncélokat és sok minden mást az elvégzett feladatokért kapott aranyból. Több száz tárgy vár rád, így mindig lesz új kombináció, amit kipróbálhatsz. Optimalizálj tulajdonságokra, stílusra vagy mindkettőre! ", + "marketing1Lead3Title": "Jutalom a befektetett munkáért", + "marketing1Lead3": "Egy kis jutalom sokszor pont elég ahhoz, hogy elvégezd a feladatot ahelyett, hogy hetekig csak halogatnád. Ha az élet épp nem kínál jutalmat, a Habitica igen! Minden feladatért kapsz valamit, de meglepetések is várnak – tarts ki, és haladj tovább! ", + "marketing2Header": "Csapatban még jobb", + "marketing2Lead1Title": "Közösségi motiváció", + "marketing2Lead1": "Motiválódj azáltal, hogy együtt dolgozol, versenyzel és kapcsolatba lépsz másokkal! A Habitica a legjobb önfejlesztő programok legerősebb elemére épít: a közösségi elszámoltathatóságra.", + "marketing2Lead2Title": "Szörnyek ellen küldetésekben", + "marketing2Lead2": "Vágjatok bele barátaiddal a több száz küldetésünk egyikébe, és csatlakozzatok a küzdelemhez! A küldetésszörnyek igazán próbára teszik a felelősségtudatot – ha elfelejted a fogmosást, mindenki sebzést kap!", "marketing2Lead3Title": "Hívjátok ki egymást", - "marketing2Lead3": "A kihívások lehetőséget adnak arra, hogy barátaiddal és idegenekkel versenyezz. A kihívás végén a legjobban teljesítő játékos különleges jutalmakat nyer.", - "marketing3Header": "Alkalmazások és bővítmények", - "marketing3Lead1": "Az **iPhone és Android** alkalmazások segítségével útközben is intézheted a dolgaidat. Tudjuk, hogy a weboldalra belépni és gombokat nyomogatni néha fárasztó lehet.", - "marketing3Lead2Title": "Integrációk", - "marketing3Lead2": "Más **3- féltől származó eszközök** is összekapcsolhatók a Habiticával, hogy az életed különböző területein segítsenek. API-nk lehetővé teszi az egyszerű integrációt olyan eszközökkel, mint például a [Chrome-bővítmény](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US), amely pontokat von le, ha nem produktív weboldalakat böngészel és pontokat ad, ha produktív oldalakon jársz. [További információk itt](https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).", - "marketing4Header": "Szervezeti felhasználás", - "marketing4Lead1": "Az oktatás az egyik legjobb terület a játékosításra. Mind tudjuk, mennyire rá vannak tapadva a diákok a telefonjukra és a játékokra – használd ki ezt az erőt! Állítsd őket barátságos versenyhelyzetbe, és jutalmazd a jó magaviseletet ritka nyereményekkel. Figyeld, ahogy a jegyeik és a viselkedésük javul!", + "marketing2Lead3": "Vegyél részt a közösség által létrehozott kihívásokban, ahol érdeklődésedhez és céljaidhoz illő feladatlistákat kapsz. Tedd oda magad, és versenyezz a gyémántjutalomért, amit a nyertes kap!", + "marketing3Header": "Többféleképpen is használhatod a Habiticát", + "marketing3Lead1": "Töltsd le a Habiticát Androidra vagy iOS-re, hogy bárhol kipipálhasd a feladataid. Próbáld ki díjnyertes alkalmazásainkat, és tapasztald meg, milyen hatékony lehet egy friss megközelítés!", + "marketing3Lead2Title": "Nyílt forráskódú közösség", + "marketing3Lead2": "Büszkék vagyunk arra, hogy nyílt forráskódú projektként működünk, amely örömmel fogadja a lelkes közösségünk hozzájárulásait. Igazítsd Habiticát a saját igényeidhez, vagy segíts, hogy mások számára is jobb legyen az élmény. Látogass el a [GitHub](https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica) oldalunkra, ha többet szeretnél megtudni!", + "marketing4Header": "Több, mint házimunka", + "marketing4Lead1": "Egy kis játékosság csodákat tehet az oktatásban! Törd meg a mindennapi iskolai feladatok egyhangúságát egy kis játékkal. A Habitica szórakoztató módja lehet a házi feladatok nyomon követésének, osztálytermi kihívások létrehozásának, és annak, hogy a diákok megmutathassák, mit értek el.", "marketing4Lead1Title": "Játékosítás az oktatásban", - "marketing4Lead2": "Az egészségügyi költségek egyre növekednek, és valamit tenni kell. Több száz programot hoznak létre a költségek csökkentésére és a jólét javítására. Hisszük, hogy a Habitica jelentős szerepet játszhat az egészséges életmód kialakításában.", - "marketing4Lead2Title": "Játékosítás az egészség és jólét terén", - "marketing4Lead3-1": "Szeretnéd játékossá tenni az életed?", + "marketing4Lead2": "Egészségesebb életmódot kialakítani könnyen túl soknak tűnhet. A Habitica segít abban, hogy rugalmasan, a saját tempódban követhesd a fittségi céljaidat. Tedd élvezetessé az utat a jobb közérzet felé!", + "marketing4Lead2Title": "Játékosítás az egészség és jóllét szolgálatában", + "marketing4Lead3-1": "Készen állsz, hogy szórakozva haladj a feladataiddal?", "marketing4Lead3-2": "Érdekel egy csoport vezetése az oktatás, jólét vagy más területeken?", - "marketing4Lead3Title": "Játékosíts mindent!", + "marketing4Lead3Title": "Indulj el az utadon!", "mobileAndroid": "Android alkalmazás", "mobileIOS": "iOS alkalmazás", "oldNews": "Hírek", @@ -180,5 +180,7 @@ "minPasswordLength": "A jelszónak legalább 8 karakter hosszúnak kell lennie.", "socialAlreadyExists": "Ez a közösségi bejelentkezés már hozzá van kapcsolva egy meglévő Habitica-fiókhoz.", "emailUsernamePlaceholder": "pl. habitnyuszi vagy griff@example.com", - "translateHabitica": "Fordítsd le a Habiticát" + "translateHabitica": "Fordítsd le a Habiticát", + "marketing3Lead1Title": "Android és iOS appok", + "marketing4Lead3Button": "Kezdd el még ma" } diff --git a/website/common/locales/hu/gear.json b/website/common/locales/hu/gear.json index fc65b78b1b..250678d38a 100644 --- a/website/common/locales/hu/gear.json +++ b/website/common/locales/hu/gear.json @@ -3365,5 +3365,15 @@ "shieldArmoireBeekeepersHiveNotes": "A méhkas otthon és munkahely egyben. Talán ideje lenne beszélned a méheiddel a munka és a pihenés egyensúlyáról. Növeli az erődet <%= str %> ponttal. Megbűvölt komód: Méhész szett (4/4 tárgy)", "backMystery202506Text": "Napfényes ragyogás dicsfény", "backMystery202506Notes": "Vigyél magaddal meleg ragyogást a napi teendőid során. Nem jár semmilyen előnnyel. 2025. júniusi előfizetői tárgy.", - "headSpecialSummer2025MageNotes": "Mindenkit elbűvöl majd, ahogy az uszonyaid együtt táncolnak az áramlatokkal. Növeli az észlelésedet <%= per %> ponttal. Korlátozott kiadású nyári 2025-ös felszerelés." + "headSpecialSummer2025MageNotes": "Mindenkit elbűvöl majd, ahogy az uszonyaid együtt táncolnak az áramlatokkal. Növeli az észlelésedet <%= per %> ponttal. Korlátozott kiadású nyári 2025-ös felszerelés.", + "headMystery202507Notes": "A hátrafelé hordott sapka még mindig menő, ugye? Nem jár semmilyen előnnyel. 2025. júliusi előfizetői tárgy.", + "headArmoireFlyFishingHatNotes": "Széles karimája és csalitartó helye nélkülözhetetlenné teszi a legyezőhorgászathoz. Növeli az erődet és az észlelésedet egyaránt <%= attrs %> ponttal. Megbűvölt komód: Legyezőhorgász szett (1/3. tárgy)", + "shieldArmoireFlyFishingRodNotes": "Tegyél csalit erre a hosszú és hajlékony botra, és a halak biztosan rovarnak nézik. Növeli az erődet és az intelligenciádat egyaránt <%= attrs %> ponttal. Megbűvölt komód: Legyezőhorgász szett (3/3. tárgy)", + "armorArmoireFlyFishingWadersText": "Legyezőhorgász nadrág", + "armorArmoireFlyFishingWadersNotes": "Maradj teljesen száraz és meleg, akár patakban, tóban vagy folyóban gázolsz. Növeli az erődet és a szívósságodat egyaránt <%= attrs %> ponttal. Megbűvölt komód: Legyezőhorgász szett (2/3. tárgy)", + "headMystery202507Text": "Vagány gördeszkás sapka", + "headArmoireFlyFishingHatText": "Legyezőhorgász kalap", + "shieldArmoireFlyFishingRodText": "Legyezőhorgász bot", + "backMystery202507Text": "Vagány gördeszka", + "backMystery202507Notes": "A hátasod a járdákon és félcsövekben. Nem jár semmilyen előnnyel. 2025. júliusi előfizetői tárgy." } diff --git a/website/common/locales/hu/settings.json b/website/common/locales/hu/settings.json index 89d7bd4dcf..ef8436b5b9 100644 --- a/website/common/locales/hu/settings.json +++ b/website/common/locales/hu/settings.json @@ -55,7 +55,6 @@ "APIToken": "API kulcs (ez egy jelszó - lásd a figyelmeztetést lentebb!)", "showAPIToken": "API kulcs mutatása", "hideAPIToken": "API kulcs elrejtése", - "APITokenWarning": "Ha szükséged van új API kulcsra (pl: véletlenül megosztottad), küldj egy e-mailt a <%= hrefTechAssistanceEmail %> címre a felhasználói azonosítóddal és a jelenlegi kulcsoddal együtt. Ha a kulcs megváltozik, akkor mindent újra kell engedélyezned azzal hogy az oldalból valamint az alkalmazásból is kilépsz, valamint az új kulcsot megadod minden olyan Habitca eszköznek amiket használsz.", "thirdPartyApps": "Harmadik féltől származó alkalmazások", "resetDo": "Állítsd vissza a fiókomat!", "resetComplete": "Visszaállítás kész!", @@ -117,7 +116,7 @@ "generate": "Generálás", "getCodes": "Kódok megszerzése", "webhooks": "Webhook", - "webhooksInfo": "A webhookok lehetővé teszik a fejlesztők számára, hogy értesítéseket kapjanak, amikor egy adott művelet történik, például egy feladat pontozása vagy frissítése, illetve egy üzenet küldése egy csoportban. Webhook létrehozásával figyelheted a Habitica változásait és olyan alkalmazásokat építhetsz, amelyek ezekre a változásokra reagálnak.

További információért és példákért látogasd meg az API dokumentációt", + "webhooksInfo": "A webhookok lehetőséget adnak a fejlesztőknek arra, hogy értesítést kapjanak, amikor valamilyen művelet történik – például amikor pontozol vagy frissítesz egy feladatot vagy üzenetet küldesz egy csoportban. Ha létrehozol egy webhookot, figyelheted a változásokat a Habiticában, és olyan alkalmazásokat építhetsz, amik ezekre a változásokra reagálnak.

További információért és példákért látogasd meg az API dokumentációnkat.", "enabled": "Engedélyezve", "webhookURL": "Webhook URL", "invalidUrl": "érvénytelen url", @@ -214,7 +213,7 @@ "changeDisplayNameDisclaimer": "Ez a név fog megjelenni az avatárod számára a Habiticában.", "connect": "Csatlakozás", "remove": "Eltávolítás", - "changePasswordDisclaimer": "A jelszónak legalább 8 karakter hosszúnak kell lennie. Javasoljuk, hogy erős jelszót használj, amelyet máshol nem használsz.", + "changePasswordDisclaimer": "A jelszónak legalább 8 karakter hosszúnak kell lennie. A jelszó megváltoztatása kijelentkeztet minden más eszközről és külső eszközről, amit használsz.", "changeClassSetting": "Kaszt váltása", "chooseClassSetting": "Kaszt választása", "transaction_reroll": "Használtad az erősítő főzetet", @@ -228,7 +227,7 @@ "enableAudio": "Hang engedélyezése", "playDemoAudio": "Bemutató lejátszása", "transaction_subscription_bonus": "Előfizetői bónusz", - "APITokenDisclaimer": "Az API tokened olyan, mint egy jelszó; ne oszd meg nyilvánosan. Előfordulhat, hogy meg kell adnod a felhasználói azonosítódat, de soha ne tedd közzé az API tokened olyan helyen, ahol mások is láthatják, például a Githubon.

Megjegyzés: Ha új API tokenre van szükséged (például mert véletlenül megosztottad), írj egy e-mailt a admin@habitica.com címre a Felhasználói azonosítóddal és a jelenlegi tokeneddel. A visszaállítás után újra kell hitelesítened mindent: jelentkezz ki a weboldalon és a mobilalkalmazásban, majd add meg az új tokent minden egyéb Habitica eszközben, amit használsz.", + "APITokenDisclaimer": "Az API tokened olyan, mint egy jelszó – ne oszd meg nyilvánosan. Előfordulhat, hogy meg kell adnod a felhasználói azonosítódat, de soha ne tedd közzé az API tokened mások számára látható helyen, például a Githubon.

Ha új API tokenre van szükséged (például mert véletlenül megosztottad), akkor a jelszavad megváltoztatásával visszaállíthatod. A visszaállítás után újra be kell jelentkezned minden olyan eszközön, ahol használod a Habiticát, és újra meg kell adnod az API tokent azokhoz a külső eszközökhöz, amiket használsz.", "thirdPartyTools": "Harmadik féltől származó alkalmazásokat, bővítményeket és mindenféle egyéb eszközt, amelyeket a fiókoddal használhatsz, a Habitica wikiben találhatsz.", "changeClassDisclaimer": "A kaszt váltás visszatéríti az összes meglévő tulajdonság pontodat. Miután kiválasztottad az új kasztodat, a profilod Karakterlap szekciójában oszthatod el a tulajdonság pontjaidat.", "transaction_admin_update_balance": "Admin által adott", diff --git a/website/common/locales/hu/subscriber.json b/website/common/locales/hu/subscriber.json index daf84f4ba0..7c1f9c3dc5 100644 --- a/website/common/locales/hu/subscriber.json +++ b/website/common/locales/hu/subscriber.json @@ -21,7 +21,7 @@ "subGemName": "Előfizetői gyémántok", "maxBuyGems": "Ebben a hónapban már megvásároltad az összes elérhető gyémántot. Újra elérhetővé válnak minden hónap első három napjában. Köszönjük, hogy előfizettél!", "timeTravelers": "Időutazók", - "timeTravelersPopoverNoSubMobile": "Úgy tűnik, szükséged lesz egy misztikus homokórára, hogy megnyisd az időkaput és megidézd a titokzatos időutazókat.", + "timeTravelersPopoverNoSubMobile": "Az előfizetők minden hónapban kapnak egy ritka misztikus homokórát, amit az Időutazók boltjában használhatnak fel!", "timeTravelersPopover": "A misztikus homokórád megnyitotta az időkaput! Válaszd ki, mit szeretnél, hogy elhozzunk a múltból vagy a jövőből.", "mysterySetNotFound": "A rejtélyes szett nem található, vagy már a birtokodban van.", "mysteryItemIsEmpty": "A rejtélyes tárgyak üresek", @@ -264,5 +264,6 @@ "mysterySet202503": "Jáde kolosszus szett", "mysterySet202504": "Ritka jeti szett", "mysterySet202505": "Szárnyaló fecskefark szett", - "mysterySet202506": "Napfényes ragyogás szett" + "mysterySet202506": "Napfényes ragyogás szett", + "mysterySet202507": "Vagány gördeszkás szett" } diff --git a/website/common/locales/id/backgrounds.json b/website/common/locales/id/backgrounds.json index f827676cd9..302a919657 100644 --- a/website/common/locales/id/backgrounds.json +++ b/website/common/locales/id/backgrounds.json @@ -759,7 +759,7 @@ "backgroundSnowyTempleNotes": "Memandangi pemandangan kuil bersalju.", "backgroundWinterLakeWithSwansText": "Danau Musim Dingin dengan Angsa", "backgroundWinterLakeWithSwansNotes": "Menikmati pemandangan danau musim dingin dengan angsa.", - "eventBackgrounds": "Latar belakang Even", + "eventBackgrounds": "Latar belakang Event", "backgroundBirthdayBashText": "Pesta Ulang Tahun", "backgroundBirthdayBashNotes": "Habitica mengadakan pesta ulang tahun, dan semua orang diundang!", "backgrounds032023": "SET 106: Dirilis Maret 2023", @@ -874,5 +874,40 @@ "backgroundMaypoleNotes": "Menari di sekitar Tiang Mei.", "backgroundShellGateNotes": "Berbaris dan lewati koral Gerbang Kerang yang didekorasi.", "monthlyBackgrounds": "Latar Belakang Bulanan", - "backgrounds082024": "SET 123: Dirilis Agustus 2024" + "backgrounds082024": "SET 123: Dirilis Agustus 2024", + "backgrounds092024": "SET 124: Dirilis September 2024", + "backgroundMagicDoorInForestText": "Pintu ajaib di dalam hutan", + "backgroundMagicDoorInForestNotes": "Tantangan unuk memasuki pintu ajaib di dalam hutan.", + "backgrounds102024": "SET 125: Dirilis Oktober 2024", + "backgroundSurroundedByGhostsText": "Dikelilingi banyak hantu", + "backgroundSurroundedByGhostsNotes": "melewati malam mengerikan Dikelilingi banyak hantu.", + "backgrounds0420205": "SET 131: Dirilis April 2025", + "backgroundGardenWithFlowerBedsText": "Kebun dengan Hamparan bunga", + "backgroundGardenWithFlowerBedsNotes": "nikmati mekarnya musim semi di Kebun dengan Hamparan bunga.", + "backgrounds022025": "SET 129: Dirilis Februari 2025", + "backgroundOldFashionedTeaShopText": "Kedai teh tua", + "backgroundOldFashionedTeaShopNotes": "Nikmati minuman hangat dan nyaman di sebuah Kedai teh tua.", + "backgroundSavannaText": "Padang rumput berkabut", + "backgroundSavannaNotes": "Perjalanan melewati padang rumput berkabut.", + "backgrounds122024": "SET 127: Dirilis Desember 2024", + "backgroundFirstSnowForestText": "Salju pertama Di hutan", + "backgroundFirstSnowForestNotes": "menapaki Salju pertama Di hutan.", + "backgrounds012025": "SET 128: Dirilis January 2025", + "backgroundWinterLandscapeWithCabinText": "Pemandangan musim dingin dengan kabin", + "backgroundWinterLandscapeWithCabinNotes": "tetap nyaman di Pemandangan musim dingin dengan kabin.", + "backgrounds032025": "SET 130: Dirilis Maret 2025", + "backgroundMountainSceneWithBlossomsText": "Pemandangan pegunungan dengan bunga-bunga", + "backgroundMountainSceneWithBlossomsNotes": "nikmati pemandangan dan aroma dari pemandangan pegunungan dengan hamparan bunga.", + "backgrounds112024": "SET 126: Dirilis November 2024", + "backgroundCastleHallWithHearthText": "Aula Kastil dengan Perapian", + "backgroundCastleHallWithHearthNotes": "menikmati kehangatan dari Aula Kastil dengan Perapian.", + "backgrounds062025": "SET 135: Dirilis Juni 2025", + "backgroundSummerSeashoreText": "pantai Di musim panas", + "backgroundSummerSeashoreNotes": "melihat deburan ombak di pantai saat musim panas.", + "backgrounds052025": "SET 132: Dirilis Mei 2025", + "backgroundTrailThroughAForestText": "Jalan setapak menembus hutan", + "backgroundTrailThroughAForestNotes": "Berjalan-jalan di Jalan setapak menembus hutan.", + "backgrounds072025": "SET 134: Dirilis Juli 2025", + "backgroundSirensLairText": "Sarang Siren", + "backgroundSirensLairNotes": "Tantangan untuk menyelam ke dalam Sarang Siren." } diff --git a/website/common/locales/id/questscontent.json b/website/common/locales/id/questscontent.json index 0bd67e4853..bdc6bb1be5 100644 --- a/website/common/locales/id/questscontent.json +++ b/website/common/locales/id/questscontent.json @@ -567,7 +567,7 @@ "questPterodactylDropPterodactylEgg": "Pterodaktil (Telur)", "questPterodactylUnlockText": "Dapatkan telur Pterodaktil yang dapat dibeli di Pasar", "questBadgerText": "Berhenti Merengeki Aku!", - "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", + "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", "questBadgerCompletion": "Kamu akhirnya mengusir Luak Perengek dan bergegas ke liangnya. Di ujung terowongan, kamu menemukan timbunan agenda \"Hibernasi\" faeries. Sarang itu ditinggalkan, kecuali tiga telur yang terlihat siap menetas.", "questBadgerBoss": "Sang Luak Perengek", "questBadgerDropBadgerEgg": "Luak (Telur)", diff --git a/website/common/locales/id/settings.json b/website/common/locales/id/settings.json index 3d1ed340ad..dad8717821 100644 --- a/website/common/locales/id/settings.json +++ b/website/common/locales/id/settings.json @@ -55,7 +55,6 @@ "APIToken": "Token API (ini kata sandi - lihat peringatan di atas!)", "showAPIToken": "Perlihatkan Token API", "hideAPIToken": "Sembunyikan Token API", - "APITokenWarning": "Kalau kamu butuh Token API baru (misal kamu tidak sengaja menyebarkannya), email <%= hrefTechAssistanceEmail %> berisi ID Pengguna dan Token-mu yang sekarang. Setelah direset kamu harus logout dari situs dan aplikasi handphone, dan kamu harus memasukkan Token barumu ke tools Habitica lain yang kamu gunakan.", "thirdPartyApps": "Aplikasi Pihak Ketiga", "resetDo": "Lakukan, reset akun!", "resetComplete": "Reset selesai!", diff --git a/website/common/locales/it/achievements.json b/website/common/locales/it/achievements.json index 12b9019131..f6d1a695d8 100644 --- a/website/common/locales/it/achievements.json +++ b/website/common/locales/it/achievements.json @@ -151,7 +151,7 @@ "achievementDinosaurDynasty": "Dinastia dei dinosauri", "achievementDinosaurDynastyText": "Hai schiuso tutti i colori standard degli Animali Domestici Uccelli e Dinosauri: Falco, Gufo, Pappagallo, Pavone, Pinguino, Gallo, Pterodattilo, Tirannosauro, Triceratopo e Velociraptor!", "achievementDinosaurDynastyModalText": "Hai collezionato tutti gli animali domestici Uccelli e Dinosauri!", - "achievementBonelessBoss": "Mostro Senza Ossa", + "achievementBonelessBoss": "Boss Senza Ossa", "achievementBonelessBossText": "Tutti i colori standard degli animali invertebrati sono stati schiusi: Coleottero, farfalla, seppia, nudibranchia, polpo, lumaca e ragno!", "achievementBonelessBossModalText": "Hai raccolto tutti gli animali invertebrati!", "achievementDuneBuddy": "Amico delle dune", diff --git a/website/common/locales/it/backgrounds.json b/website/common/locales/it/backgrounds.json index 6ce3e6e3f0..2273e1bceb 100644 --- a/website/common/locales/it/backgrounds.json +++ b/website/common/locales/it/backgrounds.json @@ -747,7 +747,7 @@ "backgroundSnowyVillageNotes": "Ammira un Villaggio Innevato.", "backgrounds012023": "SET 104: Rilasciato a gennaio 2023", "backgroundRimeIceText": "Brinata Scintillante", - "backgroundRimeIceNotes": "Ammira la Brina Lucente.", + "backgroundRimeIceNotes": "Ammira una Brinata Scintillante.", "backgroundSnowyTempleText": "Templio Innevato", "backgroundSnowyTempleNotes": "Osserva un Tempio Sereno Innevato.", "backgroundWinterLakeWithSwansText": "Lago Invernale con i Cigni", @@ -808,7 +808,7 @@ "backgrounds072023": "SET 110: Rilasciato a Luglio 2023", "backgrounds102023": "SET 113: Rilasciato ad Ottobre 2023", "backgroundBonsaiCollectionNotes": "Ammira una splendida Collezione di Bonsai.", - "backgroundDreamyIslandText": "Isola da Sogno", + "backgroundDreamyIslandText": "Isola da sogno", "backgroundDreamyIslandNotes": "Goditi il panorama su un'Isola da Sogno.", "backgroundRockGardenText": "Giardino Roccioso", "backgroundRockGardenNotes": "Rilassati in un Giardino Roccioso.", @@ -889,5 +889,22 @@ "backgroundContainerGardenText": "Giardino in vaso", "backgroundContainerGardenNotes": "Sporcati le mani con il Giardino in Vaso.", "backgroundCastleHallWithHearthText": "Sala del Castello con Focolare", - "backgroundCastleHallWithHearthNotes": "Immergetevi nel calore di una Sala del Castello con il Focolare." + "backgroundCastleHallWithHearthNotes": "Immergetevi nel calore di una Sala del Castello con il Focolare.", + "backgrounds022025": "SET 129: rilasciato a febbraio 2025", + "backgroundOldFashionedTeaShopText": "Antico Negozio di Tè", + "backgroundOldFashionedTeaShopNotes": "Gustati una piacevole bevanda nell'Antico Negozio di Tè.", + "backgroundWinterLandscapeWithCabinNotes": "Rimani comodo/a nel Paesaggio Invernale con una Baita.", + "backgroundWinterLandscapeWithCabinText": "Paesaggio Invernale con Baita", + "backgrounds032025": "SET 130: rilasciato a marzo 2025", + "backgroundMountainSceneWithBlossomsText": "Scena Montana con Fiori", + "backgrounds0420205": "SET 131: Rilasciato ad Aprile 2025", + "backgroundGardenWithFlowerBedsText": "Giardino con Aiuole Fiorite", + "backgroundGardenWithFlowerBedsNotes": "Goditi le fioriture primaverili in un Giardino con Aiuole Fiorite.", + "backgroundMountainSceneWithBlossomsNotes": "Ammira i panorami e i profumi incantevoli di uno Scenario Montano In Fiore.", + "backgrounds062025": "SET 133: Rilasciato a Giugno 2025", + "backgroundSummerSeashoreText": "Spiaggia Estiva", + "backgroundSummerSeashoreNotes": "Cavalca un'onda su una Spiaggia Estiva.", + "backgrounds052025": "SET 132: Rilasciato a Maggio 2025", + "backgroundTrailThroughAForestText": "Sentiero Attraverso una Foresta", + "backgroundTrailThroughAForestNotes": "Passeggia lungo un Sentiero Attraverso una Foresta." } diff --git a/website/common/locales/it/challenge.json b/website/common/locales/it/challenge.json index 28c6dfea8b..2b7c15e9aa 100644 --- a/website/common/locales/it/challenge.json +++ b/website/common/locales/it/challenge.json @@ -86,7 +86,7 @@ "summaryRequired": "Il riepilogo è richiesto", "summaryTooLong": "Il riassunto è troppo lungo", "descriptionRequired": "La descrizione è richiesta", - "locationRequired": "Location of Challenge is required ('Add to')", + "locationRequired": "La posizione della Sfida è obbligatoria ('Aggiungi a')", "categoiresRequired": "Devono essere selezionate una o più categorie", "viewProgressOf": "Vedi i progressi di", "viewProgress": "Vedi il Progresso", @@ -100,5 +100,13 @@ "messageChallengeFlagOfficial": "Le sfide ufficiali non possono essere segnalate.", "whyReportingChallenge": "Perchè stai segnalando questa sfida?", "whyReportingChallengePlaceholder": "Motivo della segnalazione", - "messageChallengeFlagAlreadyReported": "Hai già segnalato questa sfida." + "messageChallengeFlagAlreadyReported": "Hai già segnalato questa sfida.", + "resetFlagCount": "Reimposta Conteggio Segnalazioni", + "flaggedNotHidden": "Sfida segnalata una volta, non nascosta", + "flaggedAndHidden": "Sfida segnalata e nascosta", + "resetFlags": "Reimposta Segnalazioni", + "cannotClone": "Questa Sfida non può essere clonata perché uno o più giocatori l'hanno segnalata come inappropriata. Un membro dello staff ti contatterà a breve con le istruzioni. Se sono trascorse più di 48 ore e non hai ricevuto loro notizie, invia un'email a admin@habitica.com per assistenza.", + "cannotMakeChallenge": "Non puoi creare Sfide pubbliche perché il tuo account attualmente non dispone dei privilegi di inviare messaggi in chat. Contatta admin@habitica.com per maggiori informazioni.", + "abuseFlagModalBodyChallenge": "Dovresti segnalare una Sfida solo se viola le <%= firstLinkStart %>Linee Guida della Community<%= linkEnd %> e/o i <%= secondLinkStart %>Termini di Servizio di Habitica<%= linkEnd %>. L'invio di una segnalazione falsa costituisce una violazione delle Linee Guida della Community di Habitica.", + "cannotClose": "Questa Sfida non può essere chiusa perché uno o più giocatori l'hanno segnalata come inappropriata. Un membro dello staff ti contatterà a breve con le istruzioni. Se sono trascorse più di 48 ore e non hai ricevuto loro notizie, invia un'email a admin@habitica.com per assistenza." } diff --git a/website/common/locales/it/character.json b/website/common/locales/it/character.json index 761a2f6733..98436ac674 100644 --- a/website/common/locales/it/character.json +++ b/website/common/locales/it/character.json @@ -2,7 +2,7 @@ "communityGuidelinesWarning": "Ricorda che il tuo nome pubblico, la tua foto profilo e la tua descrizione personale devono rispettare le linee guida della community (ad esempio sono vietate parolacce, argomenti per adulti, insulti, ecc.). Se vuoi sapere se ciò che hai scritto è appropriato, non esitare a inviare un'e-mail a <%= hrefBlankCommunityManagerEmail %>!", "profile": "Profilo", "avatar": "Personalizza Avatar", - "editAvatar": "Modifica l'Avatar", + "editAvatar": "Personalizza l'Avatar", "noDescription": "Questo Habitante non ha aggiunto una descrizione.", "noPhoto": "Questo Habitante non ha aggiunto una foto.", "other": "Altro", @@ -189,5 +189,7 @@ "nextReward": "Prossima ricompensa per l'accesso", "titleHaircolor": "Colore dei capelli", "titleHairbase": "Capigliatura", - "customizations": "Personalizzazioni" + "customizations": "Personalizzazioni", + "skins": "Pelli", + "titleFacialHair": "Peli del Volto" } diff --git a/website/common/locales/it/communityguidelines.json b/website/common/locales/it/communityguidelines.json index ffa285fdab..b08ad2c312 100644 --- a/website/common/locales/it/communityguidelines.json +++ b/website/common/locales/it/communityguidelines.json @@ -2,7 +2,7 @@ "tavernCommunityGuidelinesPlaceholder": "Nota amichevole: questa è una chat per utenti di ogni età, quindi per favore assicurati che il tuo linguaggio e i contenuti che pubblichi siano appropriati. Consulta le Linee guida della community nella sezione \"Link utili\" qui a lato se hai qualche domanda.", "lastUpdated": "Ultimo aggiornamento:", "commGuideHeadingWelcome": "Benvenuto ad Habitica!", - "commGuidePara001": "Salute, avventuriero! Benvenuto ad Habitica, la terra della produttività, della vita sana, e occasionalmente di grifoni infuriati.", + "commGuidePara001": "Salve avventuriero! Benvenuto ad Habitica, la terra della produttività, della vita sana, e occasionalmente di grifoni infuriati.", "commGuidePara002": "Per aiutare a mantenere la sicurezza, la felicità e la produttività nella community, abbiamo alcune linee guida per Sfide, profili dei Giocatori e chat, sia pubbliche, sia private. Le abbiamo stilate accuratamente per renderle il più semplici possibile. Per favore, leggile con attenzione prima di interfacciarti con gli altri Utenti.", "commGuidePara003": "Queste regole potrebbero cambiare di tanto in tanto. Quando ci saranno cambiamenti sostanziali nelle regole della community qui elencate, verrai avvertito con un annuncio di Bailey e/o sui nostri social media!", "commGuideHeadingInteractions": "Interazioni su Habitica", @@ -13,68 +13,68 @@ "commGuideList02D": "Tieni presente che gli Habitanti sono di tutte le età e provenienze. Le sfide e i profili dei giocatori non devono menzionare argomenti per adulti, usare parolacce o promuovere contese o conflitti.", "commGuideList02E": "Se un membro dello staff dice che un termine non è permesso in Habitica (anche se si trattasse di un termine di cui non avessi considerato la potenzialità problematica) tale decisione è definitiva. Inoltre, le denigrazioni saranno punite severamente poiché anch'esse sono una violazione dei Termini di Servizio.", "commGuideList02G": "Conformati immediatamente a qualsiasi richiesta di un membro dello Staff. Ciò può includere, ma non si limita a richieste di restrizioni sui tuoi post in un particolare spazio, di modificare il tuo profilo per rimuovere contenuto inadatto, ecc. Non discutere con lo Staff. Se hai dubbi o commenti sulle azioni dello Staff, invia un'email a admin@habitica.com per contattare il nostro responsabile per la community.", - "commGuideList02J": "Non spammare. Per spam s'intende (ma non solo): postare lo stesso commento o domanda in posti diversi, postare link senza contesto o alcuna spiegazione, postare messaggi senza senso, pubblicizzare ripetutamente messaggi di reclutamento per Gilde, Squadre o Sfide, oppure postare molti messaggi consecutivamente. Se cliccare un link provveduto da te, ti porta vantaggi da parte di chi clicca, dovrai indicarlo nel testo del tuo messaggio, altrimenti sarà considerato spam. Lo Staff può decidere cosa costituisce essere spam a propria discrezione.", - "commGuideList02K": "Evita di pubblicare grossi titoli negli spazi pubblici di chat, in particolare nella Taverna. Nella stessa maniera delle MAIUSCOLE, sembra tu stia urlando, e può interferire con l'atmosfera confortevole.", - "commGuideList02L": "Scoraggiamo fortemente lo scambio di informazioni personali nelle chat pubbliche, in particolare quelle che possono essere usate per identificarti.. Le informazioni di questo tipo possono essere (ma non solo): il tuo indirizzo fisico, il tuo indirizzo email e la tua Chiave API/password. Se ti vengono chieste informazioni personali in una chat della Squadra o tramite messaggio privato, ti consigliamo caldamente di non rispondere ed informare lo Staff segnalando il messaggio, oppure contattando admin@habitica.com ed allegando gli screenshot dei messaggi nel caso in cui sia necessario approfondire il contesto.", + "commGuideList02J": "Non spammare. Per spam s'intende (ma non solo): mandare più messaggi privati non richiesti, inviare messaggi insensati, inviare molteplici messaggi promozionali riguardo a una Squadra o una Sfida, o creare più Sfide simili o di bassa qualità di fila. Lo Staff può determinare a sua discrezione cosa è considerato spam.", + "commGuideList02K": "Non inviare link senza spiegazione o contesto. Se il fatto che un giocatore clicchi sul link ti beneficia in alcun modo devi esplicitarlo. Questa regola si applica sia ai messaggi che alle Sfide.", + "commGuideList02L": "Scoraggiamo fortemente lo scambio di informazioni personali nelle chat pubbliche, in particolare quelle che possono essere usate per identificarti.. Le informazioni di questo tipo possono essere (ma non solo): il tuo indirizzo fisico, il tuo indirizzo email e la tua Chiave API/password. Se ti vengono chieste informazioni personali in una chat della Squadra o tramite messaggio privato, ti consigliamo caldamente di non rispondere ed informare lo Staff segnalando il messaggio, oppure contattando admin@habitica.com ed allegando gli screenshot dei messaggi nel caso in cui sia necessario approfondire il contesto.", "commGuidePara037": "Nessuna Squadra o Gruppo dev'essere creato allo scopo di attaccare qualsiasi gruppo o individuo. Combatti le cattive abitudini, non i tuoi compagni di avventura !", "commGuideHeadingInfractionsEtc": "Infrazioni, sanzioni e riabilitazione", "commGuideHeadingInfractions": "Infrazioni", - "commGuidePara050": "La stragrande maggioranza degli Habitanti si assistono l'un l'altro, sono rispettosi e fanno del proprio meglio per rendere la community allegra e piacevole. Tuttavia, molto raramente, un'azione di un Habitante potrebbe violare una delle linee guida sopra descritte. Quando succede, lo Staff compie qualunque azione ritengano necessaria per mantenere Habitica sicura e piacevole per tutti.", + "commGuidePara050": "La stragrande maggioranza degli Habitanti si assistono l'un l'altro, sono rispettosi e fanno del proprio meglio per rendere l'atmosfera allegra e piacevole. Tuttavia, molto raramente, un'azione di un Habitante potrebbe violare una delle Linee Guida sopra descritte. Quando succede, lo Staff compie qualunque azione ritenga necessaria per mantenere Habitica sicura e piacevole per tutti.", "commGuidePara051": "Ci sono diverse infrazioni, e sono gestite a seconda della gravità. Queste liste non sono esaustive, e lo Staff può prendere decisioni sugli argomenti non affrontati qui a loro discrezione. Lo Staff considererà il contesto quando valuteranno le infrazioni.", "commGuideHeadingSevereInfractions": "Infrazioni gravi", "commGuidePara052": "Le infrazioni gravi danneggiano la serenità della community di Habitica e degli utenti, e hanno quindi come risultato delle sanzioni gravi.", "commGuidePara053": "Questa è una lista di infrazioni gravi. Non è una lista esaustiva.", - "commGuideList05A": "Violazione dei Termini e condizioni d'uso", + "commGuideList05A": "Altre violazioni dei Termini e Condizioni qui non specificati", "commGuideList05B": "Incitamento all'odio, molestie/stalking, cyber-bullismo, pubblicazione di contenuti provocatori o irritanti nei confronti di altri utenti", "commGuideList05C": "Violazione della prova (utenti in prova)", - "commGuideList05D": "", + "commGuideList05D": "Impersonare lo Staff - include sostenere che spazi creati dai giocatori e non affiliati ad Habitica siano ufficiali e/o moderati da Habitica o dal suo Staff", "commGuideList05E": "Ripetere infrazioni lievi", - "commGuideList05F": "Creare un secondo account per evitare i provvedimenti (per esempio, creare un nuovo account per chattare dopo che sono stati revocati i privilegi di chat)", + "commGuideList05F": "Creare un secondo account per evitare i provvedimenti", "commGuideList05G": "Ingannare intenzionalmente lo Staff in modo da evitare sanzioni o mettere nei guai un altro utente", "commGuideHeadingModerateInfractions": "Infrazioni lievi", - "commGuidePara054": "Le infrazioni medie non mettono a rischio la nostra community, ma la rendono spiacevole. Queste infrazioni avranno sanzioni medie. Quando avvengono insieme ad altre infrazioni, le conseguenze potrebbero diventare più gravi.", + "commGuidePara054": "Queste infrazioni avranno sanzioni medie. Quando avvengono insieme ad altre infrazioni, le conseguenze potrebbero diventare più gravi.", "commGuidePara055": "Qui ci sono alcuni esempi di infrazioni lievi. Non è una lista esaustiva.", - "commGuideList06A": "Ignorare, mancare di rispetto o discutere con lo staff. Include lamentarsi pubblicamente dello staff o altri utenti, glorificare pubblicamente o difendere utenti bannati, o discutere se l'azione dello staff fosse appropriata o no. Se si è preoccupato/a per una o più delle regole o per il comportamento di un membro dello staff, si prega di contattarci tramite email (admin@habitica.com).", - "commGuideList06C": "Segnalare intenzionalmente pubblicazioni innocenti.", + "commGuideList06A": "Ignorare, mancare di rispetto o discutere con lo Staff. Se si è preoccupati per una o più regole o per il comportamento di un membro dello staff, si prega di contattarci tramite admin@habitica.com.", + "commGuideList06C": "Segnalare intenzionalmente Sfide, profili o messaggi innocenti.", "commGuideList06E": "Commettere Ripetutatemente Infrazioni Minori", "commGuideHeadingMinorInfractions": "Infrazioni minori", - "commGuidePara056": "Infrazioni lievi, anche se scoraggiate, hanno comunque conseguenze lievi. Se continuano a verificarsi, potranno essere trattate con maggiore severità.", + "commGuidePara056": "Infrazioni lievi, anche se scoraggiate, hanno comunque conseguenze lievi. Se continuano a verificarsi, potranno essere trattate con maggiore severità. Infrazioni lievi sono tipicamente la violazione di queste Linee Guida per la prima volta, ma possono includere anche altre circostanze.", "commGuidePara057": "Questa è una lista di infrazioni minori. Non è una lista esaustiva.", "commGuideList07A": "Prima violazione delle linee guida per gli spazi pubblici", - "commGuideList07B": "Qualsiasi dichiarazione che suscita un \"Per Favore, No\". Quando ti è chiesto di non fare qualcosa pubblicamente, questa può essere essa stessa una conseguenza. Se i Moderatori devono dare molte di queste correzioni alla stessa persona, potrebbe contare come una infrazione più grave", + "commGuideList07B": "Qualsiasi dichiarazione che suscita un \"Per Favore, No\" da un membro dello Staff. Quando ti è chiesto di non fare qualcosa pubblicamente, questa può essere essa stessa una conseguenza. Se lo Staff deve dare molte di queste correzioni alla stessa persona, potrebbe contare come un'infrazione più grave", "commGuidePara057A": "Alcuni messaggi possono essere nascosti perché contengono informazioni sensibili o possono dare ad altri utenti l'idea sbagliata. In genere questo non conta come infrazione, in particolare non la prima volta che accade!", "commGuideHeadingConsequences": "Sanzioni e conseguenze", - "commGuidePara059": " Similmente, ogni infrazione ha una conseguenza diretta. Alcuni esempi di conseguenze sono elencati di seguito.", + "commGuidePara059": "Infrazioni della Comunità hanno conseguenze dirette. Alcuni esempi di conseguenze sono elencati di seguito.", "commGuideHeadingSevereConsequences": "Esempi di sanzioni gravi", - "commGuideList09A": "Ban dell'account (vedi sopra)", - "commGuideList09C": "Blocco permanente (\"freezing\") della progressione del livello di sostenitore", + "commGuideList09A": "Ban dell'account", + "commGuideList09C": "Blocco permanente della progressione attraverso i Livelli Sostenitore", "commGuideHeadingModerateConsequences": "Esempio di sanzioni medie", - "commGuideList10D": "Blocco temporaneo (\"congelamento\") della progressione del grado di sostenitore", + "commGuideList10D": "Blocco temporaneo della progressione attraverso i Livelli Sostenitore", "commGuideHeadingMinorConsequences": "Esempi di sanzioni lievi", - "commGuideList11A": "Promemoria delle linee guida per gli spazi pubblici", + "commGuideList11A": "Promemoria delle Linee Guida", "commGuideList11B": "Avvertimenti", "commGuideList11C": "Richieste", - "commGuideList11D": "Eliminazioni (moderatori/staff possono eliminare contenuti problematici)", - "commGuideList11E": "Modifiche (moderatori/staff possono modificare contenuti problematici)", + "commGuideList11D": "Eliminazione dei contenuti problematici da parte dello Staff", + "commGuideList11E": "Modifiche di contenuti problematici da parte dello Staff", "commGuideHeadingRestoration": "Riabilitazione", - "commGuidePara061": "Habitica è un regno dedicato al miglioramento personale, e crediamo nelle seconde possibilità. Se tu hai commesso una infrazione e hai ricevuto una conseguenza, vedila come una possibilità di evaluare le tue azioni e di cercare di diventare un miglior membro della comunità.", - "commGuidePara062": "L'annuncio, messaggio, e/o mail che ricevi con la spiegazione delle conseguenze delle tue azioni è una buona fonte di informazioni. Coopera con qualunque restrizione sia stata imposta, e impegnati per raggiungere i requisiti per avere le sanzioni revocate.", - "commGuidePara063": "Se non capisci la tua sanzione, o la natura della tua infrazione, chiedi aiuto a Staff/Moderatori, così puoi evitare di commettere infrazioni in futuro. Se pensi che una decisione in particolare sia ingiusta, puoi contattare lo staff per discuterne a admin@habitica.com.", + "commGuidePara061": "Habitica è dedicata al miglioramento personale, e crediamo nelle seconde possibilità. Se tu hai commesso una infrazione e hai ricevuto una conseguenza, vedila come una possibilità di rivalutare le tue azioni e cercare di diventare un membro migliore della comunità.", + "commGuidePara062": "Se vuoi fare una domanda riguardo alla tua infrazione o alle sue conseguenze, scusarti, o chiedere il reinserimento, puoi contattarci tramite admin@habitica.com con il tuo User ID o @username. La responsabilità di contattarci è tua.", + "commGuidePara063": "Se non capisci la tua sanzione, o la natura della tua infrazione, o se hai altre domande correlate, puoi contattare lo staff per discuterne a admin@habitica.com. Coopera con le restrizioni imposte e sforzati di soddisfare i requisiti per ottenere la rimozione delle penalità.", "commGuideHeadingMeet": "Incontra lo Staff", - "commGuidePara007": "I membri dello Staff hanno etichette viola contrassegnate da una corona. Il loro titolo è \"Eroico\".", + "commGuidePara007": "Lo Staff di Habitica mantiene l'app e il sito funzionanti, e possono agire come moderatori delle chat. Hanno etichette viola contrassegnate da una corona. Il loro titolo è \"Eroico\".", "commGuidePara009": "L'attuale gruppo dello staff è composto da (partendo da sinistra verso destra):", "commGuideAKA": "<%= realName %> alias <%= habitName %>", "commGuideOnGitHub": "<%= gitHubName %> su GitHub", "commGuidePara011b": "su GitHub/Fandom", "commGuidePara011c": "sulla Wiki", "commGuidePara011d": "su GitHub", - "commGuidePara013": "In una comunità grande come Habitica, utenti vanno e vengono, e a volte membri dello staff e moderatori hanno bisogno di posare il loro nobile mantello e rilassarsi. Questi sono Membri dello Staff e Moderatori Emeriti. Non agiscono più con il potere di un membro dello Staff o Moderatore, ma vorremmo onorare il loro lavoro!", + "commGuidePara013": "In una comunità grande come Habitica, utenti vanno e vengono, e a volte membri dello Staff e moderatori hanno bisogno di posare il loro nobile mantello e rilassarsi. Questi sono Membri dello Staff e Moderatori Emeriti. Non agiscono più con il potere di un membro dello Staff o Moderatore, ma vorremmo ancora onorare il loro lavoro!", "commGuidePara014": "Staff e Moderatori emeriti:", "commGuideHeadingFinal": "La sezione finale", - "commGuidePara067": "Questo è quello che devi sapere, da bravo Habitante - le linee guida della comunità! Asciugati il sudore dalla fronte e prendi un po' di punti esperienza per averla letta tutta. Se hai dubbi o domande riguardo leLinee Guida della Comunità, per favore scrivici una mail a admin@habitica.com e saremo felici di chiarire ogni cosa.", + "commGuidePara067": "Questo è quello che devi sapere, coraggioso Habitante - le Linee Guida della comunità! Asciugati il sudore dalla fronte e prendi un po' di punti esperienza per averla letta tutta. Se hai dubbi o domande riguardo queste Linee Guida della Comunità, per favore contattaci tramite admin@habitica.com e saremo felici di chiarire ogni cosa.", "commGuidePara068": "Ora va', prode avventuriero, e sconfiggi qualche Attività Giornaliera!", "commGuideHeadingLinks": "Risorse utili (in inglese)", - "commGuideLink02": "La Wiki (in ingese): la più grande fonte di informazioni su Habitica.", + "commGuideLink02": "La Wiki (in inglese): la più grande fonte di informazioni su Habitica. Questo spazio non è ufficiale, è gestito da Fandom e mantenuto dai giocatori.", "commGuideLink03": "GitHub: per aiutare con il codice di programmazione!", "commGuideLink04": "Modulo feedback: per richieste di funzionalità e caratteristiche del sito.", "commGuidePara069": "I seguenti talentuosi artisti hanno contribuito a queste illustrazioni:", @@ -87,5 +87,7 @@ "commGuideList02I": "I nomi delle Sfide devono essere appropriati per tutti gli spazi, poiché appariranno nel profilo pubblico del vincitore. Tieni presente questo quando crei le Sfide, poiché potremmo essere costretti a modificare il record sul loro profilo se c'è una segnalazione.", "commGuideList02O": "Le Squadre possono creare le loro regole per le chat in base al comfort e alle preferenze dei membri. Tuttavia, gli amministratori non possono far rispettare le regole delle chat in questi spazi privati, a meno che non si verifichi una violazione dei Termini di Servizio, incluse le molestie. Se qualcuno della tua Squadra sta causando dei problemi, incoraggiamo il leader della Squadra a rimuoverlo.", "commGuideList02P": "Noi scoraggiamo l'invio di messaggi privati non richiesti. Se ricevi un messaggio indesiderato che ti mette a disagio o che viola queste Linee guida o i Termini di Servizio, ti preghiamo di bloccare l'utente che lo ha inviato e di segnalarlo all'attenzione dello Staff.", - "commGuideList02Q": "Non cercare di aggirare un blocco . Se qualcuno ti ha bloccato per impedirti di inviargli dei messaggi privati, non contattarlo altrove per chiedergli di rimuovere il blocco." + "commGuideList02Q": "Non cercare di aggirare un blocco . Se qualcuno ti ha bloccato per impedirti di inviargli dei messaggi privati, non contattarlo altrove per chiedergli di rimuovere il blocco.", + "commGuideList09E": "Rimozione permanente della possibilità di mandare messaggi privati o di apparire nella ricerca di membri della Squadra", + "commGuideList10G": "Temporanea rimozione della possibilità di mandare messaggi privati o di apparire nella ricerca di membri della Squadra" } diff --git a/website/common/locales/it/content.json b/website/common/locales/it/content.json index 454ac6a6db..f9dbb2c429 100644 --- a/website/common/locales/it/content.json +++ b/website/common/locales/it/content.json @@ -119,8 +119,8 @@ "questEggTreelingText": "Alberello", "questEggTreelingMountText": "Alberello", "questEggTreelingAdjective": "un frondoso", - "questEggAxolotlText": "Axolotl", - "questEggAxolotlMountText": "Axolotl", + "questEggAxolotlText": "Assolotto", + "questEggAxolotlMountText": "Assolotto", "questEggAxolotlAdjective": "un piccolo", "questEggTurtleText": "Tartaruga Marina", "questEggTurtleMountText": "Tartaruga Marina Gigante", @@ -211,7 +211,7 @@ "hatchingPotionGlow": "Fosforescente", "hatchingPotionFrost": "Gelo", "hatchingPotionIcySnow": "Neve Ghiacciata", - "hatchingPotionNotes": "Versa questa pozione su un uovo, e nascerà un animale <%= potText(locale) %>.", + "hatchingPotionNotes": "Versa questa pozione su un uovo, e nascerà un Animale Domestico <%= potText(locale) %>.", "foodMeat": "Carne", "foodMeatThe": "la Carne", "foodMeatA": "Carne", @@ -354,7 +354,7 @@ "foodPieBaseA": "una Fetta di Torta di Mele Classica", "foodPieBaseThe": "la Torta di Mele Classica", "foodPieBase": "Torta di Mele Classica", - "premiumPotionUnlimitedNotes": "Non utilizzabile su uova di animali ottenute dalle missioni.", + "premiumPotionUnlimitedNotes": "Non utilizzabile su uova di Animali Domestici ottenute dalle Missioni.", "hatchingPotionDessert": "Dolcetto", "hatchingPotionBirchBark": "Corteccia di Betulla", "hatchingPotionRuby": "Rubino", @@ -408,5 +408,7 @@ "hatchingPotionGingerbread": "Pan di Zenzero", "hatchingPotionOpal": "Opale", "hatchingPotionPinkMarble": "Marmo Rosa", - "hatchingPotionTeaShop": "Negozio di Tè" + "hatchingPotionTeaShop": "Negozio di Tè", + "wackyPotionNotes": "Versalo su un uovo, e si schiuderà uno Strano <%= potText(locale) %> Animale Domestico.", + "wackyPotionAddlNotes": "Non può essere trasformato in Cavalcature né usato su uova di animali domestici ottenuti attraverso una Missione." } diff --git a/website/common/locales/it/contrib.json b/website/common/locales/it/contrib.json index 5068d5249a..9e58999fd2 100644 --- a/website/common/locales/it/contrib.json +++ b/website/common/locales/it/contrib.json @@ -40,10 +40,10 @@ "backerTier": "Grado sostenitore Kickstarter", "playerTiers": "Gradi giocatore", "tier": "Grado", - "conRewardsURL": "https://habitica.fandom.com/wiki/Contributor_Rewards", + "conRewardsURL": "https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica#contributor-tier-rewards", "surveysSingle": "Ha aiutato Habitica a crescere, compilando un questionario o aiutando in un test. Grazie!", "surveysMultiple": "Ha aiutato Habitica a crescere in <%= count %> occasioni, compilando un questionario o aiutando in una fase di test importante. Grazie!", "blurbHallPatrons": "Questo è il salone dei Mecenati, nel quale vengono onorati i nobili avventurieri che hanno sostenuto la nostra campagna su Kickstarter. Li ringraziamo per aver aiutato a far nascere Habitica!", - "blurbHallContributors": "Questo è il Salone dei Collaboratori, dove coloro che hanno contribuito ad Habitica sono onorati. Che sia attraverso programmazione, arte, musica, scrittura, o anche solo disponibilità, hanno guadagnato gemme, equipaggiamento esclusivo, e titoli prestigiosi. Anche tu puoi contribuire ad Habitica! Scopri di più qui. ", + "blurbHallContributors": "Questo è il Salone dei Collaboratori, dove coloro che hanno contribuito ad Habitica sono onorati. Che sia attraverso programmazione, arte, musica, scrittura, o anche solo disponibilità, hanno guadagnato Gemme, Equipaggiamento esclusivo, e titoli prestigiosi. Anche tu puoi contribuire ad Habitica! Scopri di più qui.", "noPrivAccess": "Non disponi dei privilegi richiesti." } diff --git a/website/common/locales/it/faq.json b/website/common/locales/it/faq.json index 05d4b33f65..6d0b356cc4 100644 --- a/website/common/locales/it/faq.json +++ b/website/common/locales/it/faq.json @@ -21,7 +21,7 @@ "webFaqAnswer32": "Tutti i giocatori iniziano con la classe Guerriero fino al raggiungimento del livello 10. Una volta raggiunto il livello 10, ti verrà data la possibilità di scegliere tra selezionare una nuova classe o continuare come Guerriero.\n\nOgni classe ha Equipaggiamento e Abilità diverse. Se non vuoi scegliere una classe, puoi selezionare \"Non scegliere\". Se decidi di non sceglierne una, puoi sempre abilitare il Sistema di Classe dalle Impostazioni in seguito.\n\nSe desideri cambiare classe dopo il livello 10, puoi farlo usando la Sfera della Rinascita. La Sfera della Rinascita diventa disponibile nel Mercato per 6 Gemme al livello 50 o gratuitamente al livello 100.\n\nIn alternativa, puoi cambiare classe in qualsiasi momento dalle Impostazioni per 3 Gemme. Questo non azzererà il tuo livello come la Sfera della Rinascita, ma ti consentirà di riassegnare i punti abilità che hai accumulato mentre salivi di livello per adattarli alla tua nuova classe.", "faqQuestion33": "Cos'è la barra blu che appare dopo il livello 10?", "webFaqAnswer28": "Si! Il bottone \"Pausa Danno\" si può trovare nelle Impostazioni. Premerlo impedirà che tu perda HP per le Attività giornaliere mancate. Ciò è utile quando sei in vacanza, hai bisogno di riposo, o per qualsiasi altra ragione tu abbia bisogno di una pausa. Se stai partecipando ad una Missione, i tuoi progressi in attesa saranno messi in pausa, ma subirai ancora i danni derivanti dalle Attività giornaliere mancate della tua Squadra.\n\nPer mettere in pausa delle Attività giornaliere specifiche, puoi modificare la pianificazione e fissarla ogni 0 giorni fino a quando non ti sentirai pronto/a a ricominciarla.", - "webFaqAnswer33": "Dopo aver sbloccato le Classi, sblocchi anche Abilità che richiedono Mana per essere utilizzate. Il Mana dipende dalla statistica INT e può essere modificata attraverso Abilità e Equipaggiamento.", + "webFaqAnswer33": "Dopo aver sbloccato il sistema delle Classi, sblocchi anche Abilità che richiedono Mana per essere utilizzate. Il Mana dipende dalla statistica INT e può essere modificata attraverso Abilità e Equipaggiamento", "faqQuestion34": "Che tipo di cibo piace al mio animale domestico?", "webFaqAnswer34": "Agli animali domestici piace il cibo che corrisponde al proprio colore. Gli animali base fanno eccezione, ma tutti a tutti gli animali basi piace lo stesso oggetto. Qui sotto puoi trovare la lista dei cibi specifici che piacciono a ciascun animale:\n\n* Agli animali base piace la carne\n* Agli animali bianchi piace il latte\n* Agli animal del deserto piacciono le patate\n* Agli animali rossi piacciono le fragole\n* Agli animali ombra piace la cioccolata\n* Agli animali scheletro piacciono i pesci\n* Agli animali zombie piace la carne marcia\n* Agli animali dello zucchero filato rosa piace lo zucchero filato rosa\n* Agli animali dello zucchero filato blu piace lo zucchero filato blu\n* Agli animali dorati piace il miele", "faqQuestion35": "Ho dato da mangiare al mio animale domestico ed è scomparso! Cos'è successo?", @@ -41,5 +41,32 @@ "faqQuestion42": "Cosa posso fare per aumentare il mio senso di responsabilità?", "webFaqAnswer42": "Uno dei modi migliori per motivarti e rafforzare la tua responsabilità nel completare le tue attività è unirti a una Squadra! Collaborare con altri giocatori di Habitica è un ottimo modo per completare Missioni e ottenere Animali ed Equipaggiamento, ricevere potenziamenti dalle abilità dei compagni di squadra, e aumentare la tua motivazione.\n\nUn altro modo è partecipare a una Sfida. Le Sfide creano alcune attività relative a un obiettivo specifico direttamente nella tua lista! Le Sfide aggiungono anche un elemento di competizione contro gli altri giocatori di Habitica, che dà una spinta alla tua motivazione attraverso il premio in Gemme. Ci sono Sfide ufficiali create dal Team di Habitica così come Sfide create da altri giocatori.", "faqQuestion43": "Come posso partecipare a una Missione?", - "webFaqAnswer43": "Per iniziare una Missione devi essere parte di una Squadra. Le Squadre possono essere avventure in solitaria in cui affronti le missioni da solo, oppure puoi invitare altri giocatori di Habitica per concludere le missioni più velocemente!\n\nScegli una Missione dal tuo inventario selezionando \"Inizia Missione\" da dentro la tua Squadra. Completa le tua attività come al solito per progredire nella Missione! Se stai affrontando una Missione Boss accumulerai danni contro un mostro, oppure avrai la possibilità di trovare oggetti se stai affrontando una Missione di Raccolta. Tutti i progressi in sospeso vengono applicati il giorno successivo.\n\nQuando avrai causato abbastanza danni o raccolto tutti gli oggetti, la Missione sarà completata e riceverai le tue ricompense!" + "webFaqAnswer43": "Per iniziare una Missione devi essere parte di una Squadra. Le Squadre possono essere avventure in solitaria in cui affronti le missioni da solo, oppure puoi invitare altri giocatori di Habitica per concludere le missioni più velocemente!\n\nScegli una Missione dal tuo inventario selezionando \"Inizia Missione\" da dentro la tua Squadra. Completa le tua attività come al solito per progredire nella Missione! Se stai affrontando una Missione Boss accumulerai danni contro un mostro, oppure avrai la possibilità di trovare oggetti se stai affrontando una Missione di Raccolta. Tutti i progressi in sospeso vengono applicati il giorno successivo.\n\nQuando avrai causato abbastanza danni o raccolto tutti gli oggetti, la Missione sarà completata e riceverai le tue ricompense!", + "faqQuestion44": "Come posso rimuovere le Attività di una Sfida?", + "webFaqAnswer44": "Dovrai abbandonare la Sfida o attendere che la Sfida venga chiusa per cancellare le attività associate. L'icona di un megafono rosso significa the la Sfida è stata chiusa mentre un megafono grigio significa che la Sfida è ancora in corso.\n\nPer cancellare attività di una Sfida dall'app **Android**:\n1. Tocca l'attività appartenente alla Sfida.\n2. Tocca su \"Cancella\" nell'angolo in alto a destra dello schermo.\n3. Scegli i rimuovere le attività della Sfida dalla tua lista delle attività.\n\nPer cancellare attività di una sfida dall'app **iOS**:\n1. Trova l'attività Sfida che desideri cancellare e cerca l'icona del megafono.\n2. Se l'icona del megafono è rossa, tocca sull'attività e seleziona \"Cancella\" dal fondo.\n3. Se l'icona del megafono è grigia, avrai bisogno di trovare la Sfida e abbandonarla per rimuovere l'attività.\n\nPer cancellare attività di una sfida dalla **pagina web**:\n1. Trova l'attività Sfida che desideri cancellare e cerca l'icona del megafono.\n2. Se l'icona del megafono è rossa, cliccala e poi scegli di rimuovere le attività dalla tua lista delle attività.\n3. Se l'icona del megafono è grigia, avrai bisogno di trovare la Sfida e abbandonarla per rimuovere l'attività.", + "faqQuestion45": "Il mio Avatar si è trasformato in un pupazzo di neve, in una stella marina, un fiore o un fantasma. Come faccio a tornare come prima?", + "webFaqAnswer45": "Uno dei membri della tua Squadra ha usato un oggetto di trasformazione del Negozio Stagionale su di te! Il tuo Avatar tornerà normale il giorno successivo. Se vuoi rimuovere la trasformazione anticipatamente, puoi acquistare un antidoto (Sale, Sabbia, Rimuovi-petali, o Pozione Opaca) dalle Ricompense.", + "faqQuestion46": "Come posso segnalare un bug?", + "webFaqAnswer46": "Se pensi di aver riscontrato un bug, per favore informaci!\n\nPer segnalare un bug nell'app mobile:\n*Dal menù, seleziona Aiuto & FAQ, poi seleziona \"Aiuto\" e scorri fino a \"Segnala un Bug\"\n\nPer segnalare un bug da sito web:\n*Dal menù Aiuto seleziona \"Segnala un Bug\"", + "faqQuestion47": "Posso vedere i dati su come stanno andando le mie attività e abitudini?", + "faqQuestion48": "Posso giocare ad Habitica in compagnia?", + "webFaqAnswer48": "Sì, attraverso le Squadre! Puoi creare la tua Squadra o entrare in una esistente. Fare squadra con altri giocatori di Habitica è un ottimo modo per affrontare le Missioni, ricevere potenziamenti dalle abilità dei compagni di squadra e aumentare la tua motivazione grazie a una maggiore responsabilizzazione.", + "faqQuestion49": "Come posso trovare una Squadra se non ne faccio già parte?", + "webFaqAnswer49": "Se vuoi provare Habitica in compagnia ma non conosci altri giocatori, la soluzione migliore è cercare una Squadra! Se conosci già altri giocatori che hanno una Squadra, puoi condividere con loro il tuo @nome_utente per essere invitato. In alternativa, puoi creare una nuova Squadra e invitarli usando il loro @nome_utente o indirizzo email.\n\nPer creare o cercare una Squadra, seleziona \"Squadra\" nel menu di navigazione, e scegli l'opzione che fa per te.", + "webFaqAnswer47": "Al momento, Habitica non ha una rappresentazione visiva dei dati delle tue attività nel tempo. Tuttavia, sul sito web di Habitica, puoi esportare i dati delle tue attività dalla scheda Dati del sito nella sezione Impostazioni.", + "faqQuestion50": "Come funziona la ricerca di una Squadra?", + "webFaqAnswer50": "Dopo aver selezionato \"Cerca una Squadra\", sarai aggiunto a un elenco di giocatori che desiderano unirsi a una Squadra. I leader delle Squadre possono visualizzare questo elenco e inviare inviti. Una volta ricevuto un invito, puoi accettarlo dalle tue notifiche per unirti alla Squadra che preferisci!\n\nPotresti ricevere più inviti a Squadre diverse. Tuttavia, puoi essere membro di una sola Squadra alla volta.", + "faqQuestion51": "Per quanto tempo posso cercare una Squadra dopo essermi unito all'elenco?", + "webFaqAnswer51": "Rimarrai nell'elenco finché non accetterai un invito a una Squadra o non effettuerai l'accesso per 7 giorni, a seconda di quale evento si verifica per primo. Se effettui l'accesso dopo 7 giorni di inattività, ti aggiungeremo automaticamente di nuovo all'elenco, a condizione che tu non abbia un invito in sospeso.", + "faqQuestion52": "Posso smettere di cercare una Squadra?", + "faqQuestion53": "Ho una Squadra, come trovo altri membri?", + "webFaqAnswer53": "Se stai usando il sito web di Habitica, seleziona \"Trova Membri\" dal menu a tendina \"Squadra\". Se stai usando l'app Android, tocca \"Trova Membri\" sopra l'elenco dei membri della tua Squadra. Questo mostrerà un elenco di giocatori che stanno attivamente cercando una Squadra e possono essere invitati a unirsi.\n\nPer aiutarti a trovare un buon abbinamento per la tua Squadra, vedrai alcune informazioni come la lingua, la classe, il livello e quanti giorni hanno usato Habitica. Se desideri chattare con qualcuno prima di inviare un invito, puoi visualizzare il loro profilo e inviare un messaggio.", + "webFaqAnswer52": "Se non desideri più trovare una Squadra, puoi interrompere la ricerca in qualsiasi momento.\n\nPer interrompere la ricerca di una Compagnia sulle app per dispositivi mobili\n * Dal menu, seleziona \"Squadra\" e tocca \"Abbandona\" nella parte inferiore dello schermo.\n\nPer interrompere la ricerca di una Squadra dal sito web di Habitica\n * Seleziona \"Squadra\" dalla barra di navigazione e clicca su \"Abbandona\" nel pop-up.", + "faqQuestion54": "Quanti membri posso invitare alla mia Squadra?", + "webFaqAnswer54": "Le Squadre hanno un limite massimo di 30 membri e un minimo di 1 membro. Gli inviti in sospeso contano ai fini del numero di membri. Ad esempio, 29 membri e 1 invito in sospeso conterebbero come 30 membri. Per eliminare un invito in sospeso, il giocatore invitato deve accettare o rifiutare, oppure il leader della Squadra deve annullare l'invito.", + "faqQuestion55": "Posso invitare qualcuno che già conosco?", + "parties": "Squadre", + "webFaqAnswer55": "Sì! Se hai già il nome utente o l'indirizzo email di un giocatore di Habitica, puoi invitarlo a unirsi al tuo Gruppo. Ecco come inviare un invito sulle diverse piattaforme:\n\nPer invitare qualcuno dalle app mobili:\n1. Dal menu, seleziona \"Gruppo\" e scorri verso il basso fino alla sezione Membri\n2. Tocca \"Trova membri\", poi passa alla scheda \"Tramite invito\"\n3. Inserisci i nomi utente o gli indirizzi email dei giocatori che vuoi invitare e clicca su \"Invia invito\"\n\nPer invitare qualcuno dal sito web:\n1. Vai al tuo Gruppo e clicca su \"Invita al gruppo\"\n2. Inserisci i nomi utente o gli indirizzi email dei giocatori che vuoi invitare e clicca su \"Invia inviti\"", + "faqQuestion56": "Come posso annullare un invito in sospeso al mio Gruppo?", + "webFaqAnswer56": "Per annullare un invito in sospeso nelle app mobili:\n 1. Quando visualizzi la tua Squadra, scorri fino in fondo all'elenco dei Membri.\n 2. Trova il giocatore di cui vuoi annullare l'invito e tocca il pulsante \"Annulla invito\".\n\nPer annullare un invito in sospeso sul sito web:\n 1. Vai all'elenco dei membri della tua Squadra e passa alla scheda \"Inviti\".\n 2. Passa il mouse sopra il nome del giocatore di cui vuoi annullare l'invito\n 3. Clicca sui tre puntini e seleziona \"Annulla invito\"." } diff --git a/website/common/locales/it/front.json b/website/common/locales/it/front.json index b7d8c0ab3d..9d5fd35695 100644 --- a/website/common/locales/it/front.json +++ b/website/common/locales/it/front.json @@ -25,32 +25,32 @@ "invalidEmail": "Per resettare la password è necessario un indirizzo email valido.", "login": "Accedi", "logout": "Esci", - "marketing1Header": "Migliora le tue abitudini giocando", - "marketing1Lead1Title": "La tua vita, un gioco di ruolo", + "marketing1Header": "Migliora le tue abitudini un livello alla volta!", + "marketing1Lead1Title": "Rendi la tua vita un gioco", "marketing1Lead1": "Habitica è un videogioco il cui obiettivo è aiutarti a migliorare le tue abitudini nella vita reale. Rende le tue giornate più stimolanti trasformando tutti i tuoi impegni (Abitudini, Attività Giornaliere, Cose da Fare) in piccoli mostri che devi sconfiggere. Più diventi bravo in questo, maggiori saranno i tuoi progressi nel gioco. Se trascuri qualcosa nella vita reale, il tuo personaggio ne risente nel gioco.", "marketing1Lead2Title": "Ottieni oggetti straordinari", "marketing1Lead2": "Migliora le tue abitudini per migliorare il tuo avatar. Mostra gli oggetti che hai ottenuto!", - "marketing1Lead3Title": "Trova premi casuali", + "marketing1Lead3Title": "Ricevi premi per il tuo impegno", "marketing1Lead3": "Certe persone sono motivate dall'azzardo: un sistema chiamato \"ricompense stocastiche\". Con Habitica è possibile ogni tipo di rafforzamento e di punizione: positivi, negativi, prevedibili ed aleatori.", "marketing2Header": "Competi con gli amici", - "marketing2Lead1Title": "Produttività sociale", + "marketing2Lead1Title": "Produttività Sociale", "marketing2Lead1": "Puoi giocare ad Habitica da solo, ma il bello viene quando inizi a collaborare, competere e condividere le tue responsabilità. La parte più importante di un programma di automiglioramento è la responsabilità sociale, e quale ambiente migliore per la responsabilità e la competizione se non un videogioco?", - "marketing2Lead2Title": "Combatti i mostri", + "marketing2Lead2Title": "Combatti i mostri nelle Missioni", "marketing2Lead2": "Cosa sarebbe un gioco di ruolo senza delle battaglie? Combatti i mostri insieme alla tua squadra. I mostri sono la \"modalità super responsabilità\" - il giorno che salti palestra è il giorno che il mostro danneggia *tutti!*", "marketing2Lead3Title": "Sfida gli altri", "marketing2Lead3": "Le sfide ti permettono di competere con i tuoi amici e utenti di tutto il mondo. Al termine della sfida, chi ha dato il meglio di sé riceve dei premi speciali.", - "marketing3Header": "App ed estensioni", + "marketing3Header": "Altri modi per usare Habitca", "marketing3Lead1": "Le app per **iPhone e Android** ti permettono di gestire le tue attività in qualsiasi momento. Sappiamo che accedere al sito web solamente per premere dei bottoni può essere noioso.", - "marketing3Lead2Title": "Integrazioni", + "marketing3Lead2Title": "Comunità Open-Source", "marketing3Lead2": "Altri **Strumenti di Terze Parti** legano Habitica a vari aspetti della tua vita. Le nostre API provvedono integrazione per cose come l'[Estensione per Chrome](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=it), con la quale perdi punti navigando siti web che ti distraggono e guadagni punti navigando su siti produttivi. [Più informazioni qui (in inglese)](https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).", "marketing4Header": "Utilizzo Organizzativo", "marketing4Lead1": "L'educazione è uno dei settori in cui le meccaniche dei giochi sono più efficaci. Sappiamo tutti come al giorno d'oggi gli studenti siano attaccati a videogiochi e cellulari, sfruttiamo questo potere! Mettete alla prova i vostri studenti organizzando competizioni amichevoli. Ricompensate i comportamenti positivi con premi importanti. La loro disciplina e i loro voti miglioreranno visibilmente.", - "marketing4Lead1Title": "L'introduzione dei videogiochi nell'educazione", + "marketing4Lead1Title": "Rendere l'educazione un gioco", "marketing4Lead2": "I costi del settore sanitario sono in continua crescita. Centinaia di programmi vengono sviluppati per ridurre i costi e aumentare il benessere. Noi crediamo fermamente che Habitica possa aprire un percorso verso uno stile di vita sano.", "marketing4Lead2Title": "L'introduzione dei videogiochi nel settore sanitario e del benessere", - "marketing4Lead3-1": "Vuoi vivere la tua vita come in un gioco?", + "marketing4Lead3-1": "Sei pronto a divertirti mentre porti a termine i tuoi impegni?", "marketing4Lead3-2": "Sei interessato a gestire un gruppo nel settore dell'educazione, del benessere e in altri settori?", - "marketing4Lead3Title": "Trasforma tutto in gioco", + "marketing4Lead3Title": "Inizia la tua avventura!", "mobileAndroid": "App su Android", "mobileIOS": "App su iOS", "oldNews": "Novità", @@ -133,7 +133,7 @@ "invalidReqParams": "Parametri di richiesta non validi.", "memberIdRequired": "\"member\" deve essere un UUID valido.", "heroIdRequired": "\"herold\" deve essere un UUID valido.", - "cannotFulfillReq": "La tua richiesta non può essere soddisfatta. Scrivi una e-mail ad admin@habitica.com se l'errore persiste.", + "cannotFulfillReq": "La tua richiesta non può essere soddisfatta. Scrivi una e-mail ad admin@habitica.com se l'errore persiste.", "modelNotFound": "Questo modello non esiste.", "signUpWithSocial": "Registrati con <%= social %>", "loginWithSocial": "Accedi con <%= social %>", @@ -180,5 +180,7 @@ "emailUsernamePlaceholder": "es. habitrabbit oppure grifone@example.com", "footerProduct": "Prodotto", "incorrectResetPhrase": "Per reimpostare il tuo account, digita <%= magicWord %> in lettere maiuscole.", - "translateHabitica": "Traduci Habitica" + "translateHabitica": "Traduci Habitica", + "marketing3Lead1Title": "Applicazioni Android e iOS", + "marketing4Lead3Button": "Inizia Oggi" } diff --git a/website/common/locales/it/gear.json b/website/common/locales/it/gear.json index 4f3b10e170..6218953923 100644 --- a/website/common/locales/it/gear.json +++ b/website/common/locales/it/gear.json @@ -2822,7 +2822,7 @@ "weaponSpecialFall2024HealerText": "Falce Spaziale", "weaponSpecialFall2024MageText": "Bastone del Mondo Sotterraneo", "weaponSpecialFall2024WarriorNotes": "Le attività che ti ostacolano saranno tagliate immediatamente da questa formidabile arma. Aumenta la Forza di <%= str %>. Equipaggiamento in edizione limitata, Estate 2024.", - "weaponSpecialFall2024RogueNotes": "Le attività saranno bloccate sul posto grazie ai giri e alle giravolte di questa arma ipnotica. Aumenta la Forza di <%= str %>. Equipaggiamento in edizione limitata, Estate 2024.", + "weaponSpecialFall2024RogueNotes": "Le attività saranno bloccate sul posto grazie ai giri e alle giravolte di questa arma ipnotica. Aumenta la Forza di <%= str %>. Equipaggiamento in edizione limitata, Autunno 2024.", "weaponSpecialFall2024HealerNotes": "Le attività che una volta erano cosmicamente complicate sono stati decimate dai colpi di questa lama. Aumenta l'Intelligenza di <%= int %>. Equipaggiamento in edizione limitata, Autunno 2024.", "weaponArmoireScholarlyTextbooksNotes": "Ecco la tua occasione per imparare ed approfondire ogni materia che ti interessa. Qual è il tuo livello di fissazione? Aumenta l'Intelligenza di <%= int %>. Scrigno Incantato: Set della Divisa Scolastica (Oggetto 3 di 4).", "weaponArmoireOptimistsCloverText": "Quadrifoglio", @@ -2901,5 +2901,9 @@ "armorSpecialWinter2024WarriorNotes": "Alla fin fine il cioccolato, la menta e la glassa sono materiali più resistenti di quanto si pensi. Aumenta la Costituzione di <%= con %>. Equipaggiamento in edizione limitata, Inverno 2023-2024.", "armorSpecialWinter2024HealerText": "Armatura Ghiacciata", "armorSpecialWinter2024RogueText": "Vesti del Gufo delle Nevi", - "armorSpecialWinter2024WarriorText": "Armatura di Peppermint Bark" + "armorSpecialWinter2024WarriorText": "Armatura di Peppermint Bark", + "weaponSpecialWinter2025WarriorText": "Ascia dell'Alce Guerriero", + "weaponSpecialWinter2025WarriorNotes": "Una possente ascia per un possente alce! Sarai inarrestabile! Aumenta la Forza di <%= str %>.Edizione Limitata Equipaggiamento Inverno 2024-2025.", + "weaponSpecialWinter2025RogueText": "Esplosione di Fiocchi di Neve", + "weaponSpecialWinter2025HealerText": "Bacchetta Stellare" } diff --git a/website/common/locales/it/limited.json b/website/common/locales/it/limited.json index 6875c0e9c5..c037df72f1 100644 --- a/website/common/locales/it/limited.json +++ b/website/common/locales/it/limited.json @@ -214,5 +214,28 @@ "limitedEvent": "evento a tempo limitato", "celebrateAnniversary": "Festaggia il decimo compleanno di Habitica coi regali e gli oggetti esclusivi scritto sotto!", "celebrateBirthday": "Festeggia il decimo compleanno di Habitica con regali e oggetti esclusivi!", - "anniversaryLimitations": "Questo è un evento a tempo limitato che comincia il 30 gennaio alle 8.00 ET (13.00 UTC) e finisce il 8 febbraio alle 23.59 ET (04.59 UTC). L'edizione limitata Grifatrice Giubilante e dieci Pozioni di Schiusa Magiche saranno disponibili a comprare durante questo periodo. Gli altri regali listati nella sezione \"Four for Free\" saranno inseriti automaticamente negli account che sono stati attivi negli 30 giorni precendenti al giorno che il regalo è mandato. Gli account creati dopo qualsiasi regalo è mandato non possono ricevere i regali." + "anniversaryLimitations": "Questo è un evento a tempo limitato che comincia il 30 gennaio alle 8.00 ET (13.00 UTC) e finisce il 8 febbraio alle 23.59 ET (04.59 UTC). L'edizione limitata Grifatrice Giubilante e dieci Pozioni di Schiusa Magiche saranno disponibili a comprare durante questo periodo. Gli altri regali listati nella sezione \"Four for Free\" saranno inseriti automaticamente negli account che sono stati attivi negli 30 giorni precendenti al giorno che il regalo è mandato. Gli account creati dopo qualsiasi regalo è mandato non possono ricevere i regali.", + "spring2024FluoriteWarriorSet": "Set di Fluorite (Guerriero)", + "spring2024HibiscusMageSet": "Set di Ibisco (Mago)", + "spring2024BluebirdHealerSet": "Set dell'Uccello Azzurro (Guaritore)", + "spring2024MeltingSnowRogueSet": "Set di Neve Sciolta (Ladro)", + "summer2024WhaleSharkWarriorSet": "Set dello Squalo Balena (Guerriero)", + "summer2024SeaAnemoneMageSet": "Set dell'Anemone di Mare (Mago)", + "summer2024SeaSnailHealerSet": "Set della Lumaca di Mare (Guaritore)", + "summer2024NudibranchRogueSet": "Set del Nudibranco (Ladro)", + "winter2024SnowyOwlRogueSet": "Gufo delle Nevi (Ladro)", + "winter2024PeppermintBarkWarriorSet": "Set della Corteccia di Menta Piperita (Guerriero)", + "winter2024NarwhalWizardMageSet": "Set del Mago Narvalo (Mago)", + "spring2023CaterpillarRogueSet": "Millepiedi (Ladro)", + "spring2023HummingbirdWarriorSet": "Colibrì (Guerriero)", + "spring2023MoonstoneMageSet": "Pietra lunare (Mago)", + "spring2023LilyHealerSet": "Lily (Guaritore)", + "summer2023GoldfishWarriorSet": "Pesce rosso (Guerriero)", + "summer2023GuppyRogueSet": "Guppy (Ladro)", + "summer2023KelpHealerSet": "Alga (Guaritore)", + "summer2023CoralMageSet": "Corallo (Mago)", + "fall2023ScaryMovieWarriorSet": "Film dell'Orrore (Guerriero)", + "fall2023ScarletWarlockMageSet": "Stregone Scarlatto (Mago)", + "fall2023WitchsBrewRogueSet": "Infuso della Strega (Ladro)", + "fall2023BogCreatureHealerSet": "Creatura della Palude (Guaritore)" } diff --git a/website/common/locales/it/messages.json b/website/common/locales/it/messages.json index ad0c4fdb4b..49e870ac3e 100644 --- a/website/common/locales/it/messages.json +++ b/website/common/locales/it/messages.json @@ -55,5 +55,6 @@ "messageBackgroundUnEquipped": "Sfondo rimosso.", "messagePetMountUnEquipped": "Animale e cavalcatura rimossi.", "messageCostumeUnEquipped": "Costume rimosso.", - "messageBattleGearUnEquipped": "Equipaggiamento da combattimento rimosso." + "messageBattleGearUnEquipped": "Equipaggiamento da combattimento rimosso.", + "featureRetired": "Questa funzionalità non è più supportata." } diff --git a/website/common/locales/it/npc.json b/website/common/locales/it/npc.json index 5ec8b594b8..16e2ce49a6 100644 --- a/website/common/locales/it/npc.json +++ b/website/common/locales/it/npc.json @@ -19,7 +19,7 @@ "sleepDescription": "Hai bisogno di una pausa? Sospendi i danni (dalle Impostazioni) per mettere in pausa alcune meccaniche di gioco di Habitica:", "sleepBullet1": "Le tue Attività Giornaliere non completate non ti danneggeranno (i boss potranno causarti danno comunque in base alle Attività Giornaliere non completate dei tuoi compagni di Squadra)", "sleepBullet2": "Il conteggio di serie delle tue attività giornaliere e delle tue abitudini non verranno resettate", - "sleepBullet3": "Il danno che provochi ai boss delle missioni o gli oggetti trovati nelle missioni di tipo collezione, rimarranno in sospeso finché non riattiverai i Danni.", + "sleepBullet3": "Il danno che provochi ai boss delle missioni o gli oggetti trovati nelle missioni di tipo collezione, rimarranno in sospeso finché non riattiverai i Danni", "pauseDailies": "Sospendi danni", "unpauseDailies": "Riattiva danni", "staffAndModerators": "Staff e Moderatori", @@ -96,11 +96,11 @@ "toDo": "Cosa da Fare", "tourStatsPage": "Questa è la pagina delle tue Statistiche! Guadagna delle medaglie compiendo le azioni elencate.", "tourTavernPage": "Benvenuto nella Taverna, una chat per tutte le età! Puoi fare in modo che le tue Attività Giornaliere non ti danneggino in caso di malattia o di viaggio facendo click su \"Sospendi danni\". Vieni a farci un saluto!", - "tourPartyPage": "La tua Squadra ti aiuterà a restare in riga. Invita degli amici per sbloccare una Pergamena!", + "tourPartyPage": "Benvenuto nella tua nuova Squadra! Puoi invitare altri giocatori alla tua Squadra tramite nome utente, email o da un elenco di giocatori che cercano una Squadra per guadagnare l'esclusiva Pergamena Missione Basi-Lista.

Seleziona FAQ dal menu a tendina \"Aiuto\" per saperne di più su come funzionano le Squadre.", "tourChallengesPage": "Le Sfide sono liste di attività a tema create dagli utenti! Partecipando a una Sfida, la lista delle sue attività verrà aggiunta al tuo account. Competi con altri utenti per vincere dei premi in Gemme!", "tourMarketPage": "Ogni volta che completi un'attività, avrai una possibilità casuale di ricevere un Uovo, una Pozione di Schiusa o del Cibo per Animali. Puoi anche acquistare questi oggetti qui.", - "tourHallPage": "Benvenuto nel Salone degli Eroi, dove viene reso onore agli aiutanti open-source di Habitica. Che sia attraverso codice, arte, musica, testi o anche semplice disponibilità, hanno guadagnato Gemme, equipaggiamento esclusivo e titoli prestigiosi. Anche tu puoi contribuire ad Habitica!", - "tourPetsPage": "Benvenuto alla Scuderia! Ogni volta che completi una attività, hai una chance casuale di ricevere un Uovo o una Pozioni di Schiusa. Quando fai schiudere un uovo apparirà qui! Clicca sull'immagine di un Animale per aggiungerlo al tuo Avatar. Dagli da mangiare del cibo e crescerà fino a diventare una potente Cavalcatura.", + "tourHallPage": "Benvenuto nel Salone degli Eroi, dove viene reso onore agli aiutanti open-source di Habitica. Che sia attraverso codice, arte, musica, testi o anche semplice disponibilità, hanno guadagnato Gemme, Equipaggiamento esclusivo e titoli prestigiosi. Anche tu puoi contribuire ad Habitica!", + "tourPetsPage": "Benvenuto alla scuderia! Ogni volta che completi una attività, hai una chance casuale di ricevere un Uovo o una Pozioni di Schiusa. Quando fai schiudere un uovo apparirà qui! Clicca sull'immagine di un Animale per aggiungerlo al tuo Avatar. Dagli da mangiare del cibo e crescerà fino a diventare una potente Cavalcatura.", "tourMountsPage": "Una volta che avrai dato abbastanza cibo al tuo animale da trasformarlo in una cavalcatura, apparirà qui. Clicca su una cavalcatura per montare in sella!", "tourEquipmentPage": "Qui è dove viene riposto il tuo Equipaggiamento! Il tuo equipaggiamento da battaglia influenza le tue Statistiche. Se desideri mostrare un equipaggiamento diverso sul tuo avatar senza modificare le tue statistiche, clicca su \"Usa costume.\"", "equipmentAlreadyOwned": "Possiedi già quel pezzo di equipaggiamento", @@ -116,7 +116,7 @@ "limitedOffer": "Disponibile fino al <%= date %>", "paymentCanceledDisputes": "Abbiamo inviato una conferma per l'annullamento alla tua email. Se non vedi l'email, ti preghiamo di contattarci per evitare future controversie sulla fatturazione.", "paymentAutoRenew": "Questo abbonamento si rinnoverà automaticamente fino a quando non verrà annullato. Se è necessario annullare questo abbonamento, è possibile farlo dalle proprie impostazioni.", - "paymentSubBillingWithMethod": "Il tuo abbonamento verrà fatturato $<%= amount %> ogni <%= months %> mesi tramite <%= paymentMethod %>.", + "paymentSubBillingWithMethod": "Il tuo abbonamento verrà fatturato
$<%= amount %>.00 USD ogni <%= months %> mesi tramite <%= paymentMethod %>", "invalidUnlockSet": "Questo set di elementi non è valido e non può essere sbloccato.", "cannotUnpinItem": "Questo oggetto non può essere rimosso.", "nMonthsSubscriptionGift": "<%= nMonths %> mese(i) di abbonamento (Regalo)", @@ -129,5 +129,8 @@ "helpSupportHabitica": "Aiutare a Supportare Habitica", "groupsPaymentAutoRenew": "Questo abbonamento si rinnoverà automaticamente fino a quando non verrà annullato. Se hai bisogno di annullarlo, puoi farlo dal pannello Fatturazione di Gruppo.", "groupsPaymentSubBilling": "La tua prossima data di fatturazione è <%= renewalDate %>.", - "customizationsShopText": "Vuoi cambiare il tuo stile? Sei nel posto giusto! Abbiamo in magazzino i look più freschi adatti alla stagione." + "customizationsShopText": "Vuoi cambiare il tuo stile? Sei nel posto giusto! Abbiamo in magazzino i look più freschi adatti alla stagione.", + "notAvailable": "Questo Oggetto non è disponibile.", + "paymentYouSentSubscriptionG1G1": "Hai inviato a <%- name %>
un abbonamento Habitica di <%= months %> mese(i) e lo stesso abbonamento è stato applicato al tuo account grazie alla nostra promozione \"Regala uno, ricevi uno\"!", + "sellItems": "Vendi Oggetti" } diff --git a/website/common/locales/it/questscontent.json b/website/common/locales/it/questscontent.json index e211788fb8..02e3b9a131 100644 --- a/website/common/locales/it/questscontent.json +++ b/website/common/locales/it/questscontent.json @@ -497,7 +497,7 @@ "questMayhemMistiflying3DropShield": "Messaggio Malandrino Arcobaleno (mano secondaria)", "questMayhemMistiflying3DropWeapon": "Messaggio Malandrino Arcobaleno (mano primaria)", "featheredFriendsText": "Pacchetto missioni Amici Pennuti", - "featheredFriendsNotes": "Contiene 'Aiuto! Un'arpia!', 'Il Gufo Notturno' e 'Gli Uccelli della Procrastinazione'. Disponibile fino al 31 maggio.", + "featheredFriendsNotes": "Contiene le missioni per ottenere uova di Gufo, Pappagallo e Falco: Aiuto! Un'arpia!, Il Gufo Notturno e Gli Uccelli della Procrastinazione.", "questNudibranchText": "L'Infestazione di Nudibranchi FaiOra", "questNudibranchNotes": "Hai finalmente terminato le tue Cose da Fare in una pigra giornata ad Habitica. Luminoso in contrasto alle tue più rosse attività, ecco uno stormo di lumache di mare di un blu vibrante. Sei incantato! I loro colori zaffiro fanno semprare le attività più intimidanti semplici come le tue migliori abitudini. In stupore febbrile ti metti al lavoro, affrontando un'attività dietro l'altra con una frenesia incessante...

quel che ricordi dopo è solo che @LilithofAlfheim ti sta rovesciando addosso dell'acqua. \"I Nudibranchi FaiOra ti hanno punto dappertutto! devi prenderti una pausa!\"

Scioccato, vedi che la tua pelle è di un rosso acceso come lo era la tua lista Cose da Fare. \"Essere produttivi è un conto,\" dice @beffymaroo, \"ma devi anche prenderti cura di te stesso. Presto, liberiamoci di loro!\"", "questNudibranchCompletion": "Vedi l'ultimo Nudibranchio FaiOra scivolare lungo una pila di attività completate mentre @amadshade le lava via. Uno lascia dietro di sè una borsa di tessuto, e tu lo apri trovandoci dentro dell'oro, e alcuni piccoli oggetti rotondi che immagini essere uova.", @@ -505,7 +505,7 @@ "questNudibranchDropNudibranchEgg": "Nudibranchio (uovo)", "questNudibranchUnlockText": "Sblocca l'acquisto delle uova di nudibranchio nel Mercato", "splashyPalsText": "Pacchetto missioni Amici Sguazzanti", - "splashyPalsNotes": "Contiene \"Il Derby Dilatorio\", \"Guida la tartaruga\" e \"Il Lamento della Balena\". Disponibile fino al 31 luglio.", + "splashyPalsNotes": "Contiene le missioni per ottenere uova di Tartaruga, Balena e Cavalluccio Marino: Guida la Tartaruga, Il Lamento della Balena e Il Derby Dilatorio.", "questHippoText": "Ma che Ippo-Crita", "questHippoNotes": "Tu e @awesomekitty collassate nell'ombra di un albero di palma esausti. Il sole batte forte sulla Savana Sloensteadi, scottando il suolo sottostante. È stata una giornata produttiva finora, conquistando Attività Giornaliere e quest'oasi sembra un bel posto per prendersi una pausa e rinfrescarsi. Chinandoti vicino all'acqua per bere, inciampi indietro sotto shock mentre un gigante ippopotamo si alza. \"Ti riposi così presto? Non essere pigro, torna al lavoro.\" Cerchi di protestare che hai lavorato duro e hai bisogno di una pausa ma l'ippopotamo non se ne interessa.

@khdarkwolf ti sussurra, \"Notato come si sta rilassando tutto il giorno ma ha il coraggio di chiamarti pigro? È un Ippo-Crita!\"

Il tuo amico @jumorales annuisce. \"Facciamogli vedere cos'è il duro lavoro!\"", "questHippoCompletion": "L'ippopotamo si inginocchia arreso. \"Vi ho sottovalutati. Sembra che non eravate pigri. Scusatemi. A dire il vero, stavo esagerando un po. Forse dovrei lavorare un po da solo. Ecco qui, prendete queste uova come segno della mia gratitudine.\" Afferrandole, ti siedi vicino all'acqua pronto finalmente a rilassarti.", @@ -513,9 +513,9 @@ "questHippoDropHippoEgg": "Ippopotamo (Uovo)", "questHippoUnlockText": "Sblocca le uova di Ippopotamo acquistabili nel Mercato", "farmFriendsText": "Pacchetto missioni Amici della Fattoria", - "farmFriendsNotes": "Contiene \"La Mucca Muutante\", \"Cavalca il Destriero dell'Incubo\", e \"L'Ariete Tuonante\". Disponibile fino al 30 settembre.", + "farmFriendsNotes": "Contiene le missioni per ottenere uova di Cavallo, Pecora e Mucca: Cavalca il Destriero dell'Incubo, L'Ariete Tuonante e La Mucca Muutante.", "witchyFamiliarsText": "Pacchetto di Missioni dei Famigli Stregati", - "witchyFamiliarsNotes": "Contiene 'Il Re dei Ratti', 'L'Aracnide Ghiacciato', 'Palude della Rana del Disordine'. Disponibile fino al 31 Ottobre.", + "witchyFamiliarsNotes": "Contiene le missioni per ottenere uova di Rana, Ragno e Ratto: La Palude della Rana del Disordine, L'Aracnide Ghiacciato e Il Re dei Ratti.", "questGroupLostMasterclasser": "Mistero dei Masterclasser", "questUnlockLostMasterclasser": "Per sbloccare questa missione, completa le missioni finali di queste serie: 'Dilatoria sotto Attacco', 'Caos a Fantalata', La calamità di Stoikalm', e 'Terrore a Boscompito'.", "questLostMasterclasser1Text": "Il Mistero dei Masterclasser, Parte 1: Leggi tra le Righe", @@ -559,7 +559,7 @@ "questYarnDropYarnEgg": "Gomitolo (Uovo)", "questYarnUnlockText": "Sblocca l'acquisto delle Uova di Gomitolo nel Mercato", "winterQuestsText": "Pacchetto di Missioni Invernali", - "winterQuestsNotes": "Contiene 'Babbo Bracconiere', 'Trova il Cucciolo' e 'Il Gelo Volatile'. Disponibile fino al 31 Dicembre. Nota che Babbo Bracconiere e Trova il Cucciolo hanno medaglie missione impilabili ma donano un animale raro e una cavalcatura che può essere aggiunta alla Scuderia una sola volta.", + "winterQuestsNotes": "Contiene le missioni per ottenere il cucciolo di Orso Polare, la cavalcatura di Orso Polare, e l'uovo di Pinguino: Trova il Cucciolo, Babbo Bracconiere e Il Gelo Volatile.", "questPterodactylText": "Lo Pterrore-dattilo", "questPterodactylNotes": "Stai facendo una passeggiata sulle serene scogliere di Stoikalm quando un malefico stridio lacera l'aria. Ti volti per trovare un'orrenda creatura volare verso di te mentre un potente terrore ti sovrasta. Mentre ti volti per fuggire, @Lilith of Alfheim ti afferra. \"Non avere paura! È solo uno Pterrore-dattilo.\"

@Procyon P annuisce. \"Hanno il nido nelle vicinanze ma sono attratti dal profumo delle abitudini negative e dalle Attività Giornaliere non svolte.\"

\"Non ti preoccupare,\" dice @Katy133. \"Dobbiamo solo essere extra produttivi per sconfiggerlo!\" Sei riempito da un nuovo senso del dovere e ti giri per affrontare il nemico.", "questPterodactylCompletion": "Con un ultimo stridio lo Pterrore-Dattilo precipita sul fianco della scogliera. Corri per vederlo volare via oltre le distanti steppe. \"Uff, sono felice che sia finita,\" dici. \"Anche io,\" risponde @GeraldThePixel. \"Guarda! Ha lasciato qualche uovo per noi.\" @Edge ti passa tre uova e prometti di crescerle con tranquillità circondate da Abitudini positive e Attività Giornaliere blu.", @@ -567,7 +567,7 @@ "questPterodactylDropPterodactylEgg": "Pterodattilo (uovo)", "questPterodactylUnlockText": "Sblocca uova di Pterodattilo da acquistare nel Mercato", "questBadgerText": "Smettila di tormentarmi!", - "questBadgerNotes": "Ah, l'inverno di Boscompito. La soffice neve cadente, i rami gelati luccicano, le Fate Fiorenti... ancora non dormono?

\"Perché sono ancora sveglie?\" urla @LilithofAlfheim. \"Se non si ibernano al più presto non avranno mai l'energia per fissare la stagione.\"

Mentre tu e @Willow the Witty vi affrettate ad investigare, una testa pelosa appare dal terreno. Prima che tu possa urlare, \"È il Fastidio Tormentoso!\" torna nella sua tana—ma non prima di afferrare le Cose da Fare delle Fate \"Ibernate\" lasciando un enorme lista di fastidiose attività al loro posto!

\"Non c'è da stupirsi che le fate non stiano riposando, sono costantemente tormentate!\" Dice @plumilla. Puoi scacciare questa bestia e salvare il raccolto di Boscompito di quest'anno?", + "questBadgerNotes": "Ah, l'inverno di Boscompito. La soffice neve cadente, i rami gelati luccicano, le Fate Fiorenti... ancora non dormono?

\"Perché sono ancora sveglie?\" urla @LilithofAlfheim. \"Se non si ibernano al più presto non avranno mai l'energia per fissare la stagione.\"

Mentre tu e @Willow the Witty vi affrettate ad investigare, una testa pelosa appare dal terreno. Prima che tu possa urlare, \"È il Fastidio Tormentoso!\" torna nella sua tana—ma non prima di afferrare le Cose da Fare delle Fate \"Ibernate\" lasciando un enorme lista di fastidiose attività al loro posto!

\"Non c'è da stupirsi che le fate non stiano riposando, sono costantemente tormentate!\" Dice @plumilla. Puoi scacciare questa bestia e salvare il raccolto di Boscompito di quest'anno?", "questBadgerCompletion": "Finalmente scacci via il Fastidio Tormentoso e ti precipiti nella tana. Alla fine del tunnel trovi il suo tesoro delle Cose da Fare delle fate \"Ibernate\". Il covo è vuoto abbandonato eccetto per tre uova che sembrano pronte per essere schiuse.", "questBadgerBoss": "Il Fastidio Tormentoso", "questBadgerDropBadgerEgg": "Tasso (Uovo)", @@ -594,7 +594,7 @@ "questDysheartenerDropHippogriffMount": "Ippogrifo della Speranza (Cavalcatura)", "dysheartenerArtCredit": "Illustrazione di @AnnDeLune", "hugabugText": "Pacchetto missioni Abbraccia un Insetto", - "hugabugNotes": "Contiene \"Il BUG CRITICO\", \"La Chiocciola della Fogna Sgobbosa\" e \"Ciao, ciao, fiamfalla\". Disponibile fino a Marzo 31.", + "hugabugNotes": "Contiene le missioni per ottenere uova di Scarabeo, Bruco e Chiocciola: Il BUG CRITICO, Ciao, ciao, fiamfalla e La Chiocciola della Fogna Sgobbosa.", "questSquirrelText": "Lo Scoiattolo Subdolo", "questSquirrelNotes": "Ti svegli e ti accorgi di aver dormito troppo! Perché non ha suonato l'allarme? ... Come ha fatto una ghianda a finire nella sveglia?

Quando provi a fare colazione, il tostapane è pieno di ghiande. Quando vai a recuperare la tua cavalcatura, @Shtut è lì che tenta di aprire senza successo la loro scuderia. Guardano nella serratura. \"È una ghianda quella lì dentro?\"

@randomdaisy piange \"Oh no! Sapevo che i miei scoiattoli erano usciti ma non sapevo che avrebbero causato problemi del genere! Mi puoi aiutare a radunarli prima che facciano altri pasticci?\"

Seguendo la scia di noci di quercia mal disposte, tracci e catturi i roditori capricciosi con @Cantras che ti aiuta a proteggerli fino a casa. Ma proprio quando pensi che il tuo compito sia quasi finito, una ghianda rimbalza sul tuo elmo! Guardi in alto e vedi un grosso e bestiale schoiattolo, rannicchiato in difesa di una prodigiosa pila di semi.

\"Oh cara,\" dice dolcemente @randomdaisy.\"È sempre stata una specie di guardiana delle risorse. Dobbiamo procedere con cautela!\" Ti metti in cerchio con la tua squadra, pronti per i problemi!", "questSquirrelCompletion": "Con un approccio gentile, offerte di baratto, e alcuni incantesimi calmanti, siete in grado di attirare lo scoiattolo lontano dal suo bottino e verso le stalle, che @Shtut ha appena finito di liberare dalle ghiande. Hanno messo alcune delle ghiande da parte su un tavolo da lavoro. \"Queste sono uova di scoiattolo! Magari ne puoi crescere alcuni che non giocano con il loro cibo così tanto.\"", @@ -602,9 +602,9 @@ "questSquirrelDropSquirrelEgg": "Scoiattolo (Uovo)", "questSquirrelUnlockText": "Sblocca l'acquisto delle uova di Scoiattolo nel Mercato", "cuddleBuddiesText": "Pacchetto di Missioni degli Amici Coccolosi", - "cuddleBuddiesNotes": "Contiene \"La Coniglietta Ladra\", \"Il Furetto Nefando\" e \"La Gang dei Porcellini d'India\". Disponibile fino al 31 Marzo.", + "cuddleBuddiesNotes": "Contiene le missioni per ottenere uova di Coniglio, Furetto e Porcellino d'India: La Coniglietta Ladra, Il Furetto Nefando e La Gang dei Porcellini d'India.", "aquaticAmigosText": "Pacchetto di Missioni degli Amici Acquatici", - "aquaticAmigosNotes": "Contiene \"Il Magico Axolotl\", \"Il Kraken dell'Inkompletezza\", e \"Il Richiamo di Octothulu\". Disponibile fino al 30 giugno.", + "aquaticAmigosNotes": "Contiene le missioni per ottenere uova di Seppia, Polpo e Axolotl: Il Kraken dell'Inkompletezza, Il Richiamo di Octothulu e Il Magico Axolotl.", "questSeaSerpentText": "Pericolo nelle Profondità: Il Serpente Marino Colpisce!", "questSeaSerpentNotes": "Le tue serie sulle attività giornaliere ti fanno sentire fortunato. È il momento perfetto per una gita al circuito per le corse dei cavallucci marini. Ti imbarchi su un sottomarino ai Moli Diligenti e ti sistemi per la gita a Dilatoria, ma il sottomarino è appena sceso sotto il pelo dell'acqua quando un impatto sballotta il sottomarino, mandando gli occupanti a gambe all'aria. \"Cosa succede?\" grida @AriesFaries.

Guardi attraverò un oblò vicino e sei sorpreso dal muro di scaglie luccicanti che vedi. \"Serpente marino!\" dice il Capitano @WItticaster attraverso l'interfono. \"Preparatevi, sta tornando verso di noi!\" Come afferri i braccioli del tuo sedile, le tue attività incomplete ti passano davanti agli occhi. 'Magari se lavoriamo assieme e le completiamo,', pensi, 'possiamo scacciare questo mostro!'", "questSeaSerpentCompletion": "Malconcio per il tuo impegno, il serpente marino scappa, scomparendo nelle profondità. Quando arrivi a Dilatoria, sospiri di sollievo prima di notare @*~Seraphina~ che si avvicina a te con tre uova traslucide tra le braccia. \"Tieni, dovresti avere queste,\" dice. \"Sai come gestire un serpente marino!\" Come accetti le uova, giuri di rimanere costante nel completare le tue attività così che la situazione non si ripeta.", @@ -618,7 +618,7 @@ "questKangarooDropKangarooEgg": "Canguro (Uovo)", "questKangarooUnlockText": "Sblocca l'acquisto delle uova di Canguro nel Mercato", "forestFriendsText": "Pacchetto missioni Amici della Foresta", - "forestFriendsNotes": "Contiene 'Lo Spirito della Primavera', 'La Bestia Spinosa', e 'L'Albero Aggrovigliato'. Disponibile fino al 30 Settembre.", + "forestFriendsNotes": "Contiene le missioni per ottenere uova di Alberello, Cervo e Riccio: L'Albero Aggrovigliato, Lo Spirito della Primavera e La Bestia Spinosa.", "questAlligatorText": "L'Insta-Gatore", "questAlligatorNotes": "\"Caspita!\" esclama @gully. \"Un Insta-Gatore nel suo habitat naturale! Attenzione, distrae le sue prede con cose che sembrano importanti QUESTO ISTANTE, e si nutre delle attività non complete che ne risultano.\" Fai silenzio per evitare di attirare la sua attenzione, ma senza successo. L'Insta-Gatore vi vede e carica! Voci distraenti si alzano dalle Paludi della Stagnazione, prendendo la tua attenzione: \"Leggi questo post! Guarda questa foto! Dammi la tua attenzione in QUESTO ISTANTE!\" Ti affretti a preparare un contrattacco, completando le tue attività e rafforzando le tue buoni abitudini per combattere il temibile Insta-Gatore.", "questAlligatorCompletion": "Con la tua attenzione su ciò che è importante e non sulle distrazioni dell'Insta-Gatore, l'Insta-Gatore fugge. Vittoria! \"Sono uova quelle? Sembrano uova di alligatore,\" chiede @mfonda. \"Se ce ne prendiamo cura come si deve saranno fedeli animali o leali cavalcature,\" risponde @UncommonCriminal, dandotenete tre. Speriamo, oppure l'Insta-Gatore potrebbe tornare…", @@ -626,9 +626,9 @@ "questAlligatorDropAlligatorEgg": "Alligatore (Uovo)", "questAlligatorUnlockText": "Sblocca l'acquisto delle uova di Alligatore nel Mercato", "oddballsText": "Pacchetto di Missioni delle Palline Strane", - "oddballsNotes": "Contiene 'Il Reggente Gelatina', 'Fuggi dalla Creatura della Caverna', e 'La Lana Ingarbugliata'. Disponibile fino al 30 aprile.", + "oddballsNotes": "Contiene le missioni per ottenere uova di Melma, Gomitolo e Roccia: Il Reggente Gelatina, La Lana Ingarbugliata e Fuggi dalla Creatura della Caverna.", "birdBuddiesText": "Pacchetto di Missioni degli Amici Volatili", - "birdBuddiesNotes": "Contiene \"Il Gelo Volatile\", \"Il Gallo Infuriato\", e \"Il Pavone Tira-e-Molla\". Disponibile fino al 30 settembre.", + "birdBuddiesNotes": "Contiene le missioni per ottenere uova di Pavone, Pinguino e Gallo: Il Pavone Tira-e-Molla, Il Gelo Volatile e Il Gallo Infuriato.", "questVelociraptorText": "Il Veloci-Rapper", "questVelociraptorNotes": "Stai condividendo torte al miele con @*~Seraphina~*, @Procyon P, e @Lilith of Alfheim sulla riva di un lago nelle Steppe Stoikalm. All'improvviso una voce lamentosa interrompe il vostro picnic.

Le mie Abitudini andate, le mie Attività non completate,
Sto impazzendo, pieno di dubbi sto cadendo,
Potevo fare tutto in un istante,
Ma ora è tutto così stancante.


@*~Seraphina~* sbircia dietro gli arbusti. \"È il Veloci-Rapper. Sembra... sconvolto?\"

Serri un pugno in segno di determinazione. \"C'è un'unica cosa possibile ora. Una battaglia rap!\"", "questVelociraptorCompletion": "Ti lanci oltre l'erba, confrontando il Veloci-Rapper.

Senti qui, rapper, non sei un fallito,
Nel mantenere le tue abitudini sei il più ardito!
Non piangere sul latte versato,
Completa le tue cose come se avessi appena cominciato!


Rafforzato da nuova confidenza, si allontana per fare freestyle un altro giorno, lasciando dietro di se tre uova.", @@ -677,7 +677,7 @@ "questRobotCollectBolts": "Bulloni", "questRobotCompletion": "Mentre @Rev e Compagno di Responsabilità posizionano l'ultimo bullone, la macchina del tempo prende vita. @FolleMente e @McCoyly saltano a bordo. “Grazie per l'assistenza! Ci vediamo nel futuro! A proposito, questo dovrebbe aiutarti con la tua prossima invenzione!” Detto ciò, i viaggiatori del tempo scompaiono, ma lasciando nel relitto del vecchio Stabilizzatore di Produttività tre uova a orologeria. Forse potranno essere dei componenti cruciali per una nuova linea di produzione di Compagni di Responsabilità!", "questRobotNotes": "Nei laboratori di Max Capacity, @Rev sta dando gli ultimi ritocchi alla sua nuova invenzione, un robotico Compagno di Responsabilità, quando uno strano veicolo metallico appare all'improvviso in una nuvola di fumo, a pochi centimetri dal Rivelatore di Fluttuazione del robot! I suoi conducenti, due strane figure vestite d'argento, escono e si tolgono i caschi spaziali, rivelandosi come @FolleMente e @McCoyly.

“Ipotizzo che ci sia stata un'anomalia nella nostra implementazione della produttività,” dice timidamente @FolleMente.

@McCoyly incrocia le braccia. “Ciò significa che hanno trascurato di completare i loro Attività Giornaliere, quindi suppongo che abbiano portato alla disintegrazione del nostro Stabilizzatore di Produttività. È un componente essenziale per viaggiare nel tempo ed ha bisogno di coerenza per funzionare correttamente. I nostri successi alimentano il nostro movimento attraverso il tempo e lo spazio! Non ho tempo di spiegare meglio le cose, @Rev. Lo scoprirai tra 37 anni, o forse potranno aiutarti i tuoi alleati, i Misteriosi Viaggiatori del Tempo. Nel frattempo, puoi aiutarci a sistemare la nostra macchina del tempo?”", - "jungleBuddiesNotes": "Contiene \"Il Mandrillo Mostruoso e le Scimmie Seccanti\", \"Il Bradipo Buonanotte\" e \"L'Albero Aggrovigliato\". Disponibile fino a <%= date %>.", + "jungleBuddiesNotes": "Contiene le missioni per ottenere uova di Scimmia, Alberello e Bradipo: Il Mandrillo Mostruoso e le Scimmie Seccanti, L'Albero Aggrovigliato e Il Bradipo Buonanotte.", "jungleBuddiesText": "Pacchetto Missione Amici della Giungla", "questWaffleUnlockText": "Sblocca l'acquisto delle Pozioni di Schiusa Dolcetto nel mercato", "questWaffleDropDessertPotion": "Pozione di Schiusa Dolcetto", @@ -694,8 +694,8 @@ "questRubyCollectVenusRunes": "Rune di Venere", "questRubyCollectAquariusRunes": "Rune Zodiacali dell'Acquario", "questAmberUnlockText": "Sblocca le Pozioni di Schiusa Ambrate nel Mercato", - "delightfulDinosNotes": "Contiene \"Lo Ptero-dactilo\", \"I Travolgenti Triceratopi\" e \"Il Dinosauro Dissotterrato.\" Disponibile fino al 31 maggio.", - "rockingReptilesNotes": "Contiene \"L'Isti-Gator\", \"Il Serpente della Distrazione\" e \"Il Veloci-Rapper\". Disponibile fino al 30 novembre.", + "delightfulDinosNotes": "Contiene le missioni per ottenere uova di Triceratopo, T-Rex e Pterodattilo: I Travolgenti Triceratopi, Il Dinosauro Dissotterrato e Lo Ptero-dactilo.", + "rockingReptilesNotes": "Contiene le missioni per ottenere uova di Alligatore, Velociraptor e Serpente: L'Isti-Gator, Veloci-Rapper e Il Serpente della Distrazione.", "questFluoriteText": "Una Fluorite Fifosa e Brillante", "questFluoriteCompletion": "Mentre combatti, la creatura di cristallo sembra essere sempre più distratta dalle luci che crei. \"Così luccicante...\" borbotta.

\"Certo!\" esclama @nirbhao. \"Dev'essere un elementale di fluorite. Tutto ciò che vogliono è della luce con cui risplendere. Aiutiamolo a splendere.\"

L'elementale ride allegramente e risplende come se avessi acceso torce e scintille di magia. È così onorato di poter splendente di nuovo che ti porta ad un ricco deposito di cristalli di Fluorite.

\"È l'ingrediente perfetto per una nuova Pozione di Schiusa\", dice @nirbhao.\"Una che renderà i nostri animali luminosi come il nostro nuovo amico fluorescente.\"", "questFluoriteBoss": "Elementale di Fluorite", @@ -715,7 +715,7 @@ "questTurquoiseCollectTurquoiseGems": "Gemme Turchesi", "questTurquoiseCollectNeptuneRunes": "Rune di Nettuno", "questTurquoiseCollectSagittariusRunes": "Rune del Sagittario", - "sandySidekicksNotes": "Contiene \"L' Armadillo Indulgente\", \"La Serpe della Distrazione\" e \"L' Aracnide Ghiacciato\". Disponibile fino a .", + "sandySidekicksNotes": "Contiene le missioni per ottenere uova di Ragno, Armadillo e Serpente: L' Aracnide Ghiacciato, L' Armadillo Indulgente e La Serpe della Distrazione.", "sandySidekicksText": "Pacchetto missione Compagni sabbiosi", "questBlackPearlUnlockText": "Sblocca le Pozioni di Schiusa Perla Nera nel Mercato", "questBlackPearlDropBlackPearlPotion": "Pozione di Schiusa Perla Nera", diff --git a/website/common/locales/it/settings.json b/website/common/locales/it/settings.json index 2cdffab593..347583dc9e 100644 --- a/website/common/locales/it/settings.json +++ b/website/common/locales/it/settings.json @@ -55,7 +55,6 @@ "APIToken": "Chiave API (questa è una password - leggi la nota sopra!)", "showAPIToken": "Mostra chiave API", "hideAPIToken": "Nascondi chiave API", - "APITokenWarning": "Se hai bisogno di una nuova Chiave API (per esempio se l'hai condivisa per sbaglio), manda una mail a <%= hrefTechAssistanceEmail %> con il tuo ID Utente e la tua attuale Chiave API. Una volta resettata dovrai ri-autorizzare ogni cosa uscendo dal sito e dalla app, fornendo poi la tua nuova Chiave API ad eventuali estensioni di Habitica che utilizzi.", "thirdPartyApps": "Applicazioni di terze parti", "resetDo": "Sì, resetta il mio account!", "resetComplete": "Reset completato!", diff --git a/website/common/locales/ja/backgrounds.json b/website/common/locales/ja/backgrounds.json index 88fd7e694a..c70257cd4d 100644 --- a/website/common/locales/ja/backgrounds.json +++ b/website/common/locales/ja/backgrounds.json @@ -38,7 +38,7 @@ "backgroundHauntedHouseNotes": "幽霊屋敷をそっと通りぬけましょう。", "backgroundPumpkinPatchText": "カボチャ畑", "backgroundPumpkinPatchNotes": "カボチャ畑でジャック・オ・ランタンを作りましょう。", - "backgrounds112014": "セット6: 2014年11月リリース", + "backgrounds112014": "セット6:2014年11月リリース", "backgroundHarvestFeastText": "収穫祭", "backgroundHarvestFeastNotes": "収穫祭を楽しみましょう。", "backgroundStarrySkiesText": "星空", @@ -131,7 +131,7 @@ "backgroundSunsetOasisNotes": "夕焼けの沃地で休もう。", "backgrounds122015": "セット19:2015年12月リリース", "backgroundAlpineSlopesText": "雪の山", - "backgroundAlpineSlopesNotes": "雪の山にスキーする。", + "backgroundAlpineSlopesNotes": "雪の山でスキーをしよう。", "backgroundSnowySunriseText": "雪の日出", "backgroundSnowySunriseNotes": "雪の日の出を見よう。", "backgroundWinterTownText": "都市の冬", @@ -206,7 +206,7 @@ "backgroundStrangeSewersNotes": "奇妙な下水道で滑りましょう。", "backgroundRainyCityText": "雨の街", "backgroundRainyCityNotes": "雨の街をピチャピチャ歩きましょう。", - "backgrounds112016": "セット30: 2016年11月リリース", + "backgrounds112016": "セット30:2016年11月リリース", "backgroundMidnightCloudsText": "闇夜の雲海", "backgroundMidnightCloudsNotes": "闇夜の雲海を飛びまわろう。", "backgroundStormyRooftopsText": "嵐の屋上", @@ -252,8 +252,8 @@ "backgroundMagicBeanstalkNotes": "魔法の豆の木を登ろう。", "backgroundMeanderingCaveText": "曲がりくねった洞窟", "backgroundMeanderingCaveNotes": "曲がりくねった洞窟を探検しよう。", - "backgroundMistiflyingCircusText": "幻想的なサーカス", - "backgroundMistiflyingCircusNotes": "幻想的なサーカスで酔い騒ごう。", + "backgroundMistiflyingCircusText": "マドワシティーのサーカス", + "backgroundMistiflyingCircusNotes": "マドワシティーのサーカスで酔い騒ごう。", "backgrounds042017": "セット35: 2017年4月リリース", "backgroundBugCoveredLogText": "虫だらけの丸太", "backgroundBugCoveredLogNotes": "虫だらけの丸太を調査しよう。", @@ -264,9 +264,9 @@ "backgrounds052017": "セット36:2017年5月リリース", "backgroundGuardianStatuesText": "ガーディアンの像", "backgroundGuardianStatuesNotes": "ガーディアンの像の前で寝ずの番をしよう。", - "backgroundHabitCityStreetsText": "Habit シティーの街並み", - "backgroundHabitCityStreetsNotes": "Habit シティーの街並みを探検しましょう。", - "backgroundOnATreeBranchText": "木の枝で", + "backgroundHabitCityStreetsText": "ハビットシティの街並み", + "backgroundHabitCityStreetsNotes": "ハビットシティの街並みを探検しましょう。", + "backgroundOnATreeBranchText": "木の枝の上", "backgroundOnATreeBranchNotes": "木の枝の上にとまろう。", "backgrounds062017": "セット37:2017年6月リリース", "backgroundBuriedTreasureText": "埋もれた宝", @@ -357,7 +357,7 @@ "backgroundDocksNotes": "造船ドックの上で魚釣りをしましょう。", "backgroundRowboatText": "小舟", "backgroundRowboatNotes": "小舟の上で輪唱しましょう。", - "backgroundPirateFlagText": "海賊のフラッグ", + "backgroundPirateFlagText": "海賊の旗", "backgroundPirateFlagNotes": "見る者に恐怖を与える海賊旗を掲げましょう。", "backgrounds072018": "セット50:2018年7月リリース", "backgroundDarkDeepText": "暗い深海", @@ -451,7 +451,7 @@ "backgroundUnderwaterVentsText": "海底の熱水噴出孔", "backgroundSeasideCliffsNotes": "そびえる断崖の美観とともに海辺に立ちましょう。", "backgroundTreehouseText": "ツリーハウス", - "backgroundTreehouseNotes": "あなた達だけの樹木のアジト、あなた達専用のツリーハウスに集まって遊びましょう。", + "backgroundTreehouseNotes": "林の中に隠れた、自分専用のツリーハウスで遊びましょう。", "backgroundGiantDandelionsNotes": "巨大なタンポポに囲まれてのんびり時を過ごしましょう。", "backgroundGiantDandelionsText": "巨大なタンポポ", "backgroundAmidAncientRuinsText": "古代遺跡の真ん中", @@ -516,8 +516,8 @@ "backgroundRainyBarnyardText": "雨降る納屋の前庭", "backgroundHabitCityRooftopsNotes": "ハビットシティーの屋根と屋根の間を大胆に跳ぼう。", "backgroundHabitCityRooftopsText": "ハビットシティーの屋上", - "backgroundHotAirBalloonNotes": "熱気球で景色の上まで舞い上がろう。", - "backgroundHotAirBalloonText": "熱気球", + "backgroundHotAirBalloonNotes": "気球に乗って空から景色を眺めよう。", + "backgroundHotAirBalloonText": "気球", "backgrounds062020": "セット73:2020年6月リリース", "backgroundStrawberryPatchNotes": "いちご畑から新鮮な喜びを摘もう。", "backgroundStrawberryPatchText": "いちご畑", @@ -874,7 +874,7 @@ "backgrounds082024": "セット123: 2024年8月リリース", "monthlyBackgrounds": "月替わりの背景", "backgrounds092024": "セット124: 2024年9月リリース", - "backgroundMagicDoorInForestText": "森の中の魔法のゲート", + "backgroundMagicDoorInForestText": "森の中の魔法の門", "backgroundMagicDoorInForestNotes": "思い切って森の魔法のゲートに足を踏み入れましょう。", "backgrounds102024": "セット125: 2024年10月リリース", "backgroundSurroundedByGhostsText": "おばけに囲まれる", @@ -882,9 +882,9 @@ "backgrounds022025": "セット129: 2025年2月リリース", "backgroundOldFashionedTeaShopText": "レトロな喫茶店", "backgroundOldFashionedTeaShopNotes": "レトロな喫茶店で、心地よい飲み物を楽しみましょう。", - "backgroundShellGateText": "貝殻の門", + "backgroundShellGateText": "貝殻門", "backgroundSavannaText": "もやのかかった草原", - "backgroundShellGateNotes": "サンゴで装飾された貝殻の門を行進しましょう。", + "backgroundShellGateNotes": "サンゴで装飾された貝殻門の間を行進しましょう。", "backgroundSavannaNotes": "もやのかかった草原をハイキングしましょう。", "backgrounds122024": "セット127: 2024年12月リリース", "backgroundFirstSnowForestText": "森の初雪", @@ -900,5 +900,17 @@ "backgrounds0420205": "セット131:2025年4月リリース", "backgroundGardenWithFlowerBedsText": "花壇のある庭", "backgroundGardenWithFlowerBedsNotes": "花壇のある庭で春の花を楽しもう。", - "backgroundMountainSceneWithBlossomsNotes": "花々が咲き誇る山の素敵な景色と香りを堪能しよう。" + "backgroundMountainSceneWithBlossomsNotes": "花々が咲き誇る山の素敵な景色と香りを堪能しよう。", + "backgrounds062025": "セット133:2025年6月リリース", + "backgroundSummerSeashoreText": "夏の海岸", + "backgroundSummerSeashoreNotes": "夏の海岸で波に乗ろう。", + "backgrounds052025": "セット132:2025年5月リリース", + "backgroundTrailThroughAForestText": "森の散歩道", + "backgroundTrailThroughAForestNotes": "森の散歩道を歩こう。", + "backgrounds072025": "セット134:2025年7月リリース", + "backgroundSirensLairText": "セイレーンの隠れ家", + "backgroundSirensLairNotes": "セイレーンの隠れ家に飛び込む勇気を持とう。", + "backgroundSunnyStreetWithShopsText": "晴れの日の商店街", + "backgrounds082025": "セット135:2025年8月リリース", + "backgroundSunnyStreetWithShopsNotes": "晴れの日の商店街の雰囲気を楽しもう。" } diff --git a/website/common/locales/ja/challenge.json b/website/common/locales/ja/challenge.json index 5940612585..91c656441a 100644 --- a/website/common/locales/ja/challenge.json +++ b/website/common/locales/ja/challenge.json @@ -2,11 +2,11 @@ "challenge": "チャレンジ", "challengeDetails": "チャレンジはプレイヤー同士で競争し、一連の関連したタスクを完了させることによって賞品を獲得するコミュニティのイベントです。", "brokenChaLink": "チャレンジのリンク切れ", - "brokenTask": "チャレンジのリンク切れ: このタスクはもともとチャレンジの一部でしたが、チャレンジから削除されました。どうしますか?", + "brokenTask": "チャレンジのリンク切れ:このタスクはもともとチャレンジの一部でしたが、チャレンジから削除されました。どうしますか?", "keepIt": "このまま残す", "removeIt": "消す", "brokenChallenge": "チャレンジのリンク切れ:このタスクはもともとチャレンジの一部でしたが、チャレンジ(もしくはグループ)が削除されました。残されたタスクはどうしますか?", - "challengeCompleted": "チャレンジ終了です! <%- user %>が優勝しました! 残ったタスクはどうしますか?", + "challengeCompleted": "チャレンジ終了です!<%- user %>が優勝しました!残ったタスクはどうしますか?", "unsubChallenge": "チャレンジのリンク切れ:このタスクはもともとチャレンジの一部でしたが、あなたがチャレンジ登録を取り消しました。残されたタスクはどうしますか?", "challenges": "チャレンジ", "endDate": "終了日", diff --git a/website/common/locales/ja/character.json b/website/common/locales/ja/character.json index 8b56c8143e..8356f2b51b 100644 --- a/website/common/locales/ja/character.json +++ b/website/common/locales/ja/character.json @@ -129,7 +129,7 @@ "healerText": "治療師は痛みに耐え、他者を守ります。やらなかった日課や悪い習慣にも治療師は動揺せず、失敗から体力を回復させる能力を持っています。パーティーの他のメンバーを助けることに喜びを感じる、困難な仕事による死をも恐れぬ理想があるのなら、治療師でプレイしましょう!", "optOutOfClasses": "やめる", "chooseClass": "クラスを選んでください", - "chooseClassLearnMarkdown": "[Habiticaのクラス・システムについて詳しく調べる](https://habitica.fandom.com/ja/wiki/クラス・システム)", + "chooseClassLearnMarkdown": "[Habiticaのクラス・システムについて詳しく調べる](/static/faq/#what-classes)", "optOutOfClassesText": "まだ選ぶ準備ができていない? 焦らなくても大丈夫です! もし選択しない場合、後で設定からクラスを有効にする事ができます。各クラスについてはよくある質問で読むことができます。", "selectClass": "<%= heroClass %>を選択", "select": "選択", diff --git a/website/common/locales/ja/content.json b/website/common/locales/ja/content.json index f264db6c1d..90ceab6859 100644 --- a/website/common/locales/ja/content.json +++ b/website/common/locales/ja/content.json @@ -399,5 +399,16 @@ "questEggOtterText": "カワウソ", "questEggOtterMountText": "カワウソ", "questEggOtterAdjective": "不実な", - "hatchingPotionJade": "ヒスイ" + "hatchingPotionJade": "ヒスイ", + "questEggAlpacaText": "アルパカ", + "questEggAlpacaMountText": "アルパカ", + "questEggAlpacaAdjective": "詰め込みすぎた", + "hatchingPotionCryptid": "未確認生物", + "wackyPotionNotes": "たまごにかけるとへんてこなペットとして孵化します。", + "wackyPotionAddlNotes": "乗騎に育ったりクエストペットの卵には使えません。", + "questEggPlatypusText": "カモノハシ", + "questEggPlatypusMountText": "カモノハシ", + "questEggPlatypusAdjective": "完璧主義者", + "hatchingPotionBalloon": "風船", + "hatchingPotionOpal": "オパール" } diff --git a/website/common/locales/ja/contrib.json b/website/common/locales/ja/contrib.json index cdf8791d2e..c9d8ad56b0 100644 --- a/website/common/locales/ja/contrib.json +++ b/website/common/locales/ja/contrib.json @@ -1,5 +1,5 @@ { - "playerTiersDesc": "チャットで見られる色のついたユーザー名は、その人の貢献者段位を表わしています。段位が高いほど、その人がHabiticaのピクセルアート、コード、コミュニティなどに貢献していることを示します!", + "playerTiersDesc": "チャットで見られる色のついたユーザー名は、その人の貢献者段位を表しています。段位が高いほど、その人がHabiticaのピクセルアート、コード、コミュニティなどに貢献していることを示します!", "tier1": "初段 (友人)", "tier2": "2段 (友人)", "tier3": "3段 (エリート)", @@ -10,7 +10,7 @@ "tierModerator": "モデレーター", "tierStaff": "スタッフ", "tierNPC": "NPC", - "friend": "友達", + "friend": "友人", "elite": "エリート", "champion": "チャンピオン", "legendary": "伝説", diff --git a/website/common/locales/ja/death.json b/website/common/locales/ja/death.json index 7ce9bb9e0d..6cfd909e2f 100644 --- a/website/common/locales/ja/death.json +++ b/website/common/locales/ja/death.json @@ -1,7 +1,7 @@ { "lostAllHealth": "体力がなくなった!", "dontDespair": "がっかりしないで!", - "deathPenaltyDetails": "レベル、ゴールド、装備の一部を失ってしまいました。しかし、がんばればすべてを取り戻せます! あなたなら、きっとやれる――幸あらんことを。", + "deathPenaltyDetails": "レベル、ゴールド、装備の一部を失ってしまいました。しかし、努力すればすべて取り戻せます! あなたなら、きっとできる!頑張って!", "refillHealthTryAgain": "体力を復活させて、もう一度やってみよう", "dyingOftenTips": "よく体力がなくなってしまいますか? ここにヒントがあります! ", "losingHealthWarning": "気をつけて - 体力が減っています!", diff --git a/website/common/locales/ja/defaulttasks.json b/website/common/locales/ja/defaulttasks.json index 965949dbb6..70280aa2eb 100644 --- a/website/common/locales/ja/defaulttasks.json +++ b/website/common/locales/ja/defaulttasks.json @@ -1,10 +1,10 @@ { - "defaultHabit1Text": "生産的な仕事 (鉛筆をクリックして編集)", - "defaultHabit2Text": "ジャンクフードを食べる(鉛筆をクリックして編集)", - "defaultHabit3Text": "階段・エレベーター(鉛筆をクリックして編集)", + "defaultHabit1Text": "生産的な仕事 (鉛筆をクリックして編集)", + "defaultHabit2Text": "ジャンクフードを食べる(鉛筆をクリックして編集)", + "defaultHabit3Text": "階段・エレベーター(鉛筆をクリックして編集)", "defaultHabit4Text": "Habiticaにタスクを追加しましょう", "defaultHabit4Notes": "習慣、日課、To Doのどれでも", - "defaultTodo1Text": "Habiticaに参加する(チェックして完了しましょう!)", + "defaultTodo1Text": "Habiticaに参加する(チェックして完了しましょう!)", "defaultTodoNotes": "このTo Doを完了にする、または編集、削除できます。", "defaultReward1Text": "15分間の休憩", "defaultReward2Text": "自分へのごほうび", diff --git a/website/common/locales/ja/faq.json b/website/common/locales/ja/faq.json index d2bf33b3d5..a13b3c4546 100644 --- a/website/common/locales/ja/faq.json +++ b/website/common/locales/ja/faq.json @@ -12,10 +12,10 @@ "faqQuestion27": "タスクが色を変える理由は何ですか?", "faqQuestion28": "休息が必要な場合、日課を一時停止できますか?", "webFaqAnswer28": "はい!「日課を休む 」ボタンは設定内にあります。これにより、日課を逃した場合でもHPが減りません。これは、休暇中や休息が必要な場合、または他の理由で休憩が必要な場合に役立ちます。クエストに参加している場合、個人の進捗は一時停止されますが、仲間が日課を逃した場合はその分ダメージを受けます。\n\n特定の日課を一時停止するには、スケジュールを編集して期限を0日に設定し、再開する準備ができるまでそのままにしておくことができます。", - "faqQuestion29": "HPを回復する方法はどのようになりますか?", - "faqQuestion30": "HPがなくなった場合、何が起こりますか?", + "faqQuestion29": "HPを回復する方法は何ですか?", + "faqQuestion30": "HPがなくなった場合、どうなりますか?", "faqQuestion31": "マイナスにならないタスクをやり取りしたのに、なぜHPが減少したのでしょうか?", - "faqQuestion32": "クラスを選択できるのはいつですか?", + "faqQuestion32": "クラスはどうやって選択できますか?", "faqQuestion33": "レベル10を超えると現れる青いバーは何ですか?", "webFaqAnswer33": "クラスシステムが解除されると、マナを使用するスキルも解除されます。マナはINTによって決まり、スキルや装備によって調整できます。", "faqQuestion34": "ペットはどの種類の食べ物が好きですか?", @@ -25,7 +25,7 @@ "webFaqAnswer27": "タスクの色は、その値を視覚的に表現しています。全てのタスクは中立の黄色で始まり、青は良い状態を示し、赤は悪い状態を示します。各タスクの値は以下のように決まります:\n\n習慣はプラスボタンまたはマイナスボタンをタップすることによって、青または赤に変化します。良い習慣および悪い習慣は、完了しないと時間の経過とともに徐々に黄色に変化します。両方向の習慣は、ユーザーの入力に基づいてのみ色が変わります。\n\n日課は完了の頻度に基づいて色が変わり、完了すると青く、未完了だと赤くなります。\n\nTo Doは完了されないまま経過する時間とともに徐々に赤くなります。\n\nタスクが赤くなればなるほど、そのタスクを完了すると獲得できるゴールドと経験値が増えるので、一番難しいタスクにも挑戦してくださいね!", "webFaqAnswer29": "体力回復の薬をごほうび欄から25ゴールドで購入することで、15 HPを回復できます。さらに、レベルアップすると常にHPが完全に回復します!", "webFaqAnswer31": "タスクを完了してHPが不当に減少した場合、他のプラットフォームで行われた変更がサーバーに同期される際に遅延が発生した可能性があります。たとえば、モバイルアプリでゴールドを使用したり、マナを使ったり、HPが減少した後にウェブサイトでタスクを完了すると、サーバーはすべてが同期されていることを確認しているだけです。", - "webFaqAnswer32": "Habiticaには戦士、魔道士、盗賊、そして治療師の4つのクラスがあります。全てのプレイヤーは、レベル10に達するまで戦士としてスタートします。レベル10に達すると、新しいクラスを選択するか戦士として続行するかの選択が与えられます。\n\nそれぞれのクラスには異なる装備とスキルがあります。クラスを選択したくない場合は、「選ばない」を選択できます。選ばないを選択すると、後で設定からいつでもクラスシステムを有効にできます。", + "webFaqAnswer32": "Habiticaには戦士、魔道士、盗賊、そして治療師の4つのクラスがあります。全てのプレイヤーは、レベル10に達するまで戦士としてスタートします。レベル10に達すると、新しいクラスを選択するか戦士として続行するかの選択が与えられます。\n\nそれぞれのクラスには異なる装備とスキルがあります。クラスを選択したくない場合は、「選ばない」を選択できます。「選ばない」を選択すると、後で設定からいつでもクラスシステムを有効にできます。", "webFaqAnswer30": "HPがゼロになると、レベルが1下がり、すべてのゴールドと再購入可能な装備の一部が失われます。", "webFaqAnswer34": "ペットは自分の色に合ったエサが好きです。ただし、普通のペットは例外で、すべての普通のペットが同じアイテムを好みます。各ペットが好む具体的なエサは以下の通りです:\n\n * 普通のペット:肉\n * 白いペット:牛乳\n * 砂漠のペット:じゃがいも\n * 赤いペット:いちご\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 * 所持品から「装備」を選択し、装備ドロワーの衣装タブで「衣装を使用する」トグルを見つけます", "webFaqAnswer38": "新しいHabiticaプレイヤーは基本の戦士クラスの装備しか購入できません。プレイヤーは装備を順番に購入して次のピースをアンロックする必要があります。\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チームによって作成された公式のチャレンジだけでなく、他のプレイヤーによって作成されたチャレンジもあります。", "faqQuestion43": "クエストの進め方は?", "webFaqAnswer43": "クエストを始めるには、まずパーティーに参加する必要があります。パーティーは、単独でクエストに挑戦する冒険としても、他のHabiticaプレーヤーを招待してクエストに迅速に取り組むこともできます!\n\nパーティーから「クエストの開始」ボタンを選択して、インベントリからクエストスクロールを選択します。クエストを進めるために通常どおりタスクを完了してください!ボスクエストに挑戦している場合はモンスターに対してダメージを蓄積し、コレクションクエストに挑戦している場合はアイテムを見つけるチャンスがあります。すべての進捗状況は翌日に適用されます。\n\n十分なダメージを与えたり、すべてのアイテムを集めたりすると、クエストが完了し、報酬がもらえます!", @@ -187,5 +187,19 @@ "contentAnswer70": "タイムトラベラーズショップで入手可能な背景、クエスト、ペット、乗騎は一年中入手可能です。", "contentAnswer52": "この変更により、アバターの外観を編集する際に、プレーヤーが所有しているカスタマイズを分類しやすくなると同時に、その他の購入可能なアイテムについては、慣れ親しんだショップの体験を引き継ぐことができるようになることを期待しています。", "contentFaqPara3": "上記の回答でカバーされていない質問があれば、いつでも<%= mailto %>までお問い合わせください!私たちはこの新しいコンテンツリリーススケジュールに興奮しており、すべてのプレーヤーにとってハビティカをより良いものにするために、今後さらに多くのプロジェクトが行われることを楽しみにしています。", - "faqQuestion67": "Habiticaにおけるクラスとはなんですか?" + "faqQuestion67": "Habiticaにおけるクラスとはなんですか?", + "subscriptionDetail00": "すべての有料会員(有料プランをプレゼントされた場合も含む)は有料会員の得点として毎月初めに神秘の砂時計を一つもらえます。", + "subscriptionDetail001": "すべての有料会員は神秘の砂時計を毎月のミステリーアイテムと同じく毎月同じ日にもらえます。", + "subscriptionDetail45": "もし追加で有料プランをプレゼントされた場合に神秘の砂時計を多くもらえたりジェムの最大値が早く増えたりはしますか?", + "subscriptionDetail480": "これらの変更は神秘の砂時計と有料会員のジェムにのみ反映されます。そのほかすべての得点はそのまま残ります。", + "subscriptionPara2": "もし上記の回答にない質問があるならば、いつでも <%= mailto %>.に連絡してください", + "subscriptionBenefitsAdjustments": "有料会員の特典調整", + "subscriptionBenefitsFaqTitle": "有料会員の特典調整のよくある質問", + "subscriptionPara0": "私たちはHabiticaの有料プランをより多くの神秘の砂時計とジェムで過去最高のものにしました!これらの変更は有料プランの特典をもっとわかりやすくするものです。", + "subscriptionHeading0": "神秘の砂時計の変更", + "subscriptionDetail003": "有料会員に新規登録したときすぐに神秘の砂時計を一つもらえます。これは毎月の定期的にもらえる神秘の砂時計としてカウントされます。", + "subscriptionDetail000": "12か月間有料会員になると神秘の砂時計12個を前の4個に追加でもらえます。", + "subscriptionDetail002": "有料会員は、定期支払いの翌月まで神秘の砂時計を待つ必要がなくなります。", + "subscriptionDetail01": "新しく12か月の有料会員購入時一回、12個追加で神秘の砂時計を手に入れることができます。", + "subscriptionDetail010": "これはすべての有料会員が毎月1個ずつもらえる神秘の砂時計に追加してもらえます。" } diff --git a/website/common/locales/ja/front.json b/website/common/locales/ja/front.json index 3348de7bf1..04933bbec8 100644 --- a/website/common/locales/ja/front.json +++ b/website/common/locales/ja/front.json @@ -26,31 +26,31 @@ "login": "ログイン", "logout": "ログアウト", "marketing1Header": "ゲームをプレーして、習慣を改善しましょう", - "marketing1Lead1Title": "あなたの人生のRPG", - "marketing1Lead1": "Habiticaは現実での習慣を改善するゲームです。すべてのタスク(習慣、日課、To Do)を倒すべき小さなモンスターとみなすことで、あなたの人生を「ゲーム化」します。あなたがよりよく生きれば、ゲームも前進します。一方、現実で失敗すると、ゲーム内の分身であるキャラクターも後戻りしてしまいますよ。", + "marketing1Lead1Title": "人生をゲーム化しよう", + "marketing1Lead1": "Habiticaはタスクがたくさんたまっていて困っている人に向いているアプリです。アイテムをゲットしたり、モンスターと戦ったりするなど、基戦ったりームの仕組みで生活をもっと生産的にして、タスクを完了したときの達成感を高めます。タスクをたくさんするほど、ゲーム内の進歩も大きくなります。", "marketing1Lead2Title": "すばらしい装備を手に入れよう", "marketing1Lead2": "習慣を改善して、アバターを成長させましょう。手に入れたカッコいい衣装をみんなに披露しましょう!", - "marketing1Lead3Title": "ときどきボーナスが入ります", + "marketing1Lead3Title": "頑張って賞金を取ろう", "marketing1Lead3": "ギャンブルこそがやる気につながる、そんな人たちには、「確率的報酬」とよんでいるシステムがあります。Habiticaには、積極的、消極的、確実、気まぐれ…すべてのやる気対策が入っています。", - "marketing2Header": "友達と競争しましょう", + "marketing2Header": "友達と協力しよう", "marketing2Lead1Title": "仲間と一緒に生産性を高めよう", "marketing2Lead1": "Habitica を一人でプレーすることもできますが、だれかと協力し、競争し、責任を感じあいはじめてこそ、Habitica の本領発揮です。自分を成長させるプログラムでいちばん効果的なのは、社会的な責任感です。責任感と競争を実現する環境として、ビデオゲーム以上のものがあるでしょうか?", "marketing2Lead2Title": "モンスターと戦おう", - "marketing2Lead2": "ロールプレイングゲームに戦いは不可欠ですよね? パーティーと一緒にモンスターと戦いましょう。モンスターとの戦いは「連帯責任モード」です。あなたがスポーツジムに行くのをさぼった日は、モンスターが *パーティ全員* にダメージを与えます!", + "marketing2Lead2": "パーティーの友達と一緒にクエストに挑戦しよう!モンスターと戦えるかは、あなたにかかっています。デンタルフロスを忘れてしまうと、参加者全員がダメージを受けます!", "marketing2Lead3Title": "チャレンジで競おう", - "marketing2Lead3": "「チャレンジ」を通して友達やHabiticaで出会った人と競争してみましょう。チャレンジの勝者は特別な賞品を手にすることができます。", - "marketing3Header": "アプリと拡張機能", + "marketing2Lead3": "Habiticaのコミュニティが作った「チャレンジ」に参加して、自分の興味や目標に合うタスクに挑戦しましょう。賞品のジェムがもらえるように頑張ろう!", + "marketing3Header": "Habiticaの他の使い方", "marketing3Lead1": "**iPhone もしくは Android** アプリを使えば、外出先でも Habitica が操作できます。私たちは日課などのボタンをクリックするためにwebサイトにいちいちログインするのはめんどうだと気づきました。", "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": "組織での利用", "marketing4Lead1": "教育は、ゲーム化のもっとも適した分野の一つです。近年、電話機とゲームが、どれだけ学生・生徒たちとぴったりくっついていることか--みなさんご存知でしょう。力を解き放つのです!学生・生徒たちを友達同士の競争のスタートラインに並べましょう。よい行いにはレアな賞をあげましょう。学生・生徒の成績と態度が急上昇するのを見ていましょう。", "marketing4Lead1Title": "教育におけるゲーミフィケーション", "marketing4Lead2": "健康管理のコストは増大の一途をたどっており、その影響も大きくなっています。コストを削減し、健康を促進するために無数の計画が立てられています。Habitica も健康的なライフスタイルへの、しっかりとした道を築きあげるものであると私たちは信じています。", "marketing4Lead2Title": "健康維持・向上のゲーミフィケーション", - "marketing4Lead3-1": "あなたの人生をゲーム化したいですか?", + "marketing4Lead3-1": "タスクを楽しんでやってみよう!", "marketing4Lead3-2": "教育、健康管理、その他に Habitica でとりくんでいるグループのことに興味がありますか?", - "marketing4Lead3Title": "すべてをゲーム化しましょう", + "marketing4Lead3Title": "さっそく始めましょう!", "mobileAndroid": "Androidアプリ", "mobileIOS": "iOSアプリ", "oldNews": "ニュース", @@ -180,5 +180,7 @@ "emailUsernamePlaceholder": "例:habitrabbitもしくはgryphon@example.com", "footerProduct": "プロダクト", "translateHabitica": "Habiticaの翻訳", - "incorrectResetPhrase": "アカウントをリセットするには、すべて大文字で <%= magicWord %> と入力してください。" + "incorrectResetPhrase": "アカウントをリセットするには、すべて大文字で <%= magicWord %> と入力してください。", + "marketing3Lead1Title": "アンドロイド&iOS用アプリ", + "marketing4Lead3Button": "Habiticaを始める" } diff --git a/website/common/locales/ja/gear.json b/website/common/locales/ja/gear.json index 3a31387964..9a60b543af 100644 --- a/website/common/locales/ja/gear.json +++ b/website/common/locales/ja/gear.json @@ -2759,7 +2759,7 @@ "armorSpecialSpring2023RogueNotes": "手足は4本しかなくてもイモムシの中で最も高く登り這い上がることができます。知覚が<%= per %>上がります。2023年春の限定装備。", "armorArmoirePaintersApronText": "画家のエプロン", "headMystery202301Notes": "あなたの聴覚はとても鋭くなり、夜明けと露のきらめきが聞こえるでしょう。効果なし。2023年1月有料会員アイテム。", - "weaponSpecialSpring2023MageNotes": "その輝きが大きければ大きいほどその力は強大なものとなります。知能が<%= int %>上がります。2023年春の限定装備。", + "weaponSpecialSpring2023MageNotes": "輝きが大きければ大きいほどその力は強大なものとなります。知能が<%= int %>、知覚が<%= per %>上がります。2023年春の限定装備。", "armorSpecialBirthday2023Text": "すてきでたわけたパーティーローブ", "shieldSpecialSpring2023WarriorNotes": "春を代表する花々で色鮮やかな花束を作りましょう。体質が<%= con %>上がります。2023年春の限定装備。", "shieldSpecialSpring2023HealerNotes": "病院のお見舞いのアクセント、または春のダンスに参加するための儀式の一部! 体質が<%= con %>上がります。2023年春の限定装備。", @@ -3085,7 +3085,31 @@ "armorArmoireSoftWhiteSuitText": "やわらかい白スーツ", "backMystery202402Text": "パラダイスピンクのハート", "weaponMystery202408Text": "神秘の神盾", - "gearItemsCompleted": "すべての<%= klass %>ギアを集めました! 新しいギアは季節のイベントでリリースされます。", - "moreArmoireGearAvailable": "それまでは、<%= armoireCount %> 個のギアをEnchanted Armoireで見つけることができます!", - "moreArmoireGearComing": "ラッキー宝箱も毎月新入荷します!" + "gearItemsCompleted": "すべての<%= klass %>の装備を集めました! 新しいギアは季節のイベントでリリースされます。", + "moreArmoireGearAvailable": "それまでは、<%= armoireCount %> 個の装備をラッキー宝箱で見つけることができます!", + "moreArmoireGearComing": "ラッキー宝箱も毎月新入荷します!", + "weaponSpecialSummer2024RogueNotes": "敵の攻撃を相手に返します!力が<%= str %>上がります。2024年夏の限定装備。", + "weaponSpecialSummer2024WarriorText": "シャチの歯のスライサー", + "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": "ジンベイザメのしっぽ" } diff --git a/website/common/locales/ja/generic.json b/website/common/locales/ja/generic.json index dca2058476..4df090af0a 100644 --- a/website/common/locales/ja/generic.json +++ b/website/common/locales/ja/generic.json @@ -107,7 +107,7 @@ "greeting0": "こんにちは!", "greeting1": "ちょっとあいさつしてみただけ (^_^)", "greeting2": "(遠くから手をブンブン振る)", - "greeting3": "そこのあなた!", + "greeting3": "ヤッホー!", "greetingCardAchievementTitle": "Kawaii", "greetingCardAchievementText": "やあ!よう!こんにちは!<%= count %> 通のあいさつカードをやりとりしました。", "thankyouCard": "ありがとうのカード", @@ -189,7 +189,7 @@ "dismissAll": "すべて閉じる", "messages": "メッセージ", "emptyMessagesLine1": "メッセージはありません", - "emptyMessagesLine2": "ユーザーのプロフィールを見に行って「メッセージ」ボタンを押すと、新しいメッセージを送ることができます。", + "emptyMessagesLine2": "Habiticaのプレイヤーやパーティーメンバーにメッセージを送って会話を始めよう!ユーザーのプロフィールの「メッセージ」ボタンを押すと、新しいメッセージを送ることができます。", "userSentMessage": "<%- user %>からのメッセージが届きました", "letsgo": "レッツゴー!", "selected": "選択中", @@ -238,5 +238,8 @@ "bannedPlayer": "このプレーヤーはアカウント停止されました。", "skipExternalLinkModal": "リンクをクリックするときにCTRL(Windows)またはCommand(Mac)を押したままにすると、このモーダルがスキップされます。", "general": "一般", - "titleCustomizations": "カスタマイズ" + "titleCustomizations": "カスタマイズ", + "newMessage": "新しいメッセージ", + "targetUserNotExist": "「<%= userName %>」というユーザーはいません。", + "rememberToBeKind": "他人には優しくして、コミュニティガイドランを守ってください。" } diff --git a/website/common/locales/ja/groups.json b/website/common/locales/ja/groups.json index e1288e2cae..3df30a0bcd 100644 --- a/website/common/locales/ja/groups.json +++ b/website/common/locales/ja/groups.json @@ -294,7 +294,7 @@ "teamBasedTasksListDesc": "グループメンバー全員が同じタスクボードで作業することで、グループ内の状況を把握することができます。共有タスクボードからタスクを完了させることも、個人のタスクにコピーして外出先で完了させることもできます。", "groupManagementControls": "柔軟な説明責任", "groupManagementControlsDesc": "タスクが本当に完了されたかを確認するためにタスク承認機能を使いましょう。グループメンバーへ任務を共有するためのグループマネージャーを追加し、全てのチームメンバーのためのプライベートなグループチャットを楽しみましょう。", - "inGameBenefits": "ゲーム中のメリット", + "inGameBenefits": "メリットがたくさん!", "inGameBenefitsDesc": "グループメンバーは、限定のジャッカロープの乗騎だけでなく、毎月の特別な装備セットや、ゴールドでジェムを買う機能など、有料プランの特典を全て受けられます。", "letsMakeAccount": "まずはアカウントを作成しましょう", "nameYourGroup": "次に、あなたのグループの名前をつけましょう", @@ -393,7 +393,7 @@ "groupTeacher": "教師として生徒のタスクを設定する", "descriptionOptional": "説明", "descriptionOptionalText": "説明を追加", - "nextPaymentMethod": "次のステップ:支払方法", + "nextPaymentMethod": "次のステップ:お支払い", "createGroup": "グループを作る", "groupParentChildren": "保護者として子どものタスクを設定する", "sendGiftLabel": "ギフトメッセージを送信しますか?", @@ -422,5 +422,8 @@ "challengeBannedSlursPrivate": "あなたのチャレンジには、ハビティカのコミュニティガイドラインに違反する中傷が含まれています。あなたのチャレンジを保存するには、それを削除してください。", "challengeBannedSlurs": "あなたのチャレンジにはHabiticaのコミュニティガイドラインに違反する中傷が含まれており、あなたのチャットおよびチャレンジ作成権限は剥奪されました。詳しくは admin@habitica.com までお問い合わせください。", "challengeBannedWords": "あなたのチャレンジには、1 つ以上の汚い言葉またはアダルト トピックへの言及が含まれています。チャレンジを保存できるように編集してください。単に検閲するのではなく、その言葉を削除する必要があります。", - "upgradeYourCrew": "チームをアップグレードする準備はできていますか?" + "upgradeYourCrew": "チームをアップグレードする準備はできていますか?", + "messageCopiedToClipboard": "コピーしました。", + "createGroupToday": "グループを作成しよう!", + "createGroupTitle": "グループを作成する" } diff --git a/website/common/locales/ja/limited.json b/website/common/locales/ja/limited.json index 4e8b4ee4bd..ba635a740e 100644 --- a/website/common/locales/ja/limited.json +++ b/website/common/locales/ja/limited.json @@ -270,5 +270,13 @@ "winter2025StringLightsHealerSet": "ストリングライトの治療師セット", "winter2025SnowRogueSet": "雪の盗賊セット", "fall2024SpaceInvaderHealerSet": "スペースインベーダーセット(治療師)", - "fall2024BlackCatRogueSet": "黒ネコセット(盗賊)" + "fall2024BlackCatRogueSet": "黒ネコセット(盗賊)", + "spring2025CrystalPointRogueSet": "水晶ポイントの盗賊セット", + "spring2025PlumeriaHealerSet": "プルメリアの治療師セット", + "spring2025MantisMageSet": "カマキリの魔導士セット", + "spring2025SunshineWarriorSet": "サンシャイン戦士セット", + "summer2025ScallopWarriorSet": "ホタテ貝の戦士セット", + "summer2025SquidRogueSet": "イカの盗賊セット", + "summer2025SeaAngelHealerSet": "クリオネの治療師セット", + "summer2025FairyWrasseMageSet": "イトヒキベラの魔導士セット" } diff --git a/website/common/locales/ja/npc.json b/website/common/locales/ja/npc.json index fcd4bfd1ae..d9b9b42d1c 100644 --- a/website/common/locales/ja/npc.json +++ b/website/common/locales/ja/npc.json @@ -132,5 +132,5 @@ "sellItems": "アイテムを売る", "customizationsShopText": "スタイルを変えたいですか?そんなあなたにぴったりの場所です!季節に合った新しい外見を取り揃えています。", "notAvailable": "このアイテムはご利用いただけません。", - "paymentYouSentSubscriptionG1G1": "あなたは <%- name %>
<%= months %>ヶ月分のHabitica有料プランを送り、同じ分の有料プランが1つ贈って、1つ無料で手に入れようキャンペーンによってあなたにも適用されました!" + "paymentYouSentSubscriptionG1G1": "あなたは<%- name %>
さんに<%= months %>か月間のHabitica 有料プランを送信しました。そして、Gift One Get One プロモーションのため、同じ有料プランがあなたのアカウントに適用されました。" } diff --git a/website/common/locales/ja/overview.json b/website/common/locales/ja/overview.json index cd6d68a501..70074ee018 100644 --- a/website/common/locales/ja/overview.json +++ b/website/common/locales/ja/overview.json @@ -1,7 +1,7 @@ { "needTips": "Habiticaをどうやって始めたらいいか、ヒントが必要ですか?ここに簡単なガイドがあります!", "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:現実世界の行動でゲームのポイントを得ましょう", "webStep2Text": "さあ、リストの中の目標に取り組みはじめましょう! あなたがタスクを完了してHabiticaでチェックを入れるごとに、あなたはレベルアップに必要な[経験値](https://habitica.fandom.com/ja/wiki/経験値)と、ごほうびを購入できる[ゴールド](https://habitica.fandom.com/ja/wiki/ゴールド)を獲得します。あなたが悪い習慣を行ってしまったり、日課をやりそびれてしまったりすると、あなたは[体力](https://habitica.fandom.com/ja/wiki/体力)を失います。このように、Habiticaでの経験と体力のバーはあなたが目標に向かって進むうえでの楽しい指標になります。あなたのキャラクターがゲーム中で成長するにつれて、現実世界でのあなたの生活にも改善がみられることでしょう。", "step3": "ステップ 3:カスタマイズして、Habiticaの冒険に出かけよう", diff --git a/website/common/locales/ja/questscontent.json b/website/common/locales/ja/questscontent.json index 0392d80048..9a59344c09 100644 --- a/website/common/locales/ja/questscontent.json +++ b/website/common/locales/ja/questscontent.json @@ -277,8 +277,8 @@ "questBurnoutBossRageSeasonalShop": "`モエツ鬼は、消耗の一撃を放った!`\n\nあーっ! 私たちの未了の日課が、モエツ鬼の炎のえさになってしまい、再度一撃を放つだけのエネルギーとなってしまいました! したたり落ちるスペクトルの炎が、季節の店をおそいました。恐る恐るのぞくと、陽気な季節の魔女が消耗した魂となって、ぶら下がっています。\n\nNPC たちを救わないと! Habitica の民よ、急いで自分のタスクをこなし、モエツ鬼が三度の攻撃を加えてくる前に退治しましょう!", "questBurnoutBossRageTavern": "`モエツ鬼が、消耗の一撃を下した!`\n\nたくさんの Habitica の人びとは、キャンプ場にひそみ、モエツ鬼から隠れていますが、もう無理です! 天をも揺るがす吠え声とともに、モエツ鬼は熱さで白く光る手でキャンプ場を一かき。キャンプ場の支配人・Danielが、モエツ鬼の手に捕まり、目の前で消耗した魂へと姿を変えられてしまいました!\n\nこのせっかちがもたらす恐怖は、そう長くはつづきません。あきらめてはいけません…モエツ鬼にとどめを刺すまで、あとほんの少しです!", "questFrogText": "散らかしカエルの沼", - "questFrogNotes": "あなた達がヨドミ沼をのろのろと歩いていると、@starsystemicが大きな看板を指さしました。そこにはこうあります「進み続けなさい--できるものなら」

「そんなに難しいことじゃないだろう!」@RosemonkeyCTが言います。「道は広いし、見晴らしもいい!」

しかし進み続けるうち、あなた達は通り道が徐々に沼の汚れにふさがれ、奇妙な青いゴミやがらくたが散らかされていくのに気づきます。とうとう、先に進むことはできなくなってしまいました。

どうしてこんな汚い場所に来てしまったのだろうとあなたが周囲を見回していると、@Jon Arjinbornが「あれを見ろ!」と叫びました。汚い洗濯物で着飾り、青い炎で照らされたカエルが、怒ってぬかるみから飛び出してきます。先に進むためには、この散らかし毒ガエルを打ち破らねばなりません!", - "questFrogCompletion": "カエルは小さくなって、泥の中に戻っていきました。やりました。カエルがすごすごと去っていった後には、青いネバネバは消え、目の前は晴れていきました。

道の真ん中でしゃがみこんでいると、そこには 3 つのきれいなたまごが。「透明の水槽に入れてやれば、かわいいオタマジャクシが見られるよ!」と、@Breadstrings 。「ほら、あなたが持って帰んなよ。」", + "questFrogNotes": "友達と一緒にヨドミ沼をのろのろと歩いていると、@starsystemicが大きな看板を指さします。そこには、「進み続けなさい ― できるなら」と書いてあります。

「そんな難しいことじゃないでしょ!」と、@RosemonkeyCTが言います。「道は広いし、見晴らしもいいもん!」

しかし、進み続けるうち、通り道が徐々に沼の汚れにふさがれ、奇妙な青いゴミやがらくたが散らかされていくことに気づきます。とうとう、先に進むことはできなくなってしまいました。

どうしてこんなに汚くなったのだろう、と周囲を見回していると、「気を付けて!」と、@Jon Arjinbornの叫び声が聞こえてきます。汚い洗濯物を身につけて、青い炎で照らされたカエルが、怒って泥沼から飛び出てきます。先に進むためには、この散らかし毒ガエルを打ち破らなければなりません!", + "questFrogCompletion": "戦いを負けたカエルは縮こまって、泥の中に戻っていきます。カエルがにゅるりと去っていくと、青いスライムが消え、視界が明けます。

なんと、道の真ん中に 3 つのきれいなたまごが見えてきました!「透明な殻の中に小さなオタマジャクシが見れるよ!」と、@Breadstrings 。「これ、あなたが持って帰りな。」", "questFrogBoss": "散らかしカエル", "questFrogDropFrogEgg": "カエル(たまご)", "questFrogUnlockText": "市場でカエルのたまごを買えるようになります", @@ -677,7 +677,7 @@ "questFluoriteUnlockText": "市場で蛍石のたまごがえしの薬を買えるようになります", "evilSantaAddlNotes": "「猟師のサンタ」と「子グマの捜索」のクエストは何回でも挑戦できますが、クエスト報酬の特別なペットと乗騎が手に入るのは最初の一回だけです。ご注意ください。", "delightfulDinosText": "「愉快な恐竜」クエストセット", - "delightfulDinosNotes": "「テラー・ダクティル」「トリケラ・ステップス」「発掘された恐竜」のセット。<%= date %>まで購入できます。", + "delightfulDinosNotes": "「テラー・ダクティル」「トリケラ・ステップス」「発掘された恐竜」のセット。", "questRubyCollectRubyGems": "ルビー", "questRubyCollectVenusRunes": "金星のルーン", "questRubyCollectAquariusRunes": "みずがめ座のルーン", @@ -774,5 +774,37 @@ "questFungiRageEffect": "憂鬱キノコから霧が発生し、パーティを取り囲んで雰囲気を悪くし、魔力を抑制します。パーティーのMPが減少します!", "questCrabText": "いじわるカニ", "questCrabBoss": "いじわるカニ", - "questCrabRageTitle": "気まぐれないじわる" + "questCrabRageTitle": "気まぐれないじわる", + "questGiraffeText": "キ・リン", + "questOpalUnlockText": "オパールのたまごがえしの薬を市場で買えるようになる", + "questGiraffeNotes": "イッポイッポ草原の長い草の中を歩いて、タスクから休憩するために自然を感じ取っている途中。小山を通り抜けると、遠くに物がたくさん置いてあることに気づく。楽器、画材、電子機器などがたくさん集まっているようだ。

ちょっと近づいてみると、「おい!何してるの?!」と、アカシアの木の後ろから叫び声が聞こえる。カッコいいサングラスをつけた、背の高くて堂々としたキリンが現れる。手にはギターを持っていて、長い首からカメラがぶら下がっている。「これは全部僕の物だよ!気を付けて、何も触らないで!」

多くの物にほこりがたまっていることに気づく。「わぁ、趣味がたくさんあるんだね!好きな作品とか、見せてくれない?」と聞いてみる。

キリンは集めたものを全部見渡すと、顔をそむけてしまう。「こんなにたくさんあるのに、どこから始めたらいいのか、わからないんだよ!やる気が出るように手伝って!」", + "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": "キ・リンの物の整理を助けてあげると、なんだか楽しくなって元気が出る!

キリンはギターを手に取って、教則本を開いて、さっそく音を出してみる。「君のおかげでやる気が出たよ!ありがとう!まだまだ先はあるけどね。これ、お礼にあげる!」" } diff --git a/website/common/locales/ja/settings.json b/website/common/locales/ja/settings.json index 791812f1ab..b14a9e3c82 100644 --- a/website/common/locales/ja/settings.json +++ b/website/common/locales/ja/settings.json @@ -55,7 +55,6 @@ "APIToken": "API トークン(これはあなたのパスワードです。上記の注意をよく読んでください!)", "showAPIToken": "APIトークンを表示する", "hideAPIToken": "APIトークンを非表示にする", - "APITokenWarning": "新しいAPIトークンが必要な場合 (例えば、誤って公開してしまったとき) は、 <%= hrefTechAssistanceEmail %> あてに、ユーザーIDと現在のトークンを書き添えてメールを送ってください。一度リセットした後は、Webサイトとモバイルアプリをログアウトしたり、その他にお使いのHabiticaツールに新しいトークンを入力したりして、すべて再認証する必要があります。", "thirdPartyApps": "サードパーティー アプリ", "resetDo": "はい。アカウントをリセットします!", "resetComplete": "リセット完了!", @@ -117,7 +116,7 @@ "generate": "生成する", "getCodes": "コードを取得する", "webhooks": "Webhook", - "webhooksInfo": "Webhookは、タスクの採点や更新、グループ内のメッセージ送信など、特定のアクションが実行されたときに通知を受け取る方法を開発者に提供します。Webhookを作成することで、Habiticaの変更を監視し、その変更に対応するアプリを構築することができます。

Webhookに関する追加情報や例については、API Docsをご覧ください", + "webhooksInfo": "Webhookは、タスクの採点や更新、グループ内のメッセージ送信など、特定のアクションが実行されたときに通知を受け取る方法を開発者に提供します。Webhookを作成することで、Habiticaの変更を監視し、その変更に対応するアプリを構築することができます。

Webhookに関する追加情報や例については、API Docsをご覧ください。", "enabled": "有効", "webhookURL": "webフック URL", "invalidUrl": "無効な Url", @@ -247,11 +246,11 @@ "resetDetail3": "すべてのタスク(チャレンジのものを除く)は永久に削除され、履歴データもすべて失われます。", "resetDetail4": "有料プランのミステリーアイテムと無料記念アイテムを除くすべての装備が失われます。削除されたアイテムは、すべての限定装備を含めて買い戻すことができます(クラス固有の装備を買い戻すには、正しいクラスに属している必要があります)。", "APICopied": "APIトークンがクリップボードにコピーされました。", - "APITokenDisclaimer": "あなたのAPI Tokenはパスワードのようなものです。公には共有しないでください。ユーザーIDの入力を求められることがありますが、Githubを含め、他の人が見られる場所にAPI Tokenを投稿しないでください。

注意:新しいAPI Tokenが必要な場合(誤って共有してしまった場合など)、admin@habitica.comにあなたのユーザーIDと現在のTokenをメールしてください。一度リセットされたら、ウェブサイトやモバイルアプリからログアウトし、新しいTokenをハビティカの他のツールに提供することで、すべてを再認証する必要があります。", + "APITokenDisclaimer": "あなたのAPIトークンはパスワードのようなものです。だれとも共有しないでください。ユーザーIDの入力を求められることはありますが、Githubを含め、他の人が見られる場所にAPIトークンを投稿しないでください。

新しいAPIトークンが必要な場合(誤って共有してしまった場合など)、パスワードを変えてリセットすることができます。一度リセットされたら、Habiticaを使用するデバイスに再びログインし、サードパーティーツールを使用する場合、APIトークンを更新する必要があります。", "changeEmailDisclaimer": "Habiticaにログインしたり、お知らせを受け取ったりするためのメールアドレスです。", "userNameSuccess": "ユーザー名の変更に成功しました", "addWebhook": "webフックの追加", - "changePasswordDisclaimer": "パスワードは8文字以上でなければなりません。他で使用していない強力なパスワードをお勧めします。", + "changePasswordDisclaimer": "パスワードは8文字以上でなければなりません。パスワードを変更すると他のデバイスや使用中のサードパーティーツールからログアウトされます。", "audioThemeDisclaimer": "効果音のテーマは、Habiticaのウェブサイトにオプションの効果音を追加します。音量レベルはコンピュータの音量設定で調節できます。", "noClassSelected": "クラス選択なし", "changeClassDisclaimer": "クラスを変更すると、既存のステータスポイントはすべて払い戻されます。新しいクラスを選択したら、プロフィールのステータスセクションからステータスポイントを調整してください。", diff --git a/website/common/locales/ja/subscriber.json b/website/common/locales/ja/subscriber.json index 60cde76fdc..2145924c2b 100644 --- a/website/common/locales/ja/subscriber.json +++ b/website/common/locales/ja/subscriber.json @@ -2,7 +2,7 @@ "subscription": "有料プラン", "subscriptions": "有料プラン", "sendGems": "ジェムを送る", - "buyGemsGold": "無料のマンスリージェム", + "buyGemsGold": "毎月無料のジェム", "mustSubscribeToPurchaseGems": "ゴールドでジェムを買うには、有料プランに加入する必要があります", "reachedGoldToGemCapQuantity": "あなたがリクエストした数 <%= quantity %> は、今月中に購入できる上限数を超えています(<%= convCap %>)。毎月1日から3日のいずれかの時点で、最大数が利用可能になります。有料プランにご加入いただきありがとうございます!", "mysteryItem": "毎月の限定アイテム", @@ -21,7 +21,7 @@ "subGemName": "有料会員のジェム", "maxBuyGems": "今月ゴールドで購入可能なジェムをすべて買い切りました。来月の1~3日頃にまた新しく購入可能になります。有料プランにご加入いただきありがとうございます!", "timeTravelers": "タイムトラベラー", - "timeTravelersPopoverNoSubMobile": "時の扉を開いて謎のタイムトラベラーを呼び出すには、神秘の砂時計が必要なようです。", + "timeTravelersPopoverNoSubMobile": "有料会員はタイムトラベラーの店で使える神秘の砂時計が毎月もらえます!", "timeTravelersPopover": "神秘の砂時計によって時の扉が開かれた! さあ、我々に取り寄せてほしい過去や未来のものを選んでくれたまえ。", "mysterySetNotFound": "ミステリーセットが見つからない、またはすでに持っています。", "mysteryItemIsEmpty": "ミステリー アイテムが売り切れ", @@ -91,7 +91,7 @@ "mysterySet301703": "クジャクのスチームパンクセット", "mysterySet301704": "キジのスチームパンクセット", "mysterySetwondercon": "Wondercon イベント", - "subUpdateCard": "クレジットカードを更新する", + "subUpdateCard": "クレジットカードを変更する", "subUpdateTitle": "更新", "notEnoughHourglasses": "神秘の砂時計が足りません。", "petsAlreadyOwned": "このペットはすでにもっています。", @@ -120,9 +120,9 @@ "gemBenefit2": "アバターをHabiticaの世界観に溶け込ませるための背景!", "gemBenefit3": "ペットのたまごが手に入る、愉快な連続クエスト。", "gemBenefit4": "アバターの能力値をリセット、またはクラスを変更する。", - "subscriptionBenefit1": "商人のAlexanderは、市場でジェムを1つにつき20ゴールドですぐ売ってくれます!", - "subscriptionBenefit3": "毎日の落とし物上限を2倍にして、Habiticaでより多くのアイテムを見つけましょう。", - "subscriptionBenefit4": "毎月、あなたのアバターを着飾るためのユニークでおしゃれなアイテムです。", + "subscriptionBenefit1": "市場でゴールドで購入可能なジェムを最大50個得て、クエスト、カスタマイズ、ペットなどが購入できます!", + "subscriptionBenefit3": "毎日2倍のタマゴ、たまごがえしの薬と餌を見つけてペットコレクションを増やしましょう!", + "subscriptionBenefit4": "最新の限定装備で着飾りましょう。有料プランに登録して<%= month %>の <%= currentMysterySetName %>をゲットしよう!", "subscriptionBenefit5": "初めて有料会員になったときは、ロイヤルパープルのジャッカロープのペットを受け取れます。", "subscriptionBenefit6": "タイムトラベラーの店でアイテムを買うために神秘の砂時計を手に入れましょう!", "purchaseAll": "セットを購入する", @@ -148,7 +148,7 @@ "viewSubscriptions": "有料プランを見る", "giftASubscription": "有料プランをプレゼントする", "doubleDropCap": "落とし物を2倍に", - "monthlyMysteryItems": "毎月のミステリーアイテム", + "monthlyMysteryItems": "毎月の限定装備セット", "subscribersReceiveBenefits": "有料会員はこれらの有益な特典を受けられます!", "cancelYourSubscription": "有料プランを解約しますか?", "needToUpdateCard": "カードを更新する必要がありますか?", @@ -236,5 +236,25 @@ "mysterySet202408": "神秘の神盾セット", "mysterySet202409": "ヘリオトロープの魔法使いセット", "mysterySet202410": "キャンディーコーンのキツネセット", - "mysterySet202412": "ステッキキャンディのワタオウサギセット" + "mysterySet202412": "キャンディケインのワタオウサギセット", + "mysterySet202411": "毛むくじゃらの喧嘩屋セット", + "mysterySet202508": "豪華な刃セット", + "mysterySet202503": "ジェイドのジャガーノートセット", + "mysterySet202501": "フロストバインダーセット", + "mysterySet202505": "羽ばたくアゲハチョウセット", + "mysterySet202507": "元気なスケーターセット", + "subscribeTo": "に登録", + "monthlyMysticHourglass": "毎月の神秘の砂時計", + "unlockNGems": "毎月<%= count %> 個のジェムをアンロックしよう", + "resubscribeToPickUp": "有料プランに再登録して中断したところから続けましょう!", + "popular": "人気", + "subscribe": "有料プランの登録", + "giftSubscriptionLeadText": "贈りたい有料プランを選択しよう!この購入は自動的に更新されません。", + "recurringMonthly": "毎月自動更新", + "maxGemCap": "最大限のジェムからスタート", + "nMonthsGift": "<%= months %>ヶ月プラン", + "oneMonthGift": "1ヶ月プラン", + "selectPayment": "お支払い方法を選択する", + "mysterySet202504": "伝説の雪男セット", + "mysterySet202506": "太陽の輝きセット" } diff --git a/website/common/locales/ko/achievements.json b/website/common/locales/ko/achievements.json index b4f3a06721..521d8ae571 100755 --- a/website/common/locales/ko/achievements.json +++ b/website/common/locales/ko/achievements.json @@ -163,5 +163,7 @@ "achievementCatsText": "모든 표준 고양이 애완동물 색상을 부화했습니다: 치타, 사자, 세이버투스, 호랑이!", "achievementDinosaurDynastyText": "모든 표준 색상의 새와 공룡 애완동물이 부화했습니다: 매, 올빼미, 앵무새, 공작새, 펭귄, 수탉, 익룡, 티라노사우루스, 트리케라톱스, 벨로시랩터!", "achievementBonelessBossText": "모든 표준 색상의 무척추동물 애완동물이 부화했습니다: 딱정벌레, 나비, 갑오징어, 누디가지, 문어, 달팽이, 거미!", - "achievementDuneBuddyText": "사막에 사는 모든 표준 색상의 애완동물이 부화했습니다: 아르마딜로, 선인장, 여우, 개구리, 뱀, 거미!" + "achievementDuneBuddyText": "사막에 사는 모든 표준 색상의 애완동물이 부화했습니다: 아르마딜로, 선인장, 여우, 개구리, 뱀, 거미!", + "achievementRoughRider": "거친 라이더", + "achievementDuneBuddy": "모래언덕 친구들" } diff --git a/website/common/locales/ko/backgrounds.json b/website/common/locales/ko/backgrounds.json index d9359dc74b..339cf5c938 100755 --- a/website/common/locales/ko/backgrounds.json +++ b/website/common/locales/ko/backgrounds.json @@ -711,5 +711,22 @@ "backgroundBlossomingTreesNotes": "꽃이 피는 나무 아래 감상을하며 걷는다.", "backgroundFlowerShopNotes": "꽃가게의 달콤한 향기를 즐기다.", "backgroundSpringtimeLakeText": "샘물 호수", - "backgroundSpringtimeLakeNotes": "샘물 호수의 아름다운 광경을 바라본다." + "backgroundSpringtimeLakeNotes": "샘물 호수의 아름다운 광경을 바라본다.", + "backgroundRainbowEucalyptusText": "무지개 유칼립투스", + "backgroundMessyRoomText": "더러운 방", + "backgroundByACampfireText": "모닥불 옆에서", + "backgroundByACampfireNotes": "모닥불 옆에서 따스한 빛을 만끽하세요.", + "backgroundMessyRoomNotes": "더러운 방을 정리하세요.", + "backgroundRainbowEucalyptusNotes": "무지개 유칼립투스 숲을 감상하세요.", + "backgrounds092022": "세트 100: 2022년 9월에 출시됩니다", + "backgroundTheatreStageText": "극장 무대", + "backgroundTheatreStageNotes": "극장 무대에서 공연하세요.", + "backgroundAutumnPicnicText": "가을 소풍", + "backgroundAutumnPicnicNotes": "가을의 소풍을 즐기세요.", + "backgroundOldPhotoText": "오래된 사진", + "backgroundOldPhotoNotes": "오래된 사진 속 포즈를 취하세요.", + "backgrounds102022": "SET 101: 2022년 10월에 출시", + "backgroundSpookyRuinsText": "으스스한 폐허", + "backgroundSpookyRuinsNotes": "으스스한 폐허를 모험하세요.", + "backgroundMaskMakersWorkshopText": "마스크 제작자의 워크숍" } diff --git a/website/common/locales/ko/faq.json b/website/common/locales/ko/faq.json index 8509dc81a6..7eb254a58e 100755 --- a/website/common/locales/ko/faq.json +++ b/website/common/locales/ko/faq.json @@ -2,21 +2,70 @@ "frequentlyAskedQuestions": "자주 묻는 질문들", "iosFaqStillNeedHelp": "[Wiki FAQ](http://habitica.wikia.com/wiki/FAQ)에 없는 질문을 하고 싶으시다면, 메뉴 > 선술집에 오셔서 선술집 채팅에서 물어보세요! 도움을 드릴게요.", "androidFaqStillNeedHelp": "이 목록이나 [위키 FAQ](http://habitica.wikia.com/wiki/FAQ)에 없는 질문을 하고 싶다면, 메뉴 > 주막에 와서 물어보세요! 기꺼이 도와드립니다.", - "webFaqStillNeedHelp": "이 리스트나 [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ)에 없는 질문이 있다면 [Habitica Help guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)에 방문해보세요! 도움을 드리겠습니다.", + "webFaqStillNeedHelp": "이 리스트나 [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ)에 없는 질문이 있다면 [Habitica Help guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)에 방문해보세요! 도움을 드리겠습니다.", "parties": "파티들", "commonQuestions": "일반 퀘스트", "faqQuestion25": "다양한 과제 유형은 뭐에요?", - "faqQuestion27": "과제의 색깔이 변경되는 이유는 뭐에요?", - "webFaqAnswer25": "Habitica는 사용자의 필요에 맞춰 습관, 일일 과제, 할 일까지 총 세 가지 과제 유형을 제공합니다.\n\n습관은 좋은 습관이나 나쁜 습관을 고를 수 있으며, 하루에 여러 번 또는 불규칙한 일정으로 추적하고 싶은 항목을 나타냅니다. 좋은 습관은 골드와 경험치(Exp)와 같은 보상을 제공하지만, 나쁜 습관은 체력(HP)을 잃게 만듭니다.\n\n일일 과제는 더 구조화된 일정에 따라 완료하고 싶은 반복 과제입니다. 예를 들어, 하루에 한 번, 일주일에 세 번, 또는 한 달에 네 번 수행하는 식입니다. 일일 과제를 놓치면 HP를 잃지만, 과제의 난이도가 어려울수록 보상이 더 커집니다!\n\n할 일은 완료 후 보상을 제공하는 일회성 작업입니다. 할 일에는 마감일이 있을 수 있지만, 놓쳐도 HP를 잃지는 않습니다.\n\n달성하려는 목표에 가장 잘 맞는 과제 유형을 선택하세요!", - "faqQuestion26": "과제에는 어떤 예시가 있나요?", - "webFaqAnswer26": "긍정적인 습관(장려하고 싶은 행동, + 버튼이 있어야 함)\n\n * 비타민 섭취\n * 치실 사용\n * 1시간동안 공부하기\n\n부정적인 습관(제한하거나 피하고 싶은 행동, - 버튼이 있어야 함)\n\n * 흡연\n * 부정적인 뉴스 시청\n * 손톱 뜯기\n\n이중적인 습관(긍정적인 옵션과 부정적인 옵션을 포함하는 습관, +와 - 버튼이 모두 있어야 함)\n\n * 물 마시기 vs 탄산음료 마시기\n * 공부하기 vs 미루기\n\n샘플 일일(정기적인 일정에 따라 반복하려는 작업)\n * 설거지\n * 물주기\n * 운동 30분\n\n할 일(한 번만 수행하면 되는 작업)\n\n * 일정\n * 옷장 정리\n * 에세이 마무리", + "faqQuestion27": "과제의 색상이 변경되는 이유는 뭔가요?", + "webFaqAnswer25": "Habitica는 사용자의 필요에 맞춰 습관, 일일 과제, 할 일까지 총 세 가지 과제 유형을 제공합니다.\n\n습관은 좋은 습관 또는 나쁜 습관을 고를 수 있으며, 하루에 여러 번 또는 불규칙한 일정으로 추적하고 싶은 항목을 나타냅니다. 좋은 습관은 골드와 경험치(Exp)와 같은 보상을 제공하지만, 나쁜 습관은 체력(HP)을 잃게 만듭니다.\n\n일일 과제는 더 구조화된 일정에 따라 완료하고 싶은 반복 과제입니다. 예를 들어, 하루에 한 번, 일주일에 세 번, 또는 한 달에 네 번 수행하는 식입니다. 일일 과제를 놓치면 HP를 잃지만, 과제의 난이도가 어려울수록 보상이 더 커집니다!\n\n할 일은 완료 후 보상을 제공하는 일회성 작업입니다. 할 일에는 마감일이 있을 수 있지만, 놓쳐도 HP를 잃지는 않습니다.\n\n달성하려는 목표에 가장 잘 맞는 과제 유형을 선택하세요!", + "faqQuestion26": "과제는 예시로 어떤 것이 있나요?", + "webFaqAnswer26": "긍정적인 습관(장려하고 싶은 행동, + 버튼이 있어야 함)\n\n * 비타민 섭취\n * 치실 사용\n * 1시간 동안 공부하기\n\n부정적인 습관(제한하거나 피하고 싶은 행동, - 버튼이 있어야 함)\n\n * 흡연\n * 부정적인 뉴스 시청\n * 손톱 뜯기\n\n이중 습관(긍정적인 옵션과 부정적인 옵션을 포함하는 습관, +와 - 버튼이 모두 있어야 함)\n\n * 물 마시기 vs 탄산음료 마시기\n * 공부하기 vs 미루기\n\n일일 과제 예시(정기적으로 반복하고 싶은 과제)\n * 설거지\n * 식물에 물 주기\n * 운동 30분\n\n할 일 예시(한 번만 수행하면 되는 과제)\n\n * 일정\n * 옷장 정리\n * 에세이 마무리", "faqQuestion29": "HP는 어떻게 회복하나요?", - "webFaqAnswer27": "작업의 색상은 작업의 가치를 시각적으로 표현한 것입니다. 모든 작업은 노란색으로 시작하여 기본, 파란색은 좋음, 빨간색은 나쁨으로 표시됩니다. 각 작업 유형에 따라 작업의 가치가 결정되는 방식은 다음과 같습니다:\n\n더하기 또는 빼기 버튼을 누르는 것에 따라 습관이 파란색 또는 빨간색으로 바뀝니다. 긍정적인 습관과 부정적인 습관은 완료하지 않으면 시간이 지남에 따라 노란색으로 변합니다. 이중습관은 입력에 따라 색상만 바뀝니다.\n\n매일 완료한 빈도에 따라 색이 바뀌며, 완료하면 파란색으로, 누락하면 빨간색으로 바뀝니다.\n\n할 일은 미완성 상태가 오래 지속될수록 점차 빨간색으로 바뀝니다.\n\n빨간색이 많을수록 과제를 완료하면 더 많은 골드와 경험치를 획득할 수 있으니 아무리 어려운 과제라도 도전해 보세요!", - "faqQuestion28": "휴식이 필요한 경우 과제를 멈출 수 있나요?", - "webFaqAnswer28": "네! “피해 일시 정지” 버튼은 설정에서 찾을 수 있습니다. 이 버튼을 사용하면 과제를 놓쳐 HP를 잃는 것을 방지할 수 있습니다. 휴가 중이거나 휴식이 필요한 경우, 또는 다른 이유로 휴식이 필요할 때 유용합니다. 퀘스트에 참여 중인 경우, 자신이 진행 중인 퀘스트는 일시정지되지만 파티원이 놓친 과제로 인한 피해는 그대로 받습니다.\n\n특정 일일과제를 일시 중지하려면 다시 시작할 준비가 될 때까지 0일마다 완료로 일정을 수정할 수 있습니다.", - "webFaqAnswer29": "보상 항목에서 25 골드로 체력 회복 포션을 구입해 15 HP를 회복할 수 있습니다. 또, 레벨을 올리면 전체 HP를 항상 회복할 수 있습니다!", - "faqQuestion30": "HP가 다 떨어지면 어떻게 되나요?", - "webFaqAnswer30": "HP가 0이 되면, 1레벨과 모든 골드 그리고 상점에서 구매할 수 있는 장비 하나를 잃게 됩니다.", - "faqQuestion31": "나쁜 과제가 아닌 과제와 상호작용할 때 HP가 손실되는 이유는 무엇인가요?", - "webFaqAnswer31": "작업을 완료했는데 HP를 잃는다면 서버가 다른 플랫폼에서의 내용을 동기화하는 동안 지연이 발생한 것입니다. 예를 들어 모바일 앱에서 골드, 마나를 사용하거나 HP를 잃은 후 웹사이트에서 작업을 완료하는 경우, 서버는 모든 것이 동기화되었는지 확인하는 것뿐입니다." + "webFaqAnswer27": "과제의 색상은 과제의 가치를 시각적으로 나타냅니다. 모든 과제는 중립을 의미하는 노란색으로 시작되며, 파란색은 좋음, 빨간색은 나쁨을 의미합니다. 각 과제 유형이 과제의 가치를 결정하는 방식은 다음과 같습니다:\n\n습관은 더하기 또는 빼기 버튼을 누르는 것에 따라 파란색 또는 빨간색으로 변합니다. 좋은 습관 또는 나쁜 습관은 완료하지 않으면 시간이 지남에 따라 노란색으로 되돌아갑니다. 이중 습관은 당신의 입력에 따라 색상만 변합니다.\n\n일일 과제는 완료 빈도에 따라 색이 변하며, 완료할수록 파란색으로, 실패할수록 빨간색으로 변합니다.\n\n할 일은 미완성 상태가 길어질수록 점차 빨간색으로 변합니다.\n\n과제가 빨간색일수록 완료 시 획득하는 골드와 경험치가 더 많아지니, 아무리 어려운 과제라도 도전해 보세요!", + "faqQuestion28": "휴식이 필요한 경우 일일 과제를 멈출 수 있나요?", + "webFaqAnswer28": "네! “피해 일시 정지” 버튼은 설정에서 찾을 수 있습니다. 이 버튼을 사용하면 일일 과제를 놓쳐 HP를 잃는 것을 방지할 수 있습니다. 휴가 중이거나 휴식이 필요한 경우, 또는 다른 이유로 게임을 중단해야 할 때 유용합니다. 퀘스트에 참여 중이라면 자신의 진행 상황은 일시 중단되지만, 파티원이 놓친 일일 과제로 인한 피해는 그대로 받습니다.\n\n특정 일일 과제를 일시 중지하려면 일정을 수정하여 0일마다 반복되도록 설정하고, 준비가 되면 다시 시작할 수 있습니다.", + "webFaqAnswer29": "보상 항목에서 25 골드로 체력 물약을 구입해 15 HP를 회복할 수 있습니다. 또한, 레벨을 올릴 때마다 HP가 완전히 회복됩니다!", + "faqQuestion30": "HP가 전부 손실되면 어떻게 되나요?", + "webFaqAnswer30": "HP가 0이 되면 레벨이 한 단계 떨어지고, 모든 골드 그리고 재구매할 수 있는 장비 하나를 잃게 됩니다.", + "faqQuestion31": "나쁘지 않은 과제와 상호작용할 때 HP가 손실되는 이유는 무엇인가요?", + "webFaqAnswer31": "과제를 완료한 후 HP가 감소해야 하지 않는 상황에서 감소했다면, 서버가 다른 플랫폼에서 내용을 동기화하는 동안 지연이 발생한 것입니다. 예를 들어, 모바일 앱에서 골드, 마나를 사용하거나 HP를 잃은 후 웹사이트에서 과제를 완료한다면, 모든 데이터가 동기화되었는지 서버가 확인하는 것입니다.", + "faqQuestion32": "직업을 어떻게 선택하나요?", + "webFaqAnswer32": "모든 플레이어는 전사로 시작합니다. 레벨 10에 도달했을 때, 새로운 직업을 선택하거나 전사로 계속해서 플레이할 수 있는 선택권이 주어집니다.\n\n각 직업은 서로 다른 장비와 스킬을 가지고 있습니다. 직업을 선택하지 않으려면 “닫기”를 선택할 수 있습니다. 닫기를 선택해도 나중에 설정 메뉴에서 직업 시스템을 활성화할 수 있습니다.\n\n레벨 10 이후에 직업을 변경하려면 환생의 오브를 사용해야 합니다. 환생의 오브는 레벨 50에 도달하면 상점에서 6개의 보석으로 구매할 수 있으며, 레벨 100에 도달하면 무료로 획득할 수 있습니다.", + "faqQuestion33": "레벨 10 이후에 나타나는 파란색 바는 무엇인가요?", + "webFaqAnswer33": "직업 시스템을 해금하면 마나를 소모해 사용할 수 있는 스킬도 해금됩니다. 마나는 지력 스탯에 따라 결정되며, 스킬과 장비로 조정할 수 있습니다.", + "faqQuestion34": "펫이 좋아하는 먹이는 뭔가요?", + "webFaqAnswer34": "펫은 자신의 색상과 맞는 음식을 좋아합니다. 기본 펫은 예외이지만, 모든 기본 펫은 같은 아이템을 좋아합니다. 각 펫이 좋아하는 먹이는 아래에서 다음과 같습니다:\n \n* 기본 펫은 고기를 좋아합니다.\n * 하얀색 펫은 우유를 좋아합니다.\n * 사막 펫은 감자를 좋아합니다.\n * 빨간색 펫은 딸기를 좋아합니다.\n * 그늘 펫은 초콜릿을 좋아합니다.\n * 해골 펫은 생선을 좋아합니다.\n * 좀비 펫은 썩은 고기를 좋아합니다.\n * 분홍 솜사탕 펫은 분홍 솜사탕을 좋아합니다.\n * 파란 솜사탕 펫은 파란 솜사탕을 좋아합니다.\n * 황금빛 펫은 꿀을 좋아합니다.", + "faqQuestion35": "펫에게 먹이를 주었더니 사라졌어요! 왜 이런 건가요?", + "webFaqAnswer35": "펫을 탑승펫으로 성장시킬 만큼 충분히 먹이를 주면, 그 유형의 펫을 다시 부화시켜 펫 보관소에 추가해야 합니다.\n\n모바일 앱에서 탑승펫을 확인하는 방법:\n\n* 메뉴에서 “펫과 탑승펫”을 선택하고 탈것 탭으로 전환하기\n\n웹사이트에서 탑승펫을 확인하는 방법:\n\n* 인벤토리 메뉴에서 “펫과 탑승펫”을 선택하고 아래로 스크롤하여 탑승펫 섹션으로 이동하기", + "faqQuestion36": "아바타의 외형은 어떻게 변경하나요?", + "webFaqAnswer36": "Habitica 아바타의 외형을 꾸밀 수 있는 방법은 무궁무진합니다! 메뉴에서 “아바타 꾸미기”를 선택하여 아바타의 체형, 헤어 스타일 및 색상, 피부색을 변경하거나 안경이나 이동 보조기구를 추가할 수 있습니다.\n\n모바일 앱에서 아바타를 꾸미려면:\n * 메뉴에서 “아바타 꾸미기”를 선택합니다.\n\n웹사이트에서 아바타를 꾸미려면:\n * 탐색의 사용자 메뉴에서 “아바타 꾸미기”를 선택합니다.", + "faqQuestion37": "내 장비가 아바타에 보이지 않는 이유는 무엇인가요?", + "webFaqAnswer37": "의상 옵션이 켜져 있는지 확인하세요. 아바타가 의상을 착용하고 있으면 전투 장비 대신 해당 장비 세트가 표시됩니다.\n\n모바일 앱에서 의상 옵션을 키려면:\n * 메뉴에서 “장비”를 선택하여 의상 토글을 찾습니다.\n\n웹사이트에서 의상 옵션을 키려면:\n * 인벤토리에서 “장비”를 선택하고 장비 서랍의 의상 탭에서 의상 토글을 찾습니다.", + "faqQuestion38": "특정 아이템을 구매할 수 없는 이유는 무엇인가요?", + "webFaqAnswer38": "신규 Habitica 플레이어는 기본 전사 직업 장비만 구매할 수 있습니다. 다음 장비를 잠금 해제하려면 장비를 순차적으로 구매해야 합니다.\n\n많은 장비가 직업 전용이므로 플레이어는 현재 직업에 속하는 장비만 구매할 수 있습니다.", + "faqQuestion39": "어디에서 장비를 더 구할 수 있나요?", + "webFaqAnswer39": "더 많은 장비를 얻고 싶으시다면, Habitica 구독자가 되거나, 마법의 장비상자를 열어보거나, Habitica의 그랜드 행사에 참여하여 과시할 수 있습니다.\n\nHabitica 구독자는 매월 특별한 한정판 장비 세트를 받고, 시간 여행자 상점에서 과거의 장비 세트를 구매할 수 있는 신비한 모래시계를 받습니다.\n\n보상에서 마법의 장비상자 보물 상자를 열면 350개 이상의 장비를 얻을 수 있습니다! 100 골드로 특별한 장비, 펫을 탈것으로 키울 수 있는 먹이, 레벨을 올릴 수 있는 경험치를 받을 수 있는 기회가 주어집니다!\n\n네 번의 시즌 그랜드 행사 기간 동안에는 새로운 직업 장비를 골드로 구매할 수 있으며, 이전 행사 세트는 보석으로 구매할 수 있습니다.", + "faqQuestion40": "보석은 뭐고, 또 어떻게 얻을 수 있나요?", + "webFaqAnswer40": "보석은 Habitica의 인앱 유료 화폐로, 장비, 아바타 커스터마이징, 배경 등을 구매할 때 사용됩니다! 보석은 번들로 구매하거나 Habitica 구독자라면 골드로 구매할 수 있습니다. 도전에서 우승하면 보석을 획득할 수도 있습니다.", + "faqQuestion41": "신비한 모래시계란 무엇이며, 어떻게 구할 수 있나요?", + "webFaqAnswer41": "신비한 모래시계는 시간 여행자 상점에서 사용할 수 있는 Habitica의 구독자 전용 화폐입니다. 구독자는 구독 혜택을 받는 매월 초에 신비한 모래시계와 다양한 특전을 받을 수 있습니다. 시간 여행자 상점에서 제공하는 특별한 배경, 펫, 퀘스트, 장비에 관심이 있으시다면 구독 옵션을 꼭 확인해 보세요!", + "faqQuestion42": "책임감을 높이려면 어떻게 해야 하나요?", + "webFaqAnswer42": "자신에게 동기를 부여하고 과제를 달성하기 위해 스스로 책임을 지는 가장 좋은 방법 중 하나는 파티에 가입하는 것입니다! 다른 Habitica 플레이어들과 파티를 하면 퀘스트를 수행하여 펫과 장비를 받고, 파티원의 스킬로 버프를 받고, 동기를 높일 수 있습니다.\n\n책임감을 높이는 또 다른 방법은 도전에 참가하는 것입니다. 도전은 특정 목표와 관련된 과제를 목록에 자동으로 추가합니다! 또한 다른 Habitica 플레이어와의 경쟁 요소가 추가되어 보석을 받기 위해 노력하면서 동기 부여를 높일 수 있습니다. Habitica 팀이 만든 공식 도전과 다른 플레이어가 만든 도전이 있습니다.", + "faqQuestion43": "퀘스트는 어떻게 시작하나요?", + "webFaqAnswer43": "퀘스트를 시작하려면 파티의 멤버가 되어야 합니다. 파티는 혼자서 퀘스트에 도전하는 솔로 모험이 될 수도 있고, 다른 Habitica 플레이어를 초대하여 더 빠르게 퀘스트를 진행할 수도 있습니다!\n\n파티에서 “퀘스트 시작” 버튼을 선택해 인벤토리에서 퀘스트 두루마리를 선택합니다. 평소처럼 과제를 완료하면 퀘스트 진행도가 오릅니다! 보스 퀘스트를 수행 중이라면 몬스터에게 피해를 입히거나, 수집 퀘스트를 수행 중이라면 아이템을 획득할 수 있는 기회를 얻게 됩니다. 모든 진행도는 다음 날 적용됩니다.\n\n피해량을 충분히 입히거나 모든 아이템을 수집하면 퀘스트가 완료되며 보상을 받게 됩니다!", + "faqQuestion44": "도전 과제는 어떻게 삭제하나요?", + "webFaqAnswer44": "도전에서 탈퇴하거나 도전이 종료되어야만 해당 도전과 관련된 과제를 삭제할 수 있습니다. 빨간색 확성기 아이콘은 도전이 종료되었음을 의미하며, 회색 확성기는 도전이 아직 실행 중임을 의미합니다.\n\n**Android** 앱에서 도전 과제를 삭제하는 방법:\n 1. 도전에 속한 과제를 탭합니다.\n 2. 화면 우측 상단의 '삭제'를 탭합니다.\n 3. 과제 목록에서 도전 과제를 삭제할지 선택합니다.\n\n**iOS** 앱에서 도전 과제를 삭제하는 방법:\n 1. 삭제하려는 도전 과제를 찾아 확성기 아이콘을 확인합니다.\n 2. 확성기 아이콘이 빨간색인 경우, 해당 과제를 탭하고 하단의 '삭제'를 선택합니다.\n 3. 확성기 아이콘이 회색인 경우, 해당 도전을 탈퇴해야 과제를 삭제할 수 있습니다.\n\n**웹사이트**에서 도전 과제를 삭제하는 방법:\n 1. 삭제하려는 도전 과제를 찾아 확성기 아이콘을 확인합니다.\n 2. 확성기 아이콘이 빨간색인 경우, 아이콘을 클릭한 후 과제 목록에서 과제를 삭제할지 선택합니다.\n 3. 확성기 아이콘이 회색인 경우, 해당 도전을 탈퇴해야 과제를 삭제할 수 있습니다.", + "faqQuestion45": "제 아바타가 눈사람, 불가사리, 꽃 또는 유령으로 변했습니다. 되돌리는 방법이 뭔가요?", + "faqQuestion47": "과제와 습관을 얼마나 잘 수행하고 있는지에 대한 데이터를 볼 수 있나요?", + "webFaqAnswer45": "당신의 파티원 중 한 명이 당신에게 계절 상점 변신 아이템을 사용했습니다! 당신의 아바타는 다음 날 정상으로 되돌아갑니다. 변신을 더 빨리 해제하려면 보상에서 해독제(소금, 모래, 꽃잎 제거 물약, 또는 불투명한 물약)를 구매할 수 있습니다.", + "faqQuestion46": "오류를 신고하려면 어떻게 하나요?", + "webFaqAnswer46": "버그를 발견한 것 같다고 생각된다면, 저희에게 알려주세요!\n\n모바일 앱에서 버그를 신고하는 방법:\n * 메뉴에서 지원을 선택한 다음 \"문의하기\"를 탭하고 아래로 스크롤하여 \"버그 신고하기\"로 이동합니다.\n\n웹사이트에서 버그를 신고하는 방법:\n * 도움말 메뉴에서 “버그 신고하기”를 선택합니다.", + "webFaqAnswer47": "현재 Habitica에는 시간 경과에 따른 과제 데이터의 시각적 표현이 없습니다. 하지만 Habitica 웹사이트의 설정에 있는 사이트 데이터 탭에서 과제 데이터를 내보낼 수 있습니다.", + "faqQuestion48": "Habitica를 다른 사람과 함께 플레이할 수 있나요?", + "webFaqAnswer48": "네, 파티와 함께요! 직접 파티를 만들거나 기존 파티에 가입할 수 있습니다. 다른 Habitica 플레이어들과 파티를 맺으면 퀘스트를 수행하고, 파티원의 스킬로 버프를 받고, 추가적인 책임을 통해 동기를 부여할 수 있습니다.", + "faqQuestion49": "파티에 속해있지 않을 때, 파티를 찾는 방법이 뭔가요?", + "webFaqAnswer49": "다른 이들과 함께 Habitica를 경험하고 싶지만 다른 플레이어를 모르신다면, 파티를 찾는 것이 가장 좋은 선택입니다! 이미 파티에 속한 다른 플레이어를 알고 있다면, 그들에게 '@아이디'를 알려주면 초대받을 수 있습니다. 또는, 새로운 파티를 만들고 그들의 '@아이디'나 이메일 주소로 초대할 수도 있습니다.\n\n파티를 만들거나 검색하려면, 탐색 메뉴에서 “파티”를 선택한 다음, 원하는 옵션을 선택하세요.", + "faqQuestion50": "파티 검색 기능은 어떻게 사용하나요?", + "webFaqAnswer50": "“파티 찾기”를 선택하면 파티에 가입하려는 플레이어 목록에 추가됩니다. 파티장은 이 목록을 확인하고 초대장을 보낼 수 있습니다. 초대장을 받으면 알림에서 초대를 수락하여 원하는 파티에 가입할 수 있습니다!\n\n초대장은 여러 개의 파티에서 받을 수 있으나 한 번에 하나의 파티에만 가입이 가능합니다.", + "faqQuestion51": "목록에 추가된 후 언제까지 파티를 찾을 수 있나요?", + "webFaqAnswer51": "당신은 파티 초대를 수락하거나 7일 동안 로그인하지 않을 때까지 목록에 남아 있습니다. 두 조건 중 먼저 발생하는 경우 목록에서 제외됩니다. 7일 동안 활동이 없었다면 그 후 로그인했을 때, 대기 중인 초대가 없는 한 자동으로 목록에 다시 추가됩니다.", + "faqQuestion52": "파티 찾기를 중단할 수 있나요?", + "webFaqAnswer52": "더 이상 파티를 찾고 싶지 않다면 언제든지 중단할 수 있습니다.\n\n모바일 앱에서 파티 찾기를 중단하는 방법:\n * 메뉴에서 “파티”를 선택하고 화면 하단의 “탈퇴”를 탭합니다.\n\nHabitica 웹사이트에서 파티 찾기를 중단하는 방법:\n * 탐색 메뉴에서 “파티”를 선택하고 팝업에서 “탈퇴”를 클릭합니다.", + "faqQuestion53": "파티가 있는데, 더 많은 멤버를 찾으려면 어떻게 해야 하나요?", + "webFaqAnswer53": "Habitica 웹사이트를 사용하는 경우, 파티에서 “멤버 찾기”를 선택하세요. Android 앱을 사용하는 경우, 파티원 목록 상단의 “멤버 찾기”를 탭하세요. 그러면 파티를 적극적으로 찾고 있으며 초대할 수 있는 플레이어 목록이 표시됩니다.\n\n파티에 적합한 플레이어를 찾기 위해 언어, 직업, 레벨, Habitica 사용 일수 등의 정보를 확인할 수 있습니다. 초대를 보내기 전에 상대방과 대화를 나누고 싶다면, 상대방의 프로필을 보고 메시지를 보낼 수 있습니다.", + "faqQuestion54": "파티에 몇 명을 초대할 수 있나요?", + "webFaqAnswer54": "파티의 최대 멤버 수는 30명, 최소 멤버 수는 1명입니다. 대기 중인 초대는 멤버 수에 포함됩니다. 예를 들어, 29명의 멤버와 1명의 대기 중인 초대는 30명의 멤버로 계산됩니다. 대기 중인 초대를 삭제하려면 초대를 받은 플레이어가 수락 또는 거절하거나 파티장이 초대를 취소해야 합니다.", + "faqQuestion55": "제가 아는 사람을 초대할 수 있나요?", + "webFaqAnswer55": "네! 이미 Habitica 플레이어의 아이디나 이메일 주소가 있다면 파티에 초대할 수 있습니다. 플랫폼별로 초대를 보내는 방법은 다음과 같습니다:\n\n모바일 앱에서 누군가를 초대하는 방법:\n 1. 메뉴에서 “파티”를 선택하고 아래로 스크롤하여 멤버 섹션으로 이동합니다.\n 2. “멤버 찾기”를 탭한 다음 “초대 방법” 탭으로 전환합니다.\n 3. 초대하려는 플레이어의 사용자 이름 또는 이메일 주소를 입력하고 “초대하기”를 클릭합니다.\n\n웹사이트에서 누군가를 초대하는 방법:\n 1. 파티로 이동해 “파티에 초대”를 클릭합니다.\n 2. 초대하려는 플레이어의 사용자 이름 또는 이메일 주소를 입력하고 “초대하기”를 클릭합니다.", + "faqQuestion56": "대기 중인 파티 초대를 취소하려면 어떻게 해야 하나요?" } diff --git a/website/common/locales/ko/gear.json b/website/common/locales/ko/gear.json index c89d19b84c..a70041ca55 100755 --- a/website/common/locales/ko/gear.json +++ b/website/common/locales/ko/gear.json @@ -716,13 +716,13 @@ "armorArmoireLunarArmorText": "잔잔한 달빛의 갑옷", "armorArmoireLunarArmorNotes": "달빛이 당신을 강하고 똑똑하게 만들어 줄꺼에요. 힘 <%= str %> 상승, 지력 <%= int %> 상승. 마법의 장비상자: 잔잔한 달빛 세트 (아이템2/3).", "armorArmoireGladiatorArmorText": "검투사 갑옷", - "armorArmoireGladiatorArmorNotes": "검투사가 되기 위해서는 교활할 뿐만 아니라 강해야 합니다. 통찰력 <%= per %>상승, 힘 <%= str %>상승. 마법의 장비상자 : 검투사 세트 (아이템2/3).", + "armorArmoireGladiatorArmorNotes": "검투사가 되기 위해서는 교활할 뿐만 아니라 강해야 합니다. 통찰력 <%= per %>상승, 힘 <%= str %>상승. 마법의 장비상자 : 검투사 세트 (아이템2/3).", "armorArmoireRancherRobesText": "목장 주인의 로브", - "armorArmoireRancherRobesNotes": "이 마법의 목장 주인의 로브를 입고 탑승펫들과 펫을 다뤄보세요! 힘 <%= str %>상승, 통찰력 <%= per %>상승, 지력 <%= int %>상승. 마법의 장비상자: 목장 주인 세트 (아이템 2/3).", + "armorArmoireRancherRobesNotes": "이 마법의 목장 주인의 로브를 입고 탑승펫들과 펫을 다뤄보세요! 힘 <%= str %>상승, 통찰력 <%= per %>상승, 지력 <%= int %>상승. 마법의 장비상자: 목장 주인 세트 (아이템 2/3).", "armorArmoireGoldenTogaText": "황금빛 겉옷", "armorArmoireGoldenTogaNotes": "진정한 영웅만이 입는 황금의 겉옷입니다. 힘과 생명력 각각 <%= attrs %> 상승. 마법의 장비상자: 황금 겉옷 세트 (아이템 1/3).", "armorArmoireHornedIronArmorText": "강철 뿔 갑옷", - "armorArmoireHornedIronArmorNotes": "수많은 망치질로 만들어진 이 강철 뿔 갑옷을 뚫기란 불가능입니다. 생명력 <%= con %> 상승, 통찰력 <%= per %>상승. 마법의 장비상자 : 강철 뿔 세트 (아이템 2/3).", + "armorArmoireHornedIronArmorNotes": "수많은 망치질로 만들어진 이 강철 뿔 갑옷을 뚫기란 불가능입니다. 생명력 <%= con %> 상승, 통찰력 <%= per %>상승. 마법의 장비상자 : 강철 뿔 세트 (아이템 2/3).", "armorArmoirePlagueDoctorOvercoatText": "흑사병 의사의 외투", "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", "armorArmoireShepherdRobesText": "양치기의 로브", @@ -1122,7 +1122,7 @@ "headMystery201609Text": "젖소 모자", "headMystery201609Notes": "당신은 이 젖소 모자를 음매~~~~우 좋아할겁니다. 장착 효과는 없습니다. 2016년 9월 정기 후원자 아이템.", "headMystery201610Text": "유령의 불꽃", - "headMystery201610Notes": "이 불꽃은 당신 안에 숨겨진 유령의 힘을 깨울 것입니다. 장착 효과는 없습니다. 2016년 10월 정기 후원자 아이템.", + "headMystery201610Notes": "이 불꽃은 당신 안에 숨겨진 유령의 힘을 깨울 것입니다. 장착 효과는 없습니다. 2016년 10월 정기 후원자 아이템.", "headMystery201611Text": "Fancy Feasting Hat", "headMystery201611Notes": "You're guaranteed to be the fanciest person at the feast in this plumed chapeau. Confers no benefit. November 2016 Subscriber Item.", "headMystery201612Text": "호두까기 투구", @@ -1170,7 +1170,7 @@ "headArmoireRedHairbowText": "빨간 리본", "headArmoireRedHairbowNotes": "강하고, 터프하고, 똑똑해지세요! 이 아름다운 빨간 리본을 쓰고서요! 근력을 <%= str %>, 생명력을 <%= con %>, 지력을 <%= int %> 높여줍니다. 마법의 장비상자: 빨간 리본 세트 (아이템 1/2).", "headArmoireVioletFloppyHatText": "보라색 헐렁한 모자", - "headArmoireVioletFloppyHatNotes": "많은 주문들이 이 단순한 모자에 꿰메어졌습니다. 행복한 보라색을 띄고 있네요. 통찰력을 <%= per %>, 지력을 <%= int %>, 그리고 생명력을 <%= con %> 높여줍니다. 마법의 장비상자: 독립 아이템.", + "headArmoireVioletFloppyHatNotes": "많은 주문들이 이 단순한 모자에 꿰메어졌습니다. 행복한 보라색을 띄고 있네요. 통찰력을 <%= per %>, 지력을 <%= int %>, 그리고 생명력을 <%= con %> 높여줍니다. 마법의 장비상자: 독립 아이템.", "headArmoireGladiatorHelmText": "검투사 투구", "headArmoireGladiatorHelmNotes": "검투사가 되려면 강해야 할 뿐만 아니라.... 교활해야 합니다. 지력을 <%= int %> 높여주고, 통찰력을 <%= per %> 높여줍니다. 마법의 장비상자: 검투사 세트(아이템 1/3).", "headArmoireRancherHatText": "Rancher Hat", @@ -1204,7 +1204,7 @@ "headArmoireBarristerWigText": "법조인 가발", "headArmoireBarristerWigNotes": "이 법조인 가발은 사나운 적마저 놀라 도망가게 합니다. 근력을 <%= str %> 높여줍니다. 마법의 장비상자: 법조인 세트 (아이템 3 중 1)", "headArmoireJesterCapText": "어릿광대 모자", - "headArmoireJesterCapNotes": "이 모자에 달린 종들이 당신을 반대하는 사람들을 산만하게 만들고, 당신이 집중할 수 있게끔 돕게 됩니다. 통찰력을 <%= per %> 높여줍니다. 마법의 장비상자: 어릿광대 세트(아이템 3 중 1)", + "headArmoireJesterCapNotes": "이 모자에 달린 종들이 당신을 반대하는 사람들을 산만하게 만들고, 당신이 집중할 수 있게끔 돕게 됩니다. 통찰력을 <%= per %> 높여줍니다. 마법의 장비상자: 어릿광대 세트(아이템 3 중 1)", "headArmoireMinerHelmetText": "광부 헬멧", "headArmoireMinerHelmetNotes": "실패하는 과제로부터 당신의 머리를 보호합니다! 지력을 <%= int %> 높여줍니다. 마법의 장비상자: 광부 세트 (3 중 1)", "headArmoireBasicArcherCapText": "기본 궁수 모자", @@ -1224,7 +1224,7 @@ "headArmoireIronBlueArcherHelmText": "철의 푸른 궁수 투구", "headArmoireIronBlueArcherHelmNotes": "손이 거칠어졌다고요? 아니예요, 당신은 잘 막았을 뿐이예요. 생명력을 <%= con %> 높여줍니다. 마법의 장비상자: 철의 궁수 세트 (아이템 3 중 1)", "headArmoireWoodElfHelmText": "나무 엘프 투구", - "headArmoireWoodElfHelmNotes": "나뭇잎들로 만든 이 투구는 여려 보이지만, 궂은 날씨와 위험한 적들로부터 당신을 보호해 줍니다. 생명력을 <%= con %> 높여줍니다. 마법의 장비상자: 나무 엘프 세트(아이템 3 중 1)", + "headArmoireWoodElfHelmNotes": "나뭇잎들로 만든 이 투구는 여려 보이지만, 궂은 날씨와 위험한 적들로부터 당신을 보호해 줍니다. 생명력을 <%= con %> 높여줍니다. 마법의 장비상자: 나무 엘프 세트(아이템 3 중 1)", "headArmoireRamHeaddressText": "Ram Headdress", "headArmoireRamHeaddressNotes": "This elaborate helm is fashioned to look like a ram's head. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Ram Barbarian Set (Item 1 of 3).", "headArmoireCrownOfHeartsText": "심장의 왕관", @@ -1678,13 +1678,13 @@ "eyewearSpecialAetherMaskText": "Aether Mask", "eyewearSpecialAetherMaskNotes": "This mask has a mysterious history. Increases Intelligence by <%= int %>.", "eyewearSpecialSummerRogueText": "악당의 안대", - "eyewearSpecialSummerRogueNotes": "이 안대가 얼마나 멋있는지 보려고 말썽쟁이가 될 필요는 없습니다! 효과가 없음. 한정판 2014년 여름 장비.", + "eyewearSpecialSummerRogueNotes": "이 안대가 얼마나 멋있는지 보려고 말썽쟁이가 될 필요는 없습니다! 효과가 없음. 한정판 2014년 여름 장비.", "eyewearSpecialSummerWarriorText": "세련된 안대", "eyewearSpecialSummerWarriorNotes": "이 안대가 얼마나 멋진지 보려고 건달이 될 필요는 없습니다. 효과가 없음. 한정판 2014년 여름 장비", "eyewearSpecialWonderconRedText": "강력한 마스크", "eyewearSpecialWonderconRedNotes": "이렇게 강렬할 수가! 효과가 없음. 특별판 행사 아이템.", "eyewearSpecialWonderconBlackText": "은밀한 가면", - "eyewearSpecialWonderconBlackNotes": "착용 목적은 확실히 합법적입니다. 효과가 없음. 특별판 행사 아이템.", + "eyewearSpecialWonderconBlackNotes": "착용 목적은 확실히 합법적입니다. 효과가 없음. 특별판 행사 아이템.", "eyewearMystery201503Text": "아쿠아마린 안경", "eyewearMystery201503Notes": "이 반짝이는 보물에 눈이 찔리지 않게 조심하세요. 효과가 없음. 2015년 3월 정기 후원자 아이템.", "eyewearMystery201506Text": "네온 스노클", diff --git a/website/common/locales/ko/groups.json b/website/common/locales/ko/groups.json index 3bc8e862b8..696d6ef0d4 100755 --- a/website/common/locales/ko/groups.json +++ b/website/common/locales/ko/groups.json @@ -52,7 +52,7 @@ "guilds": "rㅣㄹ드", "sureKick": "Do you really want to remove this member from the Party/Guild?", "optionalMessage": "선택적인 메세지", - "yesRemove": "예, 제거해주세요", + "yesRemove": "예, 제거해주세요", "sortBackground": "Sort by Background", "sortClass": "Sort by Class", "sortDateJoined": "Sort by Join Date", @@ -246,7 +246,7 @@ "partyDescriptionPlaceholder": "This is our Party's description. It describes what we do in this Party. If you want to learn more about what we do in this Party, read the description. Party on.", "guildGemCostInfo": "A Gem cost promotes high quality Guilds and is transferred into your Guild's bank.", "noGuildsTitle": "You aren't a member of any Guilds.", - "noGuildsParagraph1": "Guilds are social groups created by other players that can offer you support, accountability, and encouraging chat.", + "noGuildsParagraph1": "Guilds are social groups created by other players that can offer you support, accountability, and encouraging chat.", "noGuildsParagraph2": "Click the Discover tab to see recommended Guilds based on your interests, browse Habitica's public Guilds, or create your own Guild.", "noGuildsMatchFilters": "We couldn't find any matching Guilds.", "privateDescription": "A private Guild will not be displayed in Habitica's Guild directory. New members can be added by invitation only.", diff --git a/website/common/locales/ko/npc.json b/website/common/locales/ko/npc.json index 79c5feb3da..a15fda0c65 100755 --- a/website/common/locales/ko/npc.json +++ b/website/common/locales/ko/npc.json @@ -14,14 +14,14 @@ "next": "Next", "randomize": "Randomize", "mattBoch": "매트 보크", - "mattBochText1": "동물훈련소에 오신 것을 환영합니다! 저는 맷이구요, 비스트 마스터입니다. 레벨 3을 시작할 때, 당신은 펫을 부화하는데 쓰이는 알과 포션을 발견할 겁니다. 시장에서 펫을 부화시켰다면, 여기 나타날겁니다. 펫 이미지를 클릭하여 당신의 아바타에 넣으세요. 레벨 3 이후 발견하게 되는 음식을 펫들에게 먹이세요. 그러면 펫은 강인한 탑승펫으로 자랄겁니다.", + "mattBochText1": "펫 보관소에 오신 것을 환영합니다! 저는 맷이구요, 비스트 마스터입니다. 과제를 완료할 때마다 당신은 펫을 부화하는데 쓰이는 알과 포션을 발견할 겁니다. 펫을 부화시킨다면, 여기에 나타납니다! 펫 이미지를 클릭하여 당신의 아바타에 넣으세요. 발견한 먹이를 펫에게 먹인다면 펫은 강인한 탑승펫으로 자랄겁니다.", "welcomeToTavern": "Welcome to The Tavern!", "sleepDescription": "휴식이 필요하신가요? 다니엘의 여관에 들러 Habitica를 잠시 멈춰보세요:", "sleepBullet1": "내가 놓친 일일 과제로 인해 데미지 피해를 입지 않습니다.(다른 파티원은 놓친 일일 과제로 인해 여전히 보스에게 데미지 피해를 입습니다)", "sleepBullet2": "작업의 연속 실행 횟수는 초기화되지 않습니다", "sleepBullet3": "퀘스트 보스에게 입힌 데미지 피해나 발견한 수집품은 여관을 체크 아웃할 때까지 보류된 상태로 유지됩니다.", - "pauseDailies": "Pause Damage", - "unpauseDailies": "Unpause Damage", + "pauseDailies": "피해 일시 정지", + "unpauseDailies": "피해 일시 정지 해제", "staffAndModerators": "Staff and Moderators", "communityGuidelinesIntro": "Habitica는 모든 연령과 배경을 가진 사용자들에게 환영받는 환경을 조성하기 위해 노력합니다. 특히 그룹과 파티와 같은 공간에서 그러합니다. 질문이 있으시다면, 저희의 커뮤니티 가이드라인을 참조해 주세요.", "acceptCommunityGuidelines": "I agree to follow the Community Guidelines", @@ -77,31 +77,31 @@ "USD": "(USD)", "newStuff": "New Stuff by Bailey", "newBaileyUpdate": "New Bailey Update!", - "tellMeLater": "Tell Me Later", - "dismissAlert": "알림 취소", + "tellMeLater": "나중에 알려줘", + "dismissAlert": "알림 해제", "donateText3": "Habitica는 오픈 소스 프로젝트로서 유저의 지원에 의존하고 있습니다. 여러분이 보석을 구매해 주신 돈은 서버 운영, 소규모 직원 유지, 새로운 기능 개발, 자원 봉사 프로그래머에게 인센티브를 제공하는 데 사용됩니다. 여러분의 관대함에 감사드립니다!", "card": "신용카드 (Stripe를 사용하여)", "paymentMethods": "를(을) 사용하여 구매", - "paymentSuccessful": "Your payment was successful!", - "paymentYouReceived": "You received:", - "paymentYouSentGems": "You sent <%- name %>:", - "paymentYouSentSubscription": "<%- name %>
님에게 <%= months %>달치 Habitica 구독 플랜을 보냈습니다.", - "paymentSubBilling": "Your subscription will be billed $<%= amount %> every <%= months %> months.", + "paymentSuccessful": "결제가 성공적으로 완료되었습니다!", + "paymentYouReceived": "수신했습니다:", + "paymentYouSentGems": "<%- name %>에게 보냈습니다:", + "paymentYouSentSubscription": "<%- name %>
님에게 <%= months %>개월의 Habitica 구독 플랜을 보냈습니다.", + "paymentSubBilling": "구독료는 <%= months %>개월마다 $<%= amount %> 청구됩니다.", "success": "Success!", - "classGear": "계급 장비", - "classGearText": "Congratulations on choosing a class! I've added your new basic weapon to your inventory. Take a look below to equip it!", - "autoAllocate": "스텟 자동배분", + "classGear": "직업 장비", + "classGearText": "직업을 선택하신 것을 축하합니다! 새로운 기본 무기가 인벤토리에 추가되었습니다. 아래에서 확인하고 장착해 보세요!", + "autoAllocate": "스탯 자동배분", "spells": "Skills", "skillsTitle": "<%= classStr %>스킬", "toDo": "할 일", "tourStatsPage": "여기는 능력치 페이지 입니다! 나열된 과제들을 완료하여 업적을 달성하세요.", - "tourTavernPage": "Welcome to the Tavern, an all-ages chat room! You can keep your Dailies from hurting you in case of illness or travel by clicking \"Pause Damage\". Come say hi!", - "tourPartyPage": "새로운 파티에 어서 오세요! 유저 이름, 메일 또는 파티를 찾는 유저 목록에서 다른 유저를를 파티에 초대하여 한정판 바시리스트 퀘스트 두루마기를 획득할 수 있습니다.

파티에 대한 자세한 내용은 [도움말]의 FAQ에서 확인할 수 있습니다.", + "tourTavernPage": "모든 연령대가 대화할 수 있는 장소, 선술집에 오신 것을 환영합니다! 질병을 앓거나 여행 중일 때 “피해 일시 정지”를 클릭하여 데미지를 입지 않도록 할 수 있습니다. 와서 인사해보세요!", + "tourPartyPage": "새로운 파티에 어서 오세요! 유저 이름, 메일 또는 파티를 찾는 유저 목록에서 다른 유저를 파티에 초대하여 한정판 바시리스트 퀘스트 두루마기를 획득할 수 있습니다.

파티에 대한 자세한 내용은 [도움말]의 FAQ에서 확인할 수 있습니다.", "tourChallengesPage": "도전은 유저들이 만드는 테마가 있는 할 일 목록입니다! 도전에 참여하는 것은 이 할일들을 당신의 계정에 추가합니다. 젬을 받기 위해서 다른 유저들과 경쟁하세요!", "tourMarketPage": "과제를 완료할 때마다 알, 부화 물약 또는 애완동물 먹이를 무작위로 받을 수 있는 기회가 주어집니다. 이 아이템들은 여기에서 구매할 수도 있습니다.", "tourHallPage": "Habitica의 오픈소스 공헌자들이 추앙받는, 영웅의 홀에 오신 것을 환영합니다. 코드, 아트, 음악, 저술, 심지어는 조언만으로, 그들은 젬과, 전용 장비와, 명망 있는 타이틀을 얻었습니다. 당신도 Habitica에 공헌할 수 있습니다!", - "tourPetsPage": "여기는 동물훈련소입니다! 레벨 3이 되고나면, 과제를 완료함에 따라 펫의 알과 부화의 묘약을 모을 수 있게 됩니다. 시장에서 펫을 부화시키면, 이 곳에 나타납니다! 당신의 아바타에 펫을 추가하려면 펫의 그림을 클릭하세요. 레벨 3 이후 얻게 되는 음식들을 펫에게 먹이세요. 그러면 펫은 강인한 탑승펫으로 자랄겁니다.", - "tourMountsPage": "펫을 충분히 먹여 탑승펫이 되면 여기에 나타납니다. 안장을 놓을 탑승펫을 클릭하세요.", + "tourPetsPage": "펫 보관소에 오신 걸 환영합니다! 당신이 과제를 완료할 때마다 펫을 부화시킬 수 있는 알 또는 부화 물약을 무작위로 받을 수 있습니다. 펫을 부화시키면, 이곳에 나타납니다! 펫의 이미지를 클릭하여 당신의 아바타에 추가하세요. 발견한 펫 먹이를 펫에게 먹인다면 튼튼한 탈 것으로 성장할 것입니다.", + "tourMountsPage": "펫에게 충분히 먹이를 준다면 탑승펫이 되어 여기에 나타납니다. 탑승펫을 클릭하여 올라타세요!", "tourEquipmentPage": "This is where your Equipment is stored! Your Battle Gear affects your Stats. If you want to show different Equipment on your avatar without changing your Stats, click \"Enable Costume.\"", "equipmentAlreadyOwned": "이미 보유하고 있는 장비입니다", "tourOkay": "네!", @@ -125,11 +125,12 @@ "notAvailable": "이 아이템은 사용할 수 없습니다.", "helpSupportHabitica": "Habitica 지원 도움말", "groupsPaymentSubBilling": "다음 청구 날짜는 <%= renewalDate %>입니다.", - "paymentSubBillingWithMethod": "당신의 구독 플랜은, <%= months %>월마다<%= paymentMethod %>으로 $<%= amount %> 청구됩니다.", + "paymentSubBillingWithMethod": "구독료는
$<%= amount %>.00 USD이며 <%= months %>개월마다 <%= paymentMethod %>를 통해 청구됩니다.", "groupsPaymentAutoRenew": "이 구독은 취소하지 않는 한 자동 갱신됩니다. 취소해야 하는 경우 그룹 청구 메뉴에서 취소할 수 있습니다.", "limitedAvailabilityHours": "구매 가능 기간이 <%= hours %>시간<%= minutes %>분 남았습니다", "invalidUnlockSet": "이 아이템 세트는 사용 불가능하며. 잠금을 해제할 수 없습니다.", "limitedAvailabilityDays": "구매 가능 기간이 <%= days %>일<%= hours %><%= hours %>시간<%= minutes %>분 남았습니다", "paymentAutoRenew": "이 구독은 취소하지 않는 한 자동 갱신됩니다. 이 구독을 취소해야 하는 경우 설정에서 취소할 수 있습니다.", - "paymentCanceledDisputes": "취소 승인 메일을 보내드렸습니다. 만약 해당 메일을 찾을 수 없는 경우, 향후 청구에 대한 분쟁을 방지하기 위해 저희에게 연락을 주시기 바랍니다." + "paymentCanceledDisputes": "취소 승인 메일을 보내드렸습니다. 만약 해당 메일을 찾을 수 없는 경우, 향후 청구에 대한 분쟁을 방지하기 위해 저희에게 연락을 주시기 바랍니다.", + "paymentYouSentSubscriptionG1G1": "<%- name %>
에게 <%= months %> 개월의 Habitica 구독 플랜을 보냈으며, 1+1 프로모션에 따라 이 계정에도 동일한 구독 플랜이 적용되었습니다!" } diff --git a/website/common/locales/ko/pets.json b/website/common/locales/ko/pets.json index 0a69dd528d..32a6ce4416 100644 --- a/website/common/locales/ko/pets.json +++ b/website/common/locales/ko/pets.json @@ -55,7 +55,7 @@ "raisedPet": "<%= pet %>가 성장했습니다!", "feedPet": "<%= name %>에게 <%= text %>를 먹이겠습니까?", "petNotOwned": "이 펫을 가지고 있지 않습니다.", - "hatchedPetHowToUse": "새로운 펫을 먹이고 장착하기 위해 [마구간](<%= stableUrl %>)을 방문하십시오!", + "hatchedPetHowToUse": "새로운 펫을 먹이고 장착하기 위해 [펫과 탑승펫](<%= stableUrl %>)을 방문하십시오!", "hatchedPet": "새로운 <%= potion %> <%= egg %>를 부화시켰습니다!", "premiumPotionNoDropExplanation": "마법 부화 포션은 퀘스트로 얻은 알에는 쓸 수 없습니다. 마법 부화 포션은 랜덤 보상으로 얻어지지 않으며, 아래의 상점에서 구입하는 것이 유일한 방법입니다.", "dropsExplanationEggs": "일반 알 보상을 기다리거나 퀘스트 알을 얻기 위해 퀘스트를 반복하고 싶지 않다면 보석을 써서 알을 더 빠르게 얻으십시오. 보상 시스템에 대해 참고해 보십시오. ", @@ -68,8 +68,8 @@ "beastMasterName": "비스트 마스터", "beastAchievement": "모든 펫을 획득하여 \"비스트 마스터\" 업적을 획득했습니다!", "beastMasterProgress": "비스트 마스터 진행", - "welcomeStableText": "마구간에 오신 것을 환영합니다! 저는 비스트 마스터 매트에요. 과제를 완료할 때마다 당신은 알이나 부화 물약을 랜덤으로 받게 될 겁니다. 그리고 부화된 펫은 이곳, 마구간에 나타나죠! 펫을 클릭해서 아바타에 장착시켜보세요. 발견한 먹이를 펫에게 먹여 강한 탑승펫으로 성장시킬 수도 있습니다.", - "welcomeStable": "마구간에 오신 것을 환영합니다!", + "welcomeStableText": "펫 보관소에 오신 것을 환영합니다! 저는 비스트 마스터 매트에요. 과제를 완료할 때마다 당신은 알이나 부화 물약을 랜덤으로 받게 될 겁니다. 그리고 부화된 펫은 이곳, 펫 보관소에 나타나죠! 펫을 클릭해서 아바타에 장착시켜보세요. 발견한 먹이를 펫에게 먹여 강한 탑승펫으로 성장시킬 수도 있습니다.", + "welcomeStable": "펫과 탑승펫이 있는 곳에 환영합니다!", "mountsReleased": "탑승펫을 방생했습니다", "mountsAndPetsReleased": "탑승펫과 펫을 방생했습니다", "petsReleased": "펫을 풀어줬습니다.", diff --git a/website/common/locales/ko/questscontent.json b/website/common/locales/ko/questscontent.json index 070b9d5ef8..c03375554d 100755 --- a/website/common/locales/ko/questscontent.json +++ b/website/common/locales/ko/questscontent.json @@ -122,7 +122,7 @@ "questEggHuntCollectPlainEgg": "평범한 알들", "questEggHuntDropPlainEgg": "평범한 알", "questDilatoryText": "The Dread Drag'on of Dilatory", - "questDilatoryNotes": "We should have heeded the warnings.

Dark shining eyes. Ancient scales. Massive jaws, and flashing teeth. We've awoken something horrifying from the crevasse: the Dread Drag'on of Dilatory! Screaming Habiticans fled in all directions when it reared out of the sea, its terrifyingly long neck extending hundreds of feet out of the water as it shattered windows with its searing roar.

\"This must be what dragged Dilatory down!\" yells Lemoness. \"It wasn't the weight of the neglected tasks - the Dark Red Dailies just attracted its attention!\"

\"It's surging with magical energy!\" @Baconsaur cries. \"To have lived this long, it must be able to heal itself! How can we defeat it?\"

Why, the same way we defeat all beasts - with productivity! Quickly, Habitica, band together and strike through your tasks, and all of us will battle this monster together. (There's no need to abandon previous quests - we believe in your ability to double-strike!) It won't attack us individually, but the more Dailies we skip, the closer we get to triggering its Neglect Strike - and I don't like the way it's eyeing the Tavern....", + "questDilatoryNotes": "We should have heeded the warnings.

Dark shining eyes. Ancient scales. Massive jaws, and flashing teeth. We've awoken something horrifying from the crevasse: the Dread Drag'on of Dilatory! Screaming Habiticans fled in all directions when it reared out of the sea, its terrifyingly long neck extending hundreds of feet out of the water as it shattered windows with its searing roar.

\"This must be what dragged Dilatory down!\" yells Lemoness. \"It wasn't the weight of the neglected tasks - the Dark Red Dailies just attracted its attention!\"

\"It's surging with magical energy!\" @Baconsaur cries. \"To have lived this long, it must be able to heal itself! How can we defeat it?\"

Why, the same way we defeat all beasts - with productivity! Quickly, Habitica, band together and strike through your tasks, and all of us will battle this monster together. (There's no need to abandon previous quests - we believe in your ability to double-strike!) It won't attack us individually, but the more Dailies we skip, the closer we get to triggering its Neglect Strike - and I don't like the way it's eyeing the Tavern....", "questDilatoryBoss": "The Dread Drag'on of Dilatory", "questDilatoryBossRageTitle": "Neglect Strike", "questDilatoryBossRageDescription": "When this bar has filled up, the Dread Drag'on of Dilatory will unleash great havoc on Habitica's terrain", @@ -567,8 +567,8 @@ "questPterodactylDropPterodactylEgg": "Pterodactyl (Egg)", "questPterodactylUnlockText": "Unlocks purchasable Pterodactyl eggs in the Market", "questBadgerText": "Stop Badgering Me!", - "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", - "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", + "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", + "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", "questBadgerBoss": "The Badgering Bother", "questBadgerDropBadgerEgg": "Badger (Egg)", "questBadgerUnlockText": "Unlocks purchasable Badger eggs in the Market", diff --git a/website/common/locales/ko/settings.json b/website/common/locales/ko/settings.json index de34f03724..3f8e6fe005 100755 --- a/website/common/locales/ko/settings.json +++ b/website/common/locales/ko/settings.json @@ -55,7 +55,6 @@ "APIToken": "API 토큰 (이것은 패스워드입니다 - 위쪽의 경고를 보세요!)", "showAPIToken": "Show API Token", "hideAPIToken": "Hide API Token", - "APITokenWarning": "새로운 API 토큰이 필요하다면 (예를 들어, 실수로 공유했을 때), <%= hrefTechAssistanceEmail %>로 당신의 사용자 ID와 현재의 토큰을 보내주세요. 한번 재설정이 되면 당신은 웹사이트와 모바일 앱에서 로그아웃하고 당신이 사용하는 다른 Habitica 툴에 새로운 토큰을 입력하여 모든 것을 재인증해야합니다.", "thirdPartyApps": "제 3의 앱", "resetDo": "제 계정을 리셋시키세요!", "resetComplete": "리셋 완료!", diff --git a/website/common/locales/ko/subscriber.json b/website/common/locales/ko/subscriber.json index 7be723f7db..39852a3ad7 100755 --- a/website/common/locales/ko/subscriber.json +++ b/website/common/locales/ko/subscriber.json @@ -6,7 +6,7 @@ "mustSubscribeToPurchaseGems": "보석으로 GP를 구매하기 위해서는 정기 후원하세요", "reachedGoldToGemCapQuantity": "요청해주신 양은 <%= quantity %> 이번 달에 구매할 수 있는 양을 초과했습니다<%= convCap %>. 이 양은 매달 초 3일 안에 복구됩니다. 구독해 주셔서 감사합니다!", "mysteryItem": "매월마다 새로운 특권층인 아이템들", - "mysteryItemText": "매달 당신의 아바타를 위한 독특한 꾸미기 아이템을 받으실 겁니다! 그리고 3달마다 연속 후원해 주시는 분들께, 신비한 시간 여행자가 전통적인 (혹인 미래지향적인) 꾸미기 아이템을 얻을 수 있게 해드립니다.", + "mysteryItemText": "매달 당신의 아바타를 위한 독특한 꾸미기 아이템을 받으실 겁니다! 그리고 3달마다 연속 후원해 주시는 분들께, 신비한 시간 여행자가 전통적인 (혹인 미래지향적인) 꾸미기 아이템을 얻을 수 있게 해드립니다.", "exclusiveJackalopePet": "Exclusive pet", "giftSubscription": "정기 후원의 혜택을 다른 분에게 선물하고 싶으세요?", "giftSubscriptionText4": "Habitica를 지원해 주셔서 고맙습니다!", diff --git a/website/common/locales/nl/contrib.json b/website/common/locales/nl/contrib.json index 0b1f300703..361ecfbefd 100644 --- a/website/common/locales/nl/contrib.json +++ b/website/common/locales/nl/contrib.json @@ -16,13 +16,13 @@ "legendary": "Legendarisch", "moderator": "Beheerder", "guardian": "Bewaker", - "staff": "Medewerkers", + "staff": "Habitica Medewerkers", "heroic": "Heroïsch", "modalContribAchievement": "Bijdragersprestatie!", "contribModal": "<%= name %>, jij geweldig persoon! Je bent nu een bijdrager van rang <%= level %> omdat je Habitica geholpen hebt.", "contribLink": "Zie welke prijzen je hebt verdiend voor je bijdrage!", "contribName": "Bijdrager", - "contribText": "Heeft bijgedragen aan Habitica, zijnde via code, kunst, muziek, schrijfwerk, of andere methodes. Om meer te leren, sluit je aan bij de gilde van Ambitieuze Legendes!", + "contribText": "Heeft bijgedragen aan Habitica, zijnde via code, kunst, muziek, schrijfwerk, of andere methodes.", "kickstartName": "Kickstarter-Backer - $<%= key %> rang", "kickstartText": "Heeft het Kickstarterproject gesteund", "helped": "Heeft Habitica helpen groeien", @@ -40,7 +40,7 @@ "backerTier": "Backers-Rang", "playerTiers": "Spelersrangen", "tier": "Rang", - "conRewardsURL": "https://habitica.fandom.com/wiki/Contributor_Rewards", + "conRewardsURL": "https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica#contributor-tier-rewards", "surveysSingle": "Heeft Habitica geholpen om te groeien door een enquête in te vullen of door mee te helpen met een grote speltest. Bedankt!", "surveysMultiple": "Heeft Habitica helpen groeien op <%= count %> momenten, door een enquête in te vullen of door mee te helpen met een grote test. Bedankt!", "blurbHallPatrons": "Dit is de Hal der Weldoeners. Hier eren we de nobele adventuriers die Habitica hebben gesteund in de Kickstarter. We bedanken ze omdat ze Habitica tot leven hebben gebracht!", diff --git a/website/common/locales/nl/faq.json b/website/common/locales/nl/faq.json index d48cb2d091..4543921868 100644 --- a/website/common/locales/nl/faq.json +++ b/website/common/locales/nl/faq.json @@ -49,7 +49,7 @@ "sunsetFaqList10": "Spelers worden tevens aangemoedigd te mailen naar admin@habitica.commet 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.", "contentQuestion0": "Wat veranderd er?", - "commonQuestions": "Veelvoorkomende vragen", + "commonQuestions": "Veelvoorkomende Vragen", "faqQuestion25": "Wat zijn de verschillende type taken?", "faqQuestion40": "Wat zijn Edelstenen en hoe kan ik ze krijgen?", "faqQuestion48": "Kan ik Habitica spelen met anderen?", @@ -67,5 +67,36 @@ "faqQuestion31": "Waarom verloor ik HP toen ik met een niet-negatieve taak bezig was?", "webFaqAnswer31": "Als je een taak voltooit en HP verliest terwijl dat niet de bedoeling was, is er een vertraging opgetreden terwijl de server wijzigingen op andere platforms synchroniseert. Als je bijvoorbeeld goud of Mana gebruikt of HP verliest in de mobiele app en vervolgens een taak op de website voltooit, bevestigt de server gewoon dat alles gesynchroniseerd is.", "faqQuestion32": "Hoe kan ik een klasse kiezen?", - "faqQuestion33": "Wat is de blauwe balk die verschijnt na niveau 10?" + "faqQuestion33": "Wat is de blauwe balk die verschijnt na niveau 10?", + "webFaqAnswer32": "Alle spelers beginnen als de klasse Krijger totdat ze niveau 10 bereiken. Zodra je niveau 10 hebt bereikt, krijg je de keuze om een nieuwe klasse te kiezen of verder te gaan als Krijger.\n\nElke klasse heeft andere Uitrusting en Vaardigheden. Als je geen klasse wilt kiezen, kun je \"Afmelden\" selecteren. Als je je afmeldt, kun je het klassensysteem later altijd weer inschakelen via Instellingen.\n\nAls je na niveau 10 van klasse wilt veranderen, kun je dat doen met de Bol van Wedergeboorte. De Bol van Wedergeboorte wordt beschikbaar in de Markt voor 6 edelstenen op niveau 50, of gratis op niveau 100.\n\nAls alternatief kun je op elk moment van klasse wisselen via Instellingen voor 3 edelstenen. Dit zal je niveau niet resetten zoals de Bol van Wedergeboorte dat doet, maar het stelt je wel in staat om de vaardigheidspunten die je hebt verzameld opnieuw toe te wijzen zodat ze bij je nieuwe klasse passen.", + "webFaqAnswer33": "Nadat je het Klassensysteem hebt ontgrendeld, krijg je ook toegang tot Vaardigheden die Mana vereisen om te gebruiken. Mana wordt bepaald door je INT-statistiek en kan worden aangepast door Vaardigheden en Uitrusting.", + "faqQuestion34": "Welke soort Voedsel vindt mijn Huisdier lekker?", + "webFaqAnswer34": "Huisdieren houden van Voedsel dat bij hun kleur past. Basis-Huisdieren zijn de uitzondering, maar alle Basis-Huisdieren houden van hetzelfde item. Hieronder zie je welk voedsel elk Huisdier lekker vindt:\n\n* Basis-Huisdieren houden van Vlees\n* Witte Huisdieren houden van Melk\n* Woestijn-Huisdieren houden van Aardappelen\n* Rode Huisdieren houden van Aardbeien\n* Schaduw-Huisdieren houden van Chocolade\n* Skelet-Huisdieren houden van Vis\n* Zombie-Huisdieren houden van Bedorven Vlees\n* Suikerspin Roze Huisdieren houden van Roze Suikerspin\n* Suikerspin Blauwe Huisdieren houden van Blauwe Suikerspin\n* Gouden Huisdieren houden van Honing", + "faqQuestion35": "Ik heb mijn Huisdier gevoerd en het is verdwenen! Wat is er gebeurd?", + "webFaqAnswer35": "Zodra je je Huisdier genoeg hebt gevoerd om het in een Rijdier te veranderen, moet je dat type Huisdier opnieuw uitbroeden om het weer in je stal te hebben.\n\nOm Rijdieren te bekijken in de mobiele apps:\n\n* Open het Menu, selecteer “Huisdieren & Rijdieren” en schakel naar het tabblad Rijdieren\n\nOm Rijdieren te bekijken op de website:\n\n* Ga naar het menu Inventaris, selecteer “Huisdieren en Rijdieren” en scroll naar beneden naar de sectie Rijdieren", + "faqQuestion36": "Hoe wijzig ik het uiterlijk van mijn avatar?", + "faqQuestion38": "Waarom kan ik bepaalde voorwerpen niet kopen?", + "webFaqAnswer38": "Nieuwe Habitica-spelers kunnen alleen de basisuitrusting van de Krijgerklasse kopen. Spelers moeten uitrusting in opeenvolgende volgorde kopen om het volgende stuk te ontgrendelen.\n\nVeel uitrustingsstukken zijn klassegebonden, wat betekent dat een speler alleen uitrusting kan kopen die bij zijn of haar huidige klasse hoort.", + "faqQuestion39": "Waar kan ik meer uitrusting krijgen?", + "webFaqAnswer36": "Er zijn eindeloos veel manieren om het uiterlijk van je Habitica-avatar aan te passen! Je kunt het lichaamsmodel, kapsel en haarkleur, huidskleur wijzigen of een bril of mobiliteitshulpmiddel toevoegen via het menu \"Avatar aanpassen\".\n\nOm je avatar aan te passen in de mobiele apps:\n* Selecteer in het menu \"Avatar aanpassen\"\n\nOm je avatar aan te passen op de website:\n* Selecteer \"Avatar aanpassen\" in het gebruikersmenu in de navigatiebalk", + "faqQuestion37": "Waarom wordt mijn uitrusting niet weergegeven op mijn avatar?", + "webFaqAnswer37": "Controleer of de optie Kostuum is ingeschakeld. Als je avatar een kostuum draagt, wordt die uitrusting weergegeven in plaats van je gevechtsuitrusting.\n\nOm het kostuum in te schakelen in de mobiele apps:\n* Selecteer in het menu \"Uitrusting\" om de kostuumschakelaar te vinden\n\nOm het kostuum in te schakelen op de website:\n* Ga naar je inventaris, selecteer \"Uitrusting\" en zoek de kostuumschakelaar in het tabblad Kostuum van de uitrustinglade", + "faqQuestion41": "Wat zijn Mystieke Zandlopers en hoe krijg ik ze?", + "webFaqAnswer41": "Mystieke Zandlopers zijn de exclusieve abonnementsvaluta van Habitica die gebruikt worden in de Tijdreizigerwinkel. Abonnees ontvangen aan het begin van elke maand met abonnementsvoordelen een Mystieke Zandloper, samen met een heleboel andere extra’s. Bekijk zeker onze abonnementsopties als je interesse hebt in de speciale achtergronden, huisdieren, queesten en uitrusting die in de Tijdreizigerwinkel worden aangeboden!", + "webFaqAnswer39": "Als je op zoek bent naar meer uitrusting, kun je een Habitica-abonnee worden, je kans wagen met de Betoverde Kist, of jezelf trakteren tijdens een van Habitica’s Grote Gala’s.\n\nHabitica-abonnees ontvangen elke maand een exclusieve uitrustingsset en Mystieke Zandlopers om vroegere uitrustingssets te kopen in de Tijdreizigerwinkel.\n\nDe Betoverde Kist in je beloningen bevat meer dan 350 uitrustingsstukken! Voor 100 goud krijg je een kans op speciale uitrusting, voedsel om je huisdier in een rijdier te veranderen, of ervaring om een level te stijgen!\n\nTijdens de vier seizoensgebonden Grote Gala’s wordt er gloednieuwe klasse-uitrusting beschikbaar gesteld om met goud te kopen, en eerdere Gala-sets kunnen met edelstenen worden aangeschaft.", + "webFaqAnswer40": "Edelstenen zijn de betaalde in-app valuta van Habitica die je kunt gebruiken om uitrusting, avatar-aanpassingen, achtergronden en meer te kopen! Edelstenen kunnen in bundels worden gekocht of met goud als je een Habitica-abonnee bent. Je kunt ook edelstenen winnen door als winnaar van een uitdaging geselecteerd te worden.", + "faqQuestion42": "Wat kan ik doen om mijn verantwoordelijkheid te vergroten?", + "webFaqAnswer42": "Een van de beste manieren om jezelf te motiveren en jezelf verantwoordelijk te houden voor het voltooien van je taken, is door je aan te sluiten bij een groep! Samen met andere Habitica-spelers op avontuur gaan is een geweldige manier om Quests aan te gaan om Huisdieren en Uitrusting te verdienen, buffs te ontvangen van de Vaardigheden van groepsleden, en je motivatie een boost te geven.\n\nEen andere manier om je verantwoordelijkheidsgevoel te vergroten, is door deel te nemen aan een Challenge. Challenges voegen automatisch taken toe aan je lijsten die met een specifiek doel te maken hebben! Ze voegen ook een element van competitie toe met andere Habitica-spelers, wat je een extra motivatieboost kan geven terwijl je streeft naar de Gem-beloning. Er zijn officiële Challenges die door het Habitica-team worden gemaakt, maar ook Challenges die door andere spelers worden georganiseerd.", + "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!", + "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.", + "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?" } diff --git a/website/common/locales/nl/gear.json b/website/common/locales/nl/gear.json index 7d8f01cecc..962181bc1c 100644 --- a/website/common/locales/nl/gear.json +++ b/website/common/locales/nl/gear.json @@ -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.", "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.", - "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" } diff --git a/website/common/locales/nl/settings.json b/website/common/locales/nl/settings.json index 41f359d392..76d5766cfa 100644 --- a/website/common/locales/nl/settings.json +++ b/website/common/locales/nl/settings.json @@ -10,9 +10,9 @@ "showTour": "Rondleiding starten", "showBailey": "Bailey laten zien", "showBaileyPop": "Breng Bailey de Stadsomroeper uit haar schuilplaats zodat je nieuws uit het verleden kunt nalezen.", - "fixVal": "Personagewaarden bijstellen", - "fixValPop": "Handmatig veranderen van waarden zoals gezondheidspunten, niveau en goud.", - "invalidLevel": "Ongeldige waarde: Niveau moet 1 of groter zijn.", + "fixVal": "Personage waarden bijstellen", + "fixValPop": "Handmatig veranderen van waarden zoals Gezondheidspunten, Niveau en Goud.", + "invalidLevel": "Ongeldige waarde: Niveau moet 1 of hoger zijn.", "enableClass": "Klassensysteem aanzetten", "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.", @@ -55,7 +55,6 @@ "APIToken": "API-sleutel (dit is een persoonlijke code - zie waarschuwing hierboven!)", "showAPIToken": "API-token tonen", "hideAPIToken": "API-token verbergen", - "APITokenWarning": "Als je een nieuw API-token nodig hebt (b.v. omdat je hem per ongeluk hebt gedeeld), stuur dan een mail naar <%= hrefTechAssistanceEmail %> met je Gebruikers-ID en je huidige token. Eens het opnieuw ingesteld is zal je alles opnieuw moeten machtigen door uit te loggen van de website en mobiele app en door het nieuwe token aan elke andere Habitica-tool die je gebruikt te verstrekken.", "thirdPartyApps": "Applicaties van derden", "resetDo": "Ja, reset mijn account!", "resetComplete": "Reset voltooid!", @@ -196,12 +195,12 @@ "passwordSuccess": "Wachtwoord succesvol aangepast", "transaction_admin_update_balance": "Door beheerder gegeven", "giftSubscriptionRateText": "$<%= price %> USD voor <%= months %> maanden", - "generalSettings": "Algemene instellingen", - "taskSettings": "Taak instellingen", + "generalSettings": "Algemene Instellingen", + "taskSettings": "Taak Instellingen", "confirmCancelChanges": "Weet je het zeker? Je wijzigingen worden niet opgeslagen.", - "loginMethods": "Inlog manieren", + "loginMethods": "Inlog Methodes", "character": "Karakter", - "siteData": "Website informatie", + "siteData": "Website Informatie", "account": "Account", "siteLanguage": "Websitetaal" } diff --git a/website/common/locales/pl/backgrounds.json b/website/common/locales/pl/backgrounds.json index 6fbd5b3dc4..682f6c8ab7 100644 --- a/website/common/locales/pl/backgrounds.json +++ b/website/common/locales/pl/backgrounds.json @@ -308,7 +308,7 @@ "backgroundFiberArtsRoomNotes": "Pokręć kołowrotkiem w Zakładzie Włókienniczym.", "backgroundMidnightCastleText": "Zamek o północy", "backgroundMidnightCastleNotes": "Spaceruj przy zamku o północy.", - "backgroundTornadoText": "Tornado", + "backgroundTornadoText": "backgroundTornadoText", "backgroundTornadoNotes": "Przeleć przez tornado.", "backgrounds122017": "ZESTAW 43: Opublikowany w grudniu 2017", "backgroundCrosscountrySkiTrailText": "Trasa narciarska przez kraj", @@ -432,7 +432,7 @@ "backgroundParkWithStatueNotes": "Podążaj ścieżką kwiatową przez park z rzeźbą.", "backgroundParkWithStatueText": "Park z Pomnikiem", "backgroundDojoNotes": "Naucz się nowych technik w sali treningowej Dojo.", - "backgroundDojoText": "Dojo", + "backgroundDojoText": "backgroundDojoText", "backgrounds052019": "Zestaw 60: Wydany w maju 2019", "backgroundBlossomingDesertNotes": "Zostań naocznym świadkiem rzadkiego, niesamowitego rozkwitu na Kwitnącej Pustyni.", "backgroundBlossomingDesertText": "Kwitnąca pustynia", @@ -897,5 +897,20 @@ "backgroundMonstrousCaveText": "Potworna Jaskinia", "backgroundMonstrousCaveNotes": "Spójrz w paszczę Potwornej Jaskini.", "backgroundJackOLanternStacksText": "Stosy Jack O'Lantern", - "backgroundJackOLanternStacksNotes": "Podziwiaj pole stosów Jack O'Lantern." + "backgroundJackOLanternStacksNotes": "Podziwiaj pole stosów Jack O'Lantern.", + "backgroundGardenWithFlowerBedsText": "Ogród Usłany Kwiatami", + "backgroundGardenWithFlowerBedsNotes": "Ciesz się rozkwitem wiosny w Ogrodzie Usłanym Kwiatami.", + "backgrounds0420205": "SET 131: Wydany w kwietniu 2025", + "backgrounds062025": "SET 133: Wydany w czerwcu 2025", + "backgroundSummerSeashoreText": "Letnie Wybrzeże", + "backgroundSummerSeashoreNotes": "Chwytaj fale nad Letnim Wybrzeżem.", + "backgrounds052025": "SET 132: Wydany w maju 2025", + "backgroundTrailThroughAForestText": "Szlak Przez Las", + "backgroundTrailThroughAForestNotes": "Wędruj Szlakiem Przez Las.", + "backgrounds072025": "SET 134: Wydany w lipcu 2025", + "backgroundSirensLairText": "Jaskinia Syreny", + "backgroundSirensLairNotes": "Odważ się zanurkować w Jaskini Syreny.", + "backgrounds082025": "SET 135: Wydany w sierpniu 2025", + "backgroundSunnyStreetWithShopsText": "Słoneczna Ulica Usłana Sklepami", + "backgroundSunnyStreetWithShopsNotes": "Upajaj się widokami i brzmieniem Słonecznej Ulicy Usłanej Sklepami." } diff --git a/website/common/locales/pl/challenge.json b/website/common/locales/pl/challenge.json index 0f6c9ba789..f8d3e4f052 100644 --- a/website/common/locales/pl/challenge.json +++ b/website/common/locales/pl/challenge.json @@ -91,10 +91,22 @@ "viewProgressOf": "Zobacz postęp", "viewProgress": "Widok Postępu", "selectMember": "Wybierz Członka", - "confirmKeepChallengeTasks": "Czy chcesz zachować zadania z wyzwania?", + "confirmKeepChallengeTasks": "Czy chcesz zachować zadania z Wyzwania?", "selectParticipant": "Wybierz Uczestnika", "yourReward": "Twoja Nagroda", "filters": "Filtry", "wonChallengeDesc": "<%= challengeName %> wybrał cię jako zwycięzca! Twoja wygrana została zapisana w Osiągnięciach.", - "removeTasks": "Usuń Zadania" + "removeTasks": "Usuń Zadania", + "messageChallengeFlagOfficial": "Oficjalne Wyzwania nie mogą zostać zgłoszone.", + "flaggedAndHidden": "Wyzwanie oznaczone i ukryte", + "resetFlagCount": "Zresetuj Licznik Oznaczeń", + "whyReportingChallenge": "Dlaczego zgłaszasz to Wyzwanie?", + "whyReportingChallengePlaceholder": "Powód zgłoszenia", + "messageChallengeFlagAlreadyReported": "Już zgłosiłeś to Wyzwanie.", + "flaggedNotHidden": "Wyzwanie oznaczone raz, nieukryte", + "cannotClose": "To Wyzwanie nie może zostać zamknięte, ponieważ jeden lub więcej graczy zgłosiło je jako niewłaściwe. Pracownicy wkrótce skontaktują się z Tobą, aby przekazać dalsze instrukcje. Jeśli nie nastąpi to w przeciągu 48 godzin, prosimy o wysłanie maila na adres admin@habitica.com z prośbą o pomoc.", + "cannotClone": "To Wyzwanie nie może zostać zamknięte, ponieważ jeden lub więcej graczy zgłosiło je jako niewłaściwe. Pracownik wkrótce skontaktuje się z Tobą, żeby przekazać dalsze instrukcje. Jeśli nie nastąpi to w przeciągu 48 godzin, prosimy o wysłanie maila na adres admin@habitica.com z prośbą o pomoc.", + "cannotMakeChallenge": "Nie możesz tworzyć publicznych Wyzwań, ponieważ twoje konto ma ograniczone pozwolenia dotyczące czatu. Skontaktuj się z nami na adres admin@habitica.com, aby uzyskać więcej informacji.", + "resetFlags": "Wyzeruj Oznaczenia", + "abuseFlagModalBodyChallenge": "Powinieneś zgłaszać wyłącznie Wyzwanie, które narusza <%= firstLinkStart %>Regulamin Społeczności<%= linkEnd %> i/lub <%= secondLinkStart %>Warunki korzystania z Usług<%= linkEnd %>. Złożenie mylnego zgłoszenia narusza Regulamin Społeczności Habitica." } diff --git a/website/common/locales/pl/character.json b/website/common/locales/pl/character.json index 23b826a555..9ce3244df9 100644 --- a/website/common/locales/pl/character.json +++ b/website/common/locales/pl/character.json @@ -2,7 +2,7 @@ "communityGuidelinesWarning": "Pamiętaj, że twoja nazwa gracza, zdjęcie profilowe oraz krótki opis muszą zgadzać się z wytycznymi społeczności (np. brak przekleństw, brak tematów dla dorosłych, brak obelg itd.) Jeśli masz jakieś pytania odnośnie poprawności, skontaktuj się z nami <%= hrefBlankCommunityManagerEmail %>!", "profile": "Profil", "avatar": "Dostosuj Postać", - "editAvatar": "Edytuj Postać", + "editAvatar": "Personalizuj Postać", "noDescription": "Ten użytkownik nie dodał opisu.", "noPhoto": "Ten użytkownik nie dodał zdjęcia.", "other": "Inne", @@ -83,7 +83,7 @@ "allocatePerPop": "Dodaj punkt do Percepcji", "allocateInt": "Punkty przydzielone do Inteligencji:", "allocateIntPop": "Dodaj punkt do Inteligencji", - "noMoreAllocate": "Teraz, gdy osiągnąłeś poziom 100, nie będziesz już zyskiwać punktów statystyk. Możesz dalej podnosić poziom lub zacząć nową przygodę od poziomu 1 używając Kuli Odrodzenia!", + "noMoreAllocate": "Teraz, gdy osiągnąłeś poziom 100, nie będziesz już zyskiwać Punktów Statystyk. Możesz dalej podnosić poziom lub zacząć nową przygodę od poziomu 1 używając Orb of Rebirth!", "stats": "Statystyki", "strength": "Siła", "strText": "Siła zwiększa szansę na losowe \"trafienia krytyczne\", a także wpływa na ilość otrzymanego za nie Złota, Doświadczenia i prawdopodobieństwa łupów. Pomaga także zadawać obrażenia bossom.", @@ -129,8 +129,8 @@ "healerText": "Uzdrowiciele są bardzo wytrzymali i otaczają swą ochroną bliskich. Niedopełnione Codzienne i złe Nawyki nie są dla nich zbyt groźne, zawsze też mogą uzdrowić się po dotkliwej porażce. Graj jako Uzdrowiciel, jeśli lubisz pomagać członkom Drużyny, lub jeśli bawi Cię wymykanie się śmierci poprzez sumienną pracę!", "optOutOfClasses": "Nie teraz", "chooseClass": "Wybierz swoją klasę", - "chooseClassLearnMarkdown": "[Dowiedz się więcej na temat systemu klas](https://habitica.fandom.com/pl/wiki/System_klas)", - "optOutOfClassesText": "Nie interesują Cię klasy? Chcesz wybrać później? Zrezygnuj z wyboru – będziesz wojownikiem bez umiejętności specjalnych. Później możesz poczytać o systemie klasowym w wiki i w dowolnym momencie włączyć klasy w Użytkownik > Statystyki.", + "chooseClassLearnMarkdown": "[Dowiedz się więcej na temat systemu klas Habitica](/static/faq#what-classes)", + "optOutOfClassesText": "Nie jesteś gotowy na wybór? Nie ma pośpiechu! Jeśli na ten moment rezygnujesz, możesz przeczytać o każdej klasie w naszym FAQ i odwiedzić Ustawienia, aby włączyć System Klas, kiedy tylko będziesz gotowy.", "selectClass": "Wybierz <%= heroClass %>", "select": "Wybierz", "stealth": "Ukrycie", @@ -167,7 +167,7 @@ "photo": "Zdjęcie", "info": "Informacje", "joined": "Dołączył", - "totalLogins": "Razem wizyt", + "totalLogins": "Całkowita liczba wizyt", "latestCheckin": "Ostatnia wizyta", "editProfile": "Edytuj profil", "challengesWon": "Wygrane wyzwania", @@ -185,5 +185,11 @@ "purchaseForGold": "Kupić za <%= cost %> szt. złota?", "notEnoughGold": "Masz za mało złota.", "chatCastSpellPartyTimes": "<%= username %> rzuca zaklęcie <%= spell %> dla drużyny <%= times %> raz.", - "chatCastSpellUserTimes": "<%= username %> rzuca zaklęcie <%= spell %> na <%= target %> <%= times %> raz." + "chatCastSpellUserTimes": "<%= username %> rzuca zaklęcie <%= spell %> na <%= target %> <%= times %> raz.", + "skins": "Skórki", + "titleFacialHair": "Zarost", + "titleHaircolor": "Kolory Włosów", + "titleHairbase": "Fryzury", + "customizations": "Personalizacje", + "nextReward": "Najbliższa nagroda za logowanie się" } diff --git a/website/common/locales/pl/communityguidelines.json b/website/common/locales/pl/communityguidelines.json index 5aec8d5aaf..c3a7b02cfe 100644 --- a/website/common/locales/pl/communityguidelines.json +++ b/website/common/locales/pl/communityguidelines.json @@ -10,79 +10,84 @@ "commGuidePara016": "Wchodząc w interakcje ze społecznością Habitiki, należy pamiętać o ogólnych zasadach, które pomagają w utrzymaniu bezpieczeństwa i zadowolenia.", "commGuideList02A": "Szanujcie się nawzajem. Bądźcie uprzejmi, mili, przyjaźni i pomocni. Pamiętajcie: Habitanie pochodzą z różnorodnych środowisk i mają bardzo odmienne doświadczenia.", "commGuideList02C": "Nie zamieszczaj obrazków ani wiadomości zawierających przemoc, groźby, treści pornograficznych lub o podtekście seksualnym, promujących dyskryminację, nietolerancję, rasizm, seksizm, nienawiść, dręczenie czy krzywdzenie osoby lub grupy. Nawet w formie żartu albo memu. Powyższe dotyczy także wulgaryzmów i wszelkich obraźliwych wypowiedzi. Nie wszyscy mają takie samo poczucie humoru, więc coś, co ty uznajesz za dowcip, kogoś innego może urazić.", - "commGuideList02D": "Utrzymujcie dyskusję na poziomie przyzwoitym dla osób w każdym wieku. To oznacza unikanie tematów dla dorosłych w przestrzeniach publicznych. Mamy wielu młodych Habitanów, którzy korzystają z tej strony, a ludzie pochodzą z różnych środowisk. Chcemy, aby nasza społeczność była tak komfortowa i inkluzywna jak to możliwe.", - "commGuideList02E": "Unikajcie przekleństw. Ta zasada dotyczy również zwrotów o konotacjach religijnych, które gdzie indziej mogłyby być akceptowalne oraz skrócone lub częściowo ocenzurowane wulgaryzmy. Mamy wśród nas ludzi różnego wyznania i pochodzenia, a chcemy mieć pewność, że wszyscy czują się komfortowo w strefach publicznych. Jeśli moderator lub członek zespołu mówi ci, że jakieś wyrażenie jest zabronione na Habitica, to nawet jeśli nie uważasz, że było ono problematyczne, decyzja jest ostateczna. Ponadto wulgaryzmy będą surowo piętnowane, ponieważ naruszają też Zasady Użytkowania.", + "commGuideList02D": "Pamiętaj, że Habiticanie są w różnym wieku i pochodzą z różnych środowisk. Wyzwania i profile graczy nie powinny zawierać tematów dla dorosłych, używać wulgaryzmów ani promować sporów czy konfliktów.", + "commGuideList02E": "Jeśli moderator lub członek zespołu mówi ci, że jakieś wyrażenie jest zabronione na Habitica, to nawet jeśli nie uważasz, że było ono problematyczne, decyzja jest ostateczna. Ponadto wulgaryzmy będą surowo piętnowane, ponieważ naruszają też Zasady Użytkowania.", "commGuideList02G": "Stosujcie się do zaleceń Moderatorów. Mogą to być prośby o: ograniczenie postowania w danym miejscu, edycję profilu w celu usunięcia niepożądanej zawartości itd. Nie kłóć się z moderatorami. Jeśli masz obawy lub uwagi co do moderacji, wyślij maila na admin@habitica.com aby skontaktować się z osobą odpowiedzialną za naszą społeczność.", - "commGuideList02J": "Nie spamuj Spamowanie może obejmować między innymi: publikowanie tego samego komentarza lub pytania w wielu miejscach, publikowanie linków bez wyjaśnienia lub kontekstu, publikowanie bezsensownych wpisów, publikowanie wielu wiadomości o Gildii, Drużynie lub Wyzwaniu, publikowanie wielu wiadomości z rzędu. Jeżeli kliknięcie w publikowany link przynosi Ci jakąkolwiek korzyść, musisz ujawnić to w wiadomości, inaczej zostanie to uznane za spam. To od moderatorów zależy, co zostanie uznane za spam.", - "commGuideList02K": "Unikaj używania dużych nagłówków w tekście na publicznych czatach, w szczególności w Karczmie. Podobnie jak WIELKIE LITERY, wygląda to jakbyś krzyczał i zakłóca przyjazną atmosferę.", - "commGuideList02L": "Mocno odradzamy wymianę danych osobowych w publicznych miejscach rozmów - zwłaszcza informacji umożliwiających identyfikację użytkownika. Dane identyfikacyjne mogą obejmować między innymi: twój adres zamieszkania, twój adres e-mail oraz twój token API/hasło. To dla twojego bezpieczeństwa! Personel lub moderatorzy mogą usunąć takie wiadomości wg własnego uznania. Jeżeli ktoś zapyta cię o informację osobową w prywatnej gildii, drużynie czy w prywatnej wiadomości, stanowczo zalecamy, aby uprzejmie odmówić oraz zawiadomić personel i moderatorów poprzez: 1) oflagowanie wiadomości, lub 2) wysyłając maila na admin@habitica.com i załączając zrzuty ekranów.", - "commGuidePara037": "Nie powinno się tworzyć jakichkolwiek gildii, czy to Publicznych, czy Prywatnych, w celu atakowania jakiejkolwiek grupy lub osoby!. Utworzenie takiej gildii jest podstawą do natychmiastowego zablokowania. Walcz ze złymi nawykami, a nie poszukiwaczami przygód!", + "commGuideList02J": "Nie spamuj. Spamowanie może obejmować, ale nie ogranicza się do: wysyłania niezamówionych prywatnych wiadomości, wysyłania bezsensownych wiadomości, wysyłania wielu promocyjnych wiadomości o Gildii, Drużynie lub Wydarzeniu, lub tworzenia wielu podobnych lub niskiej jakości Wyzwań jeden po drugim. Moderator ma swobodę w określeniu, które wiadomości są uznawane za spam.", + "commGuideList02K": "Nie wysyłaj linków bez wyjaśnienia ani kontekstu. Jeśli kliknięcie w link przyniesie Ci jakąkolwiek korzyść, musisz to ujawnić. Dotyczy to zarówno wiadomości, jak i Wyzwań.", + "commGuideList02L": "Zdecydowanie odradzamy wymianę danych osobowych, szczególnie informacji, które mogą zostać użyte do identyfikacji Ciebie. Identyfikujące informacje mogą obejmować, ale nie ograniczają się do: Twojego adresu, adresu e-mail, hasła lub tokenu API. Jeśli poproszono Cię o podanie danych osobowych w czacie drużyny lub w prywatnej wiadomości, zdecydowanie zalecamy, abyś nie odpowiadał, a następnie zgłosił wiadomość, lub skontaktował się admin@habitica.com wraz ze zrzutami ekranu wiadomości, jeśli potrzebny jest dodatkowy kontekst.", + "commGuidePara037": "Nie powinno się tworzyć jakichkolwiek grup, czy to Publicznych, czy Prywatnych, w celu atakowania jakiejkolwiek grupy lub osoby!. Walcz ze złymi nawykami, a nie poszukiwaczami przygód!", "commGuideHeadingInfractionsEtc": "Naruszenie zasad, Konsekwencje i Powrót do łask", "commGuideHeadingInfractions": "Naruszenie zasad", - "commGuidePara050": "Przytłaczająca większość Habitanów pomaga sobie nawzajem, szanuje współużytkowników i pracuje na to, by społeczność była radosna i przyjazna. Jednakże, raz na jakiś czas, komuś zdarza się naruszyć którąś z powyższych reguł. Gdy to się zdarza, Modzi podejmują wszelkie starania, by przywrócić wszystkim w Habitice bezpieczeństwo i spokój.", - "commGuidePara051": "Istnieje wiele różnych wykroczeń i są one rozpatrywane w zależności od ich stopnia. Dane te nie są ostatecznymi listami, a moderatorzy mogą podejmować decyzje dotyczące tematów, które nie są tutaj omawiane, działając według własnego uznania i biorąc pod uwagę kontekst przy ocenie naruszenia.", + "commGuidePara050": "Przytłaczająca większość Habitanów pomaga sobie nawzajem, szanuje współużytkowników i pracuje na to, by atmosfera była radosna i przyjazna. Jednakże, raz na jakiś czas, komuś zdarza się naruszyć którąś z powyższych Reguł. Gdy to się zdarza, Moderatorzy podejmują wszelkie starania, by przywrócić wszystkim w Habitice bezpieczeństwo i spokój.", + "commGuidePara051": "Istnieje wiele różnych wykroczeń i są one rozpatrywane w zależności od ich stopnia. Dane te nie są ostatecznymi listami, a Zespół może podejmować decyzje dotyczące tematów, które nie są tutaj omawiane, działając według własnego uznania i biorąc pod uwagę kontekst przy ocenie naruszenia.", "commGuideHeadingSevereInfractions": "Poważne wykroczenia", "commGuidePara052": "Ciężkie przewinienia bardzo naruszają bezpieczeństwo społeczności Habitiki, więc wiążą się z równie poważnymi konsekwencjami dla sprawców.", "commGuidePara053": "Poniżej przedstawione są przykłady ciężkich przewinień. To nie jest pełna lista.", - "commGuideList05A": "Naruszenie Zasad Użytkowania", + "commGuideList05A": "Inne naruszenia Regulaminu, które nie zostały tutaj wyszczególnione", "commGuideList05B": "Mowa/obrazy nienawiści, napastowanie/nękanie, cyber-przemoc, kłótnie i trolling", "commGuideList05C": "Naruszenie Okresu Próbnego", - "commGuideList05D": "Podszywanie się pod personel lub moderatorów - również mówienie, że przestrzenie stworzone przez użytkowników, nie stowarzyszone z Habitica są oficjalne i/lub moderwoane przez Habitica lub jej Moderatorów/personel", + "commGuideList05D": "Podszywanie się pod Zespół- obejmuje to twierdzenie, że przestrzenie stworzone przez graczy, które nie są powiązane z Habitica, są oficjalne i/lub moderowane przez Habitica lub jej Zespół", "commGuideList05E": "Powtarzające się średnie wykroczenia", - "commGuideList05F": "Tworzenie duplikatu konta, aby uniknąć konsekwencji (dla przykładu, tworzenie nowego konta, aby pisać na czacie po otrzymaniu nań blokady)", - "commGuideList05G": "Celowe wprowadzanie w błąd załogi i moderatorów w celu uniknięcia konsekwencji lub sprawienia kłopotu innym graczom", + "commGuideList05F": "Tworzenie duplikatu konta, aby uniknąć konsekwencji.", + "commGuideList05G": "Celowe wprowadzanie w błąd załogi w celu uniknięcia konsekwencji lub sprawienia kłopotu innym graczom", "commGuideHeadingModerateInfractions": "Średnie wykroczenia", - "commGuidePara054": "Umiarkowane wykroczenia nie narażają naszej społeczności na niebezpieczeństwo, lecz raczej na nieprzyjemności. Mają umiarkowane konsekwencje. Jeśli występują w połączeniu z innymi wykroczeniami, pociągają za sobą surowsze kary.", + "commGuidePara054": "Te naruszenia będą miały umiarkowane konsekwencje. W połączeniu z wieloma innymi naruszeniami konsekwencje mogą stać się bardziej surowe.", "commGuidePara055": "Oto przykłady średnich wykroczeń. To nie jest kompletna lista.", - "commGuideList06A": "Ignorowanie, brak szacunku lub kłótnie z moderatorem. Obejmuje to publiczne narzekanie na moderatorów czy innych użytkowników, publiczne gloryfikowanie lub obrona zbanowanych użytkowników, a także debatowanie nad tym, czy działanie moderatora było właściwe, czy nie. Jeśli masz wątpliwości w sprawie zastosowanej zasady lub zachowania moderatora, skontaktuj się z personelem poprzez pocztę e-mail (admin@habitica.com).", - "commGuideList06C": "Celowe oznaczanie niewinnych postów.", + "commGuideList06A": "Ignorowanie, brak szacunku lub sprzeczanie się z Zespołem. Jeśli masz wątpliwości co do którejś z zasad lub zachowania członka zespołu, skontaktuj się z nami pod adresem admin@habitica.com.", + "commGuideList06C": "Celowe oznaczanie niewinnych postów, Wyzwań, profili lub wiadomości.", "commGuideList06E": "Wielokrotne popełnianie drobnych naruszeń", "commGuideHeadingMinorInfractions": "Drobne wykroczenia", - "commGuidePara056": "Drobne naruszenia zasad pociągają za sobą drobne sankcje. Jednak jeśli niewielkie kary w przypadku danej osoby nie skutkują, konsekwencje mogą się dla niej z czasem zaostrzyć.", + "commGuidePara056": "Drobne naruszenia, choć są niepożądane, skutkują jedynie drobnymi konsekwencjami. Jeśli jednak będą się powtarzać, z czasem mogą prowadzić do bardziej surowych konsekwencji. Drobne naruszenia to zazwyczaj pierwsze przypadki złamania tych Wytycznych, ale mogą również obejmować inne okoliczności.", "commGuidePara057": "Oto przykłady drobnych wykroczeń. To nie jest kompletna lista.", "commGuideList07A": "Pierwsze złamanie Zasad Przestrzeni Publicznej", - "commGuideList07B": "Wszelkie oświadczenia lub działania, które wywołują \"Proszę, Nie...\" ze strony Moderatorów. W sytuacji, gdy jesteś proszony o zaprzestanie jakiegoś działania w przestrzeniach publicznych, może to być jedyna konsekwencja. Jeśli Moderatorzy będą zmuszeni do wielokrotnego zwracania uwagi temu samemu użytkownikowi, może to być zaliczane jako większe naruszenie", + "commGuideList07B": "Wszelkie oświadczenia lub działania, które wywołują \"Proszę, Nie...\" ze strony Zespołu. W sytuacji, gdy jesteś proszony o zaprzestanie jakiegoś działania w przestrzeniach publicznych, może to być jedyna konsekwencja. Jeśli Zespół będzie zmuszony do wielokrotnego zwracania uwagi temu samemu użytkownikowi, może to być zaliczane jako większe naruszenie", "commGuidePara057A": "Niektóre wpisy mogą być ukryte, ze względu na wrażliwe treści lub mogące nasuwać ludziom złe pomysły. Zazwyczaj nie jest to zaliczane jako naruszenie, zwłaszcza za pierwszym razem!", "commGuideHeadingConsequences": "Konsekwencje", - "commGuidePara059": "Podobnie, za wykroczenia ponosi się konsekwencje. Przykładowe znajdują się poniżej.", + "commGuidePara059": "Naruszenia społeczności mają bezpośrednie konsekwencje. Przykładowe konsekwencje zostały przedstawione poniżej.", "commGuideHeadingSevereConsequences": "Przykłady Poważnych Konsekwencji", - "commGuideList09A": "Zablokowanie konta (spójrz powyżej)", - "commGuideList09C": "Permanentne uniemożliwienie zwiększenia (\"zamrożenie\") Rangi Pomocnika", + "commGuideList09A": "Zablokowanie konta", + "commGuideList09C": "Permanentne wstrzymanie zwiększenia Rangi Pomocnika", "commGuideHeadingModerateConsequences": "Przykłady Średnich Konsekwencji", - "commGuideList10D": "Tymczasowe uniemożliwienie zwiększenia (\"zamrożenie\") Rangi Pomocnika", + "commGuideList10D": "Tymczasowe wstrzymanie zwiększenia Rangi Pomocnika", "commGuideHeadingMinorConsequences": "Przykłady Drobnych Konsekwencji", - "commGuideList11A": "Przypomnienie o Zasadach Przestrzeni Publicznej", + "commGuideList11A": "Przypomnienie o Zasadach", "commGuideList11B": "Ostrzeżenia", "commGuideList11C": "Prośby", - "commGuideList11D": "Usuwanie (Modzi/Personel mogą usuwać problematyczną zawartość)", - "commGuideList11E": "Edycja (Modzi/Personel mogą zmieniać problematyczną zawartość)", + "commGuideList11D": "Usuwanie problematycznej zawartości przez Obsługę", + "commGuideList11E": "Edycja problematycznej zawartości przez Obsługę", "commGuideHeadingRestoration": "Przywrócenie", "commGuidePara061": "Habitica to miejsce poświęcone samorozwojowi, więc wierzymy w drugie szanse. Jeśli popełnicie wykroczenie i zostaną na Was nałożone konsekwencje, spójrzcie na to jak na bodziec do zmiany swoich zachowań na lepsze, wskazówkę, jak możecie lepiej współtworzyć społeczność.", - "commGuidePara062": "Ogłoszenie, wiadomość lub e-mail wysłany osobie, która naruszyła zasady, wyjaśniający konsekwencje jej działania to dobre źródło informacji. Taka osoba powinna poddać się jakimkolwiek nałożonym na nią ograniczeniom i starać się sprostać postawionym jej wymaganiom, by karę zniesiono.", - "commGuidePara063": "Jeśli nie rozumiecie, jakie lub dlaczego ponieśliście konsekwencje, albo jakiego rodzaju było Wasze wykroczenie, poproście Personel/Moderatorów o pomoc, żeby móc uniknąć łamania zasad w przyszłości. Jeśli czujecie, że podjęta decyzja nie była słuszna, możecie skontaktować się z zespołem, by to przedyskutować - admin@habitica.com.", - "commGuideHeadingMeet": "Poznaj Zespół i Modów!", - "commGuidePara007": "Personel ma fioletowe tagi z koroną. Ich tytuł to \"Heroiczny\".", + "commGuidePara062": "Jeśli chcesz zapytać o swoje naruszenie lub konsekwencje, przeprosić lub złożyć prośbę o przywrócenie, skontaktuj się z nami pod adresem admin@habitica.com, podając swój identyfikator użytkownika (User ID) lub @nazwa_użytkownika. To jest Twoja odpowiedzialność, aby się z nami skontaktować.", + "commGuidePara063": "Jeśli nie rozumiesz swoich konsekwencji ani charakteru swojego naruszenia, lub jeśli masz inne pytania związane z tą sprawą, możesz skontaktować się z zespołem, aby to omówić, pod adresem admin@habitica.com. Współpracuj z wszelkimi nałożonymi ograniczeniami i staraj się spełnić wymagania, aby kary mogły zostać zniesione.", + "commGuideHeadingMeet": "Poznaj Zespół", + "commGuidePara007": "Zespół Habitica utrzymuje działanie aplikacji i stron internetowych oraz może pełnić rolę moderatorów czatu. Mają fioletowe oznaczenia z koronami. Ich tytuł to „Heroiczny”.", "commGuidePara009": "Obecni członkowie Personelu to (od lewej do prawej):", "commGuideAKA": "<%= habitName %> czyli <%= realName %>", "commGuideOnGitHub": "<%= gitHubName %> na GitHubie", "commGuidePara011b": "na GitHub/Fandom", "commGuidePara011c": "na Wiki", "commGuidePara011d": "na GitHub", - "commGuidePara013": "W społeczności tak dużej jak Habitica, użytkownicy przychodzą i odchodzą, a czasem nawet członek załogi czy moderator musi odwiesić swój szlachecki płaszcz i odpocząć. Tych drugich nazywamy Załogą i Moderatoratorami Na Emeryturze. Nie mają już uprawnień Moderatorów, ale wciąż doceniamy ich ciężką pracę!", + "commGuidePara013": "W społeczności tak dużej jak Habitica, użytkownicy przychodzą i odchodzą, a czasem nawet członek zespołu czy moderator musi odwiesić swój szlachecki płaszcz i odpocząć. Tych drugich nazywamy Załogą i Moderatoratorami Na Emeryturze. Nie mają już uprawnień Moderatorów, ale wciąż doceniamy ich ciężką pracę!", "commGuidePara014": "Emerytowany Personel i Emerytowani Moderatorzy:", "commGuideHeadingFinal": "Ostatni Rozdział", "commGuidePara067": "To by było na tyle, odważni Habitanie, jeśli chodzi o regulamin społeczności! Otrzyj pot ze swego czoła i przyznaj sobie nieco PD za przeczytanie tego w całości. Jeśli masz jakieś wątpliwości czy zastrzeżenia na temat tego regulaminu społeczności, skontaktuj się z nami poprzez admin@habitica.com, chętnie wyjaśnimy wątpliwości.", "commGuidePara068": "A teraz naprzód, dzielni poszukiwacze przygód, zgładźcie kilka Codziennych!", "commGuideHeadingLinks": "Użyteczne linki", - "commGuideLink02": "The Wiki: największy zbiór informacji na temat Habitiki.", + "commGuideLink02": "Wiki: największy zbiór informacji o Habitica. Zauważ, że to miejsce jest nieoficjalne - jest hostowane przez Fandom i utrzymywane przez graczy.", "commGuideLink03": "GitHub: pomóż z kodem!", "commGuideLink04": "Formularz Zwrotny: do zgłaszania propozycji funkcjonalności dla strony i aplikacji.", "commGuidePara069": "Poniżsi utalentowani artyści przyczynili się do tych ilustracji:", "commGuideList01A": "Nasze Zasady i Warunki Korzystania z Usługi obowiązują w Wyzwaniach, Drużynach, profilach graczy i wiadomościach prywatnych.", - "commGuideList02M": "Nie proś ani nie żebraj o kryształy, subskrypcje ani członkostwo w planach grupowych. Jest to zabronione w Karczmie, publicznych i prywatnych czatach i prywatnych wiadomościach. Jeśli otrzymasz wiadomości z prośbą o płatne przedmioty, proszę oflaguj je, aby zgłosić je moderatorom. Powtarzające się lub silne żebranie o kryształy lub subskrypcje, zwłaszcza po ostrzeżeniu, mogą spowodować zbanowanie konta.", + "commGuideList02M": "Nie proś ani nie żebraj o kryształy, subskrypcje ani członkostwo w planach grupowych. Jeśli zobaczysz lub otrzymasz wiadomości z prośbą o płatne przedmioty, zgłoś je moderatorom. Powtarzające się lub silne żebranie o kryształy lub subskrypcje, zwłaszcza po ostrzeżeniu, mogą spowodować zbanowanie konta.", "commGuideList09D": "Odebranie lub zdegradowanie Stopnia Współpracy", "commGuideList05H": "Silne lub powtarzające się próby oszustwa lub nacisku na innych graczy, w celu zdobycia płatnych przedmiotów", "commGuideList02H": "Wszystkie nazwy gracza i @nazwy użytkownika muszą być zgodne z Warunkami Korzystania z Usług. Żeby zmienić swoją wyświetlaną nazwę i/lub @nazwę użytkownika: na urządzeniu mobilnym wejdź w Menu > Ustawienia > Konto. Na stronie przejdź do Ustawień z ikony użytkownika na górnym panelu nawigacyjnym.", "commGuideList02I": "Nazwy Wyzwań powinny być odpowiednie dla wszystkich odbiorców, ponieważ pojawią się w publicznym profilu zwycięzcy. Pamiętaj o tym tworząc Wyzwania, ponieważ jeżeli nazwa zostanie zgłoszona, będziemy musieli edytować wpis w ich profilu.", - "commGuideList02N": "Jeśli widzisz treści łamiące Zasady lub Warunki korzystania z usług, zgłoś je. Możesz zgłosić wiadomość bezpośrednio lub powiadomić nas poprzez wysłanie wiadomości na admin@habitica.com w przypadku nieprawidłowości w profilach albo Wyzwaniach. Zajmiemy się nimi tak szybko jak to możliwe. Możesz do nas napisać w swoim rodzimym języku: możemy użyć Google Translate, a chcemy, żebyś mógł skontaktować się z nami bez obaw, jeśli będziesz miał problem." + "commGuideList02N": "Jeśli widzisz treści łamiące Zasady lub Warunki korzystania z usług, zgłoś je. Możesz zgłosić wiadomość bezpośrednio lub powiadomić nas poprzez wysłanie wiadomości na admin@habitica.com w przypadku nieprawidłowości w profilach albo Wyzwaniach. Zajmiemy się nimi tak szybko jak to możliwe. Możesz do nas napisać w swoim rodzimym języku: możemy użyć Google Translate, a chcemy, żebyś mógł skontaktować się z nami bez obaw, jeśli będziesz miał problem.", + "commGuideList02P": "Odwodzimy od wysyłania nieproszonych prywatnych wiadomości. Jeśli otrzymasz niechcianą wiadomość, która sprawia, że czujesz się niekomfortowo lub narusza niniejsze Wytyczne lub Warunki korzystania z Usług, zablokuj nadawcę i zgłoś to, aby zwrócić na to uwagę Personelu.", + "commGuideList02O": "Strony mogą tworzyć własne zasady czatu dla wygody i preferencji członków. Administratorzy nie mogą egzekwować zasad czatu w tych prywatnych przestrzeniach, chyba że dochodzi do naruszenia Warunków korzystania z usługi, w tym nękania. Jeśli ktoś w twojej grupie powoduje problemy, zachęcamy lidera grupy do usunięcia go.", + "commGuideList02Q": "Nie próbuj obejść blokady (blocka).. Jeśli ktoś zablokował Ci możliwość wysyłania prywatnych wiadomości, nie kontaktuj się z nim w innym miejscu, by poprosić go o odblokowanie.", + "commGuideList09E": "Stałe odebranie możliwości wysyłania prywatnych wiadomości lub pojawiania się w wyszukiwarce członków Drużyn", + "commGuideList10G": "Tymczasowe odebranie możliwości wysyłania prywatnych wiadomości lub pojawiania się w wyszukiwarce członków Drużyny" } diff --git a/website/common/locales/pl/content.json b/website/common/locales/pl/content.json index 7f43693544..d11471bde5 100644 --- a/website/common/locales/pl/content.json +++ b/website/common/locales/pl/content.json @@ -5,181 +5,181 @@ "armoireNotesFull": "Otwórz skrzynię aby otrzymać losowe wyposażenie specjalne, doświadczenie albo jedzenie! Pozostałe elementy wyposażenia:", "armoireLastItem": "Znalazłeś ostatnią część rzadkiego wyposażenia w Zaczarowanej Skrzyni.", "armoireNotesEmpty": "Skrzynia będzie zawierała nowe wyposażenie co miesiąc. Do tego czasu klikaj aby otrzymać doświadczenie i jedzenie dla zwierzaków!", - "dropEggWolfText": "wilk", + "dropEggWolfText": "Wilczek", "dropEggWolfMountText": "Wilk", "dropEggWolfAdjective": "lojalny", - "dropEggTigerCubText": "tygrysiątko", - "dropEggTigerCubMountText": "tygrys", + "dropEggTigerCubText": "Tygrysek", + "dropEggTigerCubMountText": "Tygrys", "dropEggTigerCubAdjective": "dziki", - "dropEggPandaCubText": "mała panda", - "dropEggPandaCubMountText": "panda", - "dropEggPandaCubAdjective": "łagodna", - "dropEggLionCubText": "lwiątko", - "dropEggLionCubMountText": "lew", + "dropEggPandaCubText": "Niedźwiadek Panda", + "dropEggPandaCubMountText": "Niedźwiedź Panda", + "dropEggPandaCubAdjective": "łagodny", + "dropEggLionCubText": "Mały Lew", + "dropEggLionCubMountText": "Lew", "dropEggLionCubAdjective": "królewski", - "dropEggFoxText": "lis", + "dropEggFoxText": "Lisek", "dropEggFoxMountText": "Lis", "dropEggFoxAdjective": "chytry", - "dropEggFlyingPigText": "latająca świnia", - "dropEggFlyingPigMountText": "Latająca świnia", - "dropEggFlyingPigAdjective": "urojona", - "dropEggDragonText": "smok", + "dropEggFlyingPigText": "Latający Prosiak", + "dropEggFlyingPigMountText": "Latający Wieprz", + "dropEggFlyingPigAdjective": "grymaśny", + "dropEggDragonText": "Smoczek", "dropEggDragonMountText": "Smok", "dropEggDragonAdjective": "potężny", - "dropEggCactusText": "kaktus", + "dropEggCactusText": "Kaktusek", "dropEggCactusMountText": "Kaktus", "dropEggCactusAdjective": "kłujący", - "dropEggBearCubText": "niedźwiedziątko", - "dropEggBearCubMountText": "niedźwiedź", + "dropEggBearCubText": "Niedźwiadek", + "dropEggBearCubMountText": "Niedźwiedź", "dropEggBearCubAdjective": "odważny", - "questEggGryphonText": "gryf", + "questEggGryphonText": "Gryf", "questEggGryphonMountText": "Gryf", "questEggGryphonAdjective": "dumny", - "questEggHedgehogText": "jeż", + "questEggHedgehogText": "Jeżyk", "questEggHedgehogMountText": "Jeż", - "questEggHedgehogAdjective": "kłujący", - "questEggDeerText": "jeleń", + "questEggHedgehogAdjective": "kolczasty", + "questEggDeerText": "Jelonek", "questEggDeerMountText": "Jeleń", "questEggDeerAdjective": "elegancki", "questEggEggText": "jajo", "questEggEggMountText": "koszyk na jajka", "questEggEggAdjective": "kolorowy", - "questEggRatText": "szczur", + "questEggRatText": "Szczurek", "questEggRatMountText": "Szczur", "questEggRatAdjective": "towarzyski", - "questEggOctopusText": "ośmiornica", + "questEggOctopusText": "Ośmiornica", "questEggOctopusMountText": "Ośmiornica", "questEggOctopusAdjective": "śliska", - "questEggSeahorseText": "konik morski", + "questEggSeahorseText": "Konik morski", "questEggSeahorseMountText": "Konik morski", - "questEggSeahorseAdjective": "cenny", - "questEggParrotText": "papuga", + "questEggSeahorseAdjective": "nagradzany", + "questEggParrotText": "Papużka", "questEggParrotMountText": "Papuga", "questEggParrotAdjective": "jaskrawa", - "questEggRoosterText": "kogut", + "questEggRoosterText": "Kogucik", "questEggRoosterMountText": "Kogut", "questEggRoosterAdjective": "dumny", - "questEggSpiderText": "pająk", + "questEggSpiderText": "Pajączek", "questEggSpiderMountText": "Pająk", "questEggSpiderAdjective": "artystyczny", - "questEggOwlText": "sowa", + "questEggOwlText": "Sówka", "questEggOwlMountText": "Sowa", "questEggOwlAdjective": "mądra", - "questEggPenguinText": "Pingwin", + "questEggPenguinText": "Pingwinek", "questEggPenguinMountText": "Pingwin", "questEggPenguinAdjective": "przenikliwy", - "questEggTRexText": "tyranozaur", + "questEggTRexText": "Tyranozaurek", "questEggTRexMountText": "Tyranozaur", "questEggTRexAdjective": "krótkołapy", - "questEggRockText": "kamień", + "questEggRockText": "Kamyszek", "questEggRockMountText": "Kamień", "questEggRockAdjective": "ruchliwy", - "questEggBunnyText": "króliczek", - "questEggBunnyMountText": "Króliczek", + "questEggBunnyText": "Króliczek", + "questEggBunnyMountText": "Królik", "questEggBunnyAdjective": "przytulaśny", - "questEggSlimeText": "piankowy śluz", + "questEggSlimeText": "Piankowy Śluz", "questEggSlimeMountText": "Piankowy Śluz", "questEggSlimeAdjective": "słodki", - "questEggSheepText": "owca", + "questEggSheepText": "Owieczka", "questEggSheepMountText": "Owca", "questEggSheepAdjective": "wełnista", - "questEggCuttlefishText": "mątwa", + "questEggCuttlefishText": "Mątwa", "questEggCuttlefishMountText": "Mątwa", "questEggCuttlefishAdjective": "milusia", - "questEggWhaleText": "wieloryb", + "questEggWhaleText": "Wielorybek", "questEggWhaleMountText": "Wieloryb", "questEggWhaleAdjective": "pluskający", "questEggCheetahText": "Gepard", "questEggCheetahMountText": "Gepard", "questEggCheetahAdjective": "szczery", - "questEggHorseText": "Koń", + "questEggHorseText": "Kucyk", "questEggHorseMountText": "Koń", "questEggHorseAdjective": "galopujący", - "questEggFrogText": "Żaba", + "questEggFrogText": "Żabka", "questEggFrogMountText": "Żaba", "questEggFrogAdjective": "książęca", - "questEggSnakeText": "Wąż", + "questEggSnakeText": "Wężyk", "questEggSnakeMountText": "Wąż", "questEggSnakeAdjective": "wijący się", "questEggUnicornText": "Jednorożec", "questEggUnicornMountText": "Skrzydlaty Jednorożec", - "questEggUnicornAdjective": "magiczne", - "questEggSabretoothText": "Tygrys szablozębny", - "questEggSabretoothMountText": "Tygrys szablozębny", + "questEggUnicornAdjective": "magiczny", + "questEggSabretoothText": "Tygrysek Szablozębny", + "questEggSabretoothMountText": "Tygrys Szablozębny", "questEggSabretoothAdjective": "okrutny", - "questEggMonkeyText": "Małpa", + "questEggMonkeyText": "Małpka", "questEggMonkeyMountText": "Małpa", "questEggMonkeyAdjective": "psotna", - "questEggSnailText": "Ślimak", + "questEggSnailText": "Ślimaczek", "questEggSnailMountText": "Ślimak", "questEggSnailAdjective": "powolny ale wytrwały", - "questEggFalconText": "Sokół", + "questEggFalconText": "Sokolik", "questEggFalconMountText": "Sokół", "questEggFalconAdjective": "szybki", - "questEggTreelingText": "Drzewo", + "questEggTreelingText": "Drzewko", "questEggTreelingMountText": "Drzewo", "questEggTreelingAdjective": "liściaste", "questEggAxolotlText": "Aksolotl", "questEggAxolotlMountText": "Aksolotl", "questEggAxolotlAdjective": "mały", - "questEggTurtleText": "Żółw Morski", + "questEggTurtleText": "Żółwik Morski", "questEggTurtleMountText": "Olbrzymi Żółw Morski", "questEggTurtleAdjective": "spokojny", "questEggArmadilloText": "Pancernik", "questEggArmadilloMountText": "Pancernik", "questEggArmadilloAdjective": "uzbrojony", - "questEggCowText": "Krowa", + "questEggCowText": "Krówka", "questEggCowMountText": "Krowa", "questEggCowAdjective": "mucząca", - "questEggBeetleText": "Żuk", + "questEggBeetleText": "Żuczek", "questEggBeetleMountText": "Żuk", "questEggBeetleAdjective": "niepokonany", "questEggFerretText": "Fretka", "questEggFerretMountText": "Fretka", - "questEggFerretAdjective": "futerkowy", + "questEggFerretAdjective": "futerkowa", "questEggSlothText": "Leniwiec", "questEggSlothMountText": "Leniwiec", - "questEggSlothAdjective": "szybki", - "questEggTriceratopsText": "Triceratops", + "questEggSlothAdjective": "pośpieszny", + "questEggTriceratopsText": "Triceratopsek", "questEggTriceratopsMountText": "Triceratops", "questEggTriceratopsAdjective": "chytry", - "questEggGuineaPigText": "Świnka morska", - "questEggGuineaPigMountText": "Świnka morska", + "questEggGuineaPigText": "Świnka Morska", + "questEggGuineaPigMountText": "Świnka Morska", "questEggGuineaPigAdjective": "roztrzepana", - "questEggPeacockText": "Paw", + "questEggPeacockText": "Pawik", "questEggPeacockMountText": "Paw", "questEggPeacockAdjective": "brykający", "questEggButterflyText": "Gąsienica", "questEggButterflyMountText": "Motyl", "questEggButterflyAdjective": "uroczy", - "questEggNudibranchText": "Ślimak nagoskrzelny", - "questEggNudibranchMountText": "Ślimak nagoskrzelny", + "questEggNudibranchText": "Ślimak Morski", + "questEggNudibranchMountText": "Ślimak Morski", "questEggNudibranchAdjective": "zmyślny", "questEggHippoText": "Hipcio", - "questEggHippoMountText": "Hipcio", + "questEggHippoMountText": "Hipopotam", "questEggHippoAdjective": "wesoły", "questEggYarnText": "Przędza", "questEggYarnMountText": "Latający Dywan", "questEggYarnAdjective": "wełniany", - "questEggPterodactylText": "Pterodaktyl", + "questEggPterodactylText": "Pterodaktylek", "questEggPterodactylMountText": "Pterodaktyl", "questEggPterodactylAdjective": "ufny", - "questEggBadgerText": "Borsuk", + "questEggBadgerText": "Borsuczek", "questEggBadgerMountText": "Borsuk", "questEggBadgerAdjective": "ruchliwy", "questEggSquirrelText": "Wiewiórka", "questEggSquirrelMountText": "Wiewiórka", "questEggSquirrelAdjective": "optymistyczna", - "questEggSeaSerpentText": "Wąż Morski", + "questEggSeaSerpentText": "Wężyk Morski", "questEggSeaSerpentMountText": "Wąż Morski", "questEggSeaSerpentAdjective": "lśniący", - "questEggKangarooText": "Kangur", + "questEggKangarooText": "Kangurek", "questEggKangarooMountText": "Kangur", - "questEggKangarooAdjective": "bystry", - "questEggAlligatorText": "Krokodyl", + "questEggKangarooAdjective": "gorliwy", + "questEggAlligatorText": "Krokodylek", "questEggAlligatorMountText": "Krokodyl", "questEggAlligatorAdjective": "uroczy", - "questEggVelociraptorText": "Welociraptor", + "questEggVelociraptorText": "Welociraptorek", "questEggVelociraptorMountText": "Welociraptor", "questEggVelociraptorAdjective": "sprytny", "eggNotes": "Znajdź eliksir wyklucia i wylej go na to jajo, a wykluje się z niego <%= eggAdjective(locale) %> <%= eggText(locale) %>.", @@ -199,18 +199,18 @@ "hatchingPotionAquatic": "Morski", "hatchingPotionEmber": "Rozżarzony", "hatchingPotionThunderstorm": "Burzowy", - "hatchingPotionGhost": "Duch", - "hatchingPotionRoyalPurple": "Purpura królewska", + "hatchingPotionGhost": "Upiorny", + "hatchingPotionRoyalPurple": "Królewsko Purpurowy", "hatchingPotionHolly": "Świąteczny", - "hatchingPotionCupid": "Amor", + "hatchingPotionCupid": "Amorowy", "hatchingPotionShimmer": "Migoczący", "hatchingPotionFairy": "Bajeczny", - "hatchingPotionStarryNight": "Gwiezdna Noc", - "hatchingPotionRainbow": "Tęcza", + "hatchingPotionStarryNight": "Gwieździstej Nocy", + "hatchingPotionRainbow": "Tęczowy", "hatchingPotionGlass": "Szklany", "hatchingPotionGlow": "Lśniący w ciemności", "hatchingPotionFrost": "Mroźny", - "hatchingPotionIcySnow": "Lodowaty Śnieg", + "hatchingPotionIcySnow": "Lodowato-Śniegowy", "hatchingPotionNotes": "Wylej eliksir na jajko, a wykluje się z niego <%= potText(locale) %>.", "foodMeat": "Mięso", "foodMeatThe": "Mięso", @@ -306,7 +306,7 @@ "foodSaddleNotes": "Natychmiastowo zmienia jednego z Twoich chowańców w wierzchowca.", "foodSaddleSellWarningNote": "Hej! To całkiem użyteczny przedmiot! Czy jesteś zaznajomiony z tym, jak używać siodła wraz z twoimi chowańcami?", "foodNotes": "Nakarm tym chowańca, a wyrośnie z niego wytrzymały wierzchowiec.", - "hatchingPotionRoseQuartz": "Różany Kwarc", + "hatchingPotionRoseQuartz": "Różano-Kwarcowy", "hatchingPotionCelestial": "Niebiański", "foodPieSkeletonA": "kawałek Placka ze Szpikiem", "foodPieBase": "Szarlotka", @@ -336,10 +336,10 @@ "foodPieRed": "Czerwony placek z wiśniami", "foodPieRedThe": "Czerwony placek z wiśniami", "foodPieRedA": "kawałek czerwonego placka z wiśniami", - "hatchingPotionVeggie": "Ogród", + "hatchingPotionVeggie": "Ogrodowy", "foodPieSkeleton": "Placek ze szpikiem", "foodPieSkeletonThe": "Placek ze szpikiem", - "questEggDolphinText": "Delfin", + "questEggDolphinText": "Delfinek", "questEggDolphinMountText": "Delfin", "questEggDolphinAdjective": "wesoły", "hatchingPotionSunshine": "Słoneczny", @@ -350,28 +350,65 @@ "questEggRobotMountText": "Robot", "questEggRobotText": "Robot", "hatchingPotionShadow": "Cienisty", - "premiumPotionUnlimitedNotes": "Nie nadaje się do użytku na jajach.", + "premiumPotionUnlimitedNotes": "Nie nadaje się do użytku na jajach Chowańców z Misji.", "hatchingPotionAurora": "Polarnej Zorzy", "hatchingPotionAmber": "Bursztynowy", "hatchingPotionRuby": "Rubinowy", "hatchingPotionDessert": "Słodyczowy", - "hatchingPotionBirchBark": "Kora Brzozowa", - "hatchingPotionSandSculpture": "Piaskowa Rzeźba", + "hatchingPotionBirchBark": "Brzozowej Kory", + "hatchingPotionSandSculpture": "Piaskowej Rzeźby", "hatchingPotionFluorite": "Fluorytowy", "hatchingPotionWindup": "Wyskokowy", "hatchingPotionVampire": "Wampirowy", "hatchingPotionTurquoise": "Turkusowy", - "hatchingPotionStainedGlass": "Witraż", - "hatchingPotionBlackPearl": "Czarna Perła", - "hatchingPotionAutumnLeaf": "Jesienny Liść", - "hatchingPotionSunset": "Zachód Słońca", - "hatchingPotionPolkaDot": "Groszkowana", - "hatchingPotionSolarSystem": "Układ Słoneczny", - "hatchingPotionMoonglow": "Blask Księżyca", - "hatchingPotionMossyStone": "Omszony Głaz", - "hatchingPotionOnyx": "Onyks", - "hatchingPotionPorcelain": "Porcelana", - "hatchingPotionVirtualPet": "Wirtualny Zwierzak", - "hatchingPotionPinkMarble": "Różowy Marmur", - "hatchingPotionTeaShop": "Sklep Herbaciany" + "hatchingPotionStainedGlass": "Witrażowy", + "hatchingPotionBlackPearl": "Czarnej Perły", + "hatchingPotionAutumnLeaf": "Jesiennego Liścia", + "hatchingPotionSunset": "Zachodu Słońca", + "hatchingPotionPolkaDot": "Groszkowany", + "hatchingPotionSolarSystem": "Układu Słonecznego", + "hatchingPotionMoonglow": "Blasku Księżyca", + "hatchingPotionMossyStone": "Omszonego Głazu", + "hatchingPotionOnyx": "Onyksu", + "hatchingPotionPorcelain": "Porcelanowy", + "hatchingPotionVirtualPet": "Wirtualnego Chowańca", + "hatchingPotionPinkMarble": "Różowego Marmuru", + "hatchingPotionTeaShop": "Sklepu Herbacianego", + "questEggRaccoonText": "Szop Pracz", + "questEggRaccoonMountText": "Szop Pracz", + "questEggRaccoonAdjective": "wygłodniały", + "questEggDogText": "Szczeniak", + "questEggDogMountText": "Pies", + "questEggDogAdjective": "przyjacielski", + "questEggGiraffeText": "Żyrafa", + "questEggGiraffeMountText": "Żyrafa", + "questEggChameleonText": "Kameleonek", + "questEggChameleonMountText": "Kameleon", + "questEggChameleonAdjective": "chaotyczny", + "questEggCrabText": "Krabik", + "questEggCrabMountText": "Krab", + "questEggCatText": "Kociak", + "questEggCatMountText": "Kot", + "questEggGiraffeAdjective": "niebosiężna", + "questEggCrabAdjective": "małostkowy", + "questEggAlpacaText": "Alpaka", + "questEggAlpacaMountText": "Alpaka", + "questEggAlpacaAdjective": "przeładowana", + "questEggCatAdjective": "psotny", + "questEggOtterText": "Wydra", + "questEggOtterMountText": "Wydra", + "questEggOtterAdjective": "perfidna", + "questEggPlatypusText": "Dziobak", + "questEggPlatypusMountText": "Dziobak", + "questEggPlatypusAdjective": "perfekcjonista", + "hatchingPotionKoi": "Karpiowy", + "hatchingPotionBalloon": "Balonowy", + "hatchingPotionRoseGold": "Rozetowego Złota", + "hatchingPotionGingerbread": "Piernikowy", + "hatchingPotionJade": "Jadeitowy", + "hatchingPotionFungi": "Grzybowy", + "hatchingPotionCryptid": "Kryptydowy", + "wackyPotionNotes": "Wylej ten eliksir na jajko, a wykluje się z niego Zwariowany <%= potText(locale) %>.", + "wackyPotionAddlNotes": "Nie można go oswoić na Wierzchowca ani używać na jajach Chowańców z Misji.", + "hatchingPotionOpal": "Opalowy" } diff --git a/website/common/locales/pl/contrib.json b/website/common/locales/pl/contrib.json index addea17bdc..6f55b22b7f 100644 --- a/website/common/locales/pl/contrib.json +++ b/website/common/locales/pl/contrib.json @@ -40,10 +40,10 @@ "backerTier": "Ranga wspieracza", "playerTiers": "Rangi graczy", "tier": "Ranga", - "conRewardsURL": "https://habitica.fandom.com/wiki/Contributor_Rewards", + "conRewardsURL": "https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica#contributor-tier-rewards", "surveysSingle": "Pomógł rozwinąć Habitica poprzez wypełnienie ankiet lub testowanie. Dziękujemy!", "surveysMultiple": "Pomagał w rozwoju Habitiki przy <%= count %> okazjach, czy to wypełniając ankiety, czy też wkładając dużo wysiłku w testowanie. Dziękujemy!", "blurbHallPatrons": "To jest Sala patronów, gdzie oddajemy cześć szlachetnym poszukiwaczom przygód, którzy wsparli Habitica w pierwszej zbiórce na Kickstarterze. Dziękujemy im za pomoc w powołaniu Habitiki do życia!", - "blurbHallContributors": "To jest Sala Współtwórców, gdzie uhonorowani zostali open-source'owi współtwórcy Habitica. Czy to za pomocą kodu, sztuki, muzyki, pisania, czy jedynie uczynności, zdobyli oni klejnoty, ekskluzywne wyposażenie oraz prestiżowe tytuły. Ty również możesz współtworzyć Habitica! Tutaj dowiesz się więcej. ", + "blurbHallContributors": "To jest Sala Współtwórców, gdzie uhonorowani zostali open-source'owi współtwórcy Habitica. Czy to za pomocą kodu, sztuki, muzyki, pisania, czy jedynie uczynności, zdobyli oni Klejnoty, ekskluzywne Wyposażenie oraz prestiżowe tytuły. Ty również możesz współtworzyć Habitikę! Tutaj dowiesz się więcej.", "noPrivAccess": "Nie masz wymaganych przywilejów." } diff --git a/website/common/locales/pl/faq.json b/website/common/locales/pl/faq.json index 6f5ecb5a65..d41425f4e9 100644 --- a/website/common/locales/pl/faq.json +++ b/website/common/locales/pl/faq.json @@ -67,7 +67,16 @@ "webFaqAnswer31": "Jeśli ukończyłeś zadanie i utraciłeś PZ, mimo że nie powinieneś, znaczy to, że napotkałeś opóźnienie w synchronizacji zmian na serwerze wykonanych na innych platformach. Dla przykładu: jeśli zużyjesz Złoto, Manę albo stracisz PZ w aplikacji mobilnej, a następnie ukończysz zadanie na stronie internetowej, to serwer musi to wszystko zsynchronizować.", "faqQuestion32": "Jak mogę wybrać klasę postaci?", "faqQuestion34": "Jaki rodzaj jedzenia lubi mój Chowaniec?", - "webFaqAnswer33": "Po odblokowaniu Systemu Klasowego, możesz odblokować też Umiejętności, których użycie wymaga Many. Poziom Many powiązany jest z twoją statystyką INT i może być zmieniany przez Umiejętności oraz Wyposażenie", - "webFaqAnswer32": "Każdy gracz zaczyna jako klasa Wojownika i pozostaje w niej do osiągnięcia 10 poziomu. W momencie osiągnięcia poziomu 10 zostaniesz postawiony przed wyborem między zmianą klasy na nową a kontynuowaniem ścieżki Wojownika.\n\nKażda klasa ma unikalne Wyposażenie oraz Umiejętności. Jeśli nie chcesz podejmować wyboru od razu, możesz wybrać opcję \"Zrezygnuj\" . Jeśli nie zdecydujesz się od razu, możesz włączyć system klasowy w dowolnym momencie później z poziomu Ustawień.\n\nJeśli chciałbyś zmienić wybraną przez siebie klasę po poziomie 10, możesz zrobić to używając Kuli Odrodzenia. Kula Odrodzenia jest dostępna w Sklepie za 6 Klejnotów od poziomu 50 lub za darmo od poziomu 100.\n\nInnym sposobem jest zmiana klasy w dowolnym momencie z poziomu Ustawień za 3 Klejnoty. To nie zresetuje twojego poziomu jak Kula Odrodzenia, ale pozwoli ci na ponowne rozdanie punktów umiejętności, które zebrałeś nabijając kolejne poziomy, tak by dopasować je do twojej nowej klasy", - "faqQuestion33": "Czym jest niebieski pasek, który pojawia się po osiągnięciu poziomu 10?" + "webFaqAnswer33": "Po odblokowaniu Systemu Klasowego, możesz odblokować też Umiejętności, których użycie wymaga Many. Poziom Many powiązany jest z twoją statystyką INT i może być zmieniany przez Umiejętności oraz Wyposażenie.", + "webFaqAnswer32": "Każdy gracz zaczyna jako klasa Wojownika i pozostaje w niej do osiągnięcia 10 poziomu. W momencie osiągnięcia poziomu 10 zostaniesz postawiony przed wyborem między zmianą klasy na nową a kontynuowaniem ścieżki Wojownika.\n\nKażda klasa ma unikalne Wyposażenie oraz Umiejętności. Jeśli nie chcesz podejmować wyboru, możesz wybrać opcję \"Zrezygnuj\", aby nie decydować o tym od razu. Jeśli nie zdecydujesz się od razu, możesz włączyć system klasowy w dowolnym momencie później z poziomu Ustawień.\n\nJeśli chciałbyś zmienić wybraną przez siebie klasę po poziomie 10, możesz zrobić to używając Kuli Odrodzenia. Kula Odrodzenia jest dostępna w Sklepie za 6 Klejnotów od poziomu 50 lub za darmo od poziomu 100.\n\nInnym sposobem jest zmiana klasy w dowolnym momencie z poziomu Ustawień za 3 Klejnoty. To nie zresetuje twojego poziomu jak Kula Odrodzenia, ale pozwoli ci na ponowne rozdanie punktów umiejętności, które zebrałeś nabijając kolejne poziomy, tak by dopasować je do twojej nowej klasy.", + "faqQuestion33": "Czym jest niebieski pasek, który pojawia się po osiągnięciu poziomu 10?", + "faqQuestion35": "Nakarmiłem mojego zwierzaka i zniknął! Co się stało?", + "faqQuestion36": "Jak mogę zmienić wygląd mojej Postaci?", + "webFaqAnswer34": "Zwierzęta lubią jedzenie w kolorze, który pasuje do ich koloru. Podstawowe zwierzęta są wyjątkiem, ale wszystkie podstawowe zwierzęta lubią ten sam przedmiot. Poniżej możesz zobaczyć konkretne jedzenie, które lubi każde ze zwierząt:\n\n* Podstawowe zwierzęta lubią Mięso\n* Białe zwierzęta lubią Mleko\n* Pustynne zwierzęta lubią Ziemniaki\n* Czerwone zwierzęta lubią Truskawki\n* Cieniste zwierzęta lubią Czekoladę\n* Szkieletowe zwierzęta lubią Ryby\n* Zombie zwierzęta lubią Zgniłe mięso\n* Różowe zwierzęta z waty cukrowej lubią Różową watę cukrową\n* Niebieskie zwierzęta z waty cukrowej lubią Niebieską watę cukrową\n* Złote zwierzęta lubią Miód", + "faqQuestion38": "Dlaczego nie mogę zakupić niektórych przedmiotów?", + "faqQuestion37": "Dlaczego nie widzę mojego wyposażenia na Postaci?", + "faqQuestion39": "Gdzie mogę zdobyć więcej elementów Wyposażenia?", + "faqQuestion40": "Czym są Klejnoty i jak je zdobyć?", + "faqQuestion41": "Czym są Mistyczne Klepsydry i jak je zdobyć?", + "webFaqAnswer39": "Jeśli zastanawiasz się jak uzyskać więcej elementów Wyposażenia, możesz zostać Abonentem Habitica, spróbować szczęścia z Zaczarowaną Skrzynią lub zaszaleć podczas jednej z Wielkich Gal Habitica.\n\nAbonenci Habitica comiesięcznie otrzymują wyjątkowy, ekskluzywny zestaw wyposażenia oraz Mistyczne Klepsydry, służące do zakupu zestawów Wyposażenia z przeszłości z Sklepu Podróżników w Czasie.\n\nZaczarowana Skrzynia w Twoich Nagrodach zawiera ponad 350 elementów Wyposażenia! Za 100 sztuk Złota otrzymasz szansę uzyskania wyjątkowego Wyposażenia, Jedzenia służącego do wychodowania Wierzchowca z Chowańca, bądź Doświadczenia potrzebnego do zdobywania kolejnych poziomów!\n\nPodczas czterech sezonowych Wielkich Gal, zupełnie nowe Wyposażenie dla klas staje się dostępne do kupienia za Złoto, a poprzednie zestawy Galowe można kupić za Klejnoty." } diff --git a/website/common/locales/pl/front.json b/website/common/locales/pl/front.json index e56cdca967..18448d3e94 100644 --- a/website/common/locales/pl/front.json +++ b/website/common/locales/pl/front.json @@ -32,7 +32,7 @@ "marketing1Lead2": "Poprawiaj swoje nawyki, aby stworzyć swojego awatara. Pochwal się wspaniałym wyposażenie, jakie zdobyłeś!", "marketing1Lead3Title": "Znajdź losowe nagrody", "marketing1Lead3": "Dla niektórych to hazard, czyli nagrody stochastyczne, jest systemem ich motywującym. Habitica godzi wszystkie wzmocnienia i kary: pozytywne, negatywne, przewidywalne i losowe.", - "marketing2Header": "Konkuruj z przyjaciółmi.", + "marketing2Header": "Konkuruj z przyjaciółmi", "marketing2Lead1Title": "Produktywność Społeczna", "marketing2Lead1": "Choć w Habitica można grać w pojedynkę, prawdziwa zabawa zaczyna się kiedy starasz się współpracować i rywalizować z innymi graczami, którzy rozliczają cię z wykonanych zadań. Najefektywniejszą częścią każdego programu samodoskonalenia jest społeczna odpowiedzialność, a cóż może być lepszym miejscem dla odpowiedzialności i rywalizacji niż gra komputerowa?", "marketing2Lead2Title": "Walcz z potworami", @@ -64,7 +64,7 @@ "pkQuestion2": "Jak działa Habitica?", "pkAnswer2": "Wytworzenie nowego nawyku jest trudne ponieważ ludzie potrzebują tej oczywistej, natychmiastowej nagrody. Na przykład jest ciężko zacząć nitkować zęby, bo nawet jak nasz dentysta nam mówi, że w dłuższej perspektywie jest to zdrowsze to na początku rani to nasze dziąsła.
Grywalizacja Habitiki dodaje to odczucie natychmiastowej satysfakcji do codziennych czynności poprzez wynagrodzenie ciężkich zadań doświadczeniem, złotem... i może nawet losową nagroda jak smocze jajo! To pomaga ludziom utrzymać motywację nawet jeśli zadanie samo w sobie nie ma nieodłącznej nagrody i dzięki temu widzieliśmy jak ich życie się zmienia na lepsze.", "pkQuestion3": "Czemu dodaliście funkcje społeczne?", - "pkAnswer3": "Społeczna presja jest ogromnym czynnikiem motywacyjnym dla dużej liczby osób, więc wiedzieliśmy, że chcemy mieć silną społeczność, która będzie pilnowała odpowiedzialności innych za swoje cele, a także zachęcała do osiągania sukcesów. Szczęśliwie jedną z rzeczy, której gry wieloosobowe dobrze sprzyjają jest budowanie poczucia społeczności wśród ich uczestników! Habitica zapożyczyła strukturę społeczeństwa z tych typów gier. Możesz stworzyć mała Drużynę bliskich przyjaciół, ale możesz też dołączyć do większych, dzielących wspólne interesy grup znanych jako Gildie. Chociaż niektórzy wolą grać solo to większość decyduje się by uformować sieć wsparcia, która zachęca do społecznej odpowiedzialności poprzez takie funkcje jak na przykład Misje, gdzie członkowie Drużyny wspólnie dzielą się swoją produktywnością by razem zwalczać potwory.", + "pkAnswer3": "Społeczna presja jest ogromnym czynnikiem motywacyjnym dla dużej liczby osób, więc wiedzieliśmy, że chcemy mieć silną społeczność, która będzie pilnowała odpowiedzialności innych za swoje cele, a także zachęcała do osiągania sukcesów. Szczęśliwie jedną z rzeczy, której gry wieloosobowe dobrze sprzyjają jest budowanie poczucia społeczności wśród ich uczestników! Habitica zapożyczyła strukturę społeczeństwa z tych typów gier. Chociaż niektórzy wolą grać solo to większość decyduje się by uformować sieć wsparcia w niewielkiej Drużynie bliskich przyjaciół, która zachęca do społecznej odpowiedzialności poprzez takie funkcje jak na przykład Misje, gdzie członkowie Drużyny wspólnie dzielą się swoją produktywnością by razem zwalczać potwory.", "pkQuestion4": "Czemu omijanie zadań zmniejsza zdrowie Twojego awatara?", "pkAnswer4": "Jeśli opuścisz jeden z Twoich Codziennych to Twój awatar straci życie następnego dnia. To służy jako ważny czynnik motywujący by zachęcić ludzi do podążania za ich celami, bo ludzie naprawdę nienawidzą ranić swój mały awatar. Plus odpowiedzialność społeczna jest krytycznie ważna dla mnóstwa ludzi. Jeśli walczysz z potworami razem ze Swoimi przyjaciółmi to omijanie zadań rani także ich awatary.", "pkQuestion5": "Co odróżnia Habitike od innych programów grywializujących?", diff --git a/website/common/locales/pl/gear.json b/website/common/locales/pl/gear.json index a7bd01f12c..a1f6ea4172 100644 --- a/website/common/locales/pl/gear.json +++ b/website/common/locales/pl/gear.json @@ -5,7 +5,7 @@ "groupBy": "Pogrupuj według <%= type %>", "classBonus": "(Ten przedmiot pasuje do Twojej klasy, więc otrzymuje dodatkowy mnożnik 1.5 do statystyk)", "classArmor": "Zbroja Klasowa", - "featuredset": "Opisany Zestaw <%= name %>", + "featuredset": "Opisany Zestaw: <%= name %>", "mysterySets": "Tajemnicze zestawy", "gearNotOwned": "Nie posiadasz tego przedmiotu.", "noGearItemsOfType": "Nie posiadasz żadnego z nich.", @@ -144,7 +144,7 @@ "weaponSpecialFallMageText": "Magiczna miotła", "weaponSpecialFallMageNotes": "Ta zaczarowana miotła lata szybciej niż smok! Zwiększa Inteligencję o <%= int %> i Percepcję o <%= per %> . Edycja Limitowana Jesień 2014.", "weaponSpecialFallHealerText": "Różdżka skarabeusza", - "weaponSpecialFallHealerNotes": "Skarabeusz na tej różdżce chroni i leczy dzierżącego ją bohatera. Zwiększa Inteligencję o <%= int %>. Edycja Limitowana Jesień 2014.", + "weaponSpecialFallHealerNotes": "Skarabeusz na tej różdżce chroni i leczy dzierżącego ją bohatera. Zwiększa Inteligencję o <%= int %>. Edycja Limitowana Jesień 2014.", "weaponSpecialWinter2015RogueText": "Kolec Lodu", "weaponSpecialWinter2015RogueNotes": "Z całą pewnością, zdecydowanie, najzwyczajniej to po prostu leżało sobie na ziemi. Zwiększa Siłę o <%= str %>. Edycja Limitowana Zima 2014-2015.", "weaponSpecialWinter2015WarriorText": "Żelkowy Miecz", @@ -198,7 +198,7 @@ "weaponSpecialSummer2016WarriorText": "Zakrzywiony Miecz", "weaponSpecialSummer2016WarriorNotes": "Ugryź te trudne zadania tym hakowatym mieczem! Zwiększa Siłę o <%= str %>. Edycja Limitowana Letniego Wyposażenia 2016.", "weaponSpecialSummer2016MageText": "Laska z piany morskiej", - "weaponSpecialSummer2016MageNotes": "Cała moc mórz sączy się z tego berła. Zwiększa Inteligencję o <%= int %> i Percepcję o <%= per %>. Edycja Limitowana Lato 2016.", + "weaponSpecialSummer2016MageNotes": "Cała moc mórz sączy się z tego berła. Zwiększa Inteligencję o <%= int %> i Percepcję o <%= per %>. Edycja Limitowana Lato 2016.", "weaponSpecialSummer2016HealerText": "Leczniczy Trójząb", "weaponSpecialSummer2016HealerNotes": "Jeden kolec rani, inny leczy. Zwiększa Inteligencję o <%= int %>. Edycja Limitowana Letniego Wyposażenia 2016.", "weaponSpecialFall2016RogueText": "Sztylet z jadem pająka", @@ -278,7 +278,7 @@ "weaponSpecialWinter2019WarriorText": "Snowflake Halberd", "weaponSpecialWinter2019WarriorNotes": "This snowflake was grown, ice crystal by ice crystal, into a diamond-hard blade! Increases Strength by <%= str %>. Limited Edition 2018-2019 Winter Gear.", "weaponSpecialWinter2019MageText": "Fiery Dragon Staff", - "weaponSpecialWinter2019MageNotes": "Ostrożnie! Ta wybuchowa laska jest gotowa pomóc Ci znaleźć się we wszystkich kątach jednocześnie. Zwiększa Inteligencję o <%= int %> oraz Percepcję o <%= per %>. Edycja Limitowana 2018-2019 Zimowe Wyposażenie.", + "weaponSpecialWinter2019MageNotes": "Ostrożnie! Ta wybuchowa laska jest gotowa pomóc Ci znaleźć się we wszystkich kątach jednocześnie. Zwiększa Inteligencję o <%= int %> oraz Percepcję o <%= per %>. Edycja Limitowana 2018-2019 Zimowe Wyposażenie.", "weaponSpecialWinter2019HealerText": "Zimowa Różdżka", "weaponSpecialWinter2019HealerNotes": "Winter can be a time of rest and healing, and so this wand of winter magic can help to soothe the most grievous hurts. Increases Intelligence by <%= int %>. Limited Edition 2018-2019 Winter Gear.", "weaponMystery201411Text": "Widły Ucztowania", @@ -298,7 +298,7 @@ "weaponArmoireBasicCrossbowText": "Zwyczajna kusza", "weaponArmoireBasicCrossbowNotes": "Ta kusza potrafi przebić pancerz zadania z bardzo daleka! Zwiększa Siłę o <%= str %>, Percepcję o <%= per %> i Kondycję o <%= con %>. Zaczarowana Skrzynia: przedmiot niezależny.", "weaponArmoireLunarSceptreText": "Księżycowe Kojące Berło", - "weaponArmoireLunarSceptreNotes": "Moc uzdrawiania tej różdżki przybywa i ubywa. Zwiększa Kondycję o <%= con %> i Inteligencję o <%= int %>. Zaczarowana Skrzynia: kojący zestaw księżycowy (przedmiot 3 z 3).", + "weaponArmoireLunarSceptreNotes": "Moc uzdrawiania tej różdżki przybywa i ubywa. Zwiększa Kondycję o <%= con %> i Inteligencję o <%= int %>. Zaczarowana Skrzynia: kojący zestaw księżycowy (przedmiot 3 z 3).", "weaponArmoireRancherLassoText": "Lasso farmerskie", "weaponArmoireRancherLassoNotes": "Lassa: idealne narzędzia do robienia obław i zaganiania. Zwiększają siłę o <%= str %>, percepcję o <%= per %> i inteligencję o <%= int %>. Zaczarowana Skrzynia: zestaw farmerski (przedmiot 3 z 3).", "weaponArmoireMythmakerSwordText": "Miecz Twórca Legend", @@ -314,7 +314,7 @@ "weaponArmoireCrystalCrescentStaffText": "Laska Kryształowego Półksiężyca", "weaponArmoireCrystalCrescentStaffNotes": "Przyzwij moc półksiężyca dzięki tej błyszczącej lasce! Zwiększa Inteligencję i Siłę o <%= attrs %>. Zaczarowana Skrzynia: Zestaw Kryształowego Półksiężyca (przedmiot 3 z 3).", "weaponArmoireBlueLongbowText": "Niebieski długi łuk", - "weaponArmoireBlueLongbowNotes": "Gotów... Cel... Pal! Ten łuk ma wielki zasięg. Zwiększa Percepcję o <%= per %>, Kondycję o <%= con %>, i Siłę <%= str %>. Zaczarowana Skrzynia: Zestaw żelaznego łucznika (przedmiot 3 z 3).", + "weaponArmoireBlueLongbowNotes": "Gotów... Cel... Pal! Ten łuk ma wielki zasięg. Zwiększa Percepcję o <%= per %>, Kondycję o <%= con %>, i Siłę <%= str %>. Zaczarowana Skrzynia: Zestaw żelaznego łucznika (przedmiot 3 z 3).", "weaponArmoireGlowingSpearText": "Włócznia Pobrzasku", "weaponArmoireGlowingSpearNotes": "Ta włócznia hipnotyzuje zdziczałe zadania, żeby je łatwiej pokonać. Zwiększa Siłę o <%= str %>. Zaczarowana Skrzynia: Przedmiot niezależny.", "weaponArmoireBarristerGavelText": "Młotek Sędziowski", @@ -398,15 +398,15 @@ "armorRogue5Text": "Zbroja mroku", "armorRogue5Notes": "Pozwala się skradać na widoku, w pełnym świetle. Zwiększa Percepcję o <%= per %>.", "armorWizard1Text": "Szata magika", - "armorWizard1Notes": "Strój maga-samouka. Zwiększa Inteligencję o <%= int %>.", + "armorWizard1Notes": "Strój maga-samouka. Zwiększa Inteligencję o <%= int %>.", "armorWizard2Text": "Szata czarodzieja", - "armorWizard2Notes": "Odzienie wędrownego sprzedawcy cudów. Zwiększa Inteligencję o <%= int %>.", + "armorWizard2Notes": "Odzienie wędrownego sprzedawcy cudów. Zwiększa Inteligencję o <%= int %>.", "armorWizard3Text": "Szata tajemnic", - "armorWizard3Notes": "Symbolizuje wtajemniczenie do najpilniej strzeżonych tajemnic. Zwiększa Inteligencję o <%= int %>.", + "armorWizard3Notes": "Symbolizuje wtajemniczenie do najpilniej strzeżonych tajemnic. Zwiększa Inteligencję o <%= int %>.", "armorWizard4Text": "Szata arcymaga", - "armorWizard4Notes": "Duchy i żywiołaki kłaniają się przed nią. Zwiększa Inteligencję o <%= int %>.", + "armorWizard4Notes": "Duchy i żywiołaki kłaniają się przed nią. Zwiększa Inteligencję o <%= int %>.", "armorWizard5Text": "Szata królewskiego maga", - "armorWizard5Notes": "Symbol mocy zza tronu. Zwiększa Inteligencję o <%= int %>.", + "armorWizard5Notes": "Symbol mocy zza tronu. Zwiększa Inteligencję o <%= int %>.", "armorHealer1Text": "Szata akolity", "armorHealer1Notes": "Tkanina ukazująca pokorę i celowość. Zwiększa Kondycję o <%= con %>.", "armorHealer2Text": "Szata medyka", @@ -462,7 +462,7 @@ "armorSpecialSnowflakeText": "Szata śnieżynki", "armorSpecialSnowflakeNotes": "Szata zapewni Ci ciepło nawet podczas zamieci. Podnosi kondycję o <%= con %>. Edycja Limitowana Zima 2013-2014.", "armorSpecialBirthdayText": "Absurdalne szaty imprezowe", - "armorSpecialBirthdayNotes": "Wszystkiego najlepszego z okazji urodzin, Habitiko! Załóż Niedorzeczne Szaty Urodzinowe, aby świętować ten wspaniały dzień. Nie dają żadnych korzyści.", + "armorSpecialBirthdayNotes": "Wszystkiego najlepszego z okazji urodzin, Habitiko! Załóż Niedorzeczne Szaty Urodzinowe, aby świętować ten wspaniały dzień. Nie dają żadnych korzyści.", "armorSpecialBirthday2015Text": "Głupawe Szaty Urodzinowe", "armorSpecialBirthday2015Notes": "Wszystkiego najlepszego z okazji urodzin, Habitiko! Załóż Głupawe Szaty Urodzinowe, aby świętować ten wspaniały dzień. Nie dają żadnych korzyści.", "armorSpecialBirthday2016Text": "Niedorzeczne Szaty Urodzinowe", @@ -490,7 +490,7 @@ "armorSpecialSummerMageText": "Szmaragdowy ogon", "armorSpecialSummerMageNotes": "Takie stroje ze lśniących łusek potrafią przemieniać ludzi w prawdziwych syrenomagów! Dodaje <%= int %> punktów inteligencji. Limitowana Edycja Wyposażenia, lato 2014.", "armorSpecialSummerHealerText": "Ogon Morskozdrowiciela", - "armorSpecialSummerHealerNotes": "Ten strój ze lśniących łusek zapewnia moc prawdziwego Morskozdrowiciela! Dodaje <%= con %> punktów kondycji. Limitowana Edycja Wyposażenia, lato 2014.", + "armorSpecialSummerHealerNotes": "Ten strój ze lśniących łusek zapewnia moc prawdziwego Morskozdrowiciela! Dodaje <%= con %> punktów kondycji. Limitowana Edycja Wyposażenia, lato 2014.", "armorSpecialFallRogueText": "Krwistoczerwone szaty", "armorSpecialFallRogueNotes": "Wyrazisty. Welurowy. Wampiryczny. Dodaje <%= per %> punktów percepcji. Limitowana Edycja Wyposażenia, lato 2014.", "armorSpecialFallWarriorText": "Kitel nauki", @@ -506,7 +506,7 @@ "armorSpecialWinter2015MageText": "Północna Szata", "armorSpecialWinter2015MageNotes": "W tej szacie możesz ujrzeć migoczące światła północy. Zwiększa inteligencję o <%= int %>. Edycja Limitowana Zimowego Wyposażenia 2014-2015.", "armorSpecialWinter2015HealerText": "Strój Łyżwiarski", - "armorSpecialWinter2015HealerNotes": "Łyżwiarstwo jest bardzo relaksujące, ale nie powinno się go próbować bez ochronnego wyposażenia na wypadek ataku soplowych smoków. Zwiększa kondycję o <%= con %>. Edycja Limitowana Zimowego Wyposażenia 2014-2015.", + "armorSpecialWinter2015HealerNotes": "Łyżwiarstwo jest bardzo relaksujące, ale nie powinno się go próbować bez ochronnego wyposażenia na wypadek ataku soplowych smoków. Zwiększa kondycję o <%= con %>. Edycja Limitowana Zimowego Wyposażenia 2014-2015.", "armorSpecialSpring2015RogueText": "Piskliwa Szata", "armorSpecialSpring2015RogueNotes": "Futrzana, miękka oraz zdecydowanie niełatwopalna. Zwiększa percepcję o<%= per %>. Edycja Limitowana, wiosna 2015.", "armorSpecialSpring2015WarriorText": "Zbroja \"Strzeż Się\"", @@ -548,13 +548,13 @@ "armorSpecialSpring2016HealerText": "Puchate Królicze Bryczesy", "armorSpecialSpring2016HealerNotes": "Kic, kic! Kicaj od wzgórza do wzgórza i lecz osoby w potrzebie. Zwiększa Kondycję o <%= con %>. Edycja Limitowana Wiosna 2016.", "armorSpecialSummer2016RogueText": "Ogon węgorza", - "armorSpecialSummer2016RogueNotes": "Ten elektryzujący strój przemienia w prawdziwego węgorza łotrzyka. Zwiększa percepcję o <%= per %>. Limitowana edycja letniego wyposażenia 2016.", + "armorSpecialSummer2016RogueNotes": "Ten elektryzujący strój przemienia w prawdziwego węgorza łotrzyka. Zwiększa percepcję o <%= per %>. Limitowana edycja letniego wyposażenia 2016.", "armorSpecialSummer2016WarriorText": "Ogon rekina", - "armorSpecialSummer2016WarriorNotes": "Ten szorstki strój przemienia w prawdziwego rekina wojownika. Zwiększa kondycję o <%= con %>. Limitowana edycja letniego wyposażenia 2016.", + "armorSpecialSummer2016WarriorNotes": "Ten szorstki strój przemienia w prawdziwego rekina wojownika. Zwiększa kondycję o <%= con %>. Limitowana edycja letniego wyposażenia 2016.", "armorSpecialSummer2016MageText": "Ogon delfina", "armorSpecialSummer2016MageNotes": "Ten śliski strój przemienia w prawdziwego delfinomaga! Zwiększa inteligencję o <%= int %>. Limitowana edycja letniego wyposażenia 2016.", "armorSpecialSummer2016HealerText": "Ogon konika morskiego", - "armorSpecialSummer2016HealerNotes": "Ten kolczasty strój przemienia w prawdziwego Konika morskiego uzdrawiacza! Zwiększa kondycję o <%= con %>. Limitowana edycja letniego wyposażenia 2016.", + "armorSpecialSummer2016HealerNotes": "Ten kolczasty strój przemienia w prawdziwego Konika morskiego uzdrawiacza! Zwiększa kondycję o <%= con %>. Limitowana edycja letniego wyposażenia 2016.", "armorSpecialFall2016RogueText": "Zbroja Czarnej Wdowy", "armorSpecialFall2016RogueNotes": "Oczy na tej zbroi nieustannie mrugają. Zwiększa Percepcję o <%= per %>.\nLimitowana Edycja Wyposażenia, jesień 2016.", "armorSpecialFall2016WarriorText": "Zbroja ze smugą mułu", @@ -564,7 +564,7 @@ "armorSpecialFall2016HealerText": "Szaty Gorgony", "armorSpecialFall2016HealerNotes": "Te szaty naprawdę są zrobione z kamienia. Jak mogą być tak wygodne? Zwiększa Kondycję o <%= con %>.\nLimitowana Edycja Wyposażenia, jesień 2016.", "armorSpecialWinter2017RogueText": "Szronowa Zbroja", - "armorSpecialWinter2017RogueNotes": "Ten maskujący strój odbija światło by oślepić niczego nieświadome zadania, podczas gdy ty weźmiesz nagrody za nie! Zwiększa percepcję o <%= per %>. Edycja Limitowana Zima 2016-2017.", + "armorSpecialWinter2017RogueNotes": "Ten maskujący strój odbija światło by oślepić niczego nieświadome zadania, podczas gdy ty weźmiesz nagrody za nie! Zwiększa percepcję o <%= per %>. Edycja Limitowana Zima 2016-2017.", "armorSpecialWinter2017WarriorText": "Zbroja Hokeisty", "armorSpecialWinter2017WarriorNotes": "Okaż współpracę i siłę w tej ciepłej, wyściełanej zbroi. Zwiększa Kondycję o <%= con %>. Edycja Limitowana Zima 2016-2017.", "armorSpecialWinter2017MageText": "Wilcza Zbroja", @@ -748,7 +748,7 @@ "armorArmoireStripedSwimsuitText": "Pasiasty Strój Kąpielowy", "armorArmoireStripedSwimsuitNotes": "Co może dać więcej radości niż walka z morskimi potworami na plaży? Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Zestaw Nadmorski (przedmiot 2 z 3).", "armorArmoireCannoneerRagsText": "Łachmany Kanoniera", - "armorArmoireCannoneerRagsNotes": "Te łachmany są wytrzymalsze niż na to wygląda. Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Zestaw Kanoniera (Przedmiot 2 z 3).", + "armorArmoireCannoneerRagsNotes": "Te łachmany są wytrzymalsze niż na to wygląda. Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Zestaw Kanoniera (Przedmiot 2 z 3).", "armorArmoireFalconerArmorText": "Zbroja Sokolnika", "armorArmoireFalconerArmorNotes": "Chroń się przed atakami pazurów w tej porządnej zbroi! Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Zestaw Sokolnika (Element 1 z 3).", "armorArmoireVermilionArcherArmorText": "Pancerz Cynobrowego Łucznika", @@ -756,7 +756,7 @@ "armorArmoireOgreArmorText": "Zbroja ogra", "armorArmoireOgreArmorNotes": "Ta zbroja imituje twardą skórę Ogra, ale jest wyłożona wełną dla komfortu! Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Wyposażenie Ogra (przedmiot 3 z 3).", "armorArmoireIronBlueArcherArmorText": "Niebieski żelazny pancerz łucznika", - "armorArmoireIronBlueArcherArmorNotes": "Ta zbroja ochroni cię przed latającymi na polu bitwy strzałami! Zwiększa Siłę o <%= str %>. Zaczarowana Skrzynia: Zestaw żelaznego łucznika (przedmiot 2 z 3).", + "armorArmoireIronBlueArcherArmorNotes": "Ta zbroja ochroni cię przed latającymi na polu bitwy strzałami! Zwiększa Siłę o <%= str %>. Zaczarowana Skrzynia: Zestaw żelaznego łucznika (przedmiot 2 z 3).", "armorArmoireRedPartyDressText": "Czerwona wyjściowa sukienka", "armorArmoireRedPartyDressNotes": "Jesteś silny, wytrzymały, inteligentny i taki wytworny! Zwiększa Siłę, Kondycję i Inteligencję o <%= attrs %>. Zaczarowana Skrzynia: Zestaw czerwonej kokardy (przedmiot 2 z 2).", "armorArmoireWoodElfArmorText": "Drewniana zbroja elfa", @@ -848,7 +848,7 @@ "headWizard4Text": "Kapelusz arcymaga", "headWizard4Notes": "Skupia umysł na intensywnym rzucaniu zaklęć. Zwiększa Percepcję o <%= per %>.", "headWizard5Text": "Kapelusz królewskiego maga", - "headWizard5Notes": "Pokazuje władzę nad losem, pogodą i niższymi magami. Zwiększa Percepcję o <%= per %>.", + "headWizard5Notes": "Pokazuje władzę nad losem, pogodą i niższymi magami. Zwiększa Percepcję o <%= per %>.", "headHealer1Text": "Kwarcowa opaska", "headHealer1Notes": "Wysadzane klejnotami nakrycie głowy, pomaga skupić się na wykonywanym zadaniu. Zwiększa Inteligencję o <%= int %>.", "headHealer2Text": "Ametystowa opaska", @@ -878,7 +878,7 @@ "headSpecialMammothRiderHelmText": "Hełm Jeźdźca Mamutów", "headSpecialMammothRiderHelmNotes": "Nie daj się zwieść jego puszystości -- to nakrycie głowy obdarzy cię przeszywającą mocą percepcji! Zwiększa Percepcję o <%= per %>.", "headSpecialPageHelmText": "Hełm giermka", - "headSpecialPageHelmNotes": "Kolczuga: dla elegancji i praktyki. Zwiększa Percepcję o <%= per %>.", + "headSpecialPageHelmNotes": "Kolczuga: dla elegancji i praktyki. Zwiększa Percepcję o <%= per %>.", "headSpecialRoguishRainbowMessengerHoodText": "Tęczowy Kaptur Łobuzerskiego Posłańca", "headSpecialRoguishRainbowMessengerHoodNotes": "Ten jasny kaptur emanuje kolorową poświatą, która ochroni cię przed nieprzyjemną pogodą! Zwiększa Kondycję o <%= con %>.", "headSpecialClandestineCowlText": "Tajemnicza Maska", @@ -986,7 +986,7 @@ "headSpecialSummer2016RogueText": "Hełm węgorza", "headSpecialSummer2016RogueNotes": "W tym ukrywającym hełmie możesz wyjrzeć spomiędzy skał. Zwiększa Percepcję o <%= per %>. Edycja Limitowana Lato 2016.", "headSpecialSummer2016WarriorText": "Hełm rekina", - "headSpecialSummer2016WarriorNotes": "Ugryź ciężkie zadania z tym przerażającym hełmem. Zwiększa siłę o <%= str %>. Limitowana edycja letniego wyposażenia 2016.", + "headSpecialSummer2016WarriorNotes": "Ugryź ciężkie zadania z tym przerażającym hełmem. Zwiększa siłę o <%= str %>. Limitowana edycja letniego wyposażenia 2016.", "headSpecialSummer2016MageText": "Kapelusz z Deszczu Pod Rynnę", "headSpecialSummer2016MageNotes": "Magiczna woda ciągle tryska z tego kapelusza. Zwiększa percepcję o <%= per %>. Edycja Limitowana Lato 2016.", "headSpecialSummer2016HealerText": "Hełm konika morskiego", @@ -996,7 +996,7 @@ "headSpecialFall2016WarriorText": "Hełm z Sękatej Kory", "headSpecialFall2016WarriorNotes": "Ten przemoczony hełm jest pokryty kawałkami bagna. Zwiększa Siłę o <%= str %>. Edycja Limitowana Jesiennego Wyposażenia 2016.", "headSpecialFall2016MageText": "Kaptur Nikczemności", - "headSpecialFall2016MageNotes": "Ukryj swoje niecne zamiary pod tym cienistym kapturem. Zwiększa Percepcję o <%= per %>. Limitowana Edycja Wyposażenia, jesień 2016.", + "headSpecialFall2016MageNotes": "Ukryj swoje niecne zamiary pod tym cienistym kapturem. Zwiększa Percepcję o <%= per %>. Limitowana Edycja Wyposażenia, jesień 2016.", "headSpecialFall2016HealerText": "Korona Meduzy", "headSpecialFall2016HealerNotes": "Biada każdemu kto spojrzy ci w oczy... Zwiększa Inteligencję o <%= int %>. Edycja limitowana jesiennego wyposażenia 2016.", "headSpecialNye2016Text": "Fikuśna Czapka Imprezowa", @@ -1012,7 +1012,7 @@ "headSpecialSpring2017RogueText": "Hełm chytrego królika", "headSpecialSpring2017RogueNotes": "Ta maska pozwoli ci ukryć swoją bystrość przed niczego nie spodziewającymi się Codziennymi (i koniczynami)! Zwiększa percepcję o <%= per %>. Edycja Limitowana Wiosna 2017.", "headSpecialSpring2017WarriorText": "Koci hełm", - "headSpecialSpring2017WarriorNotes": "Chroń swój cudowny puszysty czerep tym pięknie wykończonym hełmem. Zwiększa siłę o <%= str %>. Edycja Limitowana Wiosna 2017.", + "headSpecialSpring2017WarriorNotes": "Chroń swój cudowny puszysty czerep tym pięknie wykończonym hełmem. Zwiększa siłę o <%= str %>. Edycja Limitowana Wiosna 2017.", "headSpecialSpring2017MageText": "Magiczny psi kapelusz", "headSpecialSpring2017MageNotes": "Ten kapelusz pomoże ci rzucać potężne zaklęcia... Lub po prostu wyczarować piłki tenisowe. Twój wybór. Zwiększa percepcję o <%= per %>. Edycja Limitowana Wiosna 2017.", "headSpecialSpring2017HealerText": "Płatkowy diadem", @@ -1228,7 +1228,7 @@ "headArmoireIronBlueArcherHelmText": "Niebieski żelazny hełm łucznika", "headArmoireIronBlueArcherHelmNotes": "Twardogłowy? Nie, po prostu dobrze chroniony. Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Zestaw żelaznego łucznika (przedmiot 1 z 3).", "headArmoireWoodElfHelmText": "Drewniany hełm elfa", - "headArmoireWoodElfHelmNotes": "Ten hełm z liści może wydawać się delikatny, ale zapewnia Ci ochronę przed srogą pogodą i groźnymi przeciwnikami. Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Zestaw drewnianego elfa (przedmiot 1 z 3).", + "headArmoireWoodElfHelmNotes": "Ten hełm z liści może wydawać się delikatny, ale zapewnia Ci ochronę przed srogą pogodą i groźnymi przeciwnikami. Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Zestaw drewnianego elfa (przedmiot 1 z 3).", "headArmoireRamHeaddressText": "Baranie nakrycie głowy", "headArmoireRamHeaddressNotes": "This elaborate helm is fashioned to look like a ram's head. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Ram Barbarian Set (Item 1 of 3).", "headArmoireCrownOfHeartsText": "Sercowa korona", @@ -1315,7 +1315,7 @@ "shieldSpecialYetiText": "Tarcza poskramiacza Yeti", "shieldSpecialYetiNotes": "Tarcza błyszczy światłem bijącym od śniegu. Zwiększa kondycję o <%= con %>. Edycja Limitowana Zimowego Wyposażenia 2013-2014.", "shieldSpecialSnowflakeText": "Tarcza śnieżynki", - "shieldSpecialSnowflakeNotes": "Każda tarcza jest niepowtarzalna. Wzrost kondycji o <%= con %>. Edycja Limitowana Zimowego Wyposażenia 2013-2014.", + "shieldSpecialSnowflakeNotes": "Każda tarcza jest niepowtarzalna. Wzrost kondycji o <%= con %>. Edycja Limitowana Zimowego Wyposażenia 2013-2014.", "shieldSpecialSpringWarriorText": "Jajeczna tarcza", "shieldSpecialSpringWarriorNotes": "Ta tarcza nigdy nie pęknie, niezależnie od siły, która na nią naprze! Zwiększa kondycję o <%= con %>. Edycja Limitowana, wiosna 2014.", "shieldSpecialSpringHealerText": "Piszcząca piłka ostatecznej ochrony", @@ -1355,9 +1355,9 @@ "shieldSpecialSummer2016WarriorText": "Ząb rekina", "shieldSpecialSummer2016WarriorNotes": "Ugryź trudne zadania z tą zębatą tarczą! Zwiększa Kondycję o <%= con %>. Edycja Limitowana Letniego Wyposażenia 2016.", "shieldSpecialSummer2016HealerText": "Tarcza gwiazdy morskiej", - "shieldSpecialSummer2016HealerNotes": "Czasami błędnie nazywana Tarczą Rozgwiazdy. Zwiększa Kondycję o <%= con %>. Limitowana edycja letniego wyposażenia 2016.", + "shieldSpecialSummer2016HealerNotes": "Czasami błędnie nazywana Tarczą Rozgwiazdy. Zwiększa Kondycję o <%= con %>. Limitowana edycja letniego wyposażenia 2016.", "shieldSpecialFall2016WarriorText": "Korzenie obronne", - "shieldSpecialFall2016WarriorNotes": "Broń się przed Codziennymi przy pomocy tych wijących się korzeni! Zwiększa kondycję o <%= con %>. Edycja limitowana wyposażenia, jesień 2016.", + "shieldSpecialFall2016WarriorNotes": "Broń się przed Codziennymi przy pomocy tych wijących się korzeni! Zwiększa kondycję o <%= con %>. Edycja limitowana wyposażenia, jesień 2016.", "shieldSpecialFall2016HealerText": "Tarcza gorgony", "shieldSpecialFall2016HealerNotes": "W tej tarczy nie podziwiaj swojego odbicia. Zwiększa Kondycję o <%= con %>. Edycja limitowana wyposażenia, jesień 2016.", "shieldSpecialWinter2017WarriorText": "Krążkowa Tarcza", @@ -1645,7 +1645,7 @@ "headAccessoryMystery201403Text": "Poroże przemierzania lasów", "headAccessoryMystery201403Notes": "To poroże lśni od mchów i porostów. Brak dodatkowych korzyści. Przedmiot Abonencki, marzec 2014.", "headAccessoryMystery201404Text": "Czułki motyla zmierzchu", - "headAccessoryMystery201404Notes": "Te czułki umożliwiają noszącemu wykrycie niebezpiecznych źródeł rozproszenia! Brak dodatkowych korzyści. Przedmiot Abonencki, kwiecień 2014.", + "headAccessoryMystery201404Notes": "Te czułki umożliwiają noszącemu wykrycie niebezpiecznych źródeł rozproszenia! Brak dodatkowych korzyści. Przedmiot Abonencki, kwiecień 2014.", "headAccessoryMystery201409Text": "Jesienne poroże", "headAccessoryMystery201409Notes": "To potężne poroże zmienia kolor wraz z liśćmi. Brak dodatkowych korzyści. Przedmiot Abonencki, wrzesień 2014.", "headAccessoryMystery201502Text": "Skrzydła myśli", @@ -1722,7 +1722,7 @@ "weaponArmoireNephriteBowText": "Łuk Nefrytu", "weaponArmoireNephriteBowNotes": "Z tego łuku można strzelać specjalnymi strzałami z jadeitu, które powalą nawet najbardziej uparte, złe nawyki!. Zwiększa Inteligencję o <%= int %> i Siłę o <%= str %>. Zaczarowana Skrzynia: Zestaw Łucznika Nefrytu (Przedmiot 1 z 3).", "weaponArmoireBambooCaneText": "Bambusowa Trzcinka", - "weaponArmoireBambooCaneNotes": "Perfekcyjna, jeśli chodzi o wspomaganie przy spacerach lub podczas tańczenia charlestona. Zwiększa Inteligencję, Percepcję i Kondycję, każde o <%= attrs %>. Zaczarowana Skrzynia: Zestaw Żeglarski (Przedmiot 3 z 3).", + "weaponArmoireBambooCaneNotes": "Perfekcyjna, jeśli chodzi o wspomaganie przy spacerach lub podczas tańczenia charlestona. Zwiększa Inteligencję, Percepcję i Kondycję, każde o <%= attrs %>. Zaczarowana Skrzynia: Zestaw Żeglarski (Przedmiot 3 z 3).", "armorMystery201906Text": "Ogon Uprzejmego Karpia", "eyewearMystery201907Text": "Słodkie Okulary Przeciwsłoneczne", "eyewearMystery201907Notes": "Wyglądają niesamowicie, a dodatkowo chronią oczy przed promieniami UV! Brak dodatkowych korzyści. Przedmiot subskrybenta, lipiec 2019.", @@ -1755,7 +1755,7 @@ "weaponSpecialSpring2019MageText": "Bursztynowa Laska", "weaponSpecialSpring2019HealerText": "Pieśń Wiosny", "weaponSpecialSpring2019MageNotes": "W bursztynie na końcu tej laski jest komar! Może, ale nie musi zawierać DNA dinozaura. Podnosi Inteligencję o <%= int %> oraz Percepcję o <%= per %>. Edycja Limitowana Wiosennego Wyposażenia 2019.", - "weaponSpecialSpring2019HealerNotes": "Twa pieśń kwiatów i deszczu ukoi dusze wszystkich słuchaczy. Zwiększa Inteligencję o <%= int %>. Limitowana Edycja Wiosennego Wyposażenia 2019.", + "weaponSpecialSpring2019HealerNotes": "Twa pieśń kwiatów i deszczu ukoi dusze wszystkich słyszących. Zwiększa Inteligencję o <%= int %>. Limitowana Edycja Wiosennego Wyposażenia 2019.", "weaponSpecialSummer2019RogueText": "Przestarzała Kotwica", "weaponSpecialSummer2019RogueNotes": "Ta pradawna i potężna broń pomoże ci wygrać każdą podwodną bitwę. Podnosi Siłę o <%= str %>.. Limitowana Edycja Wiosennego Wyposażenia 2019.", "weaponSpecialFall2019RogueText": "Pulpit Do Nut", @@ -1770,5 +1770,8 @@ "eyewearArmoireRoseColoredGlassesText": "Różowe Okulary", "eyewearArmoireTragedyMaskText": "Tragiczna Maska", "eyewearArmoireComedyMaskText": "Komediowa Maska", - "eyewearArmoireJewelersEyeLoupeText": "Lupa Jubilerska" + "eyewearArmoireJewelersEyeLoupeText": "Lupa Jubilerska", + "moreArmoireGearAvailable": "Do tego czasu, zostało do znalezienia <%= armoireCount %> części wyposażenia w Zaczarowanej Skrzyni!", + "gearItemsCompleted": "Jesteś w posiadaniu całego ekwipunku klasy <%= class %>! Nowy ekwipunek jest wydawany podczas Gal sezonowych.", + "moreArmoireGearComing": "Zaczarowana Skrzynia również comiesięcznie otrzymuje nowy asortyment!" } diff --git a/website/common/locales/pl/generic.json b/website/common/locales/pl/generic.json index c8ead4df91..c2fccf857a 100644 --- a/website/common/locales/pl/generic.json +++ b/website/common/locales/pl/generic.json @@ -25,7 +25,7 @@ "user": "Użytkownik", "market": "Targ", "newSubscriberItem": "Masz nowy Tajemniczy Przedmiot", - "subscriberItemText": "W każdym miesiącu abonenci otrzymają Mistyczny Przedmiot. Staje się on dostępny na początku miesiąca. Aby uzyskać więcej informacji, zobacz stronę \"Mystery Item\" na wiki.", + "subscriberItemText": "Abonenci na początku każdego miesiąca otrzymują nowy tajemniczy zestaw do ekwipunku!", "all": "Wszystkie", "none": "Żadne", "more": "<%= count %> więcej", @@ -189,7 +189,7 @@ "dismissAll": "Odrzuć wszystko", "messages": "Wiadomości", "emptyMessagesLine1": "Nie masz żadnych wiadomości", - "emptyMessagesLine2": "Aby wysłać wiadomość do Użytkownika, wejdź na jego profil, a następnie kliknij przycisk \"Wiadomości\".", + "emptyMessagesLine2": "Wyślij wiadomość, aby zacząć rozmowę z członkami Twojej Drużyny lub innymi graczami Habitica", "userSentMessage": "<%- user %> wysłał ci wiadomość", "letsgo": "Jazda!", "selected": "Wybrane", @@ -221,5 +221,25 @@ "question": "Pytanie", "questionPlaceholder": "Zadaj swoje pytanie tutaj", "submitQuestion": "Zadaj pytanie", - "questionDescriptionText": "Możesz zadać pytanie w swoim ojczystym języku, jeżeli nie czujesz się pewnie, mówiąc po angliesku." + "questionDescriptionText": "Możesz zadać pytanie w swoim ojczystym języku, jeżeli nie czujesz się pewnie, mówiąc po angielsku.", + "askQuestionHeaderDescribe": "Pierwszy raz korzystasz z Habitica i nie wiesz, co robisz? A może jesteś weteranem, ale nie możesz zrozumieć jak działa jedna z funkcji? Wypełnij ten formularz, a nasz zespół odezwie się do Ciebie.", + "titleCustomizations": "Personalizacje", + "allNotifications": "Wszystkie Powiadomienia", + "mutePlayer": "Wycisz", + "reportPlayer": "Zgłoś Gracza", + "blockPlayer": "Zablokuj Gracza", + "unblockPlayer": "Odblokuj Gracza", + "adminTools": "Narzędzia Administratora", + "viewAdminPanel": "Wyświetl Panel Administratora", + "newMessage": "Nowa Wiadomość", + "general": "Ogólne", + "playerReportModalBody": "Należy zgłaszać wyłącznie Graczy, którzy naruszają <%= firstLinkStart %>Regulamin Społeczności<%= linkEnd %> i/lub <%= secondLinkStart %>Warunki korzystania z Usług<%= linkEnd %>. Złożenie fałszywego zgłoszenia stanowi naruszenie Regulaminu Społeczności.", + "banPlayer": "Zbanuj Gracza", + "unbanPlayer": "Anuluj zbanowanie Gracza", + "bannedPlayer": "Ten Gracz został zbanowany.", + "whyReportingPlayer": "Dlaczego zgłaszasz tego Gracza?", + "whyReportingPlayerPlaceholder": "Powód zgłoszenia", + "targetUserNotExist": "Docelowy Użytkownik: '<%= userName %>' nie istnieje.", + "shadowMute": "Wygłuszenie Cienia", + "rememberToBeKind": "Pamiętaj proszę o tym, aby być uprzejmym i pełnym szacunku względem innych Graczy oraz aby przestrzegać Regulamin Społeczności." } diff --git a/website/common/locales/pl/groups.json b/website/common/locales/pl/groups.json index 3c8ab0af86..200e015ed2 100644 --- a/website/common/locales/pl/groups.json +++ b/website/common/locales/pl/groups.json @@ -1,8 +1,8 @@ { "tavern": "Pogaduszki w Karczmie", "tavernChat": "Pogaduszki w Karczmie", - "innCheckOutBanner": "Wpisałeś się aktualnie do Gospody. Twoje Codzienne nie będą Ciebie ranić i nie będziesz robił postępów w Misjach.", - "innCheckOutBannerShort": "Zameldowano cię w Gospodzie.", + "innCheckOutBanner": "Na razie wyłączyłeś obrażenia. Twoje Codzienne nie będą Ciebie ranić i nie będziesz robił postępów w Misjach.", + "innCheckOutBannerShort": "Wyłączyłeś obrażenia.", "resumeDamage": "Wznów otrzymywanie obrażeń", "helpfulLinks": "Pomocne odnośniki", "lookingForGroup": "Sekcja dla poszukujących drużyny (Drużyna poszukiwana)", diff --git a/website/common/locales/pl/limited.json b/website/common/locales/pl/limited.json index e4972ee5bd..113c58d1a8 100644 --- a/website/common/locales/pl/limited.json +++ b/website/common/locales/pl/limited.json @@ -53,7 +53,7 @@ "seasonalItems": "Przedmioty sezonowe", "nyeCardAchievementTitle": "Starzy znajomi", "nyeCardAchievementText": "Szczęśliwego Nowego Roku! Wysłał lub otrzymał <%= count %> kartek noworocznych.", - "nye0": "Szczęśliwego Nowego Roku! Obyś zgładził wiele złych nawyków.", + "nye0": "Szczęśliwego Nowego Roku! Obyś zgładził wiele złych nawyków.", "nye1": "Szczęśliwego Nowego Roku! Obyś zebrał wiele nagród.", "nye2": "Szczęśliwego Nowego Roku! Obyś zdobył wiele doskonałych dni.", "nye3": "Szczęśliwego Nowego Roku! Niech twoja lista zadań Do Zrobienia pozostanie krótka i przyjemna.", diff --git a/website/common/locales/pl/loginincentives.json b/website/common/locales/pl/loginincentives.json index b690e5b304..ef059f0a92 100644 --- a/website/common/locales/pl/loginincentives.json +++ b/website/common/locales/pl/loginincentives.json @@ -7,7 +7,7 @@ "checkinEarned": "Twój Licznik Odwiedzin wzrósł!", "unlockedCheckInReward": "Odblokowałeś Nagrodę za Wizyty!", "checkinProgressTitle": "Postęp do następnej", - "incentiveBackgroundsUnlockedWithCheckins": "Zablokowane proste tła odblokują się wraz z Codziennymi Wizytami.", + "incentiveBackgroundsUnlockedWithCheckins": "Podstawowe tła odblokują się wraz z Codziennymi Wizytami.", "oneOfAllPetEggs": "po jednym jaju każdego standardowego chowańca", "twoOfAllPetEggs": "po dwa jaja każdego standardowego chowańca", "threeOfAllPetEggs": "po trzy jaja każdego standardowego chowańca", diff --git a/website/common/locales/pl/npc.json b/website/common/locales/pl/npc.json index a42af8cf58..fc45dda582 100644 --- a/website/common/locales/pl/npc.json +++ b/website/common/locales/pl/npc.json @@ -23,7 +23,7 @@ "pauseDailies": "Wstrzymaj obrażenia", "unpauseDailies": "Wznów otrzymywanie obrażeń", "staffAndModerators": "Personel oraz Moderatorzy", - "communityGuidelinesIntro": "Habitika próbuje stworzyć gościnne środowisko dla użytkowników każdego wieku i pochodzenia, szczególnie w przestrzeniach publicznych jak Tawerna. Jeśli masz jakieś pytania proszę poradź się Wytyczne Społeczności.", + "communityGuidelinesIntro": "Habitika próbuje stworzyć gościnne środowisko dla użytkowników każdego wieku i pochodzenia, szczególnie w miejscach takich jak Grupy i Zespoły. Jeśli masz jakieś pytania proszę poradź się Wytyczne Społeczności.", "acceptCommunityGuidelines": "Zgadzam się na przestrzeganie Regulaminu Społeczności", "worldBossEvent": "Wydarzenie: Boss Świata", "worldBossDescription": "Opis Bossa Świata", @@ -129,5 +129,7 @@ "helpSupportHabitica": "Wesprzyj Habitica", "groupsPaymentSubBilling": "Następne rozliczenie nastąpi dnia <%= renewalDate %>.", "sellItems": "Sprzedaj przedmioty", - "groupsPaymentAutoRenew": "Ta subskrybcja będzie odnawiana automatycznie. Aby z niej zrezygnować, przejdź do rozliczeń w zakładce \"Grupa\"." + "groupsPaymentAutoRenew": "Ta subskrybcja będzie odnawiana automatycznie. Aby z niej zrezygnować, przejdź do rozliczeń w zakładce \"Grupa\".", + "notAvailable": "Ten przedmiot jest niedostępny.", + "customizationsShopText": "Chcesz zmienić swój styl? Dobrze trafiłeś! Oferujemy najświeższe stylizacje na każdą porę roku." } diff --git a/website/common/locales/pl/overview.json b/website/common/locales/pl/overview.json index 6a93eb32fd..c751728526 100644 --- a/website/common/locales/pl/overview.json +++ b/website/common/locales/pl/overview.json @@ -5,5 +5,6 @@ "step2": "Krok 2: Zdobądź punkty za robienie rzeczy w prawdziwym życiu", "webStep2Text": "Teraz możesz zacząć wykonywać swoje zadania! Gdy zrobisz jakieś i zaznaczysz to w Habitica, zyskasz [doświadczenie](https://habitica.fandom.com/wiki/Experience_Points), które pomoże ci zwiększyć poziom oraz [złoto](https://habitica.fandom.com/pl/wiki/Punkty_z%C5%82ota), za które możesz kupować Nagrody. Jeśli będziesz utrzymywać złe nawyki lub nie zrobisz któregoś z Codziennych, będziesz tracić [punkty życia](https://habitica.fandom.com/wiki/Health_Points). W ten sposób punkty doświadczenia i zdrowia staną się wyznacznikiem twoich postępów. W miarę jak twoja postać będzie się rozwijać, zauważysz też polepszenie twojego życia.", "step3": "Krok 3: Dostosuj i eksploruj Habitica", - "webStep3Text": "Po zapoznaniu się z podstawami, możesz uzyskać jeszcze więcej od Habitica wykorzystując poniższe, ciekawe funkcjonalności:\n * Organizuj swoje Zadania wykorzystując [tagi](https://habitica.fandom.com/wiki/Tags) (tagi można dodawać podczas edycji Zadania).\n * Dostosuj swój [Awatar](https://habitica.fandom.com/wiki/Avatar) klikając ikonę użytkownika w prawym, górnym rogu.\n * Dokupuj [Uzbrojenie](https://habitica.fandom.com/wiki/Equipment) w sekcji nagród lub bezpośrednio ze [sklepików](<%= shopUrl %>), i zakładaj je poprzez [Ekwipunek> Wyposażenie](<%= equipUrl %>).\n * Spotkaj się z innymi użytkownikami w [Tawernie](https://habitica.fandom.com/wiki/Tavern).\n * Wykluwaj [Chowańców](https://habitica.fandom.com/wiki/Pets) zbierając [Jajka](https://habitica.fandom.com/wiki/Eggs) i [Eliksiry Wyklucia](https://habitica.fandom.com/wiki/Hatching_Potions). [Karm](https://habitica.fandom.com/wiki/Food) je, aby wyrosły na [Wierzchowce](https://habitica.fandom.com/wiki/Mounts).\n * Na poziomie 10: Wybierz odpowiednią [Klasę Postaci](https://habitica.fandom.com/wiki/Class_System), a następnie używaj specyficznych dla klasy [Umiejętności](https://habitica.fandom.com/wiki/Skills) (umiejętności nabędziesz na poziomach od 11 do 14).\n * Utwórz Drużynę z przyjaciółmi (klikając [Drużyna](<%= partyUrl %>) w pasku nawigacyjnym) aby nabrać odpowiedzialności i zdobyć zwój misji.\n * Pokonuj potwory i zdobywaj przedmioty w [Misjach](https://habitica.fandom.com/wiki/Quests) (na poziomie 15 otrzymasz misję)." + "webStep3Text": "Po zapoznaniu się z podstawami, możesz uzyskać jeszcze więcej od Habitica wykorzystując poniższe, ciekawe funkcjonalności:\n * Organizuj swoje Zadania wykorzystując [tagi](https://habitica.fandom.com/wiki/Tags) (tagi można dodawać podczas edycji Zadania).\n * Dostosuj swój [Awatar](https://habitica.fandom.com/wiki/Avatar) klikając ikonę użytkownika w prawym, górnym rogu.\n * Dokupuj [Uzbrojenie](https://habitica.fandom.com/wiki/Equipment) w sekcji nagród lub bezpośrednio ze [sklepików](<%= shopUrl %>), i zakładaj je poprzez [Ekwipunek> Wyposażenie](<%= equipUrl %>).\n * Spotkaj się z innymi użytkownikami poprzez narzędzie [Szukam grupy](https://habitica.com/looking-for-party)\n * Wykluwaj [Chowańców](https://habitica.fandom.com/wiki/Pets) zbierając [Jajka](https://habitica.fandom.com/wiki/Eggs) i [Eliksiry Wyklucia](https://habitica.fandom.com/wiki/Hatching_Potions). [Karm](https://habitica.fandom.com/wiki/Food) je, aby wyrosły na [Wierzchowce](https://habitica.fandom.com/wiki/Mounts).\n * Na poziomie 10: Wybierz odpowiednią [Klasę Postaci](https://habitica.fandom.com/wiki/Class_System), a następnie używaj specyficznych dla klasy [Umiejętności](https://habitica.fandom.com/wiki/Skills) (umiejętności nabędziesz na poziomach od 11 do 14).\n * Utwórz Drużynę z przyjaciółmi (klikając [Drużyna](<%= partyUrl %>) w pasku nawigacyjnym) aby nabrać odpowiedzialności i zdobyć zwój misji.\n * Pokonuj potwory i zdobywaj przedmioty w [Misjach](https://habitica.fandom.com/wiki/Quests) (na poziomie 15 otrzymasz misję).", + "overviewQuestionsRevised": "Masz pytania? Sprawdź FAQ! Jeżeli nie ma tam czego szukasz, możesz zadać pytanie za pomocą tej formy: " } diff --git a/website/common/locales/pl/pets.json b/website/common/locales/pl/pets.json index d4a4d79871..ae29bd340c 100644 --- a/website/common/locales/pl/pets.json +++ b/website/common/locales/pl/pets.json @@ -1,67 +1,67 @@ { - "stable": "Stajnia", + "stable": "Chowańce i Wierzchowce", "pets": "Chowańce", - "activePet": "Aktywny chowaniec", - "noActivePet": "Brak aktywnego chowańca", - "petsFound": "Znalezione chowańce", - "magicPets": "Magiczne chowańce", + "activePet": "Aktywny Chowaniec", + "noActivePet": "Brak aktywnego Chowańca", + "petsFound": "Znalezione Chowańce", + "magicPets": "Magiczne Chowańce", "questPets": "Chowańce z Misji", "mounts": "Wierzchowce", - "activeMount": "Aktywny wierzchowiec", - "noActiveMount": "Brak aktywnego wierzchowca", - "mountsTamed": "Oswojonych wierzchowców", + "activeMount": "Aktywny Wierzchowiec", + "noActiveMount": "Brak aktywnego Wierzchowca", + "mountsTamed": "Oswojonych Wierzchowców", "questMounts": "Wierzchowce z Misji", - "magicMounts": "Magiczne wierzchowce", - "etherealLion": "Eteryczny lew", - "veteranWolf": "Wilk weteran", - "veteranTiger": "Tygrys weteran", - "veteranLion": "Lew weteran", - "veteranBear": "Niedźwiedź weteran", - "veteranFox": "Lis weteran", + "magicMounts": "Magiczne Wierzchowce", + "etherealLion": "Lew Eteryczny", + "veteranWolf": "Wilk Weteran", + "veteranTiger": "Tygrys Weteran", + "veteranLion": "Lew Weteran", + "veteranBear": "Niedźwiedź Weteran", + "veteranFox": "Lis Weteran", "cerberusPup": "Szczenię Cerbera", "hydra": "Hydra", - "mantisShrimp": "Krewetka modliszkowa", + "mantisShrimp": "Krewetka Modliszkowa", "mammoth": "Wełniany Mamut", "orca": "Orka", - "royalPurpleGryphon": "Purpurowy królewski gryf", + "royalPurpleGryphon": "Królewsko Purpurowy Gryf", "phoenix": "Feniks", "magicalBee": "Magiczna Pszczoła", "hopefulHippogriffPet": "Optymistyczny Hipogryf", "hopefulHippogriffMount": "Optymistyczny Hipogryf", - "royalPurpleJackalope": "Purpurowy królewski Jackalope", + "royalPurpleJackalope": "Królewsko Purpurowy Jackalope", "invisibleAether": "Niewidzialny Eter", "potion": "Eliksir <%= potionType %>", "egg": "<%= eggType %> jajo", "eggs": "Jaja", "eggSingular": "jajo", "hatchingPotions": "Eliksiry wyklucia", - "magicHatchingPotions": "Magiczne eliksiry wyklucia", + "magicHatchingPotions": "Magiczne Eliksiry Wyklucia", "hatchingPotion": "eliksir wyklucia", "haveHatchablePet": "Posiadasz <%= potion %> eliksir wyklucia oraz <%= egg %> jajo potrzebne do wyklucia tego Chowańca! Kliknij, aby go wykluć!", "quickInventory": "Szybki ekwipunek", - "food": "Karma dla zwierząt i siodła", - "noFoodAvailable": "Nie masz żadnej karmy.", - "noSaddlesAvailable": "Nie masz żadnych siodeł.", + "food": "Karma oraz Siodła", + "noFoodAvailable": "Nie masz żadnej Karmy.", + "noSaddlesAvailable": "Nie masz żadnych Siodeł.", "dropsExplanation": "Zdobądź te przedmioty szybciej przy pomocy Klejnotów jeśli nie chcesz czekać aż wypadną przy ukończeniu zadania. Dowiedz się więcej o systemie zdobyczy.", "dropsExplanationEggs": "Wydaj Klejnoty, aby zdobyć jaja szybciej, jeśli nie chcesz czekać, aż je znajdziesz lub jeśli nie chcesz powtarzać misji, aby dostać z nich jajka. Dowiedz się więcej o systemie zdobyczy.", "premiumPotionNoDropExplanation": "Magiczne Eliksiry Wyklucia nie mogą zostać użyte na jajach otrzymanych z Misji. Jedynym sposobem na zdobycie Magicznych Eliksirów Wyklucia jest kupienie ich poniżej, nie stanowią losowych zdobyczy.", - "beastMasterProgress": "Postęp Władcy chowańców", - "beastAchievement": "Zdobyłeś odznakę \"Władca Chowańców\", gdyż zebrałeś wszystkie możliwe Chowańce!", - "beastMasterName": "Władca chowańców", + "beastMasterProgress": "Postęp Władcy Chowańców", + "beastAchievement": "Zdobyłeś odznakę \"Władca Chowańców\", gdyż zebrałeś wszystkie możliwe chowańce!", + "beastMasterName": "Władca Chowańców", "beastMasterText": "Odnalazł wszystkie 90 chowańców (niesłychanie trudne, pogratuluj tej osobie!)", "beastMasterText2": " i wypuścił swoje chowańce w sumie <%= count %> raz(y)", - "mountMasterProgress": "Postęp Władcy wierzchowców", - "mountAchievement": "Zdobyłeś odznakę „Władca wierzchowców\" za oswojenie wszystkich wierzchowców!", - "mountMasterName": "Władca wierzchowców", + "mountMasterProgress": "Postęp Władcy Wierzchowców", + "mountAchievement": "Zdobyłeś odznakę „Władca Wierzchowców\" za oswojenie wszystkich wierzchowców!", + "mountMasterName": "Władca Wierzchowców", "mountMasterText": "Oswoił wszystkie 90 wierzchowców (to jeszcze trudniejsze, pogratuluj tej osobie!)", "mountMasterText2": " i wypuścił wszystkie spośród swoich 90 wierzchowców <%= count %> raz(y)", "triadBingoName": "Potrójne bingo", "triadBingoText": "Odnalazł wszystkie 90 chowańców, wszystkie 90 wierzchowców, a potem JESZCZE RAZ wszystkie 90 chowańców (JAK CI SIĘ TO UDAŁO!)", - "triadBingoText2": " i wypuścił całą stajnię <%= count %> raz(y)", + "triadBingoText2": " i uwolnił wszystkie Chowańce i Wierzchowce w sumie <%= count %> raz(y)", "triadBingoAchievement": "Zdobyłeś odznakę „Potrójne bingo” za odnalezienie wszystkich chowańców, oswojenie wierzchowców i ponowne odnalezienie wszystkich chowańców!", "hatchedPet": "Wyklułeś <%= potion %> <%= egg %>!", "hatchedPetGeneric": "Wyklułeś nowego Chowańca!", - "hatchedPetHowToUse": "Odwiedź [Stajnię](<%= stableUrl %>), aby nakarmić swojego najnowszego chowańca!", + "hatchedPetHowToUse": "Odwiedź [Chowańce i Wierzchowce](<%= stableUrl %>), aby nakarmić swojego najnowszego chowańca!", "petNotOwned": "Nie posiadasz tego chowańca.", "mountNotOwned": "Nie posiadasz tego wierzchowca.", "feedPet": "Nakarmić <%= text %> twojego <%= name %>?", @@ -83,10 +83,10 @@ "petsReleased": "Chowańce uwolnione.", "mountsAndPetsReleased": "Wierzchowce i chowańce uwolnione", "mountsReleased": "Wierzchowce uwolnione", - "welcomeStable": "Witaj w Stajni!", - "welcomeStableText": "Jestem Matt, Władca Chowańców. Za każdym razem, kiedy wykonasz zadanie, masz szansę na zdobycie jaja lub eliksiru wyklucia, który umożliwia wyklucie chowańca. Kiedy wyklujesz Chowańca, pojawi się on tutaj! Kliknij na obrazek Chowańca, aby dodać go do swojego awatara. Nakarm je karmą, które znajdziesz, a wyrosną one na wytrzymałe Wierzchowce.", - "petLikeToEat": "Co lubi jeść mój chowaniec?", - "petLikeToEatText": "Chowańce będą rosnąć bez względu czym je nakarmisz. Będą one jednak rosnąć szybciej, jeśli nakarmisz je jedzeniem, które najbardziej lubią. Poeksperymentuj, aby znaleźć schemat lub sprawdź odpowiedź tutaj:
http://habitica.fandom.com/wiki/Food_Preferences", + "welcomeStable": "Witaj w Twoich Chowańcach i Wierzchowcach!", + "welcomeStableText": "Witaj w stajni! Jestem Matt, Władca Chowańców. Za każdym razem, kiedy wykonasz zadanie, masz szansę na zdobycie jaja lub eliksiru wyklucia, który umożliwia wyklucie Chowańca. Kiedy wyklujesz Chowańca, pojawi się on tutaj! Kliknij na obrazek Chowańca, aby dodać go do swojej Postaci. Nakarm je Karmą, które znajdziesz, a wyrosną one na wytrzymałe Wierzchowce.", + "petLikeToEat": "Co lubi jeść mój Chowaniec?", + "petLikeToEatText": "Chowańce będą rosnąć bez względu na to czym je nakarmisz. Będą one jednak rosnąć szybciej, jeśli nakarmisz je Karmą, którą lubią najbardziej. Poeksperymentuj, aby odkryć schemat lub dowiedz się jak to działa tutaj:
https://habitica.com/static/faq#pet-foods", "filterByStandard": "Standardowe", "filterByMagicPotion": "Eliksir Magiczny", "filterByQuest": "Misja", @@ -104,12 +104,13 @@ "notEnoughPets": "Nie zebrałeś/aś wystarczająco chowańców", "notEnoughMounts": "Nie zabrałeś/aś wystarczająco wierzchowców", "notEnoughPetsMounts": "Nie zebrałeś/aś wystarczająco chowańców i wierzchowców", - "wackyPets": "Zwariowane chowańce", + "wackyPets": "Zwariowane Chowańce", "filterByWacky": "Zwariowane", "gryphatrice": "Bazyligryfek", "invalidAmount": "Błędna ilość jedzenia, musi być dodatnią liczbą całkowitą", "tooMuchFood": "Próbujesz nakarmić chowańca zbyt dużą ilością jedzenia, akcja została anulowana", "notEnoughFood": "Nie masz wystarczającej ilości jedzenia", "jubilantGryphatrice": "Radosny Gryphatrice", - "veteranDragon": "Smok Weteran" + "veteranDragon": "Smok Weteran", + "veteranCactus": "Kaktus Weteran" } diff --git a/website/common/locales/pl/quests.json b/website/common/locales/pl/quests.json index 2d5c76ad58..90533e6d84 100644 --- a/website/common/locales/pl/quests.json +++ b/website/common/locales/pl/quests.json @@ -29,13 +29,13 @@ "collected": "Zebrano", "abort": "Przerwij", "leaveQuest": "Opuść misję", - "sureLeave": "Czy na pewno chcesz opuścić aktywną misję? Cały twój postęp zostanie stracony.", + "sureLeave": "Czy na pewno chcesz opuścić Misję? Cały twój postęp zostanie stracony.", "mustComplete": "Musisz najpierw ukończyć <%= quest %>.", "mustLvlQuest": "Musisz mieć co najmniej poziom <%= level %>, żeby kupić tę misję!", "unlockByQuesting": "By odblokować tę misję, ukończ <%= title %>.", - "questConfirm": "Jesteś pewien? Tylko <%= questmembers %> z <%= totalmembers %> członków drużyny dołączyło do zadania! Zadania rozpoczynają się automatycznie, kiedy wszyscy gracze przyjęli lub odrzucili zaproszenie.", - "sureCancel": "Czy na pewno chcesz zakończyć tę misję? Wszystkie zaakceptowane zaproszenia zostaną stracone. Właściciel misji zachowa zwój misji.", - "sureAbort": "Czy na pewno chcesz porzucić tę misję? Zostanie przerwana dla każdego członka twojej drużyny i cały postęp zostanie stracony. Zwój misji zostanie zwrócony właścicielowi.", + "questConfirm": "Jesteś pewien, że chcesz rozpocząć tę Misję? Jeszcze nie wszyscy członkowie Drużyny zaakceptowali zaproszenie. Misje rozpoczną się automatycznie po tym, jak wszyscy członkowie odpowiedzą na zaproszenie.", + "sureCancel": "Czy na pewno chcesz zakończyć tę Misję? Anulowanie Misji spowoduje anulowanie wszystkich zaakceptowanych i oczekujących zaproszeń. Zwój Misji zostanie zwrócony do ekwipunku właściciela.", + "sureAbort": "Czy na pewno chcesz anulować tę Misję? Cały postęp zostanie utracony. Zwój Misji zostanie zwrócony właścicielowi.", "bossRageDescription": "Gdy pasek się zapełni, boss wykona atak specjalny!", "startQuest": "Rozpocznij Misję", "questInvitationDoesNotExist": "Nie zostały jeszcze wysłane żadne zaproszenia na misję.", diff --git a/website/common/locales/pl/questscontent.json b/website/common/locales/pl/questscontent.json index 243179708d..3d1b1c8a80 100644 --- a/website/common/locales/pl/questscontent.json +++ b/website/common/locales/pl/questscontent.json @@ -1,10 +1,10 @@ { "questEvilSantaText": "Święty Mikołaj-Myśliwy", "questEvilSantaNotes": "Z głębi lodowych pól dochodzi cię ryk rozpaczy. Wycie - przerywane charczeniem - wyprowadza cię w las. W środku matecznika, widzisz dorosłą niedźwiedzicę. Spętana w klatce, walczy o życie. Na szczycie klatki bryka złośliwy gnom, przebrany w kostium Świętego Mikołaja. Pokonaj Kłusującego Mikołaja i uwolnij niedźwiedzią bestię!", - "questEvilSantaCompletion": "Kłusujący Mikołaj miota się w gniewie i ucieka w noc. Wdzięczna niedźwiedzica, poprzez jęk i skowyt, próbuje ci coś przekazać. Zabierasz ją do domu, do stajni, gdzie Matt Boch Mistrz Bestii słucha jej opowieści z okrzykiem przerażenia. Ona ma niedźwiadka! Malec uciekł w śniegi, gdy mama niedźwiedzica została schwytana.", + "questEvilSantaCompletion": "Kłusujący Mikołaj miota się w gniewie i ucieka w noc. Wdzięczna niedźwiedzica, poprzez jęk i skowyt, próbuje ci coś przekazać. Zabierasz ją do domu, do stajni, gdzie Matt Boch, Mistrz Bestii, słucha jej opowieści z okrzykiem przerażenia. Ona ma niedźwiadka! Malec uciekł w śniegi, gdy mama niedźwiedzica została schwytana.", "questEvilSantaBoss": "Święty Mikołaj-Myśliwy", "questEvilSantaDropBearCubPolarMount": "Niedźwiedź polarny (wierzchowiec)", - "questEvilSanta2Text": "Znajdź niedźwiadka", + "questEvilSanta2Text": "Znajdź Niedźwiadka", "questEvilSanta2Notes": "Gdy Kłusujący Mikołaj schwytał polarną niedźwiedzicę, jej synek uciekł na pola lodowe. Z pomiędzy krystalicznych dźwięków lasu wyłapujesz trzask złamanej gałązki. Spoglądasz w tę stronę. Tropy! Tropy niedźwiadka! Zaczynasz wyścigi tym szlakiem. Znajdź wszystkie ślady - tropy i złamane gałązki - i uratuj niedźwiadka!

Wskazówka: “Znajdź niedźwiadka” nagradza kolejnym osiągnięciem misji ale daje rzadkie zwierzątko, które może być tylko raz dodane do stajni.", "questEvilSanta2Completion": "Znajdujesz niedźwiadka! Będzie twym towarzyszem do końca życia.", "questEvilSanta2CollectTracks": "Ślady", @@ -45,7 +45,7 @@ "questHarpyCompletion": "Ostateczny cios powala Harpię, i pióra lęca we wszystkich kierunkach. Po szybkiej wspinaczce do jej gniazda znajdujecie @UncommonCriminal, otoczonego papugowymi jajami. Jako drużyna szybko kładziecie jaja z powrotem w pobliskich gniazdach. Okaleczona papuga głośno kracze, spuszczając kilka jaj w wasze ręce. \"Atak Harpii pozostawił parę jaj, które potrzebują ochrony\" – tłumaczy @UncommonCriminal. – \"Wydaje się, że zostaliście honorowymi papugami.\"", "questHarpyBoss": "Harpia", "questHarpyDropParrotEgg": "Papuga (jajo)", - "questHarpyUnlockText": "Odblokowuje dostęp do kupna jaj papugi na Targu", + "questHarpyUnlockText": "Odblokowuje możliwość zakupu Jaj Papugi na Targu", "questRoosterText": "Krzykliwy kogut", "questRoosterNotes": "Przez lata farmer @extrajordinary używał kogutów jako budzika. Jednak teraz pojawił się kogut gigant, piejący głośniej niż jakikolwiek wcześniej - budzący wszystkich w Habitice! Pozbawieni snu Habitianie zmagają się ze swoimi Codziennymi. @Pandoro zdecydował, że nadszedł czas położyć temu kres. \"Proszę, czy znajdzie się ktoś, kto może nauczyć tego koguta piać cicho?\"; Zgłosiliście się i pewnego wczesnego ranka podchodzicie do koguta. Ten jednak obraca się, trzepocze olbrzymimi skrzydłami, wystawia ostre szpony i dobywa z siebie okrzyk bojowy.", "questRoosterCompletion": "Dzięki finezji i sile udało wam się oswoić dziką bestię. Jego uszy, dotychczas przytkane piórami i pół zapomnianymi zadaniami są teraz czyściutkie jak łza. Zapiał na was cichutko, tuląc swój dziób do waszych ramion. Następnego dnia, kiedy zbieraliście się do odjazdu, podbiegł do was @EmeraldOx z przykrytym koszykiem. \"Czekajcie! Kiedy poszedłem dziś rano na farmę, zobaczyłem jak kogut położył je obok drzwi waszego pokoju. Myślę, że chciał, żebyście je zabrali.\" Odkrywacie koszyk, o oczom waszym ukazują się trzy delikatne jaja.", @@ -57,7 +57,7 @@ "questSpiderCompletion": "Mroźny Pająk poległ, pozostawiając po sobie mały stos szronu i kilku zaczarowanych woreczków jaj. @Arcosine dość pospiesznie oferuje ci je w nagrodę - może uda ci się wychować kilka własnych niegroźnych pająków jako chowańce?", "questSpiderBoss": "Pająk", "questSpiderDropSpiderEgg": "Pająk (jajo)", - "questSpiderUnlockText": "Odblokowuje dostęp do kupna pajęczych jaj na Targu", + "questSpiderUnlockText": "Odblokowuje możliwość zakupu Jaj Pająka na Targu", "questGroupVice": "Nałóg, Żmij cienia", "questVice1Text": "Nałóg. Część 1: Uwolnij się od wpływu Smoka", "questVice1Notes": "

Mówi się, że w jaskiniach Góry Habitica spoczywa ogromne zło. Potwór, którego obecność nagina wolę silnych bohaterów, skłaniając ich do złych nawyków i lenistwa! Bestią tą jest wielki smok o ogromnej sile, złożony z samych cieni: Nawyk, zdradziecki Żmij cienia. Odważni Habitanie, powstańcie i pokonajcie tego okropnego potwora raz na zawsze, lecz tylko jeśli wierzycie, że oprzecie się jego mocy.

Nałóg, Część 1:

Jak zamierzacie walczyć z bestią, która już ma nad wami kontrolę? Nie dajcie się lenistwu i nałogom! Pracujcie ciężko, by zwalczyć mroczny wpływ smoka i położyć kres jego uciskowi!

", @@ -83,9 +83,9 @@ "questMoonstone1Completion": "W końcu udało Ci się wyciągnąć ostatni kamień księżycowy z bagiennego szlamu. Nastał teraz czas, aby przekształcić swoją kolekcję w broń, która w końcu pokona Recydywistkę!", "questMoonstone1DropMoonstone2Quest": "Recydywista, część 2: Recydywistka Nekromantka (Zwój)", "questMoonstone2Text": "Recydywista, część 2: Recydywistka Nekromantka", - "questMoonstone2Notes": "", + "questMoonstone2Notes": "Odważny miecznik @InspectorCaracal pomaga Ci przetworzyć zaczarowane księżycowe kamienie w łańcuch. Jesteś w końcu gotowy na spotkanie z Recydywistą, lecz gdy wkraczasz na Bagna Stagnacji, przeraźliwe ciarki przechodzą przez Twoje ciało.

Gnijący oddech szepcze Ci do ucha. \"Ponownie wróciłeś? Cudownie...\" Odwracasz się i uderzasz, a łańcuch księżycowych kamieni rozświetla masywne ciało Recydywisty po trafieniu. \"Może i związałeś mnie ponownie z tym światem,\" warknął Recydywista, \"lecz teraz jest czas abyś to Ty go opuścił!\"", "questMoonstone2Boss": "Nekromanta", - "questMoonstone2Completion": "", + "questMoonstone2Completion": "Recydywistka stawia chwiejne kroki do tyłu po Twoim ostatnim ciosie i przez chwilę Twoje serce już wypełnia radość - ale odwraca ona swoją głowę i wydaje z siebie przeraźliwy śmiech. Co się dzieje?", "questMoonstone2DropMoonstone3Quest": "Recydywista, część 3: Recydywistka nawrócona (Zwój)", "questMoonstone3Text": "Recydywista, część 3: Recydywistka nawrócona", "questMoonstone3Notes": "", @@ -567,7 +567,7 @@ "questPterodactylDropPterodactylEgg": "Pterodaktyl (jajo)", "questPterodactylUnlockText": "Odblokowuje dostęp do kupna pterodaktylowych jaj na Targu", "questBadgerText": "Przestań Mnie Zborsuczać!", - "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", + "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", "questBadgerCompletion": "W końcu udaje ci się przepędzić Zborsuczone Zmartwienie by móc pomknąć w jego norę. Na końcu tunelu znajdujesz wróżkowe Do-Zrobienia \"Zahibernuj\". Abstrahując od trzech gotowych do wylęgnięcia jaj, legowisko wydaje się być opuszczone.", "questBadgerBoss": "Zborsuczone Zmartwienie", "questBadgerDropBadgerEgg": "Borsuk (jajo)", @@ -643,5 +643,6 @@ "questDolphinBoss": "Delfin Zwątpienia", "questFluoriteDropFluoritePotion": "Fluorytowy Eliksir Wzrostu", "questFluoriteBoss": "Fluorytowy Pierwiastek", - "questFluoriteText": "Rozjaśniające Fluorytowe Przerażenie" + "questFluoriteText": "Rozjaśniające Fluorytowe Przerażenie", + "evilSantaAddlNotes": "Zauważ że questy: Święty Mikołaj - Myśliwy oraz Znajdź Niedźwiadka mają osiągnięcia które się sumują ale w otrzymujesz rzadkiego Chowańca oraz Wierzchowca który może być dodany do Twojej stajni tylko raz." } diff --git a/website/common/locales/pl/settings.json b/website/common/locales/pl/settings.json index cb6ff5816a..2637e22d7f 100644 --- a/website/common/locales/pl/settings.json +++ b/website/common/locales/pl/settings.json @@ -18,7 +18,7 @@ "resetAccPop": "Zacznij od początku. Usuwa wszystkie poziomy, złoto, wyposażenie, historię, oraz zadania.", "deleteAccount": "Usuń konto", "deleteAccPop": "Anuluje i usuwa twoje konto na Habitica.", - "feedback": "Jeśli chciałbyś wystawić nam opinię, możesz zrobić to poniżej. Z chęcią wysłuchamy co ci się spodobało lub nie spodobało w Habitice! Nie mówisz po angielsku? Nie ma problemu! Użyj takiego języka jakiego chcesz.", + "feedback": "Jeśli chciałbyś wystawić nam opinię, możesz zrobić to poniżej. Z chęcią jej wysłuchamy! Będzie ona anonimowa chyba, że zdecydujesz się wpisać swoje dane kontaktowe. Nie mówisz biegle po angielsku? Nie ma problemu! Użyj języka, który preferujesz.", "dataExport": "Eksport danych", "saveData": "Oto kilka opcji zapisu Twoich danych.", "habitHistory": "Historia nawyków", @@ -27,8 +27,8 @@ "userData": "Dane użytkownika", "exportUserData": "Eksportuj dane użytkownika:", "export": "Eksport", - "xml": "(XML)", - "json": "(JSON)", + "xml": "XML", + "json": "JSON", "customDayStart": "Własny początek dnia", "sureChangeCustomDayStartTime": "Jesteś pewien, że chcesz zmienić Czas Początku Dnia? Twoje Codzienne będą się resetować, kiedy pierwszy raz włączysz Habitikę po <%= time %>. Upewnij się, że wykonałeś wszystkie swoje Codzienne przed tym czasem!", "customDayStartHasChanged": "Twój początek dnia został zmieniony.", @@ -45,17 +45,16 @@ "confirmPass": "Potwierdź nowe hasło", "newUsername": "Nowa nazwa użytkownika", "dangerZone": "Strefa zagrożenia", - "resetText1": "UWAGA! Ta opcja zresetuje wiele części twojego konta. Odradzamy taki krok, jednak niektórzy gracze mogą uznać tę funkcję za przydatną po wstępnym wypróbowaniu strony.", - "resetText2": "Stracisz wszystkie poziomy, całe złoto i punkty doświadczenia. Wszystkie Twoje zadania (z wyjątkiem tych z Wyzwań) zostaną na zawsze usunięte, razem z historią ich wypełnienia. Stracisz także całe swoje wyposażenie (oprócz Mistycznych Przedmiotów dla abonentów i darmowych przedmiotów z wydarzeń), choć będziesz mógł je kupić ponownie, włączając w to przedmioty ze świątecznych edycji limitowanych (aby odkupić wyposażenie przeznaczone dla konkretnej klasy, musisz do niej przynależeć). Zachowasz swoją klasę, chowańce i wierzchowce. Być może lepiej będzie, jeśli użyjesz Kuli Odrodzenia – to bezpieczniejsze i zachowa wszystkie Twoje zadania oraz ekwipunek.", - "deleteLocalAccountText": "Jesteś pewny? Usuniesz swoje konto bez możliwości powrotu! By ponownie używać Habitica, będziesz musiał zarejestrować nowe konto. Posiadane oraz wydane diamenty nie zostaną zwrócone. Jeśli jesteś pewny, wpisz poniżej swoje hasło.", - "deleteSocialAccountText": "Jesteś pewny? Usuniesz swoje konto na zawsze - bez możliwości powrotu! By ponownie używać Habitikę, będziesz musiał zarejestrować nowe konto. Posiadane oraz wydane Klejnoty nie zostaną zwrócone. Jeśli jesteś absolutnie pewny, wpisz <%= magicWord %>w oknie poniżej.", + "resetText1": "Ostrożnie! Ta opcja zresetuje wiele części twojego konta. Odradzamy taki krok, jednak niektórzy gracze mogą uznać tę funkcję za przydatną po wstępnym wypróbowaniu strony.", + "resetText2": "Inną opcją jest użycie Kuli Odrodzenia – to zresetuje wszystko, ale zachowa wszystkie Twoje zadania oraz ekwipunek.", + "deleteLocalAccountText": "Jesteś pewny? Usuniesz swoje konto bez możliwości powrotu! By ponownie używać Habitica, będziesz musiał zarejestrować nowe konto. Posiadane oraz wydane diamenty nie zostaną zwrócone. Jeśli jesteś pewny, wpisz poniżej swoje hasło.", + "deleteSocialAccountText": "Jesteś pewny? Usuniesz swoje konto na zawsze - bez możliwości powrotu! By ponownie używać Habitikę, będziesz musiał zarejestrować nowe konto. Posiadane oraz wydane Klejnoty nie zostaną zwrócone. Jeśli jesteś absolutnie pewny, wpisz \"<%= magicWord %>\" w oknie poniżej.", "API": "API", "APIv3": "API v3", "APIText": "Skopiuj, by używać w innych aplikacjach. Traktuj jednak swój token API jak hasło i nie dziel się nim z innymi. Czasem możesz zostać poproszony o swoje ID użytkownika, ale nigdy nie publikuj swojego tokenu API tam, gdzie mogą go zobaczyć inne osoby, włączając w to Github.", "APIToken": "Token API (to Twoje hasło – zobacz ostrzeżenie powyżej!)", "showAPIToken": "Pokaż Token API", "hideAPIToken": "Ukryj Token API", - "APITokenWarning": "Jeśli potrzebujesz nowy token API (jeśli np. omyłkowo udostępniłeś go publicznie), to napisz wiadomość na e-mail <%= hrefTechAssistanceEmail %> zawierając twoje ID użytkownika oraz obecny token API. Gdy token zostanie zresetowany będziesz musiał jeszcze raz zalogować się na stronie oraz aplikacji mobilnej oraz wprowadzić nowy token do innych narzędzi Habitiki, których używasz.", "thirdPartyApps": "Aplikacje osób trzecich", "resetDo": "Zrób to, zresetuj moje konto!", "resetComplete": "Reset ukończony!", @@ -86,26 +85,26 @@ "giftedSubscriptionInfo": "<%= name %> podarował Ci <%= months %> miesięczną subskrypcję", "giftedSubscriptionFull": "Hej <%= username %>, <%= sender %> podarował Ci <%= monthCount %> miesięcy subskrypcji!", "invitedParty": "Zostałeś(-aś) zaproszony(-a) do Drużyny", - "invitedGuild": "Zostałeś(-aś) zaproszony(-a) do Gildii", + "invitedGuild": "Zostałeś(-aś) zaproszony(-a) do Grupy", "importantAnnouncements": "Przypomnienia o meldowaniu, aby wykonywać zadania i otrzymywać nagrody", "weeklyRecaps": "Podsumowanie aktywności na koncie w ostatnim tygodniu (Uwaga: z powodów wydajnościowych ta opcja jest aktualnie wyłączona, ale mamy nadzieję przywrócić ją do działania już niedługo!)", "onboarding": "Wskazówki dot. zakładania konta Habitiki", "majorUpdates": "Ważne ogłoszenia", "questStarted": "Twoje zadanie rozpoczęło się", "invitedQuest": "Zostałeś zaproszony do zadania", - "kickedGroup": "Wyrzucono z grupy", + "kickedGroup": "Usunięto z grupy", "remindersToLogin": "Przypominaj by meldować się do Habitica", "unsubscribedSuccessfully": "Poprawnie zrezygnowano z subskrypcji!", "unsubscribedTextUsers": "Poprawnie zrezygnowałeś z subskrypcji wszystkich e-maili od Habitiki. W opcji Ustawienia > > Powiadomienia możesz włączyć przesyłanie wybranych powiadomień, które chcesz otrzymywać (wymaga zalogowania).", "unsubscribedTextOthers": "Nie otrzymasz więcej żadnych e-maili od Habitica.", - "unsubscribeAllEmails": "Zaznacz by zrezygnować z subskrypcji e-maili", + "unsubscribeAllEmails": "Zrezygnuj z subskrypcji e-maili", "unsubscribeAllEmailsText": "Przez zaznaczenie tego pola poświadczam, że rozumiem że po zrezygnowaniu z subskrypcji wszystkich e-maili, Habitica nie będzie w stanie powiadamiać mnie przez e-mail o ważnych zmianach na stronie lub na moim koncie.", - "unsubscribeAllPush": "Zaznacz aby zrezygnować z subskrypcji wszystkich powiadomień", + "unsubscribeAllPush": "Zrezygnuj z subskrypcji wszystkich powiadomień", "correctlyUnsubscribedEmailType": "Poprawnie zrezygnowano z subskrypcji e-maili \"<%= emailType %>\".", "subscriptionRateText": "Okresowa opłata $<%= price %> USD co <%= months %> miesięcy", "benefits": "Korzyści", "coupon": "Kupon", - "couponText": "Czasami bierzemy udział w wydarzeniach i rozdajemy kody promocyjne na specjalne wyposażenie (np. dla zatrzymujących się przy naszym stoisku na Wondercon)", + "couponText": "Czasami bierzemy udział w wydarzeniach i rozdajemy kody promocyjne na wyjątkowe wyposażenie.", "apply": "Zastosuj", "promoCode": "Kod promocyjny", "promoCodeApplied": "Zastosowano kod promocyjny! Sprawdź swój ekwipunek", @@ -200,11 +199,42 @@ "transaction_gift_send": "Podarowano", "gemCap": "Limit Klejnotów", "nextHourglass": "Następna Klepsydra", - "nextHourglassDescription": "Abonenci otrzymują Mistyczne Klepsydry\nw pierwszych trzech dniach miesiąca.", + "nextHourglassDescription": "Abonenci otrzymują Mistyczne Klepsydry, Mistyczne Zestawy Wyposażenia oraz Klejnoty uzupełniane na Targu w ciągu pierwszych dwóch dni miesiąca", "transaction_admin_update_hourglasses": "Ustawienia administratora zaktualizowane", "timestamp": "Znacznik czasu", "note": "Uwaga", - "generalSettings": "Ustawienia główne", - "taskSettings": "Ustawienia odnośnie zadań", - "confirmCancelChanges": "Czy jesteś pewien? Stracisz niezapisane zmiany." + "generalSettings": "Ustawienia ogólne", + "taskSettings": "Ustawienia zadań", + "confirmCancelChanges": "Czy jesteś pewien? Stracisz niezapisane zmiany.", + "resetTextLocal": "Jeśli jesteś tego pewny, wpisz swoje hasło w polu poniżej.", + "APICopied": "Token API został skopiowany do schowka.", + "APITokenTitle": "Token API", + "userNameSuccess": "Nazwa użytkownika została zmieniona pomyślnie", + "siteData": "Dane witryny", + "account": "Konto", + "loginMethods": "Metody logowania", + "character": "Postać", + "siteLanguage": "Język witryny", + "showLevelUpModal": "Przy zdobywaniu nowego poziomu", + "showHatchPetModal": "Przy wykluwaniu się Chowańca", + "showRaisePetModal": "Kiedy Chowaniec wyrasta w Wierzchowca", + "showStreakModal": "Przy zdobyciu Osiągnięcia Serii", + "baileyAnnouncement": "Nowości od Bailey", + "view": "Wyświetl", + "feedbackPlaceholder": "Dodaj swoją opinię", + "downloadCSV": "Pobierz CSV", + "downloadAs": "Pobierz jako", + "yourUserData": "Twoje dane użytkownika", + "taskHistory": "Historia zadań", + "yourUserDataDisclaimer": "Tutaj możesz pobrać kopię Twojej historii zadań lub wszystkie Twoje dane użytkownika.", + "useridCopied": "Identyfikator użytkownika został skopiowany do schowka.", + "userIdTooltip": "Identyfikator użytkownika (ID) jest unikatowym numerem, który jest automatycznie generowany przez Habiticę w momencie dołączenia do gry. Jest on podobny do pseudonimu. Jednakże, w przeciwieństwie do pseudonimu, identyfikator użytkownika nie może zostać zmieniony.", + "api": "API", + "currentPass": "Obecne hasło", + "resetDetail1": "Stracisz swój cały poziom, złoto, oraz punkty doświadczenia.", + "developerMode": "Tryb Dewelopera", + "developerModeTooltip": "Habitica zapewnia tryb dewelopera w celu umożliwienia korzystania z dodatkowych funkcji współpracujących z API Habitica.", + "resetDetail2": "Zachowasz swoją obecną klasę, osiągnięcia oraz swoje chowańce i wierzchowce.", + "resetDetail3": "Wszystkie Twoje zadania (poza zadaniami z wyzwań) zostaną trwale usunięte, a Ty utracisz wszystkie dane dotyczące ich historii.", + "contentRelease": "Publikacja treści + Wydarzenia" } diff --git a/website/common/locales/pl/subscriber.json b/website/common/locales/pl/subscriber.json index 745d87f040..6fb5562fa7 100644 --- a/website/common/locales/pl/subscriber.json +++ b/website/common/locales/pl/subscriber.json @@ -2,7 +2,7 @@ "subscription": "Abonament", "subscriptions": "Abonamenty", "sendGems": "Wyślij Klejnoty", - "buyGemsGold": "Kup Klejnoty za Złoto", + "buyGemsGold": "Comiesięczne Darmowe Klejnoty", "mustSubscribeToPurchaseGems": "Musisz mieć abonament żeby kupić klejnoty za złoto", "reachedGoldToGemCapQuantity": "Ilość na która wyraziłeś zapotrzebowanie<%= quantity %> przekracza limit ilości wymian <%= convCap %> na ten miesiąc. Limit resetuje się w pierwszych trzech dniach każdego miesiąca. Dziękujemy, że nas wspierasz!", "mysteryItem": "Wyjątkowe comiesięczne przedmioty", @@ -21,7 +21,7 @@ "subGemName": "Klejnoty dla abonentów", "maxBuyGems": "Wykupiłeś/aś już wszystkie możliwe klejnoty w tym miesiącu. Kolejne są udostępniane w ciągu pierwszych trzech dni każdego miesiąca. Dziękujemy za wykupienie abonamentu!", "timeTravelers": "Podróżnicy w Czasie", - "timeTravelersPopoverNoSubMobile": "Wygląda na to, że potrzebujesz Mistycznej Klepsydry, aby otworzyć tunel czasoprzestrzenny i wezwać Tajemniczych Podróżników w Czasie.", + "timeTravelersPopoverNoSubMobile": "Abonenci comiesięcznie uzyskują niezwykłą Mistyczną Klepsydrę, której można użyć w Sklepie Tajemniczych Podróżników w Czasie!", "timeTravelersPopover": "Twoja Mistyczna Klepsydra otworzyła nasz tunel czasoprzestrzenny! Wybierz co chciałbyś, abyśmy sprowadzili z przeszłości albo przyszłości.", "mysterySetNotFound": "Tajemniczy zestaw nieodnaleziony lub jest już posiadany.", "mysteryItemIsEmpty": "Tajemnicze przedmioty są puste", @@ -91,7 +91,7 @@ "mysterySet301703": "Zestaw steampunkowego pawia", "mysterySet301704": "Zestaw steampunkowego bażanta", "mysterySetwondercon": "Konwent Wspaniałości", - "subUpdateCard": "Zmień Kartę Kredytową", + "subUpdateCard": "Edytuj Kartę Kredytową", "subUpdateTitle": "Aktualizuj", "notEnoughHourglasses": "Nie masz wystarczająco Mistycznych Klepsydr.", "petsAlreadyOwned": "Masz już tego chowańca.", @@ -114,19 +114,19 @@ "couponUsed": "Kod promocyjny został wcześniej wykorzystany.", "couponCodeRequired": "Kod promocyjny jest wymagany.", "choosePaymentMethod": "Wybierz metodę płatności", - "support": "WSPARCIE", + "support": "Wsparcie", "gemBenefitLeadin": "Co możesz kupić za Klejnoty?", "gemBenefit1": "Unikalne i modne kostiumy dla Twojego awatara.", "gemBenefit2": "Tła, by zaaklimatyzować Twoją postać w świecie Habitica!", "gemBenefit3": "Ekscytujące misje, które pozwalają zdobyć jaja z chowańcami.", "gemBenefit4": "Zresetuj Statystyki Swojego awatara i zmień jego klasę.", - "subscriptionBenefit1": "Kupiec Alexander sprzeda Ci klejnoty z marketu, każdy za 20 Dukatów!", - "subscriptionBenefit3": "Odkryj więcej przedmiotów w Habitice z podwojoną szansą na drop.", + "subscriptionBenefit1": "Zdobądź nawet do 50 Klejnotów, które można kupić za złoto na Targu i kupuj za nie Misje, Personalizacje, Chowańce i wiele więcej!", + "subscriptionBenefit3": "Codziennie znajduj dwa razy więcej Jaj, Eliksirów Wyklucia oraz Karmy, aby powiększyć swoją kolekcję Chowańców!", "subscriptionBenefit4": "Unikalne kosmetyczne przedmioty dla Twojej postaci każdego miesiąca.", "subscriptionBenefit5": "Otrzymaj ekskluzywnego zwierzaka - Purpurowego królewskiego Jackalope, kiedy zostaniesz nowym Abonamentem.", "subscriptionBenefit6": "Zdobądź Mistyczną Klepsydrę, by móc kupować w Sklepie Podróżników w Czasie!", "purchaseAll": "Kup zestaw", - "gemsRemaining": "Pozostałe Klejnoty", + "gemsRemaining": "pozostało", "notEnoughGemsToBuy": "Nie możesz kupić takiej ilości Klejnotów", "mysterySet201906": "Zestaw Uprzejmego Karpia Koi", "mysterySet201907": "Zestaw Plażowego Kumpla", @@ -143,7 +143,7 @@ "mysterySet201912": "Zestaw Polarnej Wróżki", "mysterySet201911": "Zestaw Kryształowego Czarodzieja", "mysterySet201910": "Tajemniczy Zestaw Płomieni", - "backgroundAlreadyOwned": "Już posiadasz te tło.", + "backgroundAlreadyOwned": "Już posiadasz to tło.", "mysticHourglassNeededNoSub": "Ten przedmiot wymaga Mistycznej Klepsydry. Możesz zdobywać Mistyczne Klepsydry zostając subskrybentem w Habitica.", "viewSubscriptions": "Widok abonamentów", "mysterySet202002": "Stylowy Zestaw Zakochanych", @@ -151,16 +151,16 @@ "mysterySet202004": "Zestaw Szlachetnego Motyla", "mysterySet202003": "Kolczasty Zestaw", "cancelSubAlternatives": "Jeśli masz problemy techniczne lub Habitica nie działa tak jakbyś chciał, prosimy o kontakt z nami.", - "cancelYourSubscription": "Anulować twój Abonament?", + "cancelYourSubscription": "Czujesz potrzebę anulowania Twojego Abonamentu?", "readyToResubscribe": "Czy jesteś gotowy do anulowania Abonamentu?", "needToUpdateCard": "Czy potrzebujesz zaktualizować swoją Kartę?", "subMonths": "Ilość miesięcy Abonamentu", "subscriptionStats": "Abonenckie Statystyki", - "subscriptionInactiveDate": "Twoje abonamenckie korzyści przestaną być aktywne w dniu <%= date %>", + "subscriptionInactiveDate": "Twoje abonamenckie korzyści przestaną być aktywne w dniu
<%= date %>", "subscriptionCanceled": "Twój abonament jest anulowany", "youAreSubscribed": "Jestem Abonamentem Habitica", "doubleDropCap": "Podwojenie wypadania Przedmiotów", - "monthlyMysteryItems": "Co Miesięczny Tajemniczy Przedmiot", + "monthlyMysteryItems": "Comiesięczne Ograniczone Zestawy Wyposażenia", "subscribersReceiveBenefits": "Abonenci otrzymują przydatne korzyści!", "giftASubscription": "Podaruj Abonament", "mysterySet202007": "Zestaw Wybitnej Orki", @@ -207,10 +207,41 @@ "mysterySet202210": "Zestaw Złowieszczej Żmii", "mysterySet202301": "Zestaw Lotnego Lisa", "mysterySet202211": "Zestaw Elektromanty", - "mysterySet202207": "Zestaw Galanteryjnej Galarety", + "mysterySet202207": "Zestaw Pomyślnej Meduzy", "mysterySet202202": "Turkusowy Zestaw Mysich Ogonków", "mysterySet202212": "Zestaw Śnieżnego Strażnika", "mysterySet202305": "Zestaw Spokojnego Smoka", "mysterySet202302": "Zestaw Dowcipnego Dachowca", - "mysterySet202304": "Zestaw Imponującego Imbryczka" + "mysterySet202304": "Zestaw Imponującego Imbryczka", + "mysterySet202404": "Zestaw Grzybowego Guślarza", + "mysterySet202312": "Zestaw Błękitnej Zimy", + "mysterySet202403": "Zestaw Fortunnej Legendy", + "mysterySet202401": "Zestaw Śnieżnego Czarownika", + "mysterySet202410": "Zestaw Kukurydzianego Lisa Łakoci", + "mysterySet202409": "Zestaw Heliotropowego Maga", + "mysterySet202407": "Zestaw Życzliwego Aksolotla", + "mysterySet202408": "Zestaw Zagadkowej Egidy", + "mysterySet202504": "Zestaw Nieuchwytnego Yeti", + "mysterySet202402": "Zestaw Goździkowego Raju", + "mysterySet202412": "Zestaw Cukierkowego Króliczka", + "mysterySet202503": "Zestaw Jadeitowego Dziwotwora", + "mysterySet202501": "Zestaw Lodożercy", + "mysterySet202308": "Zestaw Purpurowego Protagonisty", + "mysterySet202502": "Zestaw Serdecznego Arlekina", + "mysterySet202405": "Zestaw Pozłacanego Smoka", + "mysterySet202406": "Zestaw Upiornego Pirata", + "mysterySet202411": "Zestaw Najeżonego Awanturnika", + "mysterySet202506": "Zestaw Słonecznego Blasku", + "mysterySet202505": "Zestaw Podniebnego Pazia", + "mysterySet202311": "Zestaw Wszechwidzącego Zaklinacza", + "mysterySet202306": "Zestaw Tęczowej Balangi", + "mysterySet202307": "Zestaw Groźnego Krakena", + "mysterySet202309": "Zestaw Kolosalnej Kometowej Ćmy", + "mysterySet202310": "Zestaw Świetlistego Widma", + "subscribeTo": "Subskrybuj", + "monthlyGemsLabel": "Comiesięczne Klejnoty", + "mysterySet202507": "Zestaw śmiałego Łyżwiarza", + "monthlyMysticHourglass": "Comiesięczna Mistyczna Klepsydra", + "subscribeAgainContinueHourglasses": "Odnów Abonament, aby nadal otrzymywać Mistyczne Klepsydry", + "sendAGift": "Wyślij Prezent" } diff --git a/website/common/locales/pt/achievements.json b/website/common/locales/pt/achievements.json index b829596e4f..2af45ad500 100644 --- a/website/common/locales/pt/achievements.json +++ b/website/common/locales/pt/achievements.json @@ -1,7 +1,7 @@ { - "achievement": "Conquista", - "onwards": "Em frente!", - "levelup": "Ao cumprir seus objetivos na vida real, você subiu de nível e está totalmente curado!", + "achievement": "Proeza", + "onwards": "Avante!", + "levelup": "Por ter alcançado os seus objectivos na vida real, subiu de nível e está agora plenamente curado!", "reachedLevel": "Alcançou o nível <%= level %>", "achievementLostMasterclasser": "Completista de Missões: Série de Mestre de Classes", "achievementLostMasterclasserText": "Completou as dezesseis missões na série de Missões de Mestre de Classes e resolveu o mistério do Mestre de Classes Perdido!", @@ -74,7 +74,7 @@ "achievementPrimedForPainting": "Pronto a Pintar", "achievementKickstarter2019Text": "Apoiou o Projeto Pin do Kickstarter de 2019", "achievementKickstarter2019": "Apoiante do Pin Kickstarter", - "yourRewards": "Suas Recompensas", + "yourRewards": "As suas recompensas", "achievementUndeadUndertaker": "Cangalheiro Morto-vivo", "achievementFreshwaterFriendsModalText": "Você completou as missões dos Mascotes Salamandra, Sapo e Hipopótamo!", "achievementFreshwaterFriendsText": "Completou as missões dos Mascotes Salamandra, Sapo e Hipopótamo.", diff --git a/website/common/locales/pt/front.json b/website/common/locales/pt/front.json index 2926b8be07..041fa1d969 100644 --- a/website/common/locales/pt/front.json +++ b/website/common/locales/pt/front.json @@ -133,7 +133,7 @@ "invalidReqParams": "Parâmetros requeridos inválidos.", "memberIdRequired": "\"member\" precisa ser um UUID válido.", "heroIdRequired": "\"heroId\" precisa ser um UUID válido.", - "cannotFulfillReq": "Sua solicitação não pode ser atendida. Envie um e-mail para admin@habitica.com se isto persistir.", + "cannotFulfillReq": "Sua solicitação não pode ser atendida. Envie um e-mail para admin@habitica.com se isto persistir.", "modelNotFound": "Este modelo não existe.", "signUpWithSocial": "Inscrever-se com <%= social %>", "loginWithSocial": "Iniciar sessão com <%= social %>", diff --git a/website/common/locales/pt/gear.json b/website/common/locales/pt/gear.json index 4fc75f8e30..43f2c8038f 100644 --- a/website/common/locales/pt/gear.json +++ b/website/common/locales/pt/gear.json @@ -5,7 +5,7 @@ "groupBy": "Agrupar por <%= type %>", "classBonus": "(Este item coincide com a sua classe por isso recebe um multiplicador adicional de 1.5 às características)", "classArmor": "Armadura de Classe", - "featuredset": "Conjunto promovido <%= name %>", + "featuredset": "Conjunto exibido: <%= name %>", "mysterySets": "Conjuntos Mistério", "gearNotOwned": "Você não possui este ítem.", "noGearItemsOfType": "Você não possui qualquer um destes items.", @@ -52,7 +52,7 @@ "weaponWizard0Text": "Cajado de Aprendiz", "weaponWizard0Notes": "Cajado para praticar. Não concede benefícios.", "weaponWizard1Text": "Cajado de Madeira", - "weaponWizard1Notes": "Implementação básica de uma madeira entalhada. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>.", + "weaponWizard1Notes": "Implementação básica de uma madeira entalhada. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>.", "weaponWizard2Text": "Cajado de Joias", "weaponWizard2Notes": "Concentra poder através de uma pedra preciosas. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>.", "weaponWizard3Text": "Cajado de Ferro", @@ -106,7 +106,7 @@ "weaponSpecialSkeletonKeyText": "Chave Esqueleto", "weaponSpecialSkeletonKeyNotes": "Os melhores Ladrões Furtivos possuem uma chave que pode abrir qualquer fechadura! Aumenta Constituição em <%= con %>.", "weaponSpecialNomadsScimitarText": "Cimitarra do Nómada", - "weaponSpecialNomadsScimitarNotes": "A lâmina curva desta Cimitarra é perfeita para atacar Tarefas quando no topo de uma montaria! Aumenta Inteligência em <%= int %>.", + "weaponSpecialNomadsScimitarNotes": "A lâmina curva desta Cimitarra é perfeita para atacar Tarefas quando no topo de uma montaria! Aumenta Inteligência em <%= int %>.", "weaponSpecialFencingFoilText": "Florete de Esgrima", "weaponSpecialFencingFoilNotes": "Caso alguém ouse desafiar a sua honra, estará pronto com este belo florete! Aumenta Força em <%= str %>.", "weaponSpecialTachiText": "Tachi", @@ -150,11 +150,11 @@ "weaponSpecialWinter2015WarriorText": "Espada de Goma", "weaponSpecialWinter2015WarriorNotes": "Esta deliciosa espada provavelmente atrai monstros... mas você está pronto para o desafio! Aumenta Força em <%= str %> pontos. Equipamento Edição Limitada de Inverno 2014-2015.", "weaponSpecialWinter2015MageText": "Cajado de Inverno Iluminado", - "weaponSpecialWinter2015MageNotes": "A luz desse cajado de cristal enche corações de alegria. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>. Equipamento Edição Limitada de Inverno 2014-2015.", + "weaponSpecialWinter2015MageNotes": "A luz desse cajado de cristal enche corações de alegria. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>. Equipamento Edição Limitada de Inverno 2014-2015.", "weaponSpecialWinter2015HealerText": "Cetro Alentador", "weaponSpecialWinter2015HealerNotes": "Este cetro relaxa músculos doloridos e alivia o estresse. Aumenta Inteligência em <%= int %>. Equipamento Edição Limitada de Inverno 2014-2015.", "weaponSpecialSpring2015RogueText": "Guinchado Explosivo", - "weaponSpecialSpring2015RogueNotes": "Não deixe o som te enganar - esses explosivos são poderosos. Aumenta Força em <%= str %>. Equipamento Edição Limitada de Primavera 2015.", + "weaponSpecialSpring2015RogueNotes": "Não deixe o som te enganar - esses explosivos são poderosos. Aumenta Força em <%= str %>. Equipamento Edição Limitada de Primavera 2015.", "weaponSpecialSpring2015WarriorText": "Clava de Osso", "weaponSpecialSpring2015WarriorNotes": "É uma legítima clava de osso para cachorrinhos super ferozes e definitivamente não um brinquedo de mastigar que a Feiticeira Sazonal te deu porque quem é um bom garoto! Queeem é um bom garoto? Você!!! Você é um bom garoto!!! Aumenta Força em <%= str %>. Equipamento Edição Limitada de Primavera 2015.", "weaponSpecialSpring2015MageText": "Varinha do Mago", @@ -210,7 +210,7 @@ "weaponSpecialFall2016HealerText": "Serpente Venenosa", "weaponSpecialFall2016HealerNotes": "Uma mordia machuca, e outra mordida recupera. Aumenta inteligência em <%= int %>. Edição limitada 2016 Equipamento de Outono.", "weaponSpecialWinter2017RogueText": "Machado de Gelo", - "weaponSpecialWinter2017RogueNotes": "Este machado é ótimo para ataque, defesa e trepar gelo! Aumenta a Força em <%= str %>. Edição Limitada do Equipamento de Inverno 2016-2017.", + "weaponSpecialWinter2017RogueNotes": "Este machado é ótimo para ataque, defesa e escalada no gelo! Aumenta a Força em <%= str %>. Edição Limitada do Equipamento de Inverno 2016-2017.", "weaponSpecialWinter2017WarriorText": "Cajado da Força", "weaponSpecialWinter2017WarriorNotes": "Conquiste os seus objetivos batendo-lhes com este poderoso cajado! Aumenta a Forca em <%= str %>. Equipamento de Inverno da Edição Limitada 2016-2017.", "weaponSpecialWinter2017MageText": "Cajado de Cristal do Lobo de Inverno", @@ -352,7 +352,7 @@ "weaponArmoireWeaversCombText": "Pente de Tecelão", "weaponArmoireWeaversCombNotes": "Use este pente para agrupar os seus fios cruzados de forma a tecer um tecido forte. Aumenta Percepção em <%= per %> e Força em <%= str %>. Armário Encantado: Conjunto de Tecelão (Item 2 de 3).", "weaponArmoireLamplighterText": "Acende-lâmpadas", - "weaponArmoireLamplighterNotes": "Este pau longo tem um pavío numa das pontas para acender lâmpadas e um gancho na outra para as apagar. Aumenta Constuição por <%= con %> e Percepção por <%= per %>. Armário Encantado: Conjunto do Acendedor de Lâmpadas (Item 1 de 4)", + "weaponArmoireLamplighterNotes": "Este pau longo tem um pavío em uma das pontas para acender lâmpadas e um gancho na outra para as apagar. Aumenta Constituição por <%= con %> e Percepção por <%= per %>. Armário Encantado: Conjunto do Acendedor de Lâmpadas (Item 1 de 4).", "weaponArmoireCoachDriversWhipText": "Chicote de Cocheiro", "weaponArmoireCoachDriversWhipNotes": "Os seus corceis sabem o que estão a fazer, por isso este chicote é só para espetáculo (e pelo som bacano do estalar!). Aumenta Inteligência em <%= int %> e Força em <%= str %>. Armário Encantado: Conjunto do Condutor de Carruagem (Item 3 de 3).", "weaponArmoireScepterOfDiamondsText": "Ceptro de Ouros", @@ -372,7 +372,7 @@ "weaponArmoireSpearOfSpadesText": "Lança de Espadas", "weaponArmoireSpearOfSpadesNotes": "Esta lança de cavaleiro é perfeita para atacar os seus Hábitos e Tarefas Diárias mais vermelhas. Aumenta Constituição em <%= con %>. Armário Encantado: Conjunto de Ás de Espadas (Item 3 de 3).", "weaponArmoireArcaneScrollText": "Pergaminho Arcano", - "weaponArmoireArcaneScrollNotes": "Esta lista de Afazeres antiga está cheia de estranhos simbolos e feitiços de uma era esquecida. Aumenta Inteligência em <%= int %>. Armário Encantado: Conjunto de Escriba (Item 3 de 3).", + "weaponArmoireArcaneScrollNotes": "Esta antiga lista de Afazeres está cheia de simbolos estranhos e feitiços de uma era esquecida. Aumenta Inteligência em <%= int %>. Armário Encantado: Conjunto do Escriba (Item 3 de 3).", "armor": "armadura", "armorCapitalized": "Armadura", "armorBase0Text": "Roupas Modestas", @@ -471,8 +471,8 @@ "armorSpecialBirthday2017Notes": "Feliz Aniversário, Habitica! Vista esta Túnicas Caprichosa de Festa para celebrar este dia maravilhoso. Não confere benefícios.", "armorSpecialBirthday2018Text": "Manto de Festa Fantasioso", "armorSpecialBirthday2018Notes": "Feliz aniversário, Habitica! Usa este Manto de Festa Fantasioso para celebrar este dia maravilhoso. Não confere qualquer benefício.", - "armorSpecialBirthday2019Text": "Outlandish Party Robes", - "armorSpecialBirthday2019Notes": "Happy Birthday, Habitica! Wear these Outlandish Party Robes to celebrate this wonderful day. Confers no benefit.", + "armorSpecialBirthday2019Text": "Túnicas de Festa Excêntricas", + "armorSpecialBirthday2019Notes": "Feliz Aniversário, Habitica! Vista estas Túnicas de Festa Excêntricas para celebrar este dia maravilhoso. Não confere benefícios.", "armorSpecialGaymerxText": "Armadura do Guerreiro Arco-Íris", "armorSpecialGaymerxNotes": "Para celebrar a Conferência GaymerX, esta armadura especial foi decorada com uma colorida e radiante estampa arco-íris. A GaymerX é uma conferência de games que celebra a comunidade LGTBQ e jogos, sendo aberta para todo mundo.", "armorSpecialSpringRogueText": "Traje Elegante de Gato", @@ -540,7 +540,7 @@ "armorSpecialWinter2016HealerText": "Manto de Fadas festivo", "armorSpecialWinter2016HealerNotes": "Fadas Festivas enrolam suas asas corporais em torno de si mesmas para proteção ao mesmo tempo em que usam as asas de duas cabeças para pegar ventos contrários e voar por Habitica a velocidades de até 100 mph, entregando presentes e pulverizando todos com confetes. Que divertido. Aumenta Constituição em <%= con %>. Equipamento de Inverno da Edição Limitada 2015-2016.", "armorSpecialSpring2016RogueText": "Traje Canino de Camo", - "armorSpecialSpring2016RogueNotes": "Um pequeno filhote sabe escolher a aparência brilhante para dissimulação quando tudo é verde e vibrante. Aumenta a Percepção em <%= per %>. Edição Limitada 2016 Equipamento de Primavera.", + "armorSpecialSpring2016RogueNotes": "Um pequeno filhote sabe escolher uma aparência mais brilhante para dissimulação quando tudo é verde e vibrante. Aumenta a Percepção em <%= per %>. Edição Limitada 2016 Equipamento de Primavera.", "armorSpecialSpring2016WarriorText": "Armadura Poderosa", "armorSpecialSpring2016WarriorNotes": "Embora você seja pequeno, você é feroz! Aumenta constituição em <%= con %>. Equipamento da Edição Limitada de Primavera 2016.", "armorSpecialSpring2016MageText": "Grande Vestido de Malkin", @@ -791,10 +791,10 @@ "armorArmoireCoachDriverLiveryNotes": "Este casaco pesado protegê-lo-á do tempo enquanto conduz. Mais, também o faz parecer janota! Aumenta Força em <%= str %>. Armário Encantado: Conjunto de Condutor de Carruagem (Item 1 de 3).", "armorArmoireRobeOfDiamondsText": "Manto de Diamantes", "armorArmoireRobeOfDiamondsNotes": "Este manto real pode o fazer parecer nobre, mas irão permitir que veja a nobreza no interior de outras pessoas. Aumenta Perceção em <%= per %>. Armário Encantado: Conjunto do Rei de Diamantes (Item 1 de 4).", - "armorArmoireFlutteryFrockText": "Fluttery Frock", - "armorArmoireFlutteryFrockNotes": "A light and airy gown with a wide skirt the butterflies might mistake for a giant blossom! Increases Constitution, Perception, and Strength by <%= attrs %> each. Enchanted Armoire: Fluttery Frock Set (Item 1 of 4).", + "armorArmoireFlutteryFrockText": "Vestido Esvoaçante", + "armorArmoireFlutteryFrockNotes": "Um leve e delicado vestido com uma larga saia que borboletas podem confundir com uma flor gigante! Aumenta Constituição, Percepção e Força em <%= attrs %> cada. Baú Encantado: Conjunto Vestido Esvoaçante (Item 1 de 4).", "armorArmoireCobblersCoverallsText": "Macacão de Sapateiro", - "armorArmoireCobblersCoverallsNotes": "These sturdy coveralls have lots of pockets for tools, leather scraps, and other useful items! Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Cobbler Set (Item 1 of 3).", + "armorArmoireCobblersCoverallsNotes": "Estes macacões robustos possuem muitos bolsos para ferramentas, retalhos de couro e outros itens úteis! Aumenta Percepção e Força em <%= attrs %> cada. Baú Encantado: Conjunto do Sapateiro (Item 1 de 3).", "armorArmoireGlassblowersCoverallsText": "Macacão de Vidraceiro", "armorArmoireGlassblowersCoverallsNotes": "Este macacão irá providenciar protecção enquanto cria obras de arte com vidro quete derretido. Aumenta Constituição em <%= con %>. Armário Encantado: Conjunto de Vidraceiro (Item 2 de 4).", "armorArmoireBluePartyDressText": "Vestido de Festa Azul", @@ -813,8 +813,8 @@ "armorArmoireSoftGreenSuitNotes": "Verde é a cor mais refrescante! Ideal para descansar esses olhos fatigados... mmm ou mesmo bater uma soneca... Aumenta Constituição e Inteligência em <%= attrs %> cada. Armário Encantado: Conjunto de Pijama Verde (Item 2 de 3).", "armorArmoireSoftRedSuitText": "Fato Vermelho Suave", "armorArmoireSoftRedSuitNotes": "O Vermelho é uma cor tão fortalecedora. Se precisa de acordar com energia e cedo, este fato pode ser um pijama perfeito... Aumenta Inteligência em <%= int %> e Força em <%= str %>. Armário Encantado: Conjunto de Pijama Vermelho (Item 2 de 3).", - "armorArmoireScribesRobeText": "Scribe's Robes", - "armorArmoireScribesRobeNotes": "These velvety robes are woven with inspirational and motivational magic. Increases Perception and Intelligence by <%= attrs %> each. Enchanted Armoire: Scribe Set (Item 1 of 3).", + "armorArmoireScribesRobeText": "Túnicas do Escriba", + "armorArmoireScribesRobeNotes": "Estas túnicas aveludadas são tecidas com magia inspiracional e motivacional. Aumenta Percepção e Inteligência em <%= attrs %> cada. Baú Encantado: Conjunto do Escriba (Item 1 de 3).", "headgear": "elmo", "headgearCapitalized": "Capacete", "headBase0Text": "Nenhum equipamento de cabeça", @@ -862,11 +862,11 @@ "headSpecial0Text": "Elmo Sombrio", "headSpecial0Notes": "Sangue e cinzas, lava e obsidiana dão aparência e poder para esse capacete. Aumenta Inteligência em <%= int %>.", "headSpecial1Text": "Elmo de Cristal", - "headSpecial1Notes": "The favored crown of those who lead by example. Increases all Stats by <%= attrs %>.", + "headSpecial1Notes": "A coroa favorita daqueles que lideram pelo exemplo. Aumenta todas as Estatísticas em <%= attrs %>.", "headSpecial2Text": "Elmo Inominável", "headSpecial2Notes": "Um testamento para aqueles que deram de si mesmos sem pedir nada em troca. Aumenta Inteligência e Força em <%= attrs %> cada.", "headSpecialTakeThisText": "Elmo Take This", - "headSpecialTakeThisNotes": "This helm was earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.", + "headSpecialTakeThisNotes": "Este elmo foi adquirido por participar em um Desafio patrocinado feito por Take This. Parabéns! Aumenta todas as Estatísticas em <%= attrs %>.", "headSpecialFireCoralCircletText": "Tiara do Coral de Fogo", "headSpecialFireCoralCircletNotes": "Esta Tiara, projetada pelos grandes alquimistas de Habitica, permite que você respire na água e mergulhe em busca de tesouros! Aumenta Percepção em <%= per %>.", "headSpecialPyromancersTurbanText": "Turbante do Pyromancer", @@ -895,8 +895,8 @@ "headSpecialNamingDay2017Notes": "Feliz Dia de Nome! Use este feroz e empenado elmo para celebrar Habitica. Não concede benefícios.", "headSpecialTurkeyHelmBaseText": "Elmo de Perú", "headSpecialTurkeyHelmBaseNotes": "O seu visual de Dia de Perú irá estar completo quanto envergar este elmo com bico! Não concede benefícios.", - "headSpecialTurkeyHelmGildedText": "Gilded Turkey Helm", - "headSpecialTurkeyHelmGildedNotes": "Gobble gobble! Bling bling! Confers no benefit.", + "headSpecialTurkeyHelmGildedText": "Elmo de Peru Dourado", + "headSpecialTurkeyHelmGildedNotes": "Glu-glu! Plim-plim! Não confere benefícios.", "headSpecialNyeText": "Chapéu Festivo Absurdo", "headSpecialNyeNotes": "Você recebeu um Absurdo Chapéu Festivo!! Use-o com orgulho enquanto comemora o Ano Novo! Não concede benefícios.", "headSpecialYetiText": "Elmo de Domador de Ieti", @@ -972,7 +972,7 @@ "headSpecialWinter2016WarriorText": "Boné do Boneco de Neve", "headSpecialWinter2016WarriorNotes": "Brr! Este elmo potente é realmente poderoso... até que ele derreta. Aumenta a Força em <%= str %>. Equipamento de Inverno da Edição Limitada 2015-2016.", "headSpecialWinter2016MageText": "Capa de Snowboard", - "headSpecialWinter2016MageNotes": "Mantem a neve longe dos seus olhos enquanto você conjura magias. Aumenta a Percepção em <%= per %>. Edição limitada equipamento do inverno 2015-2016.", + "headSpecialWinter2016MageNotes": "Mantem a neve longe dos seus olhos enquanto você conjura magias. Aumenta a Percepção em <%= per %>. Edição limitada equipamento do inverno 2015-2016.", "headSpecialWinter2016HealerText": "Capacete da Fada Alada", "headSpecialWinter2016HealerNotes": "Estas asas vibram tão rapidamente que parecem um borrão! Aumenta a Inteligência em <%= int %>. Equipamento de Inverno da Edição Limitada 2015-2016.", "headSpecialSpring2016RogueText": "Máscara do Cãozinho Bom", @@ -990,7 +990,7 @@ "headSpecialSummer2016MageText": "Chapéu do Esguicho", "headSpecialSummer2016MageNotes": "Água mágica constantemente jorra desse chápeu. Aumenta Percepção por <%= per %>. Edição Limitada 2016 Equipamento de Verão.", "headSpecialSummer2016HealerText": "Capacete de Cavalo-Marinho", - "headSpecialSummer2016HealerNotes": "Esse elmo indica que o usuário foi treinado por cavalos marinhos mágicos curadores da procrastinação. Aumenta Inteligência em <%= int %>. Edição Limitada 2016 Equipamento de Verão.", + "headSpecialSummer2016HealerNotes": "Este elmo indica que o usuário foi treinado por cavalos marinhos mágicos curadores da Procrastinação. Aumenta Inteligência em <%= int %>. Edição Limitada 2016 Equipamento de Verão.", "headSpecialFall2016RogueText": "Elmo da Viúva Negra", "headSpecialFall2016RogueNotes": "As pernas nesse elmo estão constantemente crispando-se. Aumenta a Percepção de <%= per %>. Edição Limitada 2016 Equipamento de Outono.", "headSpecialFall2016WarriorText": "Elmo de Casca Retorcida", @@ -1034,9 +1034,9 @@ "headSpecialFall2017HealerText": "Elmo de Casa Assombrada", "headSpecialFall2017HealerNotes": "Convide espíritos assustadores e criaturas amigáveis a procurar os seus poderes curativos neste elmo! Aumenta Inteligência em <%= int %>. Equipamento de Edição Limitada do Outono de 2017.", "headSpecialNye2017Text": "Chapéu de Festa Fino", - "headSpecialNye2017Notes": "You've received a Fanciful Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.", + "headSpecialNye2017Notes": "Você recebeu um Chapéu de Festa Extravagante! Vista-o com orgulho enquanto ressoa no Ano Novo! Não confere benefícios.", "headSpecialWinter2018RogueText": "Elmo de Rena", - "headSpecialWinter2018RogueNotes": "The perfect holiday disguise, with a built-in headlight! Increases Perception by <%= per %>. Limited Edition 2017-2018 Winter Gear.", + "headSpecialWinter2018RogueNotes": "O disfarce de Natal perfeito, com um farol embutido! Aumenta Percepção em <%= per %>. Edição Limitada 2017-2018 Equipamento de Inverno.", "headSpecialWinter2018WarriorText": "Elmo de Caixa de Presente", "headSpecialWinter2018WarriorNotes": "This jaunty box top and bow are not only festive, but quite sturdy. Increases Strength by <%= str %>. Limited Edition 2017-2018 Winter Gear.", "headSpecialWinter2018MageText": "Cartola Brilhante", @@ -1109,7 +1109,7 @@ "headMystery201601Notes": "Continue focado, ó bravo campeão! Não concede benefícios. Item de Assinante Janeiro 2016.", "headMystery201602Text": "Capuz do Quebra-Corações", "headMystery201602Notes": "Proteja sua identidade de todos os seus admiradores. Não confere benefícios. Item de assinante de Fevereiro 2016.", - "headMystery201603Text": "Chapéu da sorte", + "headMystery201603Text": "Chapéu da Sorte", "headMystery201603Notes": "Essa cartola é um amuleto da sorte mágico. Não concede benefícios. Item do Assinante de Março 2016.", "headMystery201604Text": "Coroa de Flores", "headMystery201604Notes": "Essas flores entrelaçadas fazem um capacete surpreendentemente forte! Não confere benefício. Item de Assinante de Abril de 2016.", @@ -1174,7 +1174,7 @@ "headArmoireRedHairbowText": "Laço de Cabelo Vermelho", "headArmoireRedHairbowNotes": "Torne-se forte, duro e inteligente enquanto utilizar este Laço de Cabelo Vermelho! Aumenta Força em <%= str %>, Constituição em <%= con %> e Inteligencia em <%= int %>. Armário Encantado: Conjunto do Laço de Cabelo Vermelho (Item 1 de 2).", "headArmoireVioletFloppyHatText": "Chapéu Desajeitado Violeta", - "headArmoireVioletFloppyHatNotes": "Muitas magias foram costuradas neste simples chapéu, dando a ele uma agradável cor violeta. Aumenta Percepção em <%= per %>, Inteligência em <%= int %> e Constituição em <%= con %>. Armário Encantado: Conjunto de Roupas Violetas para Ficar em Casa (Item 1 de 3)", + "headArmoireVioletFloppyHatNotes": "Muitas magias foram costuradas neste simples chapéu, dando a ele uma agradável cor violeta. Aumenta Percepção em <%= per %>, Inteligência em <%= int %> e Constituição em <%= con %>. Armário Encantado: Conjunto de Roupas Violeta para Ficar em Casa (Item 1 de 3).", "headArmoireGladiatorHelmText": "Elmo de Gladiador", "headArmoireGladiatorHelmNotes": "Para ser um gladiador você não pode ser só forte... mas também astuto. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>. Armário Encantado: Conjunto de Gladiador (item 1 de 3).", "headArmoireRancherHatText": "Chapéu de Rancheiro", @@ -1335,7 +1335,7 @@ "shieldSpecialSpring2015WarriorText": "Prato Pires", "shieldSpecialSpring2015WarriorNotes": "Jogue nos seus inimigos... ou só segure, porque vai se encher de ração gostosa na hora da janta. Aumenta Constituição em <%= con %>. Equipamento Edição Limitada de Primavera 2015.", "shieldSpecialSpring2015HealerText": "Travesseiro Estampado", - "shieldSpecialSpring2015HealerNotes": "Você pode descansar a cabeça neste travesseiro macio, ou você pode lutar contra ele com suas temíveis garras. Rawr! Aumenta Constituição em <%= con %>. Equipamento Edição Limitada de Primavera 2015.", + "shieldSpecialSpring2015HealerNotes": "Você pode descansar a cabeça neste travesseiro macio, ou você pode lutar contra ele com suas temíveis garras. Rawr! Aumenta Constituição em <%= con %>. Equipamento Edição Limitada de Primavera 2015.", "shieldSpecialSummer2015WarriorText": "Escudo de Peixe-Sol", "shieldSpecialSummer2015WarriorNotes": "Forjado a partir de metal do mar profundo pelos artesãos de Dilatória, este escudo brilha como o sol e o mar. Aumenta Constituição em <%= con %>. Edição Limitada Conjunto de Verão 2015.", "shieldSpecialSummer2015HealerText": "Escudo Robusto", @@ -1355,7 +1355,7 @@ "shieldSpecialSummer2016WarriorText": "Dente de Tubarão", "shieldSpecialSummer2016WarriorNotes": "Morda essas tarefas difíceiso com esse escudo de dente! Aumenta Constituição em <%= con %>. Edição Limitada Equipamento de Verão 2016.", "shieldSpecialSummer2016HealerText": "Escudo de Estrela do Mar", - "shieldSpecialSummer2016HealerNotes": "As vezes erroneamente chamado de Escudo do Peixe-Estrela. Aumenta Constituição em <%= con %>. Edição Limitada 2016 Equipamento de Verão.", + "shieldSpecialSummer2016HealerNotes": "As vezes erroneamente chamado de Escudo do Peixe-Estrela. Aumenta a Constituição em <%= con %>. Edição Limitada 2016 Equipamento de Verão.", "shieldSpecialFall2016WarriorText": "Raízes Defensoras", "shieldSpecialFall2016WarriorNotes": "Defenda-se contra as Tarefas Diárias com essas raízes contorcidas! Aumenta Constituição de <%= con %>. Edição Limitada 2016 Equipamento de Outono.", "shieldSpecialFall2016HealerText": "Escudo de Górgona", @@ -1431,7 +1431,7 @@ "shieldArmoireRamHornShieldText": "Escudo de Corno de Carneiro", "shieldArmoireRamHornShieldNotes": "Ram this shield into opposing Dailies! Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Ram Barbarian Set (Item 3 of 3).", "shieldArmoireRedRoseText": "Rosa Vermelha", - "shieldArmoireRedRoseNotes": "Esta rosa de cor vermelho profundo tem um cheiro encantador. Irá também afiar o seu entendimento de tudo. Aumenta Perceção em <%= per %>. Armário Encantado: Item Independente.", + "shieldArmoireRedRoseNotes": "Esta rosa de cor vermelho profundo tem um cheiro encantador. Irá também afiar o seu entendimento de tudo. Aumenta a Percepção em <%= per %>. Armário Encantado: Item Independente.", "shieldArmoireMushroomDruidShieldText": "Escudo de Druida de Cogumelo", "shieldArmoireMushroomDruidShieldNotes": "Embora seja feito a partir de um cogumelo, não existe nada de mole neste escudo rijo! Aumenta Constituição em <%= con %> e Força em <%= str %>. Armário Encantado: Conjunto de Druida de Cogumelo (Item 3 de 3).", "shieldArmoireFestivalParasolText": "Guarda-sol de Festival", @@ -1445,7 +1445,7 @@ "shieldArmoireAntiProcrastinationShieldText": "Escudo Anti Procrastinação", "shieldArmoireAntiProcrastinationShieldNotes": "Este escudo de aço forte irá ajudá-lo a bloquear distrações quando elas se aproximam! Aumenta Constituição em <%= con %>. Armário Encantado: Conjunto Anti Procrastinação (Item 3 de 3).", "shieldArmoireHorseshoeText": "Ferradura", - "shieldArmoireHorseshoeNotes": "Ajude a proteger os pés das suas montadas com cascos com este sapato de ferro. Aumenta Constituição, Percepção e Força em <%= attrs %> cada. Armário Encantado: Conjunto de Ferreiro (Item 3 de 3)", + "shieldArmoireHorseshoeNotes": "Ajude a proteger os pés de suas montarias com cascos com este sapato de ferro. Aumenta Constituição, Percepção e Força em <%= attrs %> cada. Armário Encantado: Conjunto de Ferreiro (Item 3 de 3).", "shieldArmoireHandmadeCandlestickText": "Vela feita à Mão", "shieldArmoireHandmadeCandlestickNotes": "Os seus artigos de cera de qualidade providenciam luz e calor a Habiticanos gratos! Aumenta Força em <%= str %>. Armário Encantado: Conjunto do Fabricante de Velas (Item 3 de 3).", "shieldArmoireWeaversShuttleText": "Lançadeira do Tecelão", @@ -1575,11 +1575,11 @@ "bodyMystery201901Notes": "These shimmering pauldrons are strong, but will rest on your shoulders as weightlessly as a ray of dancing light. Confers no benefit. January 2019 Subscriber Item.", "bodyArmoireCozyScarfText": "Cachecol Comfortável", "bodyArmoireCozyScarfNotes": "Este cachecol fino irá mantê-lo quente enquanto procede com os seus negócios invernais. Aumenta Constituição em Percepção em <%= attrs %> cada. Armário Encantado: Conjunto do Acendedor de Lâmpadas (Item 4 de 4).", - "headAccessory": "acessório para cabeça", + "headAccessory": "Acessório para Cabeça", "accessories": "Acessórios", "animalEars": "Orelhas de Animais", "headAccessoryBase0Text": "Sem Acessório de Cabeça", - "headAccessoryBase0Notes": "Sem Acessório de Cabeça", + "headAccessoryBase0Notes": "Sem Acessório de Cabeça.", "headAccessorySpecialSpringRogueText": "Orelhas Roxas de Gato", "headAccessorySpecialSpringRogueNotes": "Essas orelhas felinas se contraem para detectar ameaças iminentes. Não concede benefícios. Equipamento Edição Limitada de Primavera 2014.", "headAccessorySpecialSpringWarriorText": "Orelhas Verdes de Coelho", @@ -1771,7 +1771,7 @@ "weaponSpecialSummer2020MageText": "Remo Poderoso", "weaponSpecialSpring2020MageNotes": "Eles continuam caindo na sua cabeça! Mas você nunca vai pará-los apenas reclamando. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>. Edição Limitada 2020 Equipamento de Primavera.", "weaponSpecialSummer2020WarriorText": "Anzol", - "weaponSpecialSpring2020HealerText": "Cajado de Lírio-Espada", + "weaponSpecialSpring2020HealerText": "Cajado Lírio-Espada", "weaponSpecialSpring2020HealerNotes": "Uma íris é bela, mas as folhas são como espadas... não seja enganado pelas flores, este cajado é duro como aço! Aumenta Inteligencia por <%= int %>. Edição Limitada 2020 Equipamento de Primavera.", "weaponSpecialSummer2020RogueNotes": "Seus inimigos não veem você se aproximar, mas suas Presas são inescapáveis! Aumenta Força em <%= str %>. Edição Limitada 2020 Equipamento de Verão.", "weaponSpecialSummer2020WarriorNotes": "Se os seus oponentes zombarem da sua escolha de arma, não morda a isca. Esse gancho maneiro fisga de verdade! Aumenta Força por <%=str%>. Edição Limitada 2020 Equipamento de Verão.", @@ -1793,10 +1793,10 @@ "weaponSpecialSummer2021RogueText": "Tentáculos de Anémona", "weaponSpecialWinter2021WarriorNotes": "Podes pescar um dos grandes com isto! Aumenta a Força em <%= str %>. Edição Limitada de Equipamento de Inverno de 2020-2021.", "weaponSpecialSpring2021HealerNotes": "A casca e as folhas deste enxerto são conhecidos pela sua habilidade de aliviar a dor. Ou então podes plantá-lo e vê-lo crescer! Aumenta Inteligência em <%= int %>. Edição Limitada de Equipamento de Primavera de 2021.", - "weaponSpecialSpring2021RogueNotes": "Sabes o que é melhor do que ter uma flor em cada mão? Ter DUAS flores em cada mão! Aumenta a Força em <%= str %>. Edição Limitada de Equipamento de Primavera de 2021", + "weaponSpecialSpring2021RogueNotes": "Sabes o que é melhor do que ter uma flor em cada mão? Ter DUAS flores em cada mão! Aumenta a Força em <%= str %>. Edição Limitada de Equipamento de Primavera de 2021.", "weaponSpecialWinter2021MageNotes": "Esta arma poderosa é definitivamente mais que uma fase. Dirige a tua energia, foca-te no fluxo de um mês, e estuda o tempo e o espaço. Aumenta Inteligência em <%= int %> e Perceção em <%= per %>.Edição Limitada de Equipamento de Invermo de 2020-2021.", "weaponSpecialSpring2021WarriorText": "Martelo do Sol", - "weaponSpecialSpring2021RogueText": "Flores Gémeas", + "weaponSpecialSpring2021RogueText": "Florescência de Flores Gêmeas", "weaponSpecialSpring2021MageText": "Pluma do Cisne", "headSpecialNye2020Notes": "Recebeste um Chapéu de Festa Extravagante! Usa-o com orgulho ao entrar no Ano Novo! Não Apresenta Benefícios.", "weaponSpecialFall2020HealerText": "Cajado do Casulo", @@ -1804,6 +1804,32 @@ "weaponSpecialSpring2021HealerText": "Ramo de Salgueiro", "weaponSpecialSpring2021MageNotes": "Atira, bate, abana, descansa! Açoita esta magnífica pena dentro do tempo para conduzir a música da tua magia. Aumenta Inteligência em <%= int %> e Perceção em <%= per %>. Edição Limitada de Equipamento de Primavera de 2021.", "weaponSpecialWinter2021RogueNotes": "Tanto um disfarce como uma arma, este mangual de azevinho irá ajudar-te nas mais difíceis tarefas. Aumenta a Força em <%= str %>. Edição Limitada de equipamento de Inverno de 2020-2021.", - "weaponSpecialFall2020HealerNotes": "Agora que a tua transformação está completa, este fragmento da tua vida na forma de crisálida serve de um cajado divinal com o qual tu medes o Destino. Aumenta Inteligência por <%= int %>. Edição Limitada de Equipamento de Outono de 2020.", - "weaponSpecialWinter2021RogueText": "Mangual de Bagas de Azevinho" + "weaponSpecialFall2020HealerNotes": "Agora que a sua transformação está completa, esta reminiscência de sua vida como crisálida agora serve como o cajado divinal com o qual você mede destinos. Aumenta Inteligência por <%= int %>. Edição Limitada de Equipamento de Outono de 2020.", + "weaponSpecialWinter2021RogueText": "Mangual de Bagas de Azevinho", + "backMystery202507Notes": "Seu corcel para as calçadas e meio tubos. Não confere benefícios. Julho 2025 Item de Assinante.", + "shieldArmoireFlyFishingRodNotes": "Coloque uma isca nesta vara longa e flexível e os peixes a confundirão com um inseto todas as vezes. Aumenta Força e Inteligência em <%= attrs %> cada. Baú Encantando: Conjunto Fly Fishing (Item 3 de 3)", + "backMystery202507Text": "Skate Irado", + "shieldArmoireFlyFishingRodText": "Vara de Fly Fishing", + "headArmoireFlyFishingHatNotes": "Com uma aba larga e com espaço para uma isca extra, não vá pescar com mosca sem esta belezura. Aumenta Força e Percepção em <%= attrs %> cada. Baú Encantado: Conjunto Fly Fishing (Item 1 de 3)", + "armorArmoireFlyFishingWadersNotes": "Permaneça perfeitamente seco(a) e aquecido(a) enquanto atravessa um riacho, lagoa, lago ou rio. Aumenta Força e Constituição em <%= attrs %> cada. Baú Encantado: Conjunto Fly Fishing (Item 2 de 3)", + "shieldArmoireBeekeepersHiveNotes": "Colmeias servem tanto como casas como espaços de trabalho. Você pode precisar falar com suas abelhas sobre um bom balanço entre vida social e trabalho. Aumenta Força em <%= str %>. Baú Encantado: Conjunto Apicultor (Item 4 de 4)", + "shieldSpecialSummer2025HealerNotes": "Este escudo parece simples, mas possui propriedades nocivas. Adversários, fiquem espertos! Aumenta Constituição em <%= con %>. Edição Limitada 2025 Equipamento de Verão.", + "shieldSpecialSummer2025WarriorText": "Escudo de Concha de Vieira", + "headSpecialSummer2025MageNotes": "Todos ficarão hipnotizados pelo modo que suas barbatanas se movem com as correntes. Aumenta Percepção em <%= per %>. Edição Limitada 2025 Equipamento de Verão.", + "headArmoireBeekeepersHatText": "Capacete e Véu de Apicultor", + "headArmoireBeekeepersHatNotes": "Mantenha seu rosto seguro enquanto lida com seus amiguinhos abelhudos. Aumenta Percepção em <%= per %>. Baú Encantado: Conjunto Apicultor (Item 1 de 4)", + "shieldSpecialSummer2025WarriorNotes": "As cores são lindas, mas as cristas são perigosas. Adversários, fiquem espertos! Aumenta Constituição em <%= con %>. Edição Limitada 2025 Equipamento de Verão.", + "shieldSpecialSummer2025RogueText": "Tentáculo de Lula", + "shieldSpecialSummer2025HealerText": "Escudo do Anjo Marinho", + "shieldSpecialSummer2025RogueNotes": "Este tentáculo parece esguio, mas suas ventosas se agarram com firmeza. Adversários, fiquem espertos! Aumenta Força em <%= str %>. Edição Limitada 2025 Equipamento de Verão.", + "shieldMystery202506Text": "Escudo do Brilho Solar", + "shieldMystery202506Notes": "Dissipa a escuridão e confere calorosos e alegres raios onde quer que você esteja. Não concede benefícios. Junho 2025 Item de Assinante.", + "shieldArmoireBeekeepersHiveText": "Colmeia", + "backMystery202506Text": "Auréola de Brilho Solar", + "armorArmoireFlyFishingWadersText": "Botas de Pesca Fly Fishing", + "headMystery202507Notes": "Chapéus ao contrário ainda são legais, né? Não confere benefícios. Julho 2025 Item de Assinante.", + "headMystery202507Text": "Chapéu de Skatista Irado", + "headArmoireFlyFishingHatText": "Chapéu de Fly Fishing", + "backMystery202506Notes": "Traz um brilho quente com você conforme avança sobre suas tarefas diárias. Não confere benefícios. Junho 2025 Item de Assinante.", + "weaponSpecialWinter2021MageText": "Fase Lunar Mágica" } diff --git a/website/common/locales/pt/questscontent.json b/website/common/locales/pt/questscontent.json index 0fa9e353c1..5aa2e39aa4 100644 --- a/website/common/locales/pt/questscontent.json +++ b/website/common/locales/pt/questscontent.json @@ -105,7 +105,7 @@ "questGoldenknight2Completion": "A Cavaleira Dourada baixa a sua maça, em consternação. ªPeço desculpa pelo meu acesso de fúria repentino\", diz ela. \"A verdade é que é difícil pensar que tenho estado a magoar os outros inadvertidamente, e isso fez-me atacar em defesa própria...mas talvez possa ainda pedir desculpa?\"", "questGoldenknight2DropGoldenknight3Quest": "O Cavaleiro Dourado Parte 3: O Cavaleiro de Ferro (Pergaminho)", "questGoldenknight3Text": "A Cavaleira Dourada, Parte 3: O Cavaleiro de Ferro", - "questGoldenknight3Notes": "@Jon Arinbjorn grita para conseguir sua atenção. Após a sua batalha, uma nova figura apareceu. Um cavaleiro coberto por ferro escurecido lentamente se aproxima de você com espada em mãos. A Cavaleira Dourada grita para a figura \"Pai, não!\", mas o cavaleiro não mostra sinais de parar. Ela se vira para você e diz \"Me desculpe, eu fui uma tola, com uma cabeça grande demais para ver quão cruel eu tenho sido. Mas meu pai é mais cruel do que eu jamais poderia ser. Se ele não for parado, ele nos destruirá a todos. Aqui, use minha maça e pare o Cavaleiro de Ferro!\"", + "questGoldenknight3Notes": "@Jon Arinbjorn grita para conseguir sua atenção. Após a sua batalha, uma nova figura apareceu. Um cavaleiro coberto por ferro escurecido lentamente se aproxima de você com espada em mãos. A Cavaleira Dourada grita para a figura \"Pai, não!\", mas o cavaleiro não mostra sinais de parar. Ela se vira para você e diz \"Me desculpe, eu fui uma tola, com uma cabeça grande demais para ver quão cruel eu tenho sido. Mas meu pai é mais cruel do que eu jamais poderia ser. Se ele não for parado, ele nos destruirá a todos. Aqui, use minha maça e pare o Cavaleiro de Ferro!\"", "questGoldenknight3Completion": "Com um retinir gratificante, o Cavaleiro de Ferro cai de joelhos e cai. \"Você é bem forte\", ele ofega. \"Eu fui humilhado, hoje.\" A Cavaleira Dourada se aproxima de você e diz, \"Obrigada. Eu acredito que tenhamos ganho um pouco de humildade do nosso encontro com você. Eu conversarei com meu pai e explicarei as reclamações contra nós, Talvez nós devêssemos começar a nos desculpar com os outros habiticanos.\" Ela reflete em considerações antes de se voltar para você novamente. \"Aqui: como um presente nosso para você, eu quero que você fique com a minha maça. Ela é sua agora.\"", "questGoldenknight3Boss": "O Cavaleiro de Ferro", "questGoldenknight3DropHoney": "Mel (Comida)", @@ -162,7 +162,7 @@ "questOwlUnlockText": "Desbloqueia Ovos de Coruja para compra no Mercado", "questPenguinText": "A Abominável Ave das Neves", "questPenguinNotes": "Apesar de ser um dia quente de verão no extremo sul de Habitica, um frio estranho baixou sobre o Lago Vivaz. Fortes, gélidos ventos sopram enquanto as margens começam a congelar. Lanças de gelo começam a brotar do chão, afastando terra e grama pelo caminho. @Melynnrose e @Breadstrings correm até você.

\"Socorro!\" diz @Melynnrose. \"Nós trouxemos um pinguim gigante para congelar o lago para que pudêssemos patinar no gelo, mas acabamos ficando sem peixes para alimenta-lo!\"\"

\"Ele ficou bravo e agora está usando o seu sopro congelante em tudo que vê pela frente!\" diz @Breadstrings. \"Por favor, você tem que impedi-lo antes que todos fiquemos cobertos de gelo!\" Parece que está na hora desse pinguim... ficar frio.", - "questPenguinCompletion": "Com a derrota do pinguim, o gelo começa a derreter. O gigantesco pinguim se acomoda à luz do sol, deliciando-se com o balde extra de peixes que você arranjou. Ele desliza pelo lago, soprando gentilmente pelo caminho para criar uma bela pista de gelo, brilhante e lisa. Que pássaro bizarro! \"Parece que ele deixou alguns ovos para trás,\" diz @Painter de Cluster.

@Rattify rí. \"Talvez esses pinguins sejam mais... cabeça fria?\"", + "questPenguinCompletion": "Com a derrota do pinguim, o gelo começa a derreter. O gigantesco pinguim se acomoda à luz do sol, deliciando-se com o balde extra de peixes que você arranjou. Ele desliza pelo lago, soprando gentilmente pelo caminho para criar uma bela pista de gelo, brilhante e lisa. Que pássaro bizarro! \"Parece que ele deixou alguns ovos para trás,\" diz @Painter de Cluster.

@Rattify rí. \"Talvez esses pinguins sejam mais... cabeça fria?\"", "questPenguinBoss": "Pinguim Gelado", "questPenguinDropPenguinEgg": "Pinguim (Ovo)", "questPenguinUnlockText": "Desbloqueia Ovos de Pinguim para compra no Mercado", @@ -177,14 +177,14 @@ "questStressbeastBossRageBailey": "`Abominável Besta do Estresse usa ATAQUE DE ESTRESSE!`\n\nA onda de estresse cura a Abominável Besta do Estresse!\n\nAhh!!! Nossas tarefas diárias incompletas fizeram com que a Abominável Besta do Estresse ficasse mais furiosa do que nunca e recuperasse parte de sua vida! Bailey, a Arauto, gritava aos cidadãos para que se abrigassem, e agora a Besta a prendeu em sua outra mão! Olhe para ela, valentemente relatando as notícias enquanto a Besta do Estresse a chacoalha perversamente... Vamos honrar sua bravura sendo o mais produtivo que pudermos para salvar nossos NPCs!", "questStressbeastBossRageGuide": "`Abominável Besta do Estresse usa ATAQUE DE ESTRESSE!`\n\nA onda de estresse cura a Abominável Besta do Estresse!\n\nCuidado! Justin, o Guia, está tentando distrair a Besta do Estresse, correndo em torno dos seus calcanhares, gritando dicas de produtividade! A Abominável Besta do Estresse está pisoteando furiosamente, mas parece que nós realmente estamos cansando esta besta. Eu duvido que ela tenha energia para outro ataque. Não desista... nós estamos muito perto de acabar com ela!", "questStressbeastDesperation": "`A Abominável Besta do Estresse atinge 500K de vida! A Abominável Besta do Estresse usa Defesa Desesperada!\n\nNós estamos quase lá, Habiticanos! Com persistência e tarefas diárias, nós diminuímos a vida da Besta do Estresse para apenas 500K! A criatura ruge e agita os braços em desespero, e sua ira aumenta como nunca. Bailey e Matt berram aterrorizados quando a Besta começa a chacoalhá-los em um ritmo aterrador e cria uma cegante tempestade de neve, que a torna mais difícil de ser acertada.\n\nNós teremos que redobrar nossos esforços, mas tenha fé - isso é um sinal de que a Besta do Estresse sabe que está a ponto de ser derrotada. Não desista agora!", - "questStressbeastCompletion": "A Abominável Besta do Estresse foi DERROTADA!

Conseguimos! Com um golpe final, a Abominável Besta do Estresse se dissipa em uma nuvem de neve. Os flocos de neve brilham no ar enquanto alegres Habiticanos abraçam seus animais de estimação e montarias. Nossos animais e nossos NPCs estão seguros novamente!

Stoïkalm está salva!

SabreCat fala, suavemente, com seu tigre dentes de sabre. \"Por favor, encontre os cidadãos das Estepes de Stoïkalm e traga-os até nós,\" ele diz. Várias horas depois, o tigre dentes de sabre retorna, e cavaleiros montados em uma manada de mamutes o seguem. Você reconhece a amazona da fileira frontal como sendo Lady Glaciate, a líder de Stoïkalm.

\"Grandes Habiticanos\", ela diz, \"Meus cidadãos e eu devemos, a vocês, a nossa mais profunda gratidão e sinceras desculpas. Em uma tentativa de proteger nossas Estepes de problemas, nós começamos, secretamente, a banir todo o nosso stress para as montanhas geladas. Nós não fazíamos idéia de que ele iria acumular-se ao longo das gerações e formar a Besta do Estresse que vocês viram! Quando ela libertou-se, prendeu a todos nós na montanha, em seu lugar, e começou um ataque contra nossos amados animais.\" Seu olhar triste se volta para a neve caindo. \"Colocamos todos em risco por causa de nossa tolice. Estejam certos de que no futuro, iremos até vocês com nossos problemas, antes que nossos problemas venham até vocês.\"

Ela se volta para onde @Baconsaur está abraçando alguns filhotes de mamute. \"Nós trouxemos comida aos seus animais, como uma oferenda e como um pedido de perdão por tê-los assustado, e como símbolo de confiança, nós deixaremos alguns de nossos mascotes e montarias com vocês. Nós sabemos que todos vocês irão cuidar bem deles.\"", + "questStressbeastCompletion": "A Abominável Besta do Estresse foi DERROTADA!

Conseguimos! Com um golpe final, a Abominável Besta do Estresse se dissipa em uma nuvem de neve. Os flocos de neve brilham no ar enquanto alegres Habiticanos abraçam seus animais de estimação e montarias. Nossos animais e nossos NPCs estão seguros novamente!

Stoïkalm está salva!

SabreCat fala, suavemente, com seu tigre dentes de sabre. \"Por favor, encontre os cidadãos das Estepes de Stoïkalm e traga-os até nós,\" ele diz. Várias horas depois, o tigre dentes de sabre retorna, e cavaleiros montados em uma manada de mamutes o seguem. Você reconhece a amazona da fileira frontal como sendo Lady Glaciate, a líder de Stoïkalm.

\"Grandes Habiticanos\", ela diz, \"Meus cidadãos e eu devemos, a vocês, a nossa mais profunda gratidão e sinceras desculpas. Em uma tentativa de proteger nossas Estepes de problemas, nós começamos, secretamente, a banir todo o nosso stress para as montanhas geladas. Nós não fazíamos idéia de que ele iria acumular-se ao longo das gerações e formar a Besta do Estresse que vocês viram! Quando ela libertou-se, prendeu a todos nós na montanha, em seu lugar, e começou um ataque contra nossos amados animais.\" Seu olhar triste se volta para a neve caindo. \"Colocamos todos em risco por causa de nossa tolice. Estejam certos de que no futuro, iremos até vocês com nossos problemas, antes que nossos problemas venham até vocês.\"

Ela se volta para onde @Baconsaur está abraçando alguns filhotes de mamute. \"Nós trouxemos comida aos seus animais, como uma oferenda e como um pedido de perdão por tê-los assustado, e como símbolo de confiança, nós deixaremos alguns de nossos mascotes e montarias com vocês. Nós sabemos que todos vocês irão cuidar bem deles.\"", "questStressbeastCompletionChat": "`A Abominável Besta do Estresse foi DERROTADA!`\n\nConseguimos! Com um golpe final, a Abominável Besta do Estresse se dissipa em uma nuvem de neve. Os flocos de neve brilham no ar enquanto alegres Habiticanos abraçam seus animais de estimação e montarias. Nossos animais e nossos NPCs estão seguros novamente!\n\nStoïkalm está salva! \n\nSabreCat fala, suavemente, com seu tigre dentes de sabre. \"Por favor, encontre os cidadãos das Estepes de Stoïkalm e traga-os até nós,\" ele diz. Várias horas depois, o tigre dentes de sabre retorna, e cavaleiros montados em uma manada de mamutes o seguem. Você reconhece a amazona da fileira frontal como sendo Lady Glaciate, a líder de Stoïkalm. \n\n\"Grandes Habiticanos\", ela diz, \"Meus cidadãos e eu devemos, a vocês, a nossa mais profunda gratidão e sinceras desculpas. Em uma tentativa de proteger nossas Estepes de problemas, nós começamos, secretamente, a banir todo o nosso stress para as montanhas geladas. Nós não fazíamos idéia de que ele iria acumular-se ao longo das gerações e formar a Besta do Estresse que vocês viram! Quando ela libertou-se, prendeu a todos nós na montanha, em seu lugar, e começou um ataque contra nossos amados animais.\" Seu olhar triste se volta para a neve caindo. \"Colocamos todos em risco por causa de nossa tolice. Estejam certos de que no futuro, iremos até vocês com nossos problemas, antes que nossos problemas venham até vocês.\"\n\nEla se volta para onde @Baconsaur está abraçando alguns filhotes de mamute. \"Nós trouxemos comida aos seus animais, como uma oferenda e como um pedido de perdão por tê-los assustado, e como símbolo de confiança, nós deixaremos alguns de nossos mascotes e montarias com vocês. Nós sabemos que todos vocês irão cuidar bem deles.\"", "questTRexText": "O Rei dos Dinossauros", "questTRexNotes": "Agora que antigas criaturas das Estepes de Stoïkalm estão vagando por toda Habitica, @Urse decidiu adotar um Tiranossauro adulto. O que poderia dar errado?

Tudo.", "questTRexCompletion": "O dinossauro selvagem finalmente cessa sua ira e decide criar amizade com os galos gigantes. @Urse o observa atentamente. \"Eles não são mascotes tão terríveis, afinal! Só precisam de um pouco de disciplina. Aqui, pegue alguns dos ovos de Tiranossauro para você.\"", "questTRexBoss": "Tiranossauro de Carniça", "questTRexUndeadText": "O Dinossauro Volta à Vida", - "questTRexUndeadNotes": "Enquanto os antigos dinossauros vindos das Estepes Stoïkalm vagam através da Cidade de Habit, um grito de terror emana do Grande Museu. @Bancosaur berra, \"O esqueleto de Tiranossauro dentro do museu está se mexendo! Ele deve ter sentido a presença de parentes dele!\" A besta esquelética mostra seus dentes e caminha ruidosamente em sua direção. Como você pode derrotar uma criatura que já está morta? Você terá que atacá-la rápido, antes que ela se cure!", + "questTRexUndeadNotes": "Enquanto os antigos dinossauros vindos das Estepes Stoïkalm vagam através da Cidade de Habit, um grito de terror emana do Grande Museu. @Bancosaur berra, \"O esqueleto de Tiranossauro dentro do museu está se mexendo! Ele deve ter sentido a presença de parentes dele!\" A besta esquelética mostra seus dentes e caminha ruidosamente em sua direção. Como você pode derrotar uma criatura que já está morta? Você terá que atacá-la rápido, antes que ela se cure!", "questTRexUndeadCompletion": "Os olhos brilhantes do Tiranossauro se escurecem, e ele se fixa em seu pedestal costumeiro. Todos suspiram de alívio. \"Olhem!\" @Baconsaur diz. \"Alguns dos ovos fossilizados estão novos e brilhantes! Talvez eles se choquem para você.\"", "questTRexUndeadBoss": "Tiranossauro Esquelético", "questTRexUndeadRageTitle": "Cura Esquelética", @@ -246,8 +246,8 @@ "questDilatoryDistress2DropCottonCandyBluePotion": "Poção de Eclosão Azul Algodão-Doce", "questDilatoryDistress2DropHeadgear": "Tiara do Coral flamejante (Equipamento de cabeça)", "questDilatoryDistress3Text": "Angustia da Dilatória, Parte 3: Não uma Sereia qualquer", - "questDilatoryDistress3Notes": "Você segue os camarões mantis Fenda a dentro, e descobre uma fortaleza subaquática. Princesa Adva, escoltada por crânios d'água, espera por você dentro do salão principal. \"O meu pai que enviou você, não foi? Diga à ele que eu me recuso a voltar. Eu estou contente em ficar aqui e praticar minha feitiçaria. Saia agora, ou você irá sentir a ira da nova rainha do oceano!\" Adva parece muito inflexível, mas enquanto ela fala você nota um estranho pingente de rubi em seu pescoço, brilhando de forma ameaçadora... Talvez seus delírios acabariam se você quebrá-lo?", - "questDilatoryDistress3Completion": "Finalmente, você consegue puxar o pingente enfeitiçado do pescoço de Adva e jogá-lo fora. Adva agarra a cabeça. \"Onde estou? O que aconteceu aqui?\" Depois de ouvir sua história, ela franze a testa. \"Este colar foi-me dado por uma estranha embaixadora - uma senhora chamada 'Tzina'. Eu não me lembro de nada depois disso!\"

De volta à Dilatória, Manta está muito feliz por seu sucesso. \"Permita-me recompensá-lo com este tridente e este escudo! Eu os encomendei do @aiseant e do @starsystemic como um presente para Adva, mas... eu prefiro não dar armas para ela tão cedo.\"", + "questDilatoryDistress3Notes": "Você segue os camarões mantis Fenda a dentro, e descobre uma fortaleza subaquática. Princesa Adva, escoltada por crânios d'água, espera por você dentro do salão principal. \"O meu pai que enviou você, não foi? Diga à ele que eu me recuso a voltar. Eu estou contente em ficar aqui e praticar minha feitiçaria. Saia agora, ou você irá sentir a ira da nova rainha do oceano!\" Adva parece muito inflexível, mas enquanto ela fala você nota um estranho pingente de rubi em seu pescoço, brilhando de forma ameaçadora... Talvez seus delírios acabariam se você quebrá-lo?", + "questDilatoryDistress3Completion": "Finalmente, você consegue puxar o pingente enfeitiçado do pescoço de Adva e jogá-lo fora. Adva agarra a cabeça. \"Onde estou? O que aconteceu aqui?\" Depois de ouvir sua história, ela franze a testa. \"Este colar foi-me dado por uma estranha embaixadora - uma senhora chamada 'Tzina'. Eu não me lembro de nada depois disso!\"

De volta à Dilatória, Manta está muito feliz por seu sucesso. \"Permita-me recompensá-lo com este tridente e este escudo! Eu os encomendei do @aiseant e do @starsystemic como um presente para Adva, mas... eu prefiro não dar armas para ela tão cedo.\"", "questDilatoryDistress3Boss": "Adva, a Sereia Usurpadora", "questDilatoryDistress3DropFish": "Peixe (Comida)", "questDilatoryDistress3DropWeapon": "Tridente da Maré Absoluta (Arma)", @@ -277,7 +277,7 @@ "questBurnoutBossRageSeasonalShop": "`Desgaste usa ATAQUE DE EXAUSTÃO!`\n\nAhh !!! Nossas Tarefas Diárias incompletas têm alimentado as chamas do Desgaste, e agora ele tem energia suficiente para atacar novamente! Ele solta um jorro de chamas espectrais que cauteriza a Loja Sazonal. Você se horroriza ao ver que a animada Feiticeira Sazonal foi transformada em um abatido Espírito Exausto.\n\nTemos que resgatar nossos NPCs! Se apressem, Habiticanos, concluam suas tarefas e derrotem o Desgaste antes que ele ataque pela terceira vez!", "questBurnoutBossRageTavern": "`Desgaste usa ATAQUE DE EXAUSTÃO!`\n\nMuitos Habiticanos tem se escondido do Desgaste na Taverna, mas não mais! Com um uivo estridente, Desgaste arranha a Taverna com as suas mãos ardentes. À medida que os clientes da Taverna fogem, Daniel é pego nas garras de Queimadura, e se transforma em um Espírito Exausto na sua frente! \n\nEste horror cabeça quente já dura tempo demais. Não desista... estamos tão perto de vencer o Desgaste de uma vez por todas!", "questFrogText": "Pântano do Sapo Bagunceiro", - "questFrogNotes": "Enquanto você e seus amigos caminham com dificuldade pelo Pântano da Estagnação, @starsystemic aponta para uma placa \"Fique no caminho -- se puder.\"

\"Com certeza isso não é difícil!\" @RosemonkeyCT diz. \"É amplo e claro.\"

Mas conforme você avança, nota que o caminho gradualmente vai sendo tomado pela sujeira do pântano, ladeado por estranhos detritos azuis, até que é impossível prosseguir.

Conforme você olha em volta, se perguntando como ficou tão bagunçado, @Jon Arjinborn grita \"Cuidado!\" Um sapo irritado pula do lodo, vestindo roupas sujas e iluminado por um fogo azul. Você terá que superar esse venenoso Sapo Bagunceiro para avançar!", + "questFrogNotes": "Enquanto você e seus amigos caminham com dificuldade pelo Pântano da Estagnação, @starsystemic aponta para uma placa \"Fique no caminho -- se puder.\"

\"Com certeza isso não é difícil!\" @RosemonkeyCT diz. \"É amplo e claro.\"

Mas conforme você avança, nota que o caminho gradualmente vai sendo tomado pela sujeira do pântano, ladeado por estranhos detritos azuis, até que é impossível prosseguir.

Conforme você olha em volta, se perguntando como ficou tão bagunçado, @Jon Arjinborn grita \"Cuidado!\" Um sapo irritado pula do lodo, vestindo roupas sujas e iluminado por um fogo azul. Você terá que superar esse venenoso Sapo Bagunceiro para avançar!", "questFrogCompletion": "O sapo se acovarda na lama, derrotado. Conforme ele sai, o lodo azul esvanece, deixando o caminho à frente livre.

Parados no meio do caminho estão três ovos perfeitos. \"Você consegue até ver os pequenos girinos pela casca transparente!\" @Breadstrings diz, \"Aqui, você pode ficar com eles.\"", "questFrogBoss": "Sapo Bagunceiro", "questFrogDropFrogEgg": "Sapo (Ovo)", @@ -299,7 +299,7 @@ "questSabretoothCompletion": "Depois de uma longa e desgastante batalha, você golpeia o Gato Dentes de Sabre Zumbi para o chão. Como você finalmente pode se aproximar, nota uma cavidade em um dos dentes de sabre. Percebendo o verdadeiro motivo da fúria do gato, você pede para @Fandekasp preencher a cavidade, e aconselha todos a evitarem alimentar seu amigo com doces no futuro. O Gato Dentes de Sabre melhora e em agradecimento, seus domadores te enviam uma recompensa generosa – uma ninhada de ovos de dente de sabre!", "questSabretoothBoss": "Gato Dente de Sabre Zumbi", "questSabretoothDropSabretoothEgg": "Dente de Sabre (Ovo)", - "questSabretoothUnlockText": "Desbloqueia Ovos de Dente de Sabre para compra no Mercado", + "questSabretoothUnlockText": "Desbloqueia Ovos de Dente de Sabre para compra no Mercado", "questMonkeyText": "Mandril Monstruoso e os Macacos Travessos", "questMonkeyNotes": "A Savana Sloensteadi está sendo devastada pelo Mandril Monstruoso e seus Macacos Travessos! Eles gritam alto o suficiente para abafar os sons dos prazos que se aproximam, encorajando todos a evitar suas obrigações e continuar a procrastinar. Infelizmente, muitas pessoas imitam esse comportamento ruim. Se ninguém parar esses primatas, logo as tarefas de todos estarão tão vermelhas quanto a cara do Monstruoso Mandril!!

\"Precisaremos de um aventureiro dedicado para opor-se a eles,\" diz @yamato.

\"Rápido, vamos tirar esse macaco das costas de todo o mundo!\" @Oneironaut grita, e você corre para o combate.", "questMonkeyCompletion": "Você conseguil! Hoje esses demônios vão ficar sem bananas. Oprimidos por sua força, os macacos fogem em pânico. \"Olha\", diz @Misceo. \"Eles deixaram alguns ovos para trás.\"

@Leephon Sorri. \"Talvez um macaco de estimação bem treinado pode ajudá-lo tanto quanto os selvagens atrapalharam!\"", @@ -567,15 +567,15 @@ "questPterodactylDropPterodactylEgg": "pterodactilo (Ovo)", "questPterodactylUnlockText": "Desbloqueia ovos de pterodáctilo para compra no Mercado", "questBadgerText": "Stop Badgering Me!", - "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", - "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", + "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", + "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", "questBadgerBoss": "A Chatice Aborrecedora", "questBadgerDropBadgerEgg": "Texugo (Ovo)", "questBadgerUnlockText": "Desbloqueia ovos de Texugo para compra no Mercado", "questDysheartenerText": "O Descoraçador", - "questDysheartenerNotes": "Rompe a aurora no Dia de São Valentim quando um horrífico estrondo estraçalha o ar. Espalha-se sobre os edifícios um fulgor cor-de-rosa doentio e esboroam-se tijolos enquanto uma profunda fenda rasga a rua principal da Cidade do Hábito. Um guinchar sobrenatural eleva-se, estilhaçando vidros de janelas à medida que uma estranha forma rasteja para fora do chão esventrado.

Estalam mandíbulas e brilha uma carapaça; pernas e mais pernas revelam-se no ar. A multidão começa a gritar enquanto a criatura insectiforme se mostra, revelando não ser senão a mais cruel de todas as criaturas: o temível Descoraçador. Ele uiva de antecipação e atira-se para a frente, desejoso de roer as esperanças dos Habiticanos esforçados A cada arranhar das suas pernas dianteiras, sentes um rasgo de desespero a apertar-te o peito.

\"Coragem, corações!\" brada Lemoness. \"Ele pensa provavelmente que somos alvos fáceis porque tantos de nós têm Resoluções de Ano Novo assustadoras, mas está prestes a descobrir que os Habiticanos sabem cumprir os seus objectivos!\"

AnnDeLune ergue o seu bordão. \"Atiremo-nos às nossas tarefas e derrotemos este monstro!\"", - "questDysheartenerCompletion": "O Descoraçador foi DERROTADO!

Unindo-se, todos em Habitica desferem um último golpe nas suas tarefas e o Descoraçador recua, soltando guinchos de receio. \"O que se passa, Descoraçador?\" brada AnnDeLune, com os olhos a brilhar. \"Sentes-te desencorajado?\"

Abrem-se frestas de um cor-de-rosa cintilante por toda a carapaça do Descoraçador, que se desintegra numa nuvem de fumo cor-de-rosa. À medida que uma sensação de vigor e e determinação renovados varre a Terra, cai uma enxurrada de deliciosos doces sobre toda a gente.

A multidão celebra ao rubro enquanto se abraça entre si e as mascotes de todos se entretêm a roer os presentes atrsados de São Valentim. De súbito, um coro rejubilante rompe em canção e silhuetas luminosas rasgam os céus.

O nosso optimismo recém-revigorado atraiu um bando de Hipogrifos Esperançosos! As graciosas criaturas pousam no chão, agitando as plumas com interesse e passeando-se em redor. \"Parece que fizemos alguns novos amigos para nos ajudarem a manter o ânimo, mesmo que as nossas tarefas nos intimidem.\" diz Lemoness.

Beffymaroo já tem os braços repletos de peluchinhos de plumas. \"Talvez eles nos ajudem a reconstruir as zonas danificadas de Habitica!\"

Cantarolando e cantando, os Hipogrifos mostram o caminho, enquanto todos os Habiticanos se unem para reconstruir o nosso querido lar.", - "questDysheartenerCompletionChat": "O Descoraçador foi DERROTADO!\n\nUnindo-se, todos em Habitica desferem um último golpe nas suas tarefas e o Descoraçador recua, soltando guinchos de receio. \"O que se passa, Descoraçador?\" brada AnnDeLune, com os olhos a brilhar. \"Sentes-te desencorajado?\"\n\nAbrem-se frestas de um cor-de-rosa cintilante por toda a carapaça do Descoraçador, que se desintegra numa nuvem de fumo cor-de-rosa. À medida que uma sensação de vigor e e determinação renovados varre a Terra, cai uma enxurrada de deliciosos doces sobre toda a gente.\n\nA multidão celebra ao rubro enquanto se abraça entre si e as mascotes de todos se entretêm a roer os presentes atrsados de São Valentim. De súbito, um coro rejubilante rompe em canção e silhuetas luminosas rasgam os céus.\n\nO nosso optimismo recém-revigorado atraiu um bando de Hipogrifos Esperançosos! As graciosas criaturas pousam no chão, agitando as plumas com interesse e passeando-se em redor. \"Parece que fizemos alguns novos amigos para nos ajudarem a manter o ânimo, mesmo que as nossas tarefas nos intimidem.\" diz Lemoness.\n\nBeffymaroo já tem os braços repletos de peluchinhos de plumas. \"Talvez eles nos ajudem a reconstruir as zonas danificadas de Habitica!\"\n\nCantarolando e cantando, os Hipogrifos mostram o caminho, enquanto todos os Habiticanos se unem para reconstruir o nosso querido lar.", + "questDysheartenerNotes": "Rompe a aurora no Dia de São Valentim quando um horrífico estrondo estraçalha o ar. Espalha-se sobre os edifícios um fulgor cor-de-rosa doentio e esboroam-se tijolos enquanto uma profunda fenda rasga a rua principal da Cidade do Hábito. Um guinchar sobrenatural eleva-se, estilhaçando vidros de janelas à medida que uma estranha forma rasteja para fora do chão esventrado.

Estalam mandíbulas e brilha uma carapaça; pernas e mais pernas revelam-se no ar. A multidão começa a gritar enquanto a criatura insectiforme se mostra, revelando não ser senão a mais cruel de todas as criaturas: o temível Descoraçador. Ele uiva de antecipação e atira-se para a frente, desejoso de roer as esperanças dos Habiticanos esforçados A cada arranhar das suas pernas dianteiras, sentes um rasgo de desespero a apertar-te o peito.

\"Coragem, corações!\" brada Lemoness. \"Ele pensa provavelmente que somos alvos fáceis porque tantos de nós têm Resoluções de Ano Novo assustadoras, mas está prestes a descobrir que os Habiticanos sabem cumprir os seus objectivos!\"

AnnDeLune ergue o seu bordão. \"Atiremo-nos às nossas tarefas e derrotemos este monstro!\"", + "questDysheartenerCompletion": "O Descoraçador foi DERROTADO!

Unindo-se, todos em Habitica desferem um último golpe nas suas tarefas e o Descoraçador recua, soltando guinchos de receio. \"O que se passa, Descoraçador?\" brada AnnDeLune, com os olhos a brilhar. \"Sentes-te desencorajado?\"

Abrem-se frestas de um cor-de-rosa cintilante por toda a carapaça do Descoraçador, que se desintegra numa nuvem de fumo cor-de-rosa. À medida que uma sensação de vigor e e determinação renovados varre a Terra, cai uma enxurrada de deliciosos doces sobre toda a gente.

A multidão celebra ao rubro enquanto se abraça entre si e as mascotes de todos se entretêm a roer os presentes atrsados de São Valentim. De súbito, um coro rejubilante rompe em canção e silhuetas luminosas rasgam os céus.

O nosso optimismo recém-revigorado atraiu um bando de Hipogrifos Esperançosos! As graciosas criaturas pousam no chão, agitando as plumas com interesse e passeando-se em redor. \"Parece que fizemos alguns novos amigos para nos ajudarem a manter o ânimo, mesmo que as nossas tarefas nos intimidem.\" diz Lemoness.

Beffymaroo já tem os braços repletos de peluchinhos de plumas. \"Talvez eles nos ajudem a reconstruir as zonas danificadas de Habitica!\"

Cantarolando e cantando, os Hipogrifos mostram o caminho, enquanto todos os Habiticanos se unem para reconstruir o nosso querido lar.", + "questDysheartenerCompletionChat": "O Descoraçador foi DERROTADO!\n\nUnindo-se, todos em Habitica desferem um último golpe nas suas tarefas e o Descoraçador recua, soltando guinchos de receio. \"O que se passa, Descoraçador?\" brada AnnDeLune, com os olhos a brilhar. \"Sentes-te desencorajado?\"\n\nAbrem-se frestas de um cor-de-rosa cintilante por toda a carapaça do Descoraçador, que se desintegra numa nuvem de fumo cor-de-rosa. À medida que uma sensação de vigor e e determinação renovados varre a Terra, cai uma enxurrada de deliciosos doces sobre toda a gente.\n\nA multidão celebra ao rubro enquanto se abraça entre si e as mascotes de todos se entretêm a roer os presentes atrsados de São Valentim. De súbito, um coro rejubilante rompe em canção e silhuetas luminosas rasgam os céus.\n\nO nosso optimismo recém-revigorado atraiu um bando de Hipogrifos Esperançosos! As graciosas criaturas pousam no chão, agitando as plumas com interesse e passeando-se em redor. \"Parece que fizemos alguns novos amigos para nos ajudarem a manter o ânimo, mesmo que as nossas tarefas nos intimidem.\" diz Lemoness.\n\nBeffymaroo já tem os braços repletos de peluchinhos de plumas. \"Talvez eles nos ajudem a reconstruir as zonas danificadas de Habitica!\"\n\nCantarolando e cantando, os Hipogrifos mostram o caminho, enquanto todos os Habiticanos se unem para reconstruir o nosso querido lar.", "questDysheartenerBossRageTitle": "Desgosto Destroçador", "questDysheartenerBossRageDescription": "O contador do Ataque de Raiva enche-se quando os Habiticanos falham nas suas Tarefas Diárias. Se este contador ficar completamente preenchido, o Descoraçador vai fazer desabar o seu Desgosto Destroçador sobre um dos lojistas de Habitica, portanto, mãos à obra e não deixes tarefas por cumprir!", "questDysheartenerBossRageSeasonal": "O Descoraçador usa DESGOSTO DESTROÇADOR!\n\nOh, não! Depois de se banquetear com as nossas Tarefas Diárias por cumprir, o Descoraçador ganhou a força de que precisava para desencadear o seu ataque do Desgosto Destroçador. Soltando um guincho agudo, atinge o pavilhão da Loja Sazonal com as suas espinhosas patas dianteiras! O abalo da descarga mágica desfaz a madeira e a Feiticeira Sazonal fica transfigurada de tristeza ante tal visão.\n\nRápido! Vamos continuar a cumprir as nossas Tarefas Diárias para que a besta não volte a atacar!", diff --git a/website/common/locales/pt/settings.json b/website/common/locales/pt/settings.json index 3aef85d241..847e6278a2 100644 --- a/website/common/locales/pt/settings.json +++ b/website/common/locales/pt/settings.json @@ -55,7 +55,6 @@ "APIToken": "Código API (é uma palavra-passe - veja o aviso acima!)", "showAPIToken": "Mostrar Código de API", "hideAPIToken": "Esconder Código de API", - "APITokenWarning": "Se precisa de um novo Código de API (por exemplo, se o partilhar acidentalmente), envie um correio eletrónico para <%= hrefTechAssistanceEmail %> com o seu ID de Usuário e o seu Código corrente. Uma vez reiniciado, terá de re-autorizar tudo, devendo para tal sair da sua conta na página web e aplicação móvel bem como providenciar o novo Código a quaisquer outras ferramentas de Habitica que utilize.", "thirdPartyApps": "Aplicações de Terceiros", "resetDo": "Faça, reinicie minha conta!", "resetComplete": "Reset completo!", diff --git a/website/common/locales/pt_BR/content.json b/website/common/locales/pt_BR/content.json index 04bfac72b4..460ae80943 100644 --- a/website/common/locales/pt_BR/content.json +++ b/website/common/locales/pt_BR/content.json @@ -211,7 +211,7 @@ "hatchingPotionGlow": "que Brilha-no-Escuro", "hatchingPotionFrost": "da Geada", "hatchingPotionIcySnow": "do Gelo de Nevasca", - "hatchingPotionNotes": "Use-a em um ovo e ele chocará como um mascote <%= potText(locale) %>.", + "hatchingPotionNotes": "Use-a em um ovo e ele chocará como um Mascote <%= potText(locale) %>.", "foodMeat": "Carne", "foodMeatThe": "a Carne", "foodMeatA": "Carne", @@ -373,7 +373,7 @@ "hatchingPotionVirtualPet": "do Reino dos Bichinhos Virtuais", "hatchingPotionPorcelain": "de Porcelana", "hatchingPotionPinkMarble": "de Mármore Rosa", - "hatchingPotionTeaShop": "da Loja de Chá", + "hatchingPotionTeaShop": "do Reino da Loja de Chá", "hatchingPotionRoseGold": "de Ouro Rosa", "hatchingPotionFungi": "do Reino dos Fungos", "questEggRaccoonAdjective": "um ganancioso", @@ -396,13 +396,14 @@ "questEggCatAdjective": "um travesso", "questEggCatMountText": "Gato", "questEggOtterText": "Lontra", - "hatchingPotionCryptid": "do Reino da Criptozoologia", + "hatchingPotionCryptid": "do Reino dos Criptídeos", "hatchingPotionBalloon": "Balão", "hatchingPotionKoi": "Carpa", "hatchingPotionOpal": "de Opala", "questEggPlatypusMountText": "Ornitorrinco", - "questEggPlatypusAdjective": "um exigente", + "questEggPlatypusAdjective": "um perfeccionista", "hatchingPotionJade": "de Jade", "questEggOtterMountText": "Lontra", - "questEggOtterAdjective": "uma pérfida" + "questEggOtterAdjective": "uma pérfida", + "questEggPlatypusText": "Ornitorrinco" } diff --git a/website/common/locales/pt_BR/faq.json b/website/common/locales/pt_BR/faq.json index 99eeba554f..ead31c2fbe 100644 --- a/website/common/locales/pt_BR/faq.json +++ b/website/common/locales/pt_BR/faq.json @@ -190,5 +190,6 @@ "subscriptionBenefitsAdjustments": "Ajustes de Benefícios para Assinantes", "subscriptionBenefitsFaqTitle": "Perguntas frequentes sobre ajustes de benefícios para assinantes", "contentAnswer302": "No dia 14 de cada mês: Missões de Companheiros, Missões de Poções e Pacotes de Missões disponiveis na Loja de Missões são trocadas.", - "contentFaqPara3": "Caso tenha alguma dúvida que não esteja nas respostas acima, entre em contato com nossa equipe pelo e-mail <%= mailto %>! Estamos animados com este novo cronograma de lançamento de conteúdo e ansiosos por mais projetos no futuro para ajudar a tornar o Habitica melhor para todos os jogadores." + "contentFaqPara3": "Caso tenha alguma dúvida que não esteja nas respostas acima, entre em contato com nossa equipe pelo e-mail <%= mailto %>! Estamos animados com este novo cronograma de lançamento de conteúdo e ansiosos por mais projetos no futuro para ajudar a tornar o Habitica melhor para todos os jogadores.", + "webFaqAnswer67": "Classes são diferentes papéis que seu personagem pode desempenhar. Cada classe oferece seu próprio conjunto de benefícios e habilidades únicas conforme você sobe de nível. Essas habilidades podem complementar a forma como você interage com suas tarefas ou ajudar a contribuir para completar missões em seu grupo.\n\nSua classe também determina o equipamento que estará disponível para você comprar nas suas recompensas, no mercado e na loja sazonal.\n\nAqui está um resumo de cada classe para ajudar você a escolher qual delas se encaixa melhor no seu estilo de jogo:\n#### **Guerreiro**\n*Guerreiros causam alto dano a chefes e têm uma grande chance de acertos críticos ao completar tarefas, recompensando você com experiência e ouro extra.\n*Força é seu atributo principal, aumentando o dano causado.\n*Constituição é seu atributo secundário, reduzindo o dano recebido.\n*As habilidades dos Guerreiros aumentam a constituição e a força dos colegas de grupo.\n*Considere jogar como Guerreiro se você gosta de enfrentar chefes, mas também quer alguma proteção caso perca tarefas de vez em quando.\n#### **Curandeiro**\nCurandeiros têm alta defesa e podem curar a si mesmos e aos colegas de grupo.\n*Constituição é seu atributo principal, aumentando suas curas e reduzindo o dano recebido.\n*Inteligência é seu atributo secundário, aumentando sua mana e experiência.\n*As habilidades dos Curandeiros tornam suas tarefas menos vermelhas e aumentam a constituição dos colegas de grupo.\n*Considere jogar como Curandeiro se você costuma perder tarefas e precisa da habilidade de se curar ou curar membros do grupo. Curandeiros também sobem de nível rapidamente.\n#### **Mago**\n*Magos sobem de nível rapidamente, ganham muita mana e causam dano a chefes em missões.\n*Inteligência é seu atributo principal, aumentando sua mana e experiência.\n*Percepção é seu atributo secundário, aumentando seu ouro e a chance de encontrar itens.\n*As habilidades dos Magos congelam sequências de tarefas, restauram a mana dos colegas de grupo e aumentam sua Inteligência.\n*Considere jogar como Mago se você se motiva ao progredir rapidamente pelos níveis e contribuir com dano em missões contra chefes.\n#### **Ladino**\n*Ladinos obtêm mais itens e ouro ao completar tarefas, e têm grande chance de acertos críticos, ganhando ainda mais experiência e ouro.\n*Percepção é seu atributo principal, aumentando seu ouro e a chance de encontrar itens.\n*Força é seu atributo secundário, aumentando o dano causado.\n*As habilidades dos Ladinos ajudam a evitar consequências por tarefas diárias não cumpridas, roubam ouro e aumentam a percepção dos colegas de grupo.\n*Considere jogar como Ladino se você se motiva muito por recompensas." } diff --git a/website/common/locales/pt_BR/groups.json b/website/common/locales/pt_BR/groups.json index bfeb258fa6..2cfdc3fd6c 100644 --- a/website/common/locales/pt_BR/groups.json +++ b/website/common/locales/pt_BR/groups.json @@ -410,7 +410,7 @@ "invitedToYourParty": "Convidado para seu Grupo!  Clique para desfazer", "lookingForPartyTitle": "Encontre membros", "findMorePartyMembers": "Encontre mais membros", - "findPartyMembers": "Encontre membros para o Grupo", + "findPartyMembers": "Encontre Membros para o Grupo", "noOneLooking": "Não há ninguém procurando por um Grupo agora.
Você pode conferir mais tarde!", "sendTotal": "Total:", "tavernDiscontinued": "A Taverna e as Guildas foram descontinuadas", diff --git a/website/common/locales/pt_BR/pets.json b/website/common/locales/pt_BR/pets.json index eb5bd64b49..5434153917 100644 --- a/website/common/locales/pt_BR/pets.json +++ b/website/common/locales/pt_BR/pets.json @@ -105,7 +105,7 @@ "notEnoughMounts": "Você ainda não coletou Montarias suficientes", "notEnoughPetsMounts": "Você ainda não coletou Mascotes e Montarias suficientes", "wackyPets": "Mascotes Malucos", - "filterByWacky": "Esquisitos", + "filterByWacky": "De Reinos Doidões", "gryphatrice": "Grifatriz", "invalidAmount": "Quantidade de comida inválida, deve ser um número inteiro positivo", "tooMuchFood": "Você está tentando dar muita comida para seu Mascote, ação cancelada", diff --git a/website/common/locales/pt_BR/questscontent.json b/website/common/locales/pt_BR/questscontent.json index 129d6c6b4d..ada4ff6c3c 100644 --- a/website/common/locales/pt_BR/questscontent.json +++ b/website/common/locales/pt_BR/questscontent.json @@ -59,17 +59,17 @@ "questSpiderDropSpiderEgg": "Aranha (Ovo)", "questSpiderUnlockText": "Desbloqueia Ovos de Aranha para compra no Mercado", "questGroupVice": "Vício, o Dragão Sombrio", - "questVice1Text": "Vício – Parte 1: Liberte-se do Controle do Dragão", + "questVice1Text": "Vício - Parte 1: Liberte-se do Controle do Dragão", "questVice1Notes": "

Dizem que um mal horrível vive nas cavernas do Monte Habitica. Um monstro cuja presença corrompe a mente dos heróis mais fortes da terra, levando-os a maus hábitos e preguiça! A besta é um grande dragão de poder imenso e composto pelas próprias sombras: Vício, o traiçoeiro Dragão das Sombras. Bravos Habiticanos, se acreditam que podem sobreviver a este poder imenso, peguem as suas armas e derrotem esta besta imunda de uma vez por todas.

Vício, Parte 1:

Como podem pensar que podem lutar contra a besta se ela já tem controle sobre vocês? Não sejam vítimas da preguiça e do vício! Trabalhem arduamente e libertem-se da influência negra que o dragão tem sobre vocês!", "questVice1Boss": "A Sombra do Vício", "questVice1Completion": "Com a influência de Vício sob você dissipada, você sente uma onda de força que não sabia que tinha voltar para você. Parabéns! Mas um inimigo ainda mais assustador está à sua espera...", - "questVice1DropVice2Quest": "Vício – Parte 2 (Pergaminho)", - "questVice2Text": "Vício – Parte 2: Encontre o Covil do Dragão", + "questVice1DropVice2Quest": "Vício - Parte 2 (Pergaminho)", + "questVice2Text": "Vício - Parte 2: Encontre o Covil do Dragão", "questVice2Notes": "Confiantes em si mesmos e em suas habilidades de resistirem à influência de Vício, o Dragão Sombrio, seu grupo chega ao Monte Habitica. Vocês se aproximam da entrada das cavernas da montanha e param. Amontoados de sombras, quase como uma névoa, surgem da abertura. É praticamente impossível enxergar qualquer coisa à sua frente. A luz das lanternas parece acabar abruptamente onde as sombras começam. Dizem que apenas luz mágica pode atravessar a névoa infernal do dragão. Se conseguirem encontrar cristais de luz suficientes, poderão encontrar o caminho até o dragão.", "questVice2CollectLightCrystal": "Cristais de Luz", "questVice2Completion": "Assim que alcançam o último cristal, as sombras se dissipam e o caminho fica limpo. Com o coração acelerado, vocês adentram a caverna.", - "questVice2DropVice3Quest": "Vício – Parte 3 (Pergaminho)", - "questVice3Text": "Vício – Parte 3: O Despertar do Vício", + "questVice2DropVice3Quest": "Vício - Parte 3 (Pergaminho)", + "questVice3Text": "Vício - Parte 3: O Despertar do Vício", "questVice3Notes": "Depois de muito esforço, seu grupo descobriu o covil do Vício. O poderoso monstro olha o seu grupo com aversão. Conforme a escuridão o cerca, uma voz sussurra na sua cabeça, \"Mais cidadãos tolos de Habitica vieram me parar? Que fofo. Teria sido inteligente não virem.\" O titã escamoso recua sua cabeça e se prepara para atacar. Essa é sua chance! Dê tudo de si e derrote o Vício de uma vez por todas!", "questVice3Completion": "As sombras dissipam-se da caverna e um silêncio metálico surge. Não acredito, você conseguiu! Você derrotou o Vício. Você e seu grupo podem finalmente suspirar aliviados. Aproveitem sua vitória, bravos Habiticanos, mas levem consigo a lição que aprenderam ao lutar contra Vício e sigam em frente. Ainda há hábitos a serem feitos e potencialmente piores males para serem conquistados!", "questVice3Boss": "Vício, o Dragão Sombrio", @@ -77,34 +77,34 @@ "questVice3DropDragonEgg": "Dragão (Ovo)", "questVice3DropShadeHatchingPotion": "Poção de Eclosão Sombria", "questGroupMoonstone": "Ascensão da Recaída", - "questMoonstone1Text": "Recaída – Parte 1: A Corrente de Pedras da Lua", + "questMoonstone1Text": "Recaída - Parte 1: A Corrente de Pedras da Lua", "questMoonstone1Notes": "Uma doença terrível atingiu os Habiticanos. Maus Hábitos que achávamos estarem mortos a muito tempo estão voltando à vida para vingança. Louças ficam sujas, livros esquecidos e a procrastinação corre livremente!

Você segue alguns de seus velhos Maus Hábitos até os Pântanos da Estagnação e descobre o culpado: Recaída, a Necromante! Você avança para atacá-la com armas em mãos mas as armas passam direto pelo espectro dela.

\"Nem tente\", ela fala baixinho com a voz rouca. \"Sem uma corrente de pedras da lua, nada pode me machucar - e joalheiro @aurakami espalhou todas as pedras da lua por toda a Habitica a muito tempo atrás!\" Ofegante, você foge... mas você sabe o que precisa fazer.", "questMoonstone1CollectMoonstone": "Pedras da Lua", "questMoonstone1Completion": "Por fim, você coleta a última pedra da lua no meio da lama pantanosa. Chegou a hora de transformar sua coleção em uma arma capaz de finalmente derrotar Recaída!", - "questMoonstone1DropMoonstone2Quest": "Recaída – Parte 2: Recaída, a Necromante (Pergaminho)", - "questMoonstone2Text": "Recaída – Parte 2: Recaída, a Necromante", + "questMoonstone1DropMoonstone2Quest": "Recaída - Parte 2: Recaída, a Necromante (Pergaminho)", + "questMoonstone2Text": "Recaída - Parte 2: Recaída, a Necromante", "questMoonstone2Notes": "O bravo ferreiro @InspectorCaracal te ajuda a forjar uma corrente com as pedras da lua encantadas. Você, finalmente, está pronto para enfrentar Recaída, mas ao entrar no Pântano da Estagnação, você sente um arrepio terrível por todo seu corpo.

Um hálito podre sussurra no seu ouvido. \"De volta aqui? Mas que prazeroso... \" Você se vira e ataca e, sobre a luz da corrente de pedras da lua, sua arma atinge um corpo sólido. \"Você pode ter me trazido de volta ao mundo mais uma vez\", Recaída rosna, \"mas agora é sua hora de deixá-lo!\"", "questMoonstone2Boss": "A Necromante", "questMoonstone2Completion": "Recaída cambaleia para trás após você desferir o golpe final e, por um momento, seu coração se enche de esperança – mas então ela joga a cabeça para trás e solta uma risada maléfica. O que está acontecendo?", - "questMoonstone2DropMoonstone3Quest": "Recaída – Parte 3: Recaída Transformada (Pergaminho)", - "questMoonstone3Text": "Recaída – Parte 3: Recaída Transformada", + "questMoonstone2DropMoonstone3Quest": "Recaída - Parte 3: Recaída Transformada (Pergaminho)", + "questMoonstone3Text": "Recaída - Parte 3: Recaída Transformada", "questMoonstone3Notes": "Rindo pervesamente, Recaída desaba no chão e você a atinge novamente com a corrente de pedras da lua. Para seu horror, Recaída agarra as gemas, com os olhos brilhando em triunfo.

\"Sua criatura de carne idiota!\", ela grita. \"Essas pedras da lua vão recuperar a minha forma física, é verdade, mas não como você imaginou. Assim como a lua cheia cresce na escuridão, o meu poder floresce e das sombras eu invoco o espectro do teu inimigo mais temido!\"

Um nevoeiro verde ergue-se do pântano e o corpo de Recaída se contorce, transformando-se em algo que lhe enche de terror - o corpo morto-vivo do Vício, horrivelmente renascido.", "questMoonstone3Completion": "É difícil respirar e o suor arde os seus olhos enquanto o morto-vivo cai no chão. Os restos de Recaída se dissipam numa fina névoa cinzenta que desaparece rapidamente pela ação de uma brisa refrescante. Você ouve gritos distantes de combate de Habiticanos derrotando seus Maus Hábitos de uma vez por todas.

@Baconsaur, o Mestre das Bestas, desce de um grifo. \"Eu vi o fim de sua batalha do céu e fiquei comovido. Por favor, aceite esta túnica encantada - sua bravura é a de um coração nobre e eu acredito que você foi feito para recebê-la.\"", "questMoonstone3Boss": "Necro-Vício", "questMoonstone3DropRottenMeat": "Carne Estragada (Comida)", "questMoonstone3DropZombiePotion": "Poção de Eclosão Zumbi", "questGroupGoldenknight": "A Cavaleira Dourada", - "questGoldenknight1Text": "A Cavaleira Dourada – Parte 1: Uma Conversa Séria", + "questGoldenknight1Text": "A Cavaleira Dourada - Parte 1: Uma Conversa Séria", "questGoldenknight1Notes": "A Cavaleira Dourada está pegando no pé dos pobres Habiticanos. Não fez todas as suas Diárias? Marcou negativo em um Hábito? Ela vai usar isso como razão para te chatear, falando sobre como você deveria seguir o exemplo dela. Ela é o exemplo perfeito de um Habiticano e você não é nada além de uma falha. Bem, isso não é nada simpático! Todo mundo erra. Ninguém deveria ter que encarar tanto julgamento por isso. Provavelmente está na hora de você conseguir alguns depoimentos de Habiticanos ofendidos e ter uma conversa séria com a Cavaleira Dourada!", "questGoldenknight1CollectTestimony": "Testemunhos", "questGoldenknight1Completion": "Quantos testemunhos! Com certeza isso deve ser o bastante para convencer a Cavaleira Dourada. Agora tudo o que você precisa fazer é encontrá-la.", - "questGoldenknight1DropGoldenknight2Quest": "A Cavaleira Dourada – Parte 2: Cavaleira Dourada (Pergaminho)", - "questGoldenknight2Text": "A Cavaleira Dourada – Parte 2: Cavaleira de Ouro", + "questGoldenknight1DropGoldenknight2Quest": "A Cavaleira Dourada - Parte 2: Cavaleira Dourada (Pergaminho)", + "questGoldenknight2Text": "A Cavaleira Dourada - Parte 2: Cavaleira de Ouro", "questGoldenknight2Notes": "Em posse de centenas de testemunhos de habiticanos, você finalmente confronta a Cavaleira Dourada. Você começa a recitar as reclamações de habiticanos para ela, uma a uma. \"E @Pfeffernusse diz que seu enorme ego-\" A Cavaleira levanta sua mão para te silenciar e zomba, \"Por favor, essas pessoas estão somente com inveja do meu sucesso. Ao invés de reclamar, elas deveriam simplesmente se esforçar tanto quanto eu! Talvez eu deva mostrar-lhes o poder que vocês podem alcançar através de uma dedicação como a minha!\" Ela levanta sua maça e se prepara para te atacar!", "questGoldenknight2Boss": "Cavaleira Dourada", "questGoldenknight2Completion": "A Cavaleira Dourada abaixa sua maça em pavor. \"Eu peço perdão pelo meu ataque precipitado\", ela diz. \"A verdade, é que é doloroso pensar que eu estive machucando os outros sem perceber e isso me deixa sem defesa alguma... Mas talvez eu ainda possa pedir perdão?\"", - "questGoldenknight2DropGoldenknight3Quest": "A Cavaleira Dourada – Parte 3: O Cavaleiro de Ferro (Pergaminho)", - "questGoldenknight3Text": "A Cavaleira Dourada – Parte 3: O Cavaleiro de Ferro", + "questGoldenknight2DropGoldenknight3Quest": "A Cavaleira Dourada - Parte 3: O Cavaleiro de Ferro (Pergaminho)", + "questGoldenknight3Text": "A Cavaleira Dourada - Parte 3: O Cavaleiro de Ferro", "questGoldenknight3Notes": "@Jon Arinbjorn grita para conseguir sua atenção. Após a sua batalha, uma nova figura apareceu. Um cavaleiro coberto por ferro escurecido lentamente se aproxima de você com espada em mãos. A Cavaleira Dourada grita para a figura \"Pai, não!\", mas o cavaleiro não mostra sinais de que vai parar. Ela se vira para você e diz \"Me desculpe. Eu fui uma tola, com uma cabeça grande demais para ver quão cruel eu tenho sido. Mas meu pai é mais cruel do que eu jamais poderia ser. Se ele não for parado, ele destruirá a todos. Aqui, use minha maça e pare o Cavaleiro de Ferro!\"", "questGoldenknight3Completion": "Com um tinido gratificante, o Cavaleiro de Ferro cai de joelhos e desaba. \"Você é bem forte\", ele fala ofegante. \"Eu fui humilhado hoje.\" A Cavaleira Dourada se aproxima de você e diz, \"Obrigada. Eu acredito que ganhamos um pouco de humildade no nosso encontro com você. Eu conversarei com meu pai e explicarei as reclamações contra nós. Talvez nós devêssemos começar a nos desculpar com os outros habiticanos.\" Ela reflete em considerações antes de se voltar para você novamente. \"Aqui: como um presente nosso para você, eu quero que você fique com a minha maça. Ela é sua agora.\"", "questGoldenknight3Boss": "O Cavaleiro de Ferro", @@ -139,17 +139,17 @@ "questSeahorseDropSeahorseEgg": "Cavalo-Marinho (Ovo)", "questSeahorseUnlockText": "Desbloqueia Ovos de Cavalo-Marinho para compra no Mercado", "questGroupAtom": "Ataque do Mundano", - "questAtom1Text": "Ataque do Mundano – Parte 1: Desastre em Louça!", + "questAtom1Text": "Ataque do Mundano - Parte 1: Desastre em Louça!", "questAtom1Notes": "Você chegou às margens do Lago Lavado para um relaxamento merecido... Mas o lago está poluído com pratos sujos! Como isso aconteceu? Bem, você simplesmente não pode permitir que o lago continue neste estado. Há apenas uma coisa que você pode fazer: limpar os pratos e salvar o seu local de férias! Melhor encontrar algum sabão para limpar essa bagunça. Um monte de sabão...", "questAtom1CollectSoapBars": "Barras de Sabão", "questAtom1Drop": "O Monstro de Lanchinhoness (Pergaminho)", "questAtom1Completion": "Depois de esfregar exaustivamente, todas as louças estão perfeitamente empilhadas na margem do lago! Você dá um passo para trás e admira com orgulho o resultado do seu trabalho duro.", - "questAtom2Text": "Ataque do Mundano – Parte 2: O Monstro de Lanchinhoness", + "questAtom2Text": "Ataque do Mundano - Parte 2: O Monstro de Lanchinhoness", "questAtom2Notes": "Ufa, este lugar está ficando muito mais agradável com todos estes pratos limpos. Talvez você finalmente possa ter algum divertimento agora. Oh - parece haver uma caixa de pizza flutuando no lago. Bem, qual o problema de limpar mais uma coisa, não é verdade? Mas, infelizmente, não é uma mera caixa de pizza! Subitamente a caixa levanta da água para revelar-se como a cabeça de um monstro. Não pode ser! O Lendário Monstro de Lanchinhoness?! Dizem que ele existe escondido no lago desde os tempos pré-históricos: a criatura criada a partir dos restos de comida e lixo dos antigos Habiticanos. Eca!", "questAtom2Boss": "O Monstro de Lanchinhoness", "questAtom2Drop": "O Lavadeiromante (Pergaminho)", "questAtom2Completion": "Com um choro ensurdecedor, e cinco tipos de queijos deliciosos saindo de sua boca, O Monstro de Lanchinhoness cai aos pedaços. Bom trabalho, bravo aventureiro! Mas espere... Ainda tem algo estranho acontecendo nesse lago?", - "questAtom3Text": "Ataque do Mundano – Parte 3: O Lavadeiromante", + "questAtom3Text": "Ataque do Mundano - Parte 3: O Lavadeiromante", "questAtom3Notes": "Logo quando você pensou que os desafios tinham acabado, O Lago Vencido começa a agitar-se violentamente. \"COMO OUSAS!\" uma voz estrondosa emana da superfície da água. Uma figura azul usando uma túnica emerge da água, empunhando uma escova sanitária mágica. Roupas imundas começam a surgir na superfície do lago \"Eu sou o Lavadeiromante!\", ele anuncia com fúria. \"Você tem muita ousadia de lavar minha maravilhosa louça suja, destruir meu mascote e entrar no meu domínio com roupas tão limpas. Prepare-se para sentir o chorume de minha magia anti-limpeza!\"", "questAtom3Completion": "O perverso Lavadeiromante foi derrotado! Roupas limpas caem em pilhas ao seu redor. As coisas estão parecendo muito melhores por aqui. Quando você começa a avançar pela armadura recém-passada, um brilho de metal chama sua atenção, e seu olhar recai sobre um elmo reluzente. O proprietário original deste brilhante item pode ser desconhecido, mas quando você o coloca, sente a calorosa presença de um espírito generoso. Pena que eles não colocaram uma etiqueta com nome.", "questAtom3Boss": "O Lavadeiromante", @@ -229,13 +229,13 @@ "questWhaleDropWhaleEgg": "Baleia (Ovo)", "questWhaleUnlockText": "Desbloqueia Ovos de Baleia para compra no Mercado", "questGroupDilatoryDistress": "Lamento em Lentópolis", - "questDilatoryDistress1Text": "Lamento em Lentópolis – Parte 1: Mensagem na Garrafa", + "questDilatoryDistress1Text": "Lamento em Lentópolis - Parte 1: Mensagem na Garrafa", "questDilatoryDistress1Notes": "Uma mensagem em uma garrafa chegou da recente reconstruída cidade de Lentópolis! Lê-se: \"Queridos Habiticanos, precisamos da sua ajuda mais uma vez. Nossa princesa desapareceu e a cidade está sob o cerco de alguns estranhos demônios d'água! As lagostas-boxeadoras estão mantendo os invasores na baía. Por favor, nos ajude!\" Para fazer a longa viagem até a cidade submersa, é preciso ser capaz de respirar embaixo d'água. Felizmente, os alquimistas @Benga e @hazel podem fazer com que tudo isso seja possível! Vocês só tem que encontrar os ingredientes necessários.", "questDilatoryDistress1Completion": "Você veste a armadura com barbatanas e nada para Lentópolis o mais rápido possível. As pessoas-sereia e seus aliados camarões mantis conseguiram manter os monstros fora da cidade por enquanto, porém eles estão perdendo. Tão logo você adentra as muralhas do castelo, o horrível cerco ataca subitamente!", "questDilatoryDistress1CollectFireCoral": "Coral de Fogo", "questDilatoryDistress1CollectBlueFins": "Barbatanas Azuis", "questDilatoryDistress1DropArmor": "Armadura Oceânica com Barbatanas (Armadura)", - "questDilatoryDistress2Text": "Lamento em Lentópolis – Parte 2: As Feras da Fenda", + "questDilatoryDistress2Text": "Lamento em Lentópolis - Parte 2: As Feras da Fenda", "questDilatoryDistress2Notes": "O cerco pode ser visto de muito longe: milhares de crânios sem corpo que correm através de um portal nas fendas das paredes em direção à Lentópolis.

Quando você encontra o Rei Manta em sua sala de guerra, seus olhos parecem profundos e seu rosto, preocupado. \"Minha filha Adva desapareceu na Fenda Escura pouco antes deste cerco começar. Por favor, encontre-a e traga-a de volta para casa em segurança! Eu vou lhe emprestar a minha Tiara de Coral de Fogo para ajudá-lo. Se você tiver sucesso, ela é sua.\"", "questDilatoryDistress2Completion": "Você acaba com a horda assustadora de crânios, mas você não tem a menor ideia de como encontrar Adva. Você fala para @Kiwibot, a rastreadora real, para ver se ela tem alguma ideia. \"As lagostas-boxeadoras que defendem a cidade devem ter visto Adva fugir,\" diz @Kiwibot. \"Tente segui-los pela Fenda Escura.\"", "questDilatoryDistress2Boss": "Enxame da Caveiras D'água", @@ -245,7 +245,7 @@ "questDilatoryDistress2DropSkeletonPotion": "Poção de Eclosão Esqueleto", "questDilatoryDistress2DropCottonCandyBluePotion": "Poção de Eclosão Azul Algodão-Doce", "questDilatoryDistress2DropHeadgear": "Tiara de Coral Flamejante (Cabeça)", - "questDilatoryDistress3Text": "Lamento em Lentópolis – Parte 3: Não Serei Apenas a Sereia", + "questDilatoryDistress3Text": "Lamento em Lentópolis - Parte 3: Não Serei Apenas Sereia", "questDilatoryDistress3Notes": "Você segue as lagostas-boxeadoras Fenda adentro e descobre uma fortaleza subaquática. Princesa Adva, escoltada por crânios d'água, espera por você dentro do salão principal. \"Meu pai foi quem enviou você, não foi? Diga a ele que eu me recuso a voltar. Eu estou contente em ficar aqui e praticar meus feitiços. Saia agora, ou você irá sentir a ira da nova rainha do oceano!\" Adva parece muito inflexível, mas enquanto ela fala, você nota um estranho pingente de rubi em seu pescoço, brilhando de forma ameaçadora... Talvez seus delírios acabariam se você o destruísse?", "questDilatoryDistress3Completion": "Finalmente, você consegue puxar o pingente enfeitiçado do pescoço de Adva e jogá-lo fora. Adva balança a cabeça. \"Onde estou? O que aconteceu aqui?\" Depois de ouvir sua história, ela franze a testa. \"Este colar me foi dado por uma estranha embaixadora - uma senhora chamada 'Tzina'. Eu não me lembro de nada depois disso!\"

De volta à Lentópolis, Manta está muito feliz por seu sucesso. \"Permita-me recompensá-lo com este tridente e este escudo! Eu os encomendei do @aiseant e do @starsystemic como um presente para Adva, mas... eu prefiro não dar armas para ela tão cedo.\"", "questDilatoryDistress3Boss": "Adva, a Sereia Usurpadora", @@ -369,7 +369,7 @@ "questBeetleDropBeetleEgg": "Besouro (Ovo)", "questBeetleUnlockText": "Desbloqueia Ovos de Besouro para compra no Mercado", "questGroupTaskwoodsTerror": "Medo em Matarefa", - "questTaskwoodsTerror1Text": "Medo em Matarefa – Parte 1: A Chama em Matarefa", + "questTaskwoodsTerror1Text": "Medo em Matarefa - Parte 1: A Chama em Matarefa", "questTaskwoodsTerror1Notes": "Você nunca viu a Ceifadora Alegre tão agitada. A governante dos Campos Florescentes pousa sua montaria de grifo esqueleto bem no meio da Praça Produtividade e grita sem desmontar. \"Queridos Habiticanos, nós precisamos de sua ajuda! Alguma coisa está causando incêndios em Matarefa e nós ainda não nos recuperamos completamente da batalha contra Desgaste! Se não for contido, o fogo vai queimar todos nossos pomares e arbustos frutíferos!\"

Você rapidamente se volutaria e apressa até Matarefa. Enquanto adentra a maior floresta frutífera de Habitica, de repente escuta vozes estalando e retinindo à distância, e sente um leve cheiro de fumaça. Logo um enxame de caveiras flamejantes tagarelas passa voando por você, mordendo galhos e colocando fogo nas copas das árvores!", "questTaskwoodsTerror1Completion": "Com a ajuda da Ceifadora Alegre e a renomada piromante @Beffymaroo, vocês conseguem combater o enxame. Mostrando solidariedade, @Beffymaroo te oferece seu Turbante do Piromante quando você entra mais profundamente na floresta.", "questTaskwoodsTerror1Boss": "Enxame de Caveiras de Fogo", @@ -379,14 +379,14 @@ "questTaskwoodsTerror1DropSkeletonPotion": "Poção de Eclosão Esqueleto", "questTaskwoodsTerror1DropRedPotion": "Poção de Eclosão Vermelha", "questTaskwoodsTerror1DropHeadgear": "Turbante de Piromante (Cabeça)", - "questTaskwoodsTerror2Text": "Medo em Matarefa – Parte 2: Encontrando as Fadas Florescentes", + "questTaskwoodsTerror2Text": "Medo em Matarefa - Parte 2: Encontrando as Fadas Florescentes", "questTaskwoodsTerror2Notes": "Tendo enfrentado o enxame de caveiras flamejantes, você alcança um grande grupo de fazendeiros refugiados à beira da floresta. \"Suas vilas foram queimadas pelo renegado espírito do outono\", diz uma voz familiar. É @Kiwibot, o lendário rastreador! \"Consegui reunir os sobreviventes, mas não há sinal das Fadas Florescentes que ajudaram a cultivar os frutos selvagens de Matarefa. Por favor, você tem que me ajudar a resgatá-las!\"", "questTaskwoodsTerror2Completion": "Você encontra a última dríade e a leva para longe dos monstros. Quando retorna para os fazendeiros refugiados, você é recebido pelas agradecidas fadas, que te dão uma túnica tecida de magia e seda. De repente, um ronco profundo ecoa pelas árvores, tremendo o próprio chão. \"Deve ser o espírito renegado.\" a Ceifadora Alegre diz. \"Vamos nos apressar!\"", "questTaskwoodsTerror2CollectPixies": "Fadas", "questTaskwoodsTerror2CollectBrownies": "Brownies", "questTaskwoodsTerror2CollectDryads": "Dríades", "questTaskwoodsTerror2DropArmor": "Túnica de Piromante (Armadura)", - "questTaskwoodsTerror3Text": "Medo em Matarefa – Parte 3: Jack, o Espírito da Lanterna", + "questTaskwoodsTerror3Text": "Medo em Matarefa - Parte 3: Jack, o Espírito da Lanterna", "questTaskwoodsTerror3Notes": "Preparado pra batalha, seu grupo marcha para o coração da floresta, onde o espírito renegado está tentando destruir uma macieira anciã cercada por arbustos frutíferos. Sua cabeça de abóbora emite uma luz terrível para onde quer que ela vira e em sua mão esquerda segura uma longa barra, com uma lanterna pendurada na ponta. No lugar de fogo ou chamas, no entanto, a lanterna contém um cristal escuro que te arrepia até a espinha.

A Ceifadora Alegre põe uma mão esquelética na boca. \"Esse é... Esse é Jack, o Espírito da Lanterna! Mas ele é um fantasma da colheita que ajuda e guia nossos fazendeiros. O que pode ter acontecido para levar uma alma tão doce a agir assim?\"

\"Eu não sei\", diz @bridgetteempress. \"Mas parece que essa 'doce alma' está prestes a nos atacar!\"", "questTaskwoodsTerror3Completion": "Após uma longa batalha, você consegue acertar um golpe bem mirado na lanterna que Jack carrega e o cristal dentro dela se despedaça. Num estalo, Jack volta a si e se debulha em brilhantes lágrimas. \"Ó, minha linda floresta! O que eu fiz?!\", ele lamenta. Suas lágrimas apagam as chamas restantes, a macieira e os arbustos estão salvos.

Depois de você ajudá-lo a se acalmar, ele explica, \"Encontrei essa charmosa moça chamada Tzina e ela me deu esse brilhante cristal como presente. À pedido dela, eu o coloquei na minha lanterna... mas esta é a última coisa de que me lembro.\" Ele se vira para você com um sorriso dourado. \"Talvez você deva ficar com ela e protegê-la, enquanto eu ajudo os pomares selvagens a brotarem novamente.\"", "questTaskwoodsTerror3Boss": "Jack, o Espírito da Lanterna", @@ -403,17 +403,17 @@ "questDustBunniesCompletion": "Os Coelhos da Poeira desapareceram em um sopro de... bem, poeira. Conforme a visão clareia, você olha em volta. Você havia esquecido como esse lugar é quando está limpo. Você acha uma pequena pilha de ouro onde a poeira estava. Oh, você estava se perguntando onde aquilo estava!", "questDustBunniesBoss": "Coelhos Ferais da Poeira", "questGroupMoon": "Batalha Lunar", - "questMoon1Text": "Batalha Lunar, Parte 1: Encontre os Estilhaços Misteriosos", + "questMoon1Text": "Batalha Lunar - Parte 1: Encontre os Estilhaços Misteriosos", "questMoon1Notes": "Os Habiticanos foram distraídos de suas tarefas por algo estranho: estilhaços distorcidos de pedra estão aparecendo pelo continente. Preocupada, @Starsystemic, a Vidente, te convocou para sua torre. Ela disse, \"Tenho lido presságios alarmantes sobre estes estilhaços, que têm desgraçado nossa terra e levado esforçados Habiticanos à distração. Eu posso rastrear a fonte, mas primeiro preciso examinar os estilhaços. Você pode trazer alguns para mim?\"", "questMoon1Completion": "@Starststemic desaparece em sua torre para examinar os estilhaços que você trouxe. \"Isso pode ser mais complicado que temíamos\" disse @Berrymaroo, sua confiável assistente. \"Vai levar algum tempo para descobrir a causa. Continue fazendo check-in diariamente, e quando soubermos mais, enviaremos o pergaminho da próxima missão.\"", "questMoon1CollectShards": "Estilhaços Lunares", "questMoon1DropHeadgear": "Capacete de Guerreiro Lunar (Elmo)", - "questMoon2Text": "Batalha Lunar, Parte 2: Pare o Estresse Sombrio", + "questMoon2Text": "Batalha Lunar - Parte 2: Pare o Estresse Sombrio", "questMoon2Notes": "Após estudar os estilhaços, @Starsystemic, a Vidente, tem notícias ruins. \"Um velho monstro está se aproximando de Habitica, e está causando um terrível estresse nos cidadãos. Eu posso puxar a sombra para fora do coração das pessoas e para dentro desta torre, onde ele terá uma forma física, mas você precisará derrotá-lo antes que ele se solte e se espalhe novamente.\" Você acena e ela inicia o feitiço. Sombras dançantes preenchem o cômodo, pressionando-se umas contra as outras. O vento frio sopra, a escuridão se aprofunda. O Estresse Sombrio levanta do chão, sorri como um pesadelo real... e ataca!", "questMoon2Completion": "A sombra explode em um sopro de ar escuro, deixando o cômodo mais brilhante e seu coração mais leve. O estresse que cobria Habitica é diminuído e você pode suspirar aliviado. Mas, quando você olha para o céu, sente que não acabou: o monstro sabe que alguém destruiu sua sombra. \"Vamos manter vigília nas próximas semanas,\" diz @Starsystemic, \"e eu enviarei um pergaminho de missão quando ele se manifestar.\"", "questMoon2Boss": "Estresse Sombrio", "questMoon2DropArmor": "Armadura de Guerreiro Lunar (Armadura)", - "questMoon3Text": "Batalha Lunar, Parte 3: A Lua Monstruosa", + "questMoon3Text": "Batalha Lunar - Parte 3: A Lua Monstruosa", "questMoon3Notes": "Você recebeu um pergaminho urgente da @Starsystemic à meia noite e galopa até sua torre. \"O monstro está usando a lua cheia para tentar cruzar nosso reino,\" ela diz. \"Se ele conseguir, a onda de estresse será destruidora!\"

Para seu terror, você vê que o monstro está realmente usando a lua para se manifestar. Um olho brilhante abre em sua superfície rochosa e uma língua se desenrola por uma abertura, uma boca com presas. Você não pode deixar ela emergir totalmente!", "questMoon3Completion": "O monstro emergente explode de volta à sombra, e a lua se torna prateada conforme o perigo passa. Os dragões começam a cantar novamente e as estrelas brilham com uma luz suave. @Starsystemic, a Vidente, se abaixa e pega um estilhaço lunar. Ele brilha como prata em sua mão, antes de se transformar em uma magnífica foice de cristal.", "questMoon3Boss": "Lua Monstruosa", @@ -431,7 +431,7 @@ "questTriceratopsDropTriceratopsEgg": "Triceratops (Ovo)", "questTriceratopsUnlockText": "Desbloqueia Ovos de Triceratops para compra no Mercado", "questGroupStoikalmCalamity": "Selvageria em Stoïkalm", - "questStoikalmCalamity1Text": "Selvageria em Stoïkalm – Parte 1: Inimigos da Terra", + "questStoikalmCalamity1Text": "Selvageria em Stoïkalm - Parte 1: Inimigos da Terra", "questStoikalmCalamity1Notes": "Uma mensagem chega de @Kiwibot, e o pergaminho gelado congela seu coração e seus dedos. \"Visitando os Campos de Stoikalm -- monstros saindo de dentro da terra -- mande ajuda!\" Você reúne seu grupo e cavalga para o norte, mas assim que você desce das montanhas, a neve abaixo de seus pés explode e caveiras sorridentes te cercam!

De repente, uma lança passa ao seu lado, atravessando uma caveira e enterrando ela na neve que estava tentando te pegar despercebido. Uma forte mulher com uma armadura bem trabalhada galopa para a briga nas costas de um mastodonte, sua longa trança balança enquanto ela arranca a lança sem cerimônias da besta esmagada. É hora de lutar contra estas bestas com a ajuda da Lady Glaciata, a líder dos Cavaleiros de Mamute!", "questStoikalmCalamity1Completion": "Ao dar o último golpe nas caveiras, elas se dissipam num passe de mágica. \"O enxame amaldiçoado se foi\", Lady Glaciata diz, \"mas nós temos problemas maiores. Sigam-me.\" Ela te passa uma capa para te proteger do ar congelante e você cavalga atrás dela.", "questStoikalmCalamity1Boss": "Enxame de Caveira da Terra", @@ -441,12 +441,12 @@ "questStoikalmCalamity1DropSkeletonPotion": "Poção de Eclosão Esqueleto", "questStoikalmCalamity1DropDesertPotion": "Poção de Eclosão Deserto", "questStoikalmCalamity1DropArmor": "Armadura do Cavaleiro de Mamute", - "questStoikalmCalamity2Text": "Selvageria em Stoïkalm – Parte 2: Procure as Cavernas Gélidas", + "questStoikalmCalamity2Text": "Selvageria em Stoïkalm - Parte 2: Procure as Cavernas Gélidas", "questStoikalmCalamity2Notes": "O salão majestoso dos Cavaleiros de Mamute é uma obra-prima incrível de arquitetura, mas também está inteiramente vazia. Não há móveis, não há armas e até as colunas estão sem suas decorações.

\"Aqueles crânios limparam este lugar,\" Lady Glaciata diz lançando um hálito de nevasca. \"Humilhante. Nenhuma alma deve mencionar isso ao Lorde Diabril, ou eu nunca vou parar de ouvir sobre isso.\"

\"Que misterioso!\" diz @Beffymaroo. \"Mas onde eles--\"

\"As caverna do dragão de gelo.\" Lady Glaciata gesticula para brilhantes moedas jogadas na neve lá fora. \"Descuidado.\"

\"Mas não são dragões de gelo criaturas que respeitam seu próprio tesouro?\" @Beffymaroo pergunta. \"Por que eles possivelmente--\"

\"Controle da mente,\" diz Lady Glaciata, completamente sem foco. \"Ou algo igualmente melodramático e inconveniente.\" Ela começa a andar no corredor. \"Por que você está aí parado?\"

Rápido, vá seguir a trilha das Moedas de Gelo!", "questStoikalmCalamity2Completion": "As Moedas de Gelo te levam diretamente a uma entrada enterrada de uma caverna muito bem escondida. Apesar do clima do lado de for ser calmo e amável, com a luz do sol esparramada pela neve, dentro da caverna há um grande barulho, perfurante como o gélido vento. Lady Glaciata te entrega um Elmo do Cavaleiro de Mamute. \"Use isto,\" ela diz. \"Você vai precisar.\"", "questStoikalmCalamity2CollectIcicleCoins": "Moedas de Gelo", "questStoikalmCalamity2DropHeadgear": "Elmo do Cavaleiro de Mamute (Cabeça)", - "questStoikalmCalamity3Text": "Selvageria em Stoïkalm – Parte 3: Terremoto do Dragão de Gelo", + "questStoikalmCalamity3Text": "Selvageria em Stoïkalm - Parte 3: Terremoto do Dragão de Gelo", "questStoikalmCalamity3Notes": "Os tortos túneis das cavernas dos dragões de gelo brilham com geada... e com riquezas incalculáveis. Você fica boquiaberto, mas Lady Glaciata avança sem olhar. \"Excessivamente chamativa\", diz ela. \"Obtido de modo admirável, no entanto, de respeitoso trabalho mercenário e prudentes investimentos bancários. Olhe para frente.\" Focando o olhar, você vê uma torre com uma pilha de itens roubados escondidos na sombra.

Uma voz fala baixinho enquanto você se aproxima. \"Meu delicioso tesouro, você não vai roubá-lo de volta de mim!\" Um curvado corpo desliza da pilha: a própria Rainha Dragão de Gelo! Você tem tempo suficiente para notar os estranhos braceletes reluzentes nos pulsos dela e a selvageria gritante em seus olhos antes dela lançar um rugido que treme toda a terra ao seu redor.", "questStoikalmCalamity3Completion": "Você derrota a Rainha Dragão de Gelo, dando à Lady Glaciata tempo para quebrar os reluzentes braceletes. A Rainha se encolhe em aparente mortificação, então rapidamente se cobre com uma pose orgulhosa. \"Sinta-se livre para remover estes itens estranhos,\" ela diz. \"Tenho medo que eles simplesmente não sirvam para nossa decoração.\"

\"Afinal, você os roubou,\" @Beffymaroo diz. \"Ao invocar os monstros da terra.\"

A Rainha Dragão de Gelo parece ofendida. \"Vá atrás dessa infeliz vendedora de braceletes quebrados,\" ela diz. \"É Tzina que você quer. Eu não tinha relação com isso.\"

Lady Glaciata aperta sua mão. \"Você trabalhou bem hoje,\" ela diz, te dando uma lança e um chifre da pilha de itens. \"Sinta orgulho.\"", "questStoikalmCalamity3Boss": "Rainha Dragão de Gelo", @@ -472,7 +472,7 @@ "questButterflyDropButterflyEgg": "Lagarta (Ovo)", "questButterflyUnlockText": "Desbloqueia Ovos de Lagarto para compra no Mercado", "questGroupMayhemMistiflying": "Batalha em Borbópolis", - "questMayhemMistiflying1Text": "Batalha em Borbópolis – Parte 1: Borbomágica Experimenta um Terrível Destino", + "questMayhemMistiflying1Text": "Batalha em Borbópolis - Parte 1: Borbomágica Experimenta um Terrível Destino", "questMayhemMistiflying1Notes": "Apesar dos adivinhos locais terem previsto um bom clima, a tarde está com ventos fortíssimos, então você devagar segue seu amigo @Kiwibot até sua casa para escapar deste dia de ventos fortes.

Nenhum dos dois espera encontrar Lorde Diabril relaxando na mesa da cozinha.

\"Ahh, olá\", ele diz. \"Que bom encontrar vocês aqui. Por favor, me deixe te oferecer um pouco deste delicioso chá.\"

\"Esse...\", @Kiwibot começa. \"Esse é MEU...\"

\"Sim, sim, claro,\" diz Lorde Diabril, enquanto pega uns biscoitos. \"Só pensei que eu poderia entrar aqui e me livrar um pouco de todas as caveiras conjuradoras de tornados.\" Ele beberica um pouco seu chá. \"Incidentalmente, a cidade de Borbópolis está sendo atacada.\"

Horrorizado, você e seus amigos correm para os estábulos e selam sua mais rápida montaria voadora. Enquanto vocês planam acima da cidade flutuante, vocês veem que um conjunto barulhento de caveiras voadoras está de olho na cidade... e muitas percebem e se viram na sua direção!", "questMayhemMistiflying1Completion": "A última caveira cai do céu, com um brilhante conjunto de roupas de arco-íris preso em sua mandíbula, mas a ventania não diminuiu. Algo mais está agindo aqui. E onde está o preguiçoso Lorde Diabril? Você pega as roupas e entra na cidade.", "questMayhemMistiflying1Boss": "Enxame de Caveiras Voadoras", @@ -482,14 +482,14 @@ "questMayhemMistiflying1DropSkeletonPotion": "Poção de Eclosão Esqueleto", "questMayhemMistiflying1DropWhitePotion": "Poção de Eclosão Branca", "questMayhemMistiflying1DropArmor": "Túnica do Mensageiro Arco-Íris Malandro (Armadura)", - "questMayhemMistiflying2Text": "Batalha em Borbópolis – Parte 2: E o Vento Piora", + "questMayhemMistiflying2Text": "Batalha em Borbópolis - Parte 2: E o Vento Piora", "questMayhemMistiflying2Notes": "Borbópolis começa a trepidar enquanto as abelhas mágicas que a mantém flutuando são golpeadas pelo vendaval. Depois de uma busca desenfreada pelo Lorde Diabril, vocês o encontram numa cabana, alegremente jogando cartas com uma caveira amarrada e com raiva.

@Katy133 levanta a voz através do assobiante vento. \"O que está causando isto? Nós derrotamos as caveiras, mas isto está piorando!\"

\"Esse é o problema\", Lorde Diabril concorda. \"Por favor seja uma dama e não comente com a Lady Glaciata. Ela sempre fica reclamando e querendo acabar nossa relação por eu ser 'catastroficamente irresponsável' e eu tenho medo que ela possa entender mal essa situação.\" Ele embaralha as cartas. \"Talvez você possa seguir as Borbomágicas? Elas são imateriais, então o vento não pode jogar elas pra longe. Além disso, elas costumam se concentrar próximo de ameaças.\" Ele mostra a janela onde várias das criaturas patronas da cidade estão flutuando em direção leste. \"Agora me deixe concentrar... Meu oponente não está com uma cara boa.\"", "questMayhemMistiflying2Completion": "Você segue as Borbomágicas para o lugar do tornado, onde está muito forte para você continuar.

\"Isso deve ajudar,\" diz uma voz diretamente no seu ouvido, tanto que você quase cai da sua montaria. O Lorde Diabril está, de alguma forma, sentado bem ao seu lado na sela da montaria. \"Eu ouvi que aqueles capuz de mensageiros emitem uma aura que protege contra maus climas... Bem útil para não perder cartas enquanto se voa por aí. Talvez você possa tentar?\"", "questMayhemMistiflying2CollectRedMistiflies": "Borbomágica Vermelha", "questMayhemMistiflying2CollectBlueMistiflies": "Borbomágica Azul", "questMayhemMistiflying2CollectGreenMistiflies": "Borbomágica Verde", "questMayhemMistiflying2DropHeadgear": "Capuz do Mensageiro Arco-Íris Malandro (Cabeça)", - "questMayhemMistiflying3Text": "Batalha em Borbópolis – Parte 3: O Carteiro que é Extremamente Rude", + "questMayhemMistiflying3Text": "Batalha em Borbópolis - Parte 3: O Carteiro que é Extremamente Rude", "questMayhemMistiflying3Notes": "As Borbomágicas estão girando tão rápido no tornado que é difícil vê-las. Olhando atentamente, você vê uma silhueta de algo com várias asas voando no centro da imensa tempestade.
\"Ai ai ai\", Lorde Diabril suspira, quase não se ouve por culpa do barulho da tempestade. \"Parece que Winny, de alguma forma, foi possuído. Problema bem comum, isso daí. Pode acontecer com qualquer um.\"

\"O Manipulador do Vento!\" @Beffymaroo grita para você. \"Ele é o mensageiro-mago mais talentoso de Borbópolis, exatamente por ser tão bom com magias do clima. Normalmente, ele é um mensageiro bem educado!\"

Como se quisesse desmentir essa última frase, o Manipulador do Vento lança um grito de fúria e mesmo com seu manto mágico, a tempestade quase te derruba de sua montaria.

\"Essa máscara toda cheguei é nova\", Lorde Diabril nota. \"Talvez você devesse livrar ele da máscara?\"

É uma boa ideia... mas o mago em fúria não vai desistir sem uma boa briga.", "questMayhemMistiflying3Completion": "Logo quando você acreditava que não poderia aguentar o vento nenhum pouco mais, você consegue se esgueirar e arrancar a máscara do Manipulador do Vento. Instantaneamente, o tornado desaparece, deixando apenas uma reparadora brisa com o brilho do sol. O Manipular do Vento olha ao redor aliviado. \"Aonde ela foi?\"

\"Quem?\", seu amigo @khdarkwolf pergunta.

\"Aquela doce mulher que se ofereceu para entregar um pacote por mim. Tzina.\" Ao notar a cidade que fora atacada pelo vento, sua expressão cai. \"Então, talvez ela não fosse tão doce...\"

Lorde Diabril o consola e entrega dois envelopes brilhantes. \"Aqui, por que você não deixa esse cansado amigo descansar e toma conta das cartas um pouco? Eu ouvi que a mágica nesses envelopes farão valer à pena seu tempo.\"", "questMayhemMistiflying3Boss": "O Manipulador do Vento", @@ -518,18 +518,18 @@ "witchyFamiliarsNotes": "Contém \"O Rei Rato\", \"O Aracnídeo de Gelo\" e \"Pântano do Sapo Bagunceiro\".", "questGroupLostMasterclasser": "Mistério dos Mestres de Classe", "questUnlockLostMasterclasser": "Para desbloquear essa missão, complete as missões finais dessa cadeia de missões: \"Batalha em Borbópolis\", \"Lamento em Lentópolis\", \"Medo em Matarefa\" e \"Selvageria em Stoïkalm\".", - "questLostMasterclasser1Text": "O Mistério dos Mestres de Classe, Parte 1: Leia as Entrelinhas", + "questLostMasterclasser1Text": "O Mistério dos Mestres de Classe - Parte 1: Leia as Entrelinhas", "questLostMasterclasser1Notes": "Inesperadamente, você é convocado por @beffymaroo e @Lemoness ao Salão do Hábito, onde fica atônito ao encontrar os quatro Mestres de Classe esperando por você sob a pálida luz da alvorada. Até mesmo a Ceifadora Alegre parece sombria.

\"Oho, você está aqui\", diz Lorde Diabril. \"Não tiraríamos você de seu descanso sem um motivo terrível...\"

\"Ajude-nos a investigar o recente ataque de possessões\", interrompe Lady Glaciata. \"Todas as vítimas culpam uma pessoa chamada Tzina.\"

Lorde Diabril fica claramente ofendido com a interrupção. \"E quanto ao meu discurso?\" ele chia com ela. \"Com o nevoeiro e as trovoadas?\"

\"Temos pressa\", ela murmura de volta. \"E meus mamutes ainda estão encharcados por causa de sua prática incessante.\"

\"Receio que a estimada Mestre dos Guerreiros está certa,\" diz o Rei Manta. \"Tempo é essencial. Você nos ajudará?\"

Quando você concorda, ele agita sua varinha e abre um portal, revelando uma sala subaquática. \"Nade comigo até Dilatória e buscaremos em minha biblioteca por qualquer referência que nos dê uma pista.\" Ao perceber sua confusão, diz \"Não se preocupe. O papel foi encantado muito antes de Dilatória afundar. Nenhum dos livros está nem perto de estar molhado!\" Ele pisca. \"Diferente dos mamutes de Lady Glaciata.\"

\"Eu escutei isso, Manta.\"

Ao mergulhar na água após o Mestre dos Magos, suas pernas magicamente se transformam em nadadeiras. Embora seu corpo esteja flutuando, seu coração afunda ao ver as milhares de prateleiras. É melhor começar a leitura…", "questLostMasterclasser1Completion": "Após horas de busca nos volumes, você ainda não encontrou nenhuma informação útil.

\"É impossível que não exista nenhuma mísera referência a qualquer coisa relevante,\" diz a bibliotecária \"@Tuqjoi e seu assistente @stefalupagus concorda frustrado.

Os olhos de Rei Manta se estreitam. \"Impossível não...\" ele diz. \"Intencional.\" Por um instante a água brilha em volta de suas mãos e vários livros se arrepiam. \"Alguma coisa está obscurecendo a informação,\" ele diz. \"Não apenas um feitiço simples, mas algo com vontade própria. Algo... vivo.\" Ele nada para fora da mesa. \"A Ceifadora Alegre precisa saber disso. Vamos preparar algo para comer na estrada.\"", "questLostMasterclasser1CollectAncientTomes": "Tomos Antigos", "questLostMasterclasser1CollectForbiddenTomes": "Tomos Proibidos", "questLostMasterclasser1CollectHiddenTomes": "Tomos Escondidos", - "questLostMasterclasser2Text": "O Mistério dos Mestres de Classe, Parte 2: Conjurando o Esqui'vão", + "questLostMasterclasser2Text": "O Mistério dos Mestres de Classe - Parte 2: Conjurando o Esqui'vão", "questLostMasterclasser2Notes": "A Ceifadora Alegre batuca seus dedos ósseos em alguns dos livros que você trouxe. \"Oh, minha cara,\" a Mestre dos Curandeiros diz. \"Existe uma essência de vida malévola em ação. Eu deveria ter percebido, considerando os ataques de crânios reanimados durante cada incidente.\" Sua assistente @tricksy.fox traz um baú e você se assusta ao ver o conteúdo que @beffymaroo despeja: os mesmos objetos usados por essa misteriosa Tzina para possuir as pessoas.

\"Vou usar magia de cura ressonante para fazer com que essa criatura se manifeste,\" diz a Ceifadora Alegre, lembrando a você que o esqueleto é de alguma forma um Curandeiro não convencional. \"Você precisa ler a mensagem revelada rapidamente, caso a criatura saia do nosso controle.\"

Conforme ela se concentra, uma névoa torcida começa a sair dos livros e envolver os objetos. Rapidamente, você viras as páginas tentando ler as novas linhas de texto que se aproximam. Você consegue pegar apenas alguns trechos: \"Areias dos Tempos Perdidos\" - \"o Grande Desastre\" - \"dividir em quatro\" - \"permanentemente corrompido\" - Até que um nome chama a sua atenção: Zinnya.

De forma bruta, as páginas se libertam de seus dedos e se destroem enquanto uma criatura uivante explode em existência, fundindo-se em torno dos objetos possuídos.

\"É um Esqui'vão!\" a Ceifadora Alegre grita, conjurando um feitiço de proteção. \"São criaturas antigas de confusão e obscuridade. Se essa Tzina pode controlar uma delas, ela deve possuir um comando assustador sobre a vida mágica. Rápido, ataque-a antes que escape de volta para os livros!\"

", "questLostMasterclasser2Completion": "O Esqui'vão finalmente sucumbe e você partilha os trechos que lê.

\"Nenhuma dessas referências me parecem familiar, mesmo para alguém tão velha quanto eu,\" diz a Ceifadora Alegre. \"Exceto... os Tempos Perdidos são um deserto distante, nos limites mais hostis do Habitica. Portais frequentemente falham na região, mas montarias rápidas podem levar você até lá bem rápido. Lady Glaciata com prazer irá te ajudar.\" Sua voz soa divertida. \"O que significa que o Mestre dos Ladinos enamorado certamente virá junto.\" Ela entrega uma máscara cintilante a você. \"Talvez você deva tentar rastrear a magia que persiste nesses itens até sua origem. Eu irei colher algum sustento para a sua jornada.\"", "questLostMasterclasser2Boss": "O Esqui'vão", "questLostMasterclasser2DropEyewear": "Máscara Etérea (Acessório de Olhos)", - "questLostMasterclasser3Text": "O Mistério dos Mestres de Classe, Parte 3: Cidade nas Areias", + "questLostMasterclasser3Text": "O Mistério dos Mestres de Classe - Parte 3: Cidade nas Areias", "questLostMasterclasser3Notes": "Assim que a noite cai sobre as areias incandescentes de Tempo Perdido, seus guias @AnndeLuna, @KiwiBot e @Katy133 conduzem o caminho à frente. Alguns pilares descoloridos despontam sobre as dunas sombrias e, ao se aproximarem, um som arrepiante ecoa por toda aquela que, antes, parecia ser uma área abandonada.

\" Criaturas invisíveis!\", diz Lorde Diabril, claramente tomado pela cobiça. \"Hehehe...! Imaginem só as possibilidades. Este deve de ser um trabalho de um Ladino realmente furtivo\"

\" Um Ladino que pode estar nos vigiando\", diz Lady Glaciata, desmontando de seu corcel e brandindo sua lança.\" Se eles estão prontos para atacar, tentem não irritar os nossos oponentes . Eu não quero outro incidente como o dos vulcões.\"

Ele então sorri para ela. \"Mas aquele foi com certeza um dos seus resgastes mais esplêndidos.\"

Para sua surpresa, Lady Glaciata cora com o elogio. Ela rapidamente aperta o passo para examinar as ruínas.

\"Parecem as ruínas de uma antiga cidade\", diz @AnnDeLune. \"Eu só fico imaginando o quê...\"

Antes que ela pudesse terminar sua fala, um portal abre-se ruidoso no céu. Este tipo de conjuração mágica não deveria ser praticamente impossível aqui?! Você ouve o trote brusco dos animais invisíveis ao fugirem em pânico e prontamente se põe em guarda - contra as uivantes caveiras que transbordam dos céus prontas para um massacre.", "questLostMasterclasser3Completion": "Lorde Diabril surpreende a última caveira com um spray de areia e ela recua até Lady Glaciata, que a destroi com destreza. Bom, respire fundo e de uma olhada, você vê a silhueta de alguém movendo por um único instante no outro lado do portal que está se fechando. Quase como reflexo, você estende a mão para o baú dos itens previamente conquistados e se agarra ao amuleto, e com determinação, vai em direção da pessoa invisível. Ignorando os gritos de aviso de Lady Glaciata e Lorde Diabril, você salta pelo portal instantes antes dele fechar, sendo submerso em um pegajoso vazio.", "questLostMasterclasser3Boss": "Enxame de Caveiras do Vácuo", @@ -542,7 +542,7 @@ "questLostMasterclasser3DropPinkPotion": "Poção Rosa Algodão-Doce", "questLostMasterclasser3DropShadePotion": "Poção Sombria", "questLostMasterclasser3DropZombiePotion": "Poção de Eclosão Zumbi", - "questLostMasterclasser4Text": "O Mistério dos Mestres de Classe, Parte 4: A Mestra Desaparecida", + "questLostMasterclasser4Text": "O Mistério dos Mestres de Classe - Parte 4: A Mestra Desaparecida", "questLostMasterclasser4Notes": "Você emerge do portal, ainda suspenso em um estranho, e instável, submundo “Aquilo foi ousado,” diz uma voz fria. “Eu devo admitir, ainda não havia planejado uma batalha direta” Uma mulher ascende do redemoinho revolto em trevas. “Bem-vindo(a) ao reino do vácuo.”

Você tenta lutar contra uma sensação nauseante enquanto pergunta \"Você é a Zinnya?”

“Este é um velho nome para uma jovem idealista” ela diz com a boca contorcendo enquanto o mundo distorce sobre seus pés “Não! Se realmente precisa de um nome, deve me chamar como a Anti’zinnya agora, depois de tudo que eu fiz e desfiz.”

De repente, o portal reabre atrás de você e dele saltam todos os quatro mestres de classes, correndo em sua direção. Os olhos da Anti’zinnya’s estão preenchidos de ódio ao olhar essa cena. “Vejo que meus patéticos substitutos conseguiram chegar até você”

Você não acredita. “Substitutos?”

“Como mestre dobradora do ether, eu fui a primeira mestre de classe - a única mestre de classe. Esses quatro são patéticos, cada um possuindo apenas um fragmento do que um dia eu tive! Eu comandei cada magia, eu aprendi todas as habilidades. Eu quem criei o seu mundo pela minha vontade - até que o traiçoeiro ether se colapsou sobre o peso dos meus talentos e das minhas expectativas perfeitamente razoáveis. Depois, eu estive aprisionada por milênios nesse vácuo resultante, me recuperando. Imagina meu desgosto quando descobri o quanto meu legado foi corrompido. Ela deixa escapar uma fina, ecoante risada. “Meu plano era demolir seus domínios antes de destruir cada um de vocês, mas suponho que a ordem dos fatores é irrelevante” Com uma explosão de força desenfreada ela dispara em sua direção, e o Reino do Vácuo explode em caos.", "questLostMasterclasser4Completion": "Durante a investida de seu último ataque, a Mestra Desaparecida grita com frustração, e o corpo dela oscila em translucidez. O vazio começa envolve-la enquanto ela cai para frente, e por um momento, você enxerga ela se transformar, se tornando mais jovem, calma, e com uma expressão de paz em seu rosto... mas acaba com tudo esvaindo-se como apenas um sussurro, e você se encontra mais uma vez de joelhos no meio do deserto.

\"Parece que nós temos muito o que aprender sobre nossa história\", diz o Rei Manta, olhando para as ruínas. \"Depois da Mestra Dobradora de Éter ter crescido sobrecarregada e perder o controle sob suas habilidades, o vazio derramado levou toda a vida desta terra. Provavelmente tudo o que se conhece poderia se tornar um deserto como este\"

\"Não é de se espantar que os antigos fundadores de Habitica sempre insistiam no equilíbrio da produtividade e do bem estar\", murmura a Ceifadora Alegre. \"Reconstruir o mundo deles deve ter sido uma tarefa assustadora de um longo e árduo trabalho, mas eles deveriam querer prevenir que tal catástrofe acontecesse novamente.\"

\"Uau, olhe aqueles itens primitivos!\", diz Lorde Diabril. Com certeza, todos eles brilham com a pálido e translúcida cintilação vinda da explosão final de éter que ocorreu quando você colocou o espírito de Anti’zinnya’s para dormir. \"Que efeito deslumbrante. Eu devo fazer anotações.\"

\"Provavelmente o restos concentrados de éter nessa área, também tornaram os animais invisíveis\", diz Lady Glaciata, ao coçar a cabeça de uma silhueta vazia atrás das orelhas. Você sente uma cabeça fofa e invisível tocar a palma de sua mão e suspeita que terá que dar explicações aos estábulos quando voltar para casa. Ao olhar as ruínas uma última vez, você vê o que sobrou da primeira Mestra de Classes: sua capa brilhante. Colocando-a em seus ombros, você volta para Cidade dos Hábitos, pensando sobre tudo que aprendeu.

", "questLostMasterclasser4Boss": "Anti'zinnya", diff --git a/website/common/locales/pt_BR/settings.json b/website/common/locales/pt_BR/settings.json index 85bd106a22..0cea094d16 100644 --- a/website/common/locales/pt_BR/settings.json +++ b/website/common/locales/pt_BR/settings.json @@ -55,7 +55,6 @@ "APIToken": "API Token (isso é uma senha - veja o aviso acima!)", "showAPIToken": "Mostrar API Token", "hideAPIToken": "Esconder API Token", - "APITokenWarning": "Se você precisa de um novo API Token (caso você tenha compartilhado seu Token acidentalmente, por exemplo), envie um email para <%= hrefTechAssistanceEmail %> informando seu ID de usuário e Token atual. Você precisará conceder autorizações novamente quando o Token for redefinido, então deslogue do site, do aplicativo e também informe o novo Token para qualquer ferramenta do Habitica que você usar.", "thirdPartyApps": "Aplicativos de terceiros", "resetDo": "Sim, reinicie minha conta!", "resetComplete": "Reinício completo!", diff --git a/website/common/locales/ro/front.json b/website/common/locales/ro/front.json index b9d87e68fb..0111e59a6d 100644 --- a/website/common/locales/ro/front.json +++ b/website/common/locales/ro/front.json @@ -66,7 +66,7 @@ "pkQuestion3": "Why did you add social features?", "pkAnswer3": "Social pressure is a huge motivating factor for a lot of people, so we knew that we wanted to have a strong community that would hold each other accountable for their goals and cheer for their successes. Luckily, one of the things that multiplayer video games do best is foster a sense of community among their users! Habitica’s community structure borrows from these types of games; you can form a small Party of close friends, but you can also join a larger, shared-interest groups known as a Guild. Although some users choose to play solo, most decide to form a support network that encourages social accountability through features such as Quests, where Party members pool their productivity to battle monsters together.", "pkQuestion4": "Why does skipping tasks remove your avatar’s health?", - "pkAnswer4": "If you skip one of your daily goals, your avatar will lose health the following day. This serves as an important motivating factor to encourage people to follow through with their goals because people really hate hurting their little avatar! Plus, the social accountability is critical for a lot of people: if you’re fighting a monster with your friends, skipping your tasks hurts their avatars, too.", + "pkAnswer4": "If you skip one of your daily goals, your avatar will lose health the following day. This serves as an important motivating factor to encourage people to follow through with their goals because people really hate hurting their little avatar! Plus, the social accountability is critical for a lot of people: if you’re fighting a monster with your friends, skipping your tasks hurts their avatars, too.", "pkQuestion5": "What distinguishes Habitica from other gamification programs?", "pkAnswer5": "One of the ways that Habitica has been most successful at using gamification is that we've put a lot of effort into thinking about the game aspects to ensure that they are actually fun. We've also included many social components, because we feel that some of the most motivating games let you play with friends, and because research has shown that it's easier to form habits when you have accountability to other people.", "pkQuestion6": "Who is the typical user of Habitica?", @@ -133,7 +133,7 @@ "invalidReqParams": "Invalid request parameters.", "memberIdRequired": "\"member\" must be a valid UUID.", "heroIdRequired": "\"heroId\" must be a valid UUID.", - "cannotFulfillReq": "Your request cannot be fulfilled. Email admin@habitica.com if this error persists.", + "cannotFulfillReq": "Your request cannot be fulfilled. Email admin@habitica.com if this error persists.", "modelNotFound": "This model does not exist.", "signUpWithSocial": "Sign up with <%= social %>", "loginWithSocial": "Log in with <%= social %>", diff --git a/website/common/locales/ro/gear.json b/website/common/locales/ro/gear.json index 32bcbae4ae..2a400742b2 100644 --- a/website/common/locales/ro/gear.json +++ b/website/common/locales/ro/gear.json @@ -24,7 +24,7 @@ "weaponWarrior0Text": "Sabie de antrenament", "weaponWarrior0Notes": "Armă de antrenament. Nu oferă niciun beneficiu.", "weaponWarrior1Text": "Sabie", - "weaponWarrior1Notes": "Sabie obișnuită. Crește Forța cu <%= str %>.", + "weaponWarrior1Notes": "Sabie obișnuită. Crește Forța cu <%= str %>.", "weaponWarrior2Text": "Topor", "weaponWarrior2Notes": "Double-bitted chopping weapon. Increases Strength by <%= str %>.", "weaponWarrior3Text": "Buzdugan", @@ -32,15 +32,15 @@ "weaponWarrior4Text": "Lamă de safir", "weaponWarrior4Notes": "Sabie cu lamă care taie ca suflul crivățului. Crește Forța cu <%= str %>.", "weaponWarrior5Text": "Sabie de rubin", - "weaponWarrior5Notes": "Armă călită a cărei dogoare nu se stinge. Crește Forța cu <%= str %>.", + "weaponWarrior5Notes": "Armă călită a cărei dogoare nu se stinge. Crește Forța cu <%= str %>.", "weaponWarrior6Text": "Sabie de aur", - "weaponWarrior6Notes": "Năpasta creaturilor intunericului. Crește Forța cu <%= str %>.", + "weaponWarrior6Notes": "Năpasta creaturilor intunericului. Crește Forța cu <%= str %>.", "weaponRogue0Text": "Pumnal", "weaponRogue0Notes": "Arma de bază a bandiților. Nu conferă niciun beneficiu.", "weaponRogue1Text": "Sabie scurtă", - "weaponRogue1Notes": "Pumnal ușor. Crește Forța cu <%= str %>.", + "weaponRogue1Notes": "Pumnal ușor. Crește Forța cu <%= str %>.", "weaponRogue2Text": "Iatagan", - "weaponRogue2Notes": "Sabie lamelară, retează rapid și ucigaș. Crește Forța cu <%= str %>.", + "weaponRogue2Notes": "Sabie lamelară, retează rapid și ucigaș. Crește Forța cu <%= str %>.", "weaponRogue3Text": "Kukri", "weaponRogue3Notes": "Cuțitul special al pădurarului, bun și ca armă și ca unealtă de supraviețuire. Crește Forța cu <%= str %>.", "weaponRogue4Text": "Nunceag", @@ -62,7 +62,7 @@ "weaponWizard5Text": "Toiag de arhiemag", "weaponWizard5Notes": "Ajută la urzirea celor mai complicate vrăji. Crește Inteligența cu <%= int %> și Percepția cu <%= per %>.", "weaponWizard6Text": "Toiag de aur", - "weaponWizard6Notes": "Construit din orichalcum, aurul alchemic, robust și rar. Crește Inteligența cu <%= int %> și Percepția cu <%= per %>.", + "weaponWizard6Notes": "Construit din orichalcum, aurul alchemic, robust și rar. Crește Inteligența cu <%= int %> și Percepția cu <%= per %>.", "weaponHealer0Text": "Bagheta novicelui", "weaponHealer0Notes": "Pentru Vindecători în formare. Nu oferă niciun beneficiu.", "weaponHealer1Text": "Bagheta acolitului", @@ -136,7 +136,7 @@ "weaponSpecialSummerMageText": "Kelp Catcher", "weaponSpecialSummerMageNotes": "This trident is used to spear seaweed effectively, for extra-productive kelp harvesting! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2014 Summer Gear.", "weaponSpecialSummerHealerText": "Wand of the Shallows", - "weaponSpecialSummerHealerNotes": "Această baghetă, făcută din acvamarin și coral viu este foarte atragătoare pentru bancurile de pești. Crește Inteligența cu <%= int %>. Ediție limitată de echipament Vara 2014.", + "weaponSpecialSummerHealerNotes": "Această baghetă, făcută din acvamarin și coral viu este foarte atragătoare pentru bancurile de pești. Crește Inteligența cu <%= int %>. Ediție limitată de echipament Vara 2014.", "weaponSpecialFallRogueText": "Silver Stake", "weaponSpecialFallRogueNotes": "Distruge moroii. Totodată oferă un bonus împotriva vârcolacilor, pentru că nu poți fi niciodat destul de precaut. Crește Forța cu <%= str %>. Ediție limitată echipament de toamnă 2014.", "weaponSpecialFallWarriorText": "Grabby Claw of Science", @@ -384,7 +384,7 @@ "armorWarrior3Text": "Cuirasă", "armorWarrior3Notes": "Costum complet din oțel, mândria cavalerilor. Crește Constituția cu <%= con %>.", "armorWarrior4Text": "Armură roșie", - "armorWarrior4Notes": "Platoșă grea cu farmece defensive. Crește Constituția cu <%= con %>.", + "armorWarrior4Notes": "Platoșă grea cu farmece defensive. Crește Constituția cu <%= con %>.", "armorWarrior5Text": "Armură de aur", "armorWarrior5Notes": "Pare de ceremonie, dar nicio lamă cunoscută nu o poate străpunge. Crește Constituția cu <%= con %>.", "armorRogue1Text": "Piele unsă", @@ -830,7 +830,7 @@ "headWarrior5Text": "Coroană aurie", "headWarrior5Notes": "Coroană regească prinsă de armură strălucitoare. Crește Forța cu <%= str %>.", "headRogue1Text": "Glugă de piele", - "headRogue1Notes": "Glugă protectoare simplă. Crește Percepția cu <%= per %>.", + "headRogue1Notes": "Glugă protectoare simplă. Crește Percepția cu <%= per %>.", "headRogue2Text": "Glugă neagră de piele", "headRogue2Notes": "Folositoare atât pentru apărare cât și pentru deghizare. Crește Percepția cu <%= per %>.", "headRogue3Text": "Glugă camuflaj", @@ -918,7 +918,7 @@ "headSpecialSummerRogueText": "Pălăria Piratului", "headSpecialSummerRogueNotes": "Doar pirații cei mai productivi pot purta această plălărie. Crește Percepția cu <%= per %>. Echipament de Vară în ediție limitată 2014.", "headSpecialSummerWarriorText": "Swashbuckler Bandana", - "headSpecialSummerWarriorNotes": "Aceată eșarfă fină puțin sărată întărește forța celui care o poartă. Crește Forța cu <%= str %>. Ediție limitată de echipament vara 2014.", + "headSpecialSummerWarriorNotes": "Aceată eșarfă fină puțin sărată întărește forța celui care o poartă. Crește Forța cu <%= str %>. Ediție limitată de echipament vara 2014.", "headSpecialSummerMageText": "Kelp-Wrapped Hat", "headSpecialSummerMageNotes": "What could be more magical than a hat wrapped in seaweed? Increases Perception by <%= per %>. Limited Edition 2014 Summer Gear.", "headSpecialSummerHealerText": "Coroana de coral", @@ -1275,7 +1275,7 @@ "shieldWarrior2Text": "Pavăză", "shieldWarrior2Notes": "Ușor și rezistent, rapid de folosit pentru apărare. Crește Constituția cu <%= con %>.", "shieldWarrior3Text": "Scut armat", - "shieldWarrior3Notes": "Făcut din lemn, dar armat cu bande metalice. Crește Constituția cu <%= con %>.", + "shieldWarrior3Notes": "Făcut din lemn, dar armat cu bande metalice. Crește Constituția cu <%= con %>.", "shieldWarrior4Text": "Scut roșu", "shieldWarrior4Notes": "Respinge loviturile cu o salvă de flăcări. Crește Constituția cu <%= con %>.", "shieldWarrior5Text": "Scut auriu", diff --git a/website/common/locales/ro/groups.json b/website/common/locales/ro/groups.json index 8556f09b90..a5afed83d1 100644 --- a/website/common/locales/ro/groups.json +++ b/website/common/locales/ro/groups.json @@ -246,7 +246,7 @@ "partyDescriptionPlaceholder": "This is our Party's description. It describes what we do in this Party. If you want to learn more about what we do in this Party, read the description. Party on.", "guildGemCostInfo": "A Gem cost promotes high quality Guilds and is transferred into your Guild's bank.", "noGuildsTitle": "You aren't a member of any Guilds.", - "noGuildsParagraph1": "Guilds are social groups created by other players that can offer you support, accountability, and encouraging chat.", + "noGuildsParagraph1": "Guilds are social groups created by other players that can offer you support, accountability, and encouraging chat.", "noGuildsParagraph2": "Click the Discover tab to see recommended Guilds based on your interests, browse Habitica's public Guilds, or create your own Guild.", "noGuildsMatchFilters": "We couldn't find any matching Guilds.", "privateDescription": "A private Guild will not be displayed in Habitica's Guild directory. New members can be added by invitation only.", diff --git a/website/common/locales/ro/questscontent.json b/website/common/locales/ro/questscontent.json index a192d1a584..506062ecb5 100644 --- a/website/common/locales/ro/questscontent.json +++ b/website/common/locales/ro/questscontent.json @@ -34,7 +34,7 @@ "questRatBoss": "Rege Șobolan", "questRatDropRatEgg": "Șobolan (ou)", "questRatUnlockText": "Deblochează Ouăle de Șobolan pentru cumpărare în Piață", - "questOctopusText": "Chemare lui Octothulu", + "questOctopusText": "Chemare lui Octothulu", "questOctopusNotes": "@Urse un cronicar tânăr cu privire sălbatică ți-a cerut ajutor la cercetarea unei caverne misterioase pe plaja mării. Printre gropi de apă se află o poartă masivă de stalactite și stalagmite. Pe măsură ce te apropii de poarta, un vârtej întunecat începe să se rotească la baza acesteia. Te holbezi în venerație la o caracatiță balaur ce se ridica pe pântec. \"Născătoarea slinoasă de stele s-a trezit,\" rage @Urse nebunește. \"După miliarde de ani, marele Octothulu este eliberat din nou, și tânjește după degustări!\"", "questOctopusCompletion": "With a final blow, the creature slips away into the whirlpool from which it came. You cannot tell if @Urse is happy with your victory or saddened to see the beast go. Wordlessly, your companion points to three slimy, gargantuan eggs in a nearby tidepool, set in a nest of gold coins. \"Probably just octopus eggs,\" you say nervously. As you return home, @Urse frantically scribbles in a journal and you suspect this is not the last time you will hear of the great Octothulu.", "questOctopusBoss": "Octothulu", @@ -122,7 +122,7 @@ "questEggHuntCollectPlainEgg": "Ouă simple", "questEggHuntDropPlainEgg": "Ou simplu", "questDilatoryText": "Îngrozitorul Drag'on al Leneviei", - "questDilatoryNotes": "We should have heeded the warnings.

Dark shining eyes. Ancient scales. Massive jaws, and flashing teeth. We've awoken something horrifying from the crevasse: the Dread Drag'on of Dilatory! Screaming Habiticans fled in all directions when it reared out of the sea, its terrifyingly long neck extending hundreds of feet out of the water as it shattered windows with its searing roar.

\"This must be what dragged Dilatory down!\" yells Lemoness. \"It wasn't the weight of the neglected tasks - the Dark Red Dailies just attracted its attention!\"

\"It's surging with magical energy!\" @Baconsaur cries. \"To have lived this long, it must be able to heal itself! How can we defeat it?\"

Why, the same way we defeat all beasts - with productivity! Quickly, Habitica, band together and strike through your tasks, and all of us will battle this monster together. (There's no need to abandon previous quests - we believe in your ability to double-strike!) It won't attack us individually, but the more Dailies we skip, the closer we get to triggering its Neglect Strike - and I don't like the way it's eyeing the Tavern....", + "questDilatoryNotes": "We should have heeded the warnings.

Dark shining eyes. Ancient scales. Massive jaws, and flashing teeth. We've awoken something horrifying from the crevasse: the Dread Drag'on of Dilatory! Screaming Habiticans fled in all directions when it reared out of the sea, its terrifyingly long neck extending hundreds of feet out of the water as it shattered windows with its searing roar.

\"This must be what dragged Dilatory down!\" yells Lemoness. \"It wasn't the weight of the neglected tasks - the Dark Red Dailies just attracted its attention!\"

\"It's surging with magical energy!\" @Baconsaur cries. \"To have lived this long, it must be able to heal itself! How can we defeat it?\"

Why, the same way we defeat all beasts - with productivity! Quickly, Habitica, band together and strike through your tasks, and all of us will battle this monster together. (There's no need to abandon previous quests - we believe in your ability to double-strike!) It won't attack us individually, but the more Dailies we skip, the closer we get to triggering its Neglect Strike - and I don't like the way it's eyeing the Tavern....", "questDilatoryBoss": "Îngrozitorul Drag'on al Leneviei", "questDilatoryBossRageTitle": "Lovitura Neglijarea", "questDilatoryBossRageDescription": "Când această limită este atinsă monstrul va elibera această forță distrugătoare pe terenul Habiticăi", @@ -567,8 +567,8 @@ "questPterodactylDropPterodactylEgg": "Pterodactyl (Egg)", "questPterodactylUnlockText": "Unlocks Pterodactyl Eggs for purchase in the Market", "questBadgerText": "Stop Badgering Me!", - "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To Do's and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", - "questBadgerCompletion": "You finally drive away the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To Do's. The den is otherwise abandoned, except for three eggs that look ready to hatch.", + "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To Do's and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", + "questBadgerCompletion": "You finally drive away the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To Do's. The den is otherwise abandoned, except for three eggs that look ready to hatch.", "questBadgerBoss": "The Badgering Bother", "questBadgerDropBadgerEgg": "Badger (Egg)", "questBadgerUnlockText": "Unlocks Badger Eggs for purchase in the Market", diff --git a/website/common/locales/ro/settings.json b/website/common/locales/ro/settings.json index 9688545e32..6f2e3e8e9b 100644 --- a/website/common/locales/ro/settings.json +++ b/website/common/locales/ro/settings.json @@ -55,7 +55,6 @@ "APIToken": "Tokern API (aceasta este ca o parolă - a se vedea atenționarea de mai sus!)", "showAPIToken": "Arată Token-ul API", "hideAPIToken": "Ascunde Token-ul API", - "APITokenWarning": "Dacă ai nevoie de un nou Token API (ex.: dacă l-ai distribuit din greșeală), trimite un email la <%= hrefTechAssistanceEmail %> cu ID-ul tău de Utilizator și Token-ul actual. Odată resetat, va trebui să reautorizezi totul de-logându-te de pe site și de pe aplicația de mobil și folosind noul Token pe oricare alt instrument Habitica pe care-l folosești.", "thirdPartyApps": "Aplicații Third Party", "resetDo": "Fă-o, resetează-mi contul!", "resetComplete": "Resetare completă!", diff --git a/website/common/locales/ru/backgrounds.json b/website/common/locales/ru/backgrounds.json index a6feb8fcd9..afb2c8fb31 100644 --- a/website/common/locales/ru/backgrounds.json +++ b/website/common/locales/ru/backgrounds.json @@ -615,7 +615,7 @@ "backgroundWaterMillText": "Водяная мельница", "backgroundForestedLakeshoreText": "Берег лесного озера", "backgroundForestedLakeshoreNotes": "Будьте предметом зависти вашей команды с вашим выбором места на берегу лесного озера.", - "backgroundClotheslineNotes": "Проведите время, развесив одежду на бельевой веревке.", + "backgroundClotheslineNotes": "Развесьте одежду на бельевой веревке.", "backgroundClotheslineText": "Веревка для белья", "backgrounds062021": "Набор 85: Выпущен в июне 2021", "backgroundRagingRiverText": "Бурная река", @@ -774,7 +774,7 @@ "backgroundFlyingOverHedgeMazeText": "Пролетая над лабиринтом из живой изгороди", "backgrounds052023": "Набор 108: Выпущен в Мае 2023", "backgroundInAPaintingNotes": "Наслаждайтесь творчеством внутри картины.", - "backgroundSpringtimeShowerNotes": "Посмотрите на цветочный весенний ливень.", + "backgroundSpringtimeShowerNotes": "Посмотрите Цветочный весенний дождь.", "backgrounds042023": "Набор 107: Выпущен в Апреле 2023", "backgroundLeafyTreeTunnelText": "Туннель из лиственных деревьев", "backgroundLeafyTreeTunnelNotes": "Прогуляйтесь по тоннелю из лиственных деревьев.", @@ -852,17 +852,17 @@ "backgroundIceBubbleLakeText": "Озеро ледяных пузырьков", "backgroundIceBubbleLakeNotes": "Осторожно стойте на Озере ледяных пузырьков.", "backgroundJackOLanternStacksNotes": "Полюбуйтесь полем, усеянным штабелями фонарей Джека О'Лантерна.", - "backgroundGiantCatText": "Гигантский кот", - "backgroundGiantCatNotes": "Вздремни с гигантским котом.", - "backgroundForestSunsetNotes": "Наслаждайся сиянием лесного заката.", + "backgroundGiantCatText": "Гигантский Кот", + "backgroundGiantCatNotes": "Вздремни с Гигантским Котом.", + "backgroundForestSunsetNotes": "Погрейтесь в лучах лесного заката.", "backgroundForestSunsetText": "Лесной закат", "backgroundWallFloweringVinesText": "Стена с цветущими лозами", - "backgroundWallFloweringVinesNotes": "Потусуйтесь у стены цветущих виноградных лоз.", + "backgroundWallFloweringVinesNotes": "Потусуйтесь у стены цветущих лоз.", "backgroundContainerGardenText": "Контейнерный Сад", "backgroundContainerGardenNotes": "Запачкайте свои руки в Контейнерном Саду.", "backgrounds052024": "Набор 120: Выпущен в мае 2024", "backgroundDragonsBackText": "Спина Дракона", - "backgroundDragonsBackNotes": "Плыви по небу на спине Дракона.", + "backgroundDragonsBackNotes": "Плывите по небу на спине Дракона.", "backgrounds062024": "СЕРИЯ 121: Выпущена в июне 2024 года", "backgroundShellGateText": "Створчатый затвор", "backgroundShellGateNotes": "Пройдите через ворота, украшенные коралловыми ракушками.", @@ -874,13 +874,13 @@ "backgroundSavannaNotes": "Прогуляйтесь по лугам, затянутым дымкой.", "backgroundSavannaText": "Затянутые дымкой луга", "backgroundPottersStudioText": "Гончарная мастерская", - "backgroundPottersStudioNotes": "Создавайте произведения искусства в гончарной мастерской.", + "backgroundPottersStudioNotes": "Создайте произведение искусства в Гончарной мастерской.", "backgroundMaypoleText": "Майский Шест", - "backgroundMaypoleNotes": "Кружитесь в танце вокруг яркого Майского Шеста.", + "backgroundMaypoleNotes": "Потанцуйте вокруг святого Майского древа.", "backgroundMagicDoorInForestText": "магическая дверь в лесу", "backgroundMagicDoorInForestNotes": "осмелитесь пройти через магическую дверь в лесу.", "backgroundSurroundedByGhostsText": "окружён призраками", - "backgroundSurroundedByGhostsNotes": "проведите жуткий вечер в окружении призраков", + "backgroundSurroundedByGhostsNotes": "Проведите жуткий вечер в окружении призраков.", "backgroundFirstSnowForestText": "первый снег в лесу", "backgroundFirstSnowForestNotes": "шагните в первый снег в лесу.", "backgroundCastleHallWithHearthText": "зал замка с камином", @@ -906,5 +906,8 @@ "backgroundSummerSeashoreNotes": "Поймайте волну на летнем морском берегу.", "backgrounds052025": "Набор 132: Выпущен в мае 2025", "backgroundTrailThroughAForestText": "Тропа через лес", - "backgroundTrailThroughAForestNotes": "Прогуляйтесь по тропе через лес." + "backgroundTrailThroughAForestNotes": "Прогуляйтесь по тропе через лес.", + "backgrounds072025": "Набор 134: Выпущен в июле 2025", + "backgroundSirensLairText": "Логово сирены", + "backgroundSirensLairNotes": "Дерзните нырнуть в Логово сирены." } diff --git a/website/common/locales/ru/content.json b/website/common/locales/ru/content.json index b3a611b544..fb16a02bb4 100644 --- a/website/common/locales/ru/content.json +++ b/website/common/locales/ru/content.json @@ -392,5 +392,23 @@ "questEggDogText": "Щенок", "hatchingPotionKoi": "Кои", "hatchingPotionGingerbread": "Пряник", - "hatchingPotionFungi": "Грибы" + "hatchingPotionFungi": "Грибы", + "questEggAlpacaText": "Альпака", + "questEggAlpacaMountText": "Альпака", + "questEggAlpacaAdjective": "переполненный", + "hatchingPotionBalloon": "Надувной", + "questEggCatText": "Котенок", + "questEggCatMountText": "Кошка", + "questEggCatAdjective": "шаловливый", + "questEggOtterText": "Выдра", + "questEggOtterMountText": "Выдра", + "questEggOtterAdjective": "коварный", + "hatchingPotionJade": "Нефритовый", + "hatchingPotionCryptid": "Мифический", + "wackyPotionNotes": "Вылейте это на яйцо, и из него вылупится питомец типа <%= potText(locale) %>.", + "wackyPotionAddlNotes": "Не может быть возвышено до Скакуна или использовано на яйцах Квестовых питомцев.", + "questEggPlatypusText": "Утконос", + "questEggPlatypusMountText": "Утконос", + "questEggPlatypusAdjective": "перфекционист", + "hatchingPotionOpal": "Опал" } diff --git a/website/common/locales/ru/faq.json b/website/common/locales/ru/faq.json index b669e768ed..481d7d28a2 100644 --- a/website/common/locales/ru/faq.json +++ b/website/common/locales/ru/faq.json @@ -156,5 +156,23 @@ "contentAnswer60": "Все остальные текущие события продолжатся в обычном режиме! Все по-прежнему будут получать особые награды и тематическую еду, как и сейчас.", "contentAnswer61": "Открытки на День святого Валентина и Новогодние открытки будут выпускаться в определенные даты.", "contentQuestion7": "А как насчет других предметов, доступных в магазине путешественников во времени, помимо прошлых наборов подписчика?", - "sunsetFaqPara9": "

Браузер: Нажмите на навигацию Групповой подписки в верхней шкале.

Android: Нажмите на Ваше имя вверху экрана, когда находитесь на вкладке заданий, чтобы переключиться на вкладку с Вашими общими заданиями. Чтобы открыть Ваш чат нажмите на иконку чата в верхней части этого экрана.

iOS: Нажмите на название Вашей Групповой подписки в меню.

" + "sunsetFaqPara9": "

Браузер: Нажмите на навигацию Групповой подписки в верхней шкале.

Android: Нажмите на Ваше имя вверху экрана, когда находитесь на вкладке заданий, чтобы переключиться на вкладку с Вашими общими заданиями. Чтобы открыть Ваш чат нажмите на иконку чата в верхней части этого экрана.

iOS: Нажмите на название Вашей Групповой подписки в меню.

", + "sunsetFaqPara10": "Игроки не смогут восстановить данные переписки из Таверны и Гильдий после завершения работы сервисов.", + "sunsetFaqHeader6": "Будет ли возможно восстановить чаты гильдии после завершения работы сервисов?", + "sunsetFaqHeader8": "Как это повлияет на контрибьютеров Habitica?", + "sunsetFaqPara12": "Как проект с открытым исходным кодом, мы приветствуем и поощряем самые разные формы участия. В знак признательности мы отправим набор снаряжения Героя всем, кто имеет статус контрибьютора на 1 августа 2023 года. После завершения работы Таверны и Гильдий формат участия тоже претерпит некоторые изменения. Подробнее о будущем каждой формы вклада вы можете прочитать ниже.", + "sunsetFaqPara13": "Кузнецы
Мы по-прежнему приветствуем помощь с открытым исходным кодом через наш GitHub и будем продолжать присуждать уровни за квалифицированный вклад. Сотрудничество и обсуждение в основном происходило на GitHub, и это будет продолжаться.", + "sunsetFaqPara14": "Лингвисты
Мы по-прежнему рады содействию в переводе приложений и веб-сайта и по-прежнему будем присуждать уровни спонсоров за соответствующий вклад. Однако мы изменим подход к переводу. Мы хотим сосредоточить наши ресурсы на поддержке определенного набора языков на всех платформах. Для этого мы сократим количество языков, доступных для перевода, а ранее незавершенные архивы с переводами будут храниться на Github. Мы надеемся, что это изменение сделает опыт работы с Habitica более цельным на разных устройствах. Вы можете ознакомиться с самыми актуальными рекомендациями по процедуре перевода на нашем сайте.", + "contentAnswer00": "Магические инкубационные эликсиры, переизданные фоны, прошлые наборы для подписчиков и квесты питомцев будут меняться на постоянной ежемесячной основе.", + "sunsetFaqPara18": "Ремесленники
Мы прекращаем поддержку Ремесленников. Сейчас большая часть оформления делается нашей командой, чтобы соответствовать актуальному контенту приложения. Мы глубоко признательны за фантастические работы, сделанные за эти годы нашим сообществом авторов.", + "sunsetFaqPara17": "Товарищи
Скрипты и дополнения полезны все меньшему количеству наших пользователей, поскольку мобильные приложения все чаще становятся единственным способом доступа к Habitica. Участники, желающие создавать сторонние инструменты для настройки работы с Habitica, могут продолжать это делать, но мы больше не будем присуждать уровни Товарищей, поскольку сосредоточимся на тех улучшениях, которые доступны всей нашей базе игроков.", + "sunsetFaqPara20": "Правила сообщества Habitica будут обновлены в момент прекращения обслуживания Таверны и Гильдий. В них будет отражено, что правила поведения в сообществе теперь касаются профилей игроков, испытаний и сообщений в личных чатах. Наши Условия использования всегда распространялись как на публичные, так и на личные чаты и не требуют немедленного обновления в связи с этим изменением.", + "sunsetFaqPara21": "Самоцветы, находящиеся в Банке гильдии, будут возвращены лидеру Гильдии 8 августа, когда закончится поддержка сервиса.", + "sunsetFaqHeader12": "Что будет с Банк самоцветов Гильдии?", + "sunsetFaqPara16": "Светские львы и львицы
С прекращением деятельности Таверны и Гильдий этот вид активности в сообществе исчезнет. Мы очень благодарны за работу, которую проделали наши дружелюбные и отзывчивые игроки, отвечая на вопросы в чатах.", + "sunsetFaqPara15": "Создатели испытаний
Команда продолжает поощрять создание высококачественных Испытаний. Мы хотели бы исследовать новые способы продвижения Испытаний в приложении и за его пределами.", + "contentAnswer01": "Гранд-гала будет продлена и будет действовать в течение всего сезона, вместе со всем классовым снаряжением, настройками аватара и прочими плюшками.", + "contentAnswer11": "Когда новые игроки присоединяются к игре в период между Гранд-гала, они часто не знают об этих событиях и пропускают все самое интересное. Мы хотим быть уверены, что все новые игроки смогут принять участие в наших сезонных праздниках независимо от того, когда они решили начать свое путешествие.", + "contentQuestion2": "Как изменится Гранд-гала?", + "contentAnswer10": "Habitica существует с 2013 года (воу!), и за это время мы выпустили тысячи коллекционных предметов. Их сбор может оказаться непосильной задачей, особенно для новых игроков. Мы хотим быть уверены, что показываем все, что можем предложить, и что замечательные предметы, выпущенные ранее, также не будут упущены из виду." } diff --git a/website/common/locales/ru/front.json b/website/common/locales/ru/front.json index d2e2b97a96..611f150792 100644 --- a/website/common/locales/ru/front.json +++ b/website/common/locales/ru/front.json @@ -25,32 +25,32 @@ "invalidEmail": "Для изменения пароля необходимо указать существующий адрес электронной почты.", "login": "Вход", "logout": "Выйти", - "marketing1Header": "Вырабатывайте полезные привычки, играя", - "marketing1Lead1Title": "Ваша жизнь как ролевая игра", - "marketing1Lead1": "Habitica — это компьютерная игра, с помощью которой можно улучшить привычки в реальной жизни. Она «превращает» вашу жизнь в игру, представляя задачи (привычки, ежедневные задания и предстоящие дела) маленькими монстрами, которых нужно победить. Чем лучше вам это удается, тем дальше в игре вы продвигаетесь. Если вы ошибаетесь в жизни — ваш персонаж начинает уступать в игре.", - "marketing1Lead2Title": "Получайте славную экипировку", - "marketing1Lead2": "Совершенствуйте привычки, чтобы развивать своего аватара. Покажите остальным добытое снаряжение!", - "marketing1Lead3Title": "Находите случайные призы", - "marketing1Lead3": "Некоторых мотивирует азарт, так называемая система «стохастического вознаграждения». В арсенале Habitica все виды стимулов: позитивные, негативные, предсказуемые и случайные.", - "marketing2Header": "Соревнуйтесь с друзьями", + "marketing1Header": "Вырабатывайте привычки уровень за уровнем!", + "marketing1Lead1Title": "Играйте в свою жизнь", + "marketing1Lead1": "Habitica — это идеальное приложение для тех, кто сражается со списками дел. Мы используем привычные игровые механики, такие как вознаграждение золотом, опытом и предметами, чтобы помочь вам почувствовать себя продуктивными и повысить чувство удовлетворения при выполнении заданий. Чем лучше вы справляетесь с заданиями, тем дальше вы продвигаетесь в игре.", + "marketing1Lead2Title": "Экипируйтесь со вкусом", + "marketing1Lead2": "Коллекционируйте мечи, доспехи и многое другое, используя золото, заработанное за выполнение заданий. Сотни предметов, которые можно собирать и выбирать, не дадут вам исчерпать запас комбинаций. Надевайте для повышения статов, чтобы быть стильными или все и сразу! ", + "marketing1Lead3Title": "Получайте награды за усилия", + "marketing1Lead3": "Наличие чего-то, чего можно ждать с нетерпением, может стать недостающим элементом между выполнением задачи и откладыванием ее на несколько недель. Если жизнь не предлагает вознаграждения, то Habitica позаботится об этом! Вы будете вознаграждены за каждое задание, и за каждым углом вас ждут сюрпризы — так что не останавливайтесь на достигнутом! ", + "marketing2Header": "Объединяйтесь с друзьями", "marketing2Lead1Title": "Социальная продуктивность", - "marketing2Lead1": "Играть в Habitica можно в одиночку, но все краски по-настоящему заиграют, когда вы начнете сотрудничать, соперничать и разделять ответственность с другими игроками. Наиболее эффективная часть любой программы самосовершенствования — социальная ответственность, а какая среда подходит для создания духа ответственности и соревновательности лучше, чем компьютерная игра?", - "marketing2Lead2Title": "Сражайтесь с монстрами", - "marketing2Lead2": "Может ли ролевая игра обходиться без битв? Сражайтесь с боссами в составе команды. Боссы — это «режим супер-ответственности»: если вы пропустите ежедневные занятия в спортивном зале, босс нанесёт урон *всей команде!*", + "marketing2Lead1": "Получите заряд мотивации, сотрудничая, соревнуясь и взаимодействуя с другими! Habitica создана для того, чтобы задействовать самую эффективную часть любой программы самосовершенствования: социальную ответственность.", + "marketing2Lead2Title": "Сражайтесь с монстрами в квестах", + "marketing2Lead2": "Примите участие в одном из сотен квестов вместе со своей командой: монстры заставят вас выложиться по максимуму. Забыть почистить зубы — значит нанести урон всем!", "marketing2Lead3Title": "Соревнуйтесь друг с другом", - "marketing2Lead3": "Испытания позволяют соревноваться с друзьями и незнакомыми людьми. Тот, кто достигнет по итогам лучших результатов, получит специальный приз.", - "marketing3Header": "Приложения и расширения", - "marketing3Lead1": "С мобильными приложениями для **iPhone и Android** разобраться с делами можно на бегу. Мы понимаем, что заходить на веб-сайт для того, чтобы нажать лишь несколько кнопок, может быть не очень удобным.", - "marketing3Lead2Title": "Интеграция", - "marketing3Lead2": "Другие **сторонние инструменты** помогают связывать Habitica с различными событиями в вашей жизни. Наш API обеспечивает простую интеграцию для таких возможностей, как [расширение Chrome](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=ru-RU), которое отнимает у вас очки за просмотр бесполезных сайтов и прибавляет, когда вы посещаете более полезные сайты. [Подробности смотрите здесь](https://habitica.fandom.com/ru/wiki/Персонализация).", - "marketing4Header": "Использование организациями", - "marketing4Lead1": "Образование — одна из сфер, где игровой потенциал раскрывается лучше всего. Мы все знаем, насколько сегодня учащиеся привязаны к своим телефонам и играм — так используйте это! Дайте им помериться силами в дружеском соревновании. Награждайте их редкими призами за правильное поведение. Отслеживайте их оценки и то, как они растут.", - "marketing4Lead1Title": "Игра в образовании", - "marketing4Lead2": "Здоровье обходится всё дороже, и что-то должно измениться. Создаются сотни программ, направленных на улучшение здоровья и снижение расходов. Мы уверены, что Habitica может открыть прямой путь к здоровому образу жизни.", - "marketing4Lead2Title": "Игра в здравоохранении", - "marketing4Lead3-1": "Хотите жить играючи?", + "marketing2Lead3": "Присоединяйтесь к Испытаниям, которые создает наше сообщество, и получайте списки задач, соответствующие вашим интересам и целям. Сделайте все возможное, чтобы побороться за приз — самоцветы, — который достанется победителю!", + "marketing3Header": "Больше способов использовать Habitica", + "marketing3Lead1": "Вы можете установить Habitica на устройство Android или iOS, чтобы проверять выполнение задач в любом месте. Зацените наши отмеченные наградами приложения — новый взгляд на продуктивность.", + "marketing3Lead2Title": "Опенсорс-сообщество", + "marketing3Lead2": "Мы гордимся тем, что являемся проектом с открытым исходным кодом, и приветствуем вклад нашего преданного сообщества. Сделайте так, чтобы Habitica соответствовала вашим запросам, или внесите свой вклад, чтобы улучшить опыт всех игроков по всему миру. Заходите к нам на [GitHub](https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica), чтобы узнать больше!", + "marketing4Header": "Не ограничиваясь домашними делами", + "marketing4Lead1": "Образование — одно из лучших мест для геймификации! Разнообразьте учебные будни, добавив в них немного игры. Habitica — это увлекательный способ отслеживать домашние задания, проводить Испытания для класса и позволять ученикам демонстрировать свои достижения.", + "marketing4Lead1Title": "Учитесь играя", + "marketing4Lead2": "Здоровый образ жизни может легко превратиться в непосильную задачу. Habitica помогает контролировать все ваши фитнес-цели: настраивайте расписание и интенсивность под себя. Превратите путь к здоровью в игру!", + "marketing4Lead2Title": "Здоровье и хорошее самочувствие играя", + "marketing4Lead3-1": "Готовы повеселиться, выполняя задачи?", "marketing4Lead3-2": "Заинтересованы в создании группы в сферах образования, здоровья или других?", - "marketing4Lead3Title": "Игра во всём", + "marketing4Lead3Title": "Начните свое путешествие!", "mobileAndroid": "Приложение для Android", "mobileIOS": "Приложение для iOS", "oldNews": "Новости", @@ -62,13 +62,13 @@ "pkQuestion1": "Что вдохновило на создание Habitica? Как это началось?", "pkAnswer1": "Если вы когда-либо инвестировали время в прокачку персонажа в игре, трудно не задаться вопросом, насколько велика будет ваша жизнь, если вы приложите все усилия для улучшения своего реального я, а не своего аватара. Мы начинаем строительство Habitica решить этот вопрос.
Habitica официально запущена на Kickstarter в 2013 году, и идея действительно взлетела. С тех пор она превратилась в огромный проект, поддержанный нашими удивительными волонтерами с открытым исходным кодом и нашими щедрыми пользователями.", "pkQuestion2": "Почему Habitica работает?", - "pkAnswer2": "Формирование новой привычки - это трудно, потому как люди нуждаются в явной и мгновенной награде. Например, тяжело начать пользоваться зубной нитью. Хотя даже ваш стоматолог говорит, что это полезно в долгосрочной перспективе, сейчас же у вас просто болят десны.
Геймификация Habitica добавляет ощущение мгновенного удовлетворения повседневным целям, награждая за трудную задачу опытом, золотом ... и, возможно, даже случайным призом, как яйцо дракона! Это помогает поддерживать мотивацию людей, даже если сама задача не имеет внутренней награды, и мы видели, как в результате люди меняют свою жизнь.", + "pkAnswer2": "Формировать новые привычки трудно, поэтому люди нуждаются в явной, мгновенной награде. Например, тяжело начать пользоваться зубной нитью: пусть даже ваш стоматолог и говорит, что это полезно в долгосрочной перспективе, сейчас у вас просто болят десны.
Habitica, благодаря игровым механикам, добавляет ощущение мгновенного удовлетворения, награждая за трудную задачу опытом, золотом... и, возможно, даже случайным призом, таким как яйцо дракона! Это помогает людям сохранять мотивацию, даже если само задание не имеет внутренней награды, и мы видели, как в результате люди меняли свою жизнь к лучшему.", "pkQuestion3": "Почему вы добавили социальные функции?", "pkAnswer3": "Для многих людей социальное влияние является мощным мотивирующим стимулом, поэтому мы хотели создать сильное общество, которое бы поддерживало друг друга в достижении целей и радовалось успехам. К счастью, многопользовательские видеоигры как нельзя более удачно формируют чувство общности между пользователями! Структура сообщества в Habitica заимствована из подобных игр. Конечно, некоторые пользователи предпочитают играть в одиночку, но большинство решает создать сеть поддержки в виде небольшой команды близких друзей, которая способствует развитию социальной ответственности благодаря квестам, где члены команды объединяют свои силы для борьбы с монстрами.", "pkQuestion4": "Почему пропуск задач уменьшает здоровье вашего аватара?", "pkAnswer4": "Если вы пропустите одну из своих ежедневных целей, ваш аватар потеряет здоровье на следующий день. Это служит важным мотивирующим фактором, побуждающим людей следовать своим целям, потому что люди действительно ненавидят вредить своему маленькому аватару! Кроме того, социальная ответственность имеет решающее значение для многих людей: если вы боретесь с монстром со своими друзьями, пропуск Ваших задач также ранит их аватары.", "pkQuestion5": "Что отличает Habitica от других геймифицированных программ?", - "pkAnswer5": "Один из способов, с помощью которого Habitica была наиболее успешной в использовании геймификации - это то, что мы приложили много усилий, чтобы задуматься об игровых аспектах, чтобы убедиться, что они действительно забавны. Мы также включили много социальных компонентов, потому что мы считаем, что некоторые из самых мотивирующих игр позволяют вам играть с друзьями, и потому что исследования показали, что легче сформировать привычки, когда у вас есть подотчетность перед другими людьми.", + "pkAnswer5": "Один из главных секретов успеха Habitica — усилия, приложенные чтобы продумать игровые механики и убедиться, что они действительно интересные и занимательные. Мы добавили много социальных компонентов, потому что знаем: играть с друзьями — увлекательнее, а ответственность перед другими помогает закрепить привычки.", "pkQuestion6": "Кто является типичным пользователем Habitica?", "pkAnswer6": "Многие люди используют Habitica! Более половины наших пользователей в возрасте от 18 до 34 лет, мы даже знаем одних пенсионеров, пользующимися сайтом с их молодыми внуками и каждый возраст между ними. Часто семьи присоединяются к партии и сражаются с монстрами вместе.
Многие из наших пользователей имеют некоторый опыт в играх, но, как ни удивительно, когда мы проводили опрос некоторое время назад, 40% наших пользователей идентифицировались как не-геймеры! Таким образом, похоже, что наш метод может быть эффективен для тех, кто хочет повысить производительность и хорошее самочувствие.", "pkQuestion7": "Почему Habitica использует пиксель арт?", @@ -180,5 +180,7 @@ "socialAlreadyExists": "Этот ник уже связан с другим аккаунтом Хабитики.", "footerProduct": "Продукт", "translateHabitica": "Перевести Habitica", - "incorrectResetPhrase": "Пожалуйста, напечатайте <%= magicWord %> заглавными буквами, чтобы сбросить ваш аккаунт." + "incorrectResetPhrase": "Пожалуйста, напечатайте <%= magicWord %> заглавными буквами, чтобы сбросить ваш аккаунт.", + "marketing3Lead1Title": "Приложения для Android и iOS", + "marketing4Lead3Button": "Начните сегодня" } diff --git a/website/common/locales/ru/gear.json b/website/common/locales/ru/gear.json index 24006d63f6..8c8b18b7f8 100644 --- a/website/common/locales/ru/gear.json +++ b/website/common/locales/ru/gear.json @@ -2750,7 +2750,7 @@ "weaponSpecialSpring2023WarriorText": "Шпага Колибри", "weaponSpecialSpring2023WarriorNotes": "Защищайтесь! Отгоните врагов от ваших цветов с помощью этой рапиры! Увеличивает силу на <%= str %>. Ограниченное издание 2023 года Весенняя экипировка.", "weaponSpecialSpring2023MageText": "Магия лунного камня", - "weaponSpecialSpring2023MageNotes": "Чем сильнее их сияние, тем больше их сила. Увеличивает интеллект на <%= int %>. Ограниченная серия 2023 Весенняя экипировка.", + "weaponSpecialSpring2023MageNotes": "Чем сильнее их сияние, тем больше их сила. Увеличивает интеллект на <%= int %> и восприятие на <%= per %>. Ограниченная серия 2023 Весенняя экипировка.", "weaponSpecialSpring2023HealerText": "Пыльца лилий", "weaponSpecialSpring2023HealerNotes": "С дуновеньем и вспышкой вы вызываете новый рост, веселье и окраску. Увеличивает интеллект на <%= int %>. Ограниченная серия 2023 Весенняя экипировка.", "weaponSpecialSummer2023RogueText": "Веер Гуппи", @@ -2931,7 +2931,7 @@ "weaponSpecialFall2023HealerText": "Великий молот", "weaponSpecialFall2023HealerNotes": "Тяжелыми ударами великого молота вы восстанавливаете себе здоровье. Увеличивает интеллект на <%= int %>. Эксклюзивный предмет \"Осень 2023\".", "weaponArmoireRidingBroomText": "Ездовая метла", - "weaponArmoireOptimistsCloverNotes": "Ну, ты бы посмотрел на то, что нашел? Никогда не помешает иметь на своей стороне немного удачи. Увеличивает силу и телосложение на <%= attrs %> каждый. Зачарованный шкаф: набор «Оптимист» (предмет 4 из 4)", + "weaponArmoireOptimistsCloverNotes": "Ну, погляди-ка, что ты нашел? Удача не бывает лишней. Увеличивает Силу и Телосложение на <%= attrs %> каждый. Зачарованный шкаф: Комплект Оптимиста (Предмет 4 из 4).", "armorSpecialBirthday2024Notes": "С днем рождения, Habitica! Надевайте Нелепую праздничную мантию и отмечайте этот день! Бонусов не дает.", "armorSpecialBirthday2024Text": "Нелепая праздничная мантия", "armorSpecialWinter2024HealerText": "Ледяная броня", @@ -2969,13 +2969,35 @@ "weaponMystery202404Notes": "Этот посох подарит вам древнюю мудрость, нестареющую, как камни и деревья. Никакой пользы. Товар для подписчиков, апрель 2024 г.", "weaponArmoireOptimistsCloverText": "Четырехлистный клевер", "weaponArmoireHattersShearsText": "Острые ножницы", - "weaponArmoireHattersShearsNotes": "Избавьтесь от потрясений и осложнений. Разумеется, эти ножницы отлично справляются и с разрезанием ткани. Увеличивает силу на <%= str %>. Зачарованный шкаф: Набор Шляпника (предмет 3 из 4).", + "weaponArmoireHattersShearsNotes": "Рассеките гордиев узел. Но, разумеется, эти ножницы отлично справляются и с разрезанием ткани. Увеличивают силу на <%= str %>. Зачарованный шкаф: Комплект Шляпника (Предмет 3 из 4).", "weaponSpecialSummer2024WarriorNotes": "Некоторые выпавшие акульи зубы превращаются в оружие, способное нанести урон с любой стороны. Увеличивает силу на <%= str %>. Ограниченное издание снаряжения Лета 2024.", - "gearItemsCompleted": "Вы владеете всем снаряжением класса <%= klass %>! Новое снаряжение выпускается во время сезонных Гала.", + "gearItemsCompleted": "Вы владеете всем снаряжением класса <%= klass %>! Новое снаряжение выпускается во время сезонного Торжества.", "moreArmoireGearAvailable": "До тех пор остается ещё <%= armoireCount %> видов снаряжения в Зачарованном сундуке, которые вы можете найти!", "moreArmoireGearComing": "Зачарованный сундук пополняется новыми вещами каждый месяц!", "weaponSpecialSummer2024RogueText": "Трезубец Морского Слизня", "weaponSpecialSummer2024RogueNotes": "Оберни острые укусы других против них самих! Увеличивает силу на <%= str %>. Ограниченное издание лета 2024.", "weaponSpecialSummer2024WarriorText": "Резак из зуба Белой Акулы", - "weaponSpecialSummer2024MageText": "Жезл Морского Анемона" + "weaponSpecialSummer2024MageText": "Жезл Морского Анемона", + "weaponSpecialWinter2025WarriorText": "Топор Лося-Воина", + "weaponSpecialWinter2025WarriorNotes": "Мощный топор для мощного лося! Вас будет не остановить! Увеличивает силу на <%= str %>. Ограниченное издание зимы 2024-2025.", + "weaponSpecialFall2024WarriorText": "Меч пламени", + "weaponSpecialFall2024WarriorNotes": "Это грозное оружие сразу же разрубает препятствия на пути к цели. Увеличивает силу на <%= str %>. Ограниченное издание осени 2024.", + "weaponSpecialFall2024RogueText": "Палочка из лент", + "weaponSpecialFall2024RogueNotes": "Задачи застынут на месте из-за изгибов и поворотов этого завораживающего оружия. Увеличивает силу на <%= str %>. Ограниченное издание осени 2024.", + "weaponSpecialFall2024HealerText": "Космическая коса", + "weaponSpecialFall2024MageText": "Посох Подземного мира", + "weaponSpecialFall2024MageNotes": "Выполнение заданий мгновенно упрощается при одном прикосновении к этому сияющему оружию. Увеличивает интеллект на <%= int %> и восприятие на <%= per %>. Ограниченное издание осени 2024.", + "armorSpecialFall2024HealerNotes": "Станьте единым целым с галактикой и завораживайте окружающих в этих доспехах. Увеличивает Телосложение на <%= con %>. Ограниченный выпуск Осень 2024.", + "weaponSpecialSummer2024MageNotes": "Эти потрясающие щупальца могут одновременно отвлекать, отклонять и направлять магию. Увеличивает интеллект на <%= int %> и восприятие на <%= per %>. Ограниченное издание снаряжения Лета 2024.", + "weaponSpecialSummer2024HealerText": "Посох Морской Улитки", + "weaponSpecialSummer2024HealerNotes": "Вы будете поражены, узнав, насколько тверд панцирь на конце этого посоха. Увеличивает интеллект на <%= int %>. Ограниченное издание снаряжения Лета 2024.", + "weaponSpecialFall2024HealerNotes": "Задачи, которые когда-то были космически сложными, без труда будут разрублены этим поразительным лезвием. Увеличивает интеллект на <%= int %>. Ограниченное издание осени 2024.", + "weaponArmoireFunnyFoolBatonText": "Жезл Веселого Шута", + "weaponArmoireDragonKnightsLanceText": "Копье Рыцаря Дракона", + "weaponArmoireSpookyCandyBucketNotes": "С таким эпичным костюмом ты точно соберёшь кучу конфет! Хорошо, что у тебя есть это бездонное ведерко, чтобы всё уместить. Старайся не перекусывать, пока не доберёшься домой. Увеличивает интеллект на <%= int %>. Зачарованный сундук: Набор Ночи Ужасов (Предмет 2 из 2)", + "weaponArmoireCorsairsBladeNotes": "И при защите, и при нападении - этот яростный клинок не подведет. Только убедись, что он надежно спрятан, когда не используется. Увеличивает силу на <%= str %>. Зачарованный сундук: Набор Корсара (Предмет 3 из 3).", + "weaponArmoireCorsairsBladeText": "Клинок Корсара", + "weaponArmoireDragonKnightsLanceNotes": "Это красно-серебристое копье выбило многих противников из селда. Увеличивает Телосложение на <%= con %>. Зачарованный сундук: Набор Рыцаря Дракона (Предмет 3 из 3).", + "weaponArmoireFunnyFoolBatonNotes": "Одним взмахом можешь выдать острую шутку, отвлечь внимание или вызвать аплодисменты. Увеличивает Телосложение и Силу на <%= attrs %> каждый. Зачарованный сундук: Набор Веселого Шута (Предмет 3 из 3)", + "weaponArmoireSpookyCandyBucketText": "Жуткое Конфетное Ведерко" } diff --git a/website/common/locales/ru/generic.json b/website/common/locales/ru/generic.json index 95ad88e4e7..dbbfcd799a 100644 --- a/website/common/locales/ru/generic.json +++ b/website/common/locales/ru/generic.json @@ -25,7 +25,7 @@ "user": "Пользователь", "market": "Рынок", "newSubscriberItem": "У вас новый Таинственный предмет", - "subscriberItemText": "Каждый месяц подписчики получают таинственный предмет. Он появляется в начале месяца. Читайте статью «Таинственные предметы» на вики для подробной информации.", + "subscriberItemText": "В начале каждого месяца подписчики получают новый таинственный набор снаряжения!", "all": "Все", "none": "Ничего", "more": "ещё <%= count %>", @@ -189,7 +189,7 @@ "dismissAll": "Сбросить все уведомления", "messages": "Сообщения", "emptyMessagesLine1": "У вас нет новых сообщений", - "emptyMessagesLine2": "Вы можете отправить новое сообщение пользователю, открыв его профиль и нажав на кнопку \"Отправить сообщение\".", + "emptyMessagesLine2": "Отправьте сообщение, чтобы начать разговор с вашей командой или другим игроком Habitica", "userSentMessage": "<%- user %> отправил вам сообщение", "letsgo": "Начнем!", "selected": "Выбрано", @@ -219,5 +219,27 @@ "skipExternalLinkModal": "Удерживайте CTRL (Windows) или Command (Mac) при клике по ссылке, чтобы пропустить модальное окно.", "titleCustomizations": "Персонализация", "general": "Общие", - "allNotifications": "Все уведомления" + "allNotifications": "Все уведомления", + "newMessage": "Новое сообщение", + "viewAdminPanel": "Посмотреть панель админа", + "reportPlayer": "Пожаловаться на игрока", + "blockPlayer": "Заблокировать игрока", + "adminTools": "Инструменты админа", + "unblockPlayer": "Разблокировать игрока", + "bannedPlayer": "Этот игрок забанен.", + "shadowMute": "Скрытое отключение звука", + "mutePlayer": "Выключение звука", + "banPlayer": "Забанить игрока", + "unbanPlayer": "Разбанить игрока", + "askQuestionHeaderDescribe": "Впервые в Habitica и не знаете, что вы делаете? Ветеран, но не можете понять, как использовать одну из функций? Заполните эту форму и наша команда свяжется с вами.", + "questionEmailText": "Будет использоваться только для связи с вами по вашему вопросу.", + "question": "Вопрос", + "questionDescriptionText": "Если вам неудобно говорить по-английски, вы можете задавать вопросы на своем языке.", + "questionPlaceholder": "Задайте свой вопрос здесь", + "submitQuestion": "Отправить вопрос", + "whyReportingPlayer": "Почему вы жалуетесь на этого игрока?", + "whyReportingPlayerPlaceholder": "Причина жалобы", + "playerReportModalBody": "Вы должны сообщать только об игроках, нарушающих <%= firstLinkStart %>Правила сообщества<%= linkEnd %> и/или <%= secondLinkStart %>Условия использования<%= linkEnd %>. Отправка ложного сообщения является нарушением Правил сообщества Habitica.", + "rememberToBeKind": "Пожалуйста, помните, что нужно быть добрыми, уважительными и следовать Правилам сообщества.", + "targetUserNotExist": "Выбранный пользователь: '<%=имя пользователя %>' не существует." } diff --git a/website/common/locales/ru/limited.json b/website/common/locales/ru/limited.json index 236d97845f..139da5aacd 100644 --- a/website/common/locales/ru/limited.json +++ b/website/common/locales/ru/limited.json @@ -249,5 +249,6 @@ "fall2023ScaryMovieWarriorSet": "Фильм ужасов (Воин)", "fall2023ScarletWarlockMageSet": "Алый колдун (Маг)", "fall2023WitchsBrewRogueSet": "Ведьмино зелье (Разбойник)", - "fall2023BogCreatureHealerSet": "Болотное существо (Целитель)" + "fall2023BogCreatureHealerSet": "Болотное существо (Целитель)", + "winter2024SnowyOwlRogueSet": "Снежная сова (Разбойник)" } diff --git a/website/common/locales/ru/npc.json b/website/common/locales/ru/npc.json index aa1fb7f8bb..c8a9342aff 100644 --- a/website/common/locales/ru/npc.json +++ b/website/common/locales/ru/npc.json @@ -99,7 +99,7 @@ "tourPartyPage": "Добро пожаловать в новую команду! Вы можете приглашать других игроков в вашу команду по имени пользователя, электронной почте или из листа игроков, ищущих команду, чтобы заработать эксклюзивный свиток квеста Василиста.

Зайдите вЧаВо чтобы узнать больше о том, как работают команды.", "tourChallengesPage": "Испытания – это тематические списки заданий, созданные пользователями! Присоединившись к испытанию, вы добавите эти задания к своему аккаунту. Соревнуйтесь с другими пользователями, чтобы получить самоцветы в качестве призов!", "tourMarketPage": "Каждый раз, когда вы выполняете задачу, вы можете получить яйцо, еду или инкубационный эликсир. Также эти предметы можно приобрести здесь.", - "tourHallPage": "Добро пожаловать в Зал Героев, где воздаются почести добровольным помощникам, участвующим в развитии Habitica. За свои заслуги в программировании, изобразительном искусстве, музыке, литературном творчестве или простой помощи они награждены самоцветами, уникальным снаряжением и престижными титулами. Вы тоже можете помочь Habitica!", + "tourHallPage": "Добро пожаловать в Зал Героев, где воздаются почести добровольным помощникам, участвующим в развитии Habitica. За свои заслуги в программировании, рисовании, музыке, литературе или простой помощи они награждены самоцветами, уникальным снаряжением и престижными титулами. Вы тоже можете помочь Habitica!", "tourPetsPage": "Добро пожаловать в стойла! Каждый раз, когда вы выполняете задачу, вы можете получить яйцо или инкубационный эликсир для выведения питомцев. Как только вы выведете питомца, он появится здесь! Нажмите на изображение питомца, чтобы добавить его к своему аватару. Кормите питомцев едой, и они вырастут в выносливых скакунов.", "tourMountsPage": "Когда питомец получит достаточно еды, он станет скакуном и появится здесь. Выберите скакуна, чтобы оседлать его!", "tourEquipmentPage": "Здесь хранится ваше снаряжение! Боевая экипировка влияет на ваши характеристики. Если вы хотите, чтобы на аватаре отображалось иное снаряжение, без изменения характеристик, нажмите «Использовать костюм.»", @@ -120,7 +120,7 @@ "nMonthsSubscriptionGift": "<%= nMonths %> мес. подписки (подарок)", "nGemsGift": "<%= nGems %> самоцветов (подарок)", "nGems": "<%= nGems %> самоцветов", - "paymentSubBillingWithMethod": "На вашу подписку будет выставлен платеж в $<%= amount %> каждый <%= months %> месяц посредством <%= paymentMethod %>.", + "paymentSubBillingWithMethod": "За вашу подписку будет списываться
<%= amount %> каждый(е) <%= months %>месяц(ев) со счета <%= paymentMethod %>", "invalidUnlockSet": "Данный набор предметов недоступен и не может быть разблокирован.", "limitedAvailabilityMinutes": "Доступно <%= minutes %>м <%= seconds %>с", "limitedAvailabilityHours": "Доступно <%= hours %>ч <%= minutes %>м", @@ -131,5 +131,6 @@ "groupsPaymentSubBilling": "Ваша следующая дата выставления счета <%= renewalDate %>.", "sellItems": "Продать предметы", "customizationsShopText": "Хотите изменить свой стиль? Вы обратились по адресу! У нас вы найдете самые свежие образы, соответствующие сезону.", - "notAvailable": "Этот предмет недоступен." + "notAvailable": "Этот предмет недоступен.", + "paymentYouSentSubscriptionG1G1": "Вы отправили <%- name %>
подписку Habitica на <%= months %> месяца(ев), такая же подписка была применена к вашему аккаунту в рамках акции \"Подари один — получи один\"!" } diff --git a/website/common/locales/ru/pets.json b/website/common/locales/ru/pets.json index 05f068d1b8..ca09d31c33 100644 --- a/website/common/locales/ru/pets.json +++ b/website/common/locales/ru/pets.json @@ -86,7 +86,7 @@ "welcomeStable": "Добро пожаловать к Питомцам и Скакунам!", "welcomeStableText": "Добро пожаловать в стойла! Я — Мэтт, Повелитель зверей. Каждый раз, когда вы выполняете задание, у вас будет случайный шанс получить яйцо или инкубационный эликсир для вывода питомцев. Когда питомец вылупляется, он появляется здесь! Нажмите на изображение питомца, чтобы добавить его к своему аватару. Кормите питомцев едой и они вырастут в выносливых скакунов.", "petLikeToEat": "Что любят есть мои Питомцы?", - "petLikeToEatText": "Питомцы вырастут, чем бы вы их ни кормили, но они растут быстрее, если вы накормите их именно тем кормом, который они любят. Экспериментируйте, чтобы найти связь, или посмотрите ответ здесь:
https://habitica.fandom.com/ru/wiki/Еда", + "petLikeToEatText": "Питомцы вырастут, чем бы вы их ни кормили, но они растут быстрее, если вы накормите их именно тем кормом, который они любят. Экспериментируйте, чтобы найти связь, или посмотрите ответ здесь:
https://habitica.com/static/faq#pet-foods", "filterByStandard": "Обычные", "filterByMagicPotion": "Из Волшебного эликсира", "filterByQuest": "Квестовые", diff --git a/website/common/locales/ru/settings.json b/website/common/locales/ru/settings.json index 4f8f09f4a6..b8c1445152 100644 --- a/website/common/locales/ru/settings.json +++ b/website/common/locales/ru/settings.json @@ -55,7 +55,6 @@ "APIToken": "Токен API (это пароль — смотри предупреждение выше!)", "showAPIToken": "Показать токен API", "hideAPIToken": "Скрыть токен API", - "APITokenWarning": "Если вам нужен новый API Токен (например, если он случайно попал в общий доступ), напишите на почту <%= hrefTechAssistanceEmail %>, указав свой ID пользователя и текущий Токен. После смены токена вам потребуется разлогиниться и повторно авторизоваться на сайте и мобильных устройствах, а также вести новый токен везде, где используются инструменты страны Habitica.", "thirdPartyApps": "Сторонние приложения", "resetDo": "Да, сделать сброс учетной записи!", "resetComplete": "Сброс завершен!", diff --git a/website/common/locales/sk/front.json b/website/common/locales/sk/front.json index 2265b81e0d..d1875d564c 100644 --- a/website/common/locales/sk/front.json +++ b/website/common/locales/sk/front.json @@ -133,7 +133,7 @@ "invalidReqParams": "Neplatné požadované parametre.", "memberIdRequired": "\"member\" musí byť platné UUID.", "heroIdRequired": "\"heroId\" musí byť platné UUID.", - "cannotFulfillReq": "Tvoja požiadavka nemôže byť splnená. Pokiaľ táto chyba pretrváva, napíš nám na email admin@habitica.com.", + "cannotFulfillReq": "Tvoja požiadavka nemôže byť splnená. Pokiaľ táto chyba pretrváva, napíš nám na email admin@habitica.com.", "modelNotFound": "Tento model neexistuje.", "signUpWithSocial": "Sign up with <%= social %>", "loginWithSocial": "Log in with <%= social %>", diff --git a/website/common/locales/sk/gear.json b/website/common/locales/sk/gear.json index a3085e9fbf..ae1e405d6d 100644 --- a/website/common/locales/sk/gear.json +++ b/website/common/locales/sk/gear.json @@ -78,7 +78,7 @@ "weaponHealer6Text": "Zlaté žezlo", "weaponHealer6Notes": "Utišuje bolesť všetkých, ktorý na ňu pozrú. Zvyšuje inteligenciu o <%= int %>.", "weaponSpecial0Text": "Meč temných duší", - "weaponSpecial0Notes": "Vysáva z nepriateľa život, čím dodáva silu svojim nehoráznym úderom. Zvyšuje silu o <%= str %>.", + "weaponSpecial0Notes": "Vysáva z nepriateľa život, čím dodáva silu svojim nehoráznym úderom. Zvyšuje silu o <%= str %>.", "weaponSpecial1Text": "Kryštálový meč", "weaponSpecial1Notes": "Its glittering facets tell the tale of a hero. Increases all Stats by <%= attrs %>.", "weaponSpecial2Text": "Dračia palica Stephena Webera", @@ -126,7 +126,7 @@ "weaponSpecialSpringWarriorText": "Mrkvový meč", "weaponSpecialSpringWarriorNotes": "Tento ohromný meč krája nepriateľov s ľahkosťou! Tiež môže slúžiť ako chutné občerstvenie počas boja. Zvyšuje silu o <%= str %>. Limitovaná Edícia 2014 Jarná Výbava.", "weaponSpecialSpringMageText": "Ementálová palica", - "weaponSpecialSpringMageNotes": "Iba tie najmocnejšie hlodavce dokážu čeliť svojmu hladu a nosiť túto nebezpečnú palicu. Zvyšuje inteligenciu o <%= int %> a postreh o <%= per %>. Limitovaná Edícia 2014 Jarná Výbava.", + "weaponSpecialSpringMageNotes": "Iba tie najmocnejšie hlodavce dokážu čeliť svojmu hladu a nosiť túto nebezpečnú palicu. Zvyšuje inteligenciu o <%= int %> a postreh o <%= per %>. Limitovaná Edícia 2014 Jarná Výbava.", "weaponSpecialSpringHealerText": "Krásna kosť", "weaponSpecialSpringHealerNotes": "DONES! Zvyšuje inteligenciu o <%= int %>. Limitovaná Edícia 2014 Jarná Výbava.", "weaponSpecialSummerRogueText": "Pirátska šabľa", @@ -422,7 +422,7 @@ "armorSpecial1Text": "Kryštálová zbroj", "armorSpecial1Notes": "Its tireless power inures the wearer to mundane discomfort. Increases all Stats by <%= attrs %>.", "armorSpecial2Text": "Šľachtická tunika Jeana Chalarda", - "armorSpecial2Notes": "Budeš extra huňatý! Zvyšuje oboje odolnosť a inteligenciu o <%= attrs %>.", + "armorSpecial2Notes": "Budeš extra huňatý! Zvyšuje oboje odolnosť a inteligenciu o <%= attrs %>.", "armorSpecialTakeThisText": "Take This Armor", "armorSpecialTakeThisNotes": "This armor was earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.", "armorSpecialFinnedOceanicArmorText": "Finned Oceanic Armor", @@ -824,7 +824,7 @@ "headWarrior2Text": "Krúžková helma", "headWarrior2Notes": "Kukla vyrobená z pospájaných kovových krúžkov. Zvyšuje silu o <%= str %>.", "headWarrior3Text": "Plátová helma", - "headWarrior3Notes": "Helma vyrobená z hrubej ocele, ochráni pred každým úderom. Zvyšuje silu o <%= str %>.", + "headWarrior3Notes": "Helma vyrobená z hrubej ocele, ochráni pred každým úderom. Zvyšuje silu o <%= str %>.", "headWarrior4Text": "Červená helma", "headWarrior4Notes": "Moc získava z rubínov, ktorými je vykladaná. Keď je nositeľ nahnevaný, žiari. Zvyšuje silu o <%= str %>.", "headWarrior5Text": "Zlatá helma", @@ -1291,7 +1291,7 @@ "shieldHealer5Text": "Kráľovský štít", "shieldHealer5Notes": "Udeľovaný tým, čo sú najoddanejší obrane kráľa. Zvyšuje odolnosť o <%= con %>.", "shieldSpecial0Text": "Trýznená lebka", - "shieldSpecial0Notes": "Vidí aj za závoj smrti a ukazuje ti všetko, čo tam vidí a čoho sa tvoji nepriatelia desia. Zvyšuje postreh o <%= per %>.", + "shieldSpecial0Notes": "Vidí aj za závoj smrti a ukazuje ti všetko, čo tam vidí a čoho sa tvoji nepriatelia desia. Zvyšuje postreh o <%= per %>.", "shieldSpecial1Text": "Kryštálový štít", "shieldSpecial1Notes": "Shatters arrows and deflects the words of naysayers. Increases all Stats by <%= attrs %>.", "shieldSpecialTakeThisText": "Take This Shield", diff --git a/website/common/locales/sk/groups.json b/website/common/locales/sk/groups.json index 5177c5db88..6a4eda838f 100644 --- a/website/common/locales/sk/groups.json +++ b/website/common/locales/sk/groups.json @@ -246,7 +246,7 @@ "partyDescriptionPlaceholder": "This is our Party's description. It describes what we do in this Party. If you want to learn more about what we do in this Party, read the description. Party on.", "guildGemCostInfo": "A Gem cost promotes high quality Guilds and is transferred into your Guild's bank.", "noGuildsTitle": "You aren't a member of any Guilds.", - "noGuildsParagraph1": "Guilds are social groups created by other players that can offer you support, accountability, and encouraging chat.", + "noGuildsParagraph1": "Guilds are social groups created by other players that can offer you support, accountability, and encouraging chat.", "noGuildsParagraph2": "Click the Discover tab to see recommended Guilds based on your interests, browse Habitica's public Guilds, or create your own Guild.", "noGuildsMatchFilters": "We couldn't find any matching Guilds.", "privateDescription": "A private Guild will not be displayed in Habitica's Guild directory. New members can be added by invitation only.", diff --git a/website/common/locales/sk/npc.json b/website/common/locales/sk/npc.json index 970a8ffac1..687e4cd98f 100644 --- a/website/common/locales/sk/npc.json +++ b/website/common/locales/sk/npc.json @@ -7,26 +7,26 @@ "justin": "Justin", "justinIntroMessage1": "Ahoj! Musíš tu byť nový. Volám sa Justin, a budem tvojím sprievodcom vo svete Habitici.", "justinIntroMessage3": "Skvelé! Teraz mi povedz, na čom by si chcel pracovať počas tejto cesty?", - "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", - "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", + "justinIntroMessageUsername": "Skôr ako začneme, musíme vymyslieť ako ťa budeme volať. Nižšie nájdeš verejné aj užívateľské meno, ktoré som pre teba vygeneroval. Hneď ako si vyberieš verejné a používateľské meno, môžeme začať s torbou tvojho avatara!", + "justinIntroMessageAppearance": "Ako by si chcel vyzerať? Neboj sa, svoj vzhľad môžeš neskôr zmeniť.", "introTour": "Tu to máme! Vyplnil som pre teba nejaké Úlohy založené na tvojich záujmoch, takže môžeš hneď začať. Klikni na Úlohu, aby si ju upravil alebo pridaj novú Úlohu, ktorá sa bude hodiť k tvojmu režimu!", - "prev": "Prev", + "prev": "Predch", "next": "Next", - "randomize": "Randomize", + "randomize": "Náhodné", "mattBoch": "Matúš Boch", "mattBochText1": "Vitaj v stajni! Volám sa Matt, pán šeliem. Vždy keď splníš úlohu, máš náhodnú šancu získať vajíčko alebo liahoxír na liahnutie zvieratiek. Keď si vyliahneš zvieratko, objaví sa tu! Klikni na obrázok zvieratka aby si ho pridal k svojmu avatarovi. Nakŕm ich krmivom, ktoré nájdeš, a vyrastú v majestátne tátoše.", "welcomeToTavern": "Vitaj v Hostinci!", "sleepDescription": "Potrebuješ pauzu? Pozastav poškodenie (nájdeš v nastaveniach) pre pozastavenie, niektorých náročnejších herných mechaník Habitici:", "sleepBullet1": "Tvoje vynechané denné úlohy ťa nezrania (bossovia však budú stále spôsobovať poškodenie za denné úlohy, ktoré nesplnili členovia tvojej družiny)", - "sleepBullet2": "Počítadlá denných úloh a návykov sa nezresetujú.", + "sleepBullet2": "Počítadlá denných úloh a návykov sa nezresetujú", "sleepBullet3": "Tvoje poškodenie udelené bossom z výprav alebo objavené zberateľské predmety zostanú čakajúce až dokiaľ si opäť nepovolíš poškodenie", - "pauseDailies": "Pause Damage", - "unpauseDailies": "Unpause Damage", - "staffAndModerators": "Staff and Moderators", + "pauseDailies": "Pozastaviť poškodenie", + "unpauseDailies": "Obnoviť poškodenie", + "staffAndModerators": "Personál a Moderátori", "communityGuidelinesIntro": "Habitica sa snaží vytvoriť prostredie vítajúce používateľov akéhokoľvek veku a pôvodu, špeciálne v priestoroch skupín a družín. Pokiaľ by si mal akékoľvek otázky, prosím obráť sa na naše Pravidlá pre komunitu.", - "acceptCommunityGuidelines": "I agree to follow the Community Guidelines", - "worldBossEvent": "World Boss Event", - "worldBossDescription": "World Boss Description", + "acceptCommunityGuidelines": "Súhlasím s dodržiavaním pravidiel pre komunitu", + "worldBossEvent": "Udalosť Svetový boss", + "worldBossDescription": "Popis svetového bossa", "welcomeMarketMobile": "Welcome to the Market! Buy hard-to-find eggs and potions! Come see what we have to offer.", "howManyToSell": "How many would you like to sell?", "yourBalance": "Your balance:", diff --git a/website/common/locales/sk/questscontent.json b/website/common/locales/sk/questscontent.json index 5c54a64c48..537e4f6cd8 100644 --- a/website/common/locales/sk/questscontent.json +++ b/website/common/locales/sk/questscontent.json @@ -122,7 +122,7 @@ "questEggHuntCollectPlainEgg": "Bezfarebných vajíčok", "questEggHuntDropPlainEgg": "Bezfarebné vajíčko", "questDilatoryText": "The Dread Drag'on of Dilatory", - "questDilatoryNotes": "We should have heeded the warnings.

Dark shining eyes. Ancient scales. Massive jaws, and flashing teeth. We've awoken something horrifying from the crevasse: the Dread Drag'on of Dilatory! Screaming Habiticans fled in all directions when it reared out of the sea, its terrifyingly long neck extending hundreds of feet out of the water as it shattered windows with its searing roar.

\"This must be what dragged Dilatory down!\" yells Lemoness. \"It wasn't the weight of the neglected tasks - the Dark Red Dailies just attracted its attention!\"

\"It's surging with magical energy!\" @Baconsaur cries. \"To have lived this long, it must be able to heal itself! How can we defeat it?\"

Why, the same way we defeat all beasts - with productivity! Quickly, Habitica, band together and strike through your tasks, and all of us will battle this monster together. (There's no need to abandon previous quests - we believe in your ability to double-strike!) It won't attack us individually, but the more Dailies we skip, the closer we get to triggering its Neglect Strike - and I don't like the way it's eyeing the Tavern....", + "questDilatoryNotes": "We should have heeded the warnings.

Dark shining eyes. Ancient scales. Massive jaws, and flashing teeth. We've awoken something horrifying from the crevasse: the Dread Drag'on of Dilatory! Screaming Habiticans fled in all directions when it reared out of the sea, its terrifyingly long neck extending hundreds of feet out of the water as it shattered windows with its searing roar.

\"This must be what dragged Dilatory down!\" yells Lemoness. \"It wasn't the weight of the neglected tasks - the Dark Red Dailies just attracted its attention!\"

\"It's surging with magical energy!\" @Baconsaur cries. \"To have lived this long, it must be able to heal itself! How can we defeat it?\"

Why, the same way we defeat all beasts - with productivity! Quickly, Habitica, band together and strike through your tasks, and all of us will battle this monster together. (There's no need to abandon previous quests - we believe in your ability to double-strike!) It won't attack us individually, but the more Dailies we skip, the closer we get to triggering its Neglect Strike - and I don't like the way it's eyeing the Tavern....", "questDilatoryBoss": "The Dread Drag'on of Dilatory", "questDilatoryBossRageTitle": "Neglect Strike", "questDilatoryBossRageDescription": "When this bar has filled up, the Dread Drag'on of Dilatory will unleash great havoc on Habitica's terrain", @@ -567,8 +567,8 @@ "questPterodactylDropPterodactylEgg": "Pterodactyl (Egg)", "questPterodactylUnlockText": "Unlocks purchasable Pterodactyl eggs in the Market", "questBadgerText": "Stop Badgering Me!", - "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", - "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", + "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", + "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", "questBadgerBoss": "The Badgering Bother", "questBadgerDropBadgerEgg": "Badger (Egg)", "questBadgerUnlockText": "Unlocks purchasable Badger eggs in the Market", diff --git a/website/common/locales/sk/settings.json b/website/common/locales/sk/settings.json index c9be98073f..4d5898bdf8 100644 --- a/website/common/locales/sk/settings.json +++ b/website/common/locales/sk/settings.json @@ -55,7 +55,6 @@ "APIToken": "API Token (toto je heslo - prečítaj si varovanie vyššie!)", "showAPIToken": "Ukázať API Token", "hideAPIToken": "Skryť API Token", - "APITokenWarning": "If you need a new API Token (e.g., if you accidentally shared it), email <%= hrefTechAssistanceEmail %> with your User ID and current Token. Once it is reset you will need to re-authorize everything by logging out of the website and mobile app and by providing the new Token to any other Habitica tools that you use.", "thirdPartyApps": "Aplikácie tretích strán", "resetDo": "Sprav to, zresetuj mi konto!", "resetComplete": "Resetovanie hotové!", diff --git a/website/common/locales/sr/content.json b/website/common/locales/sr/content.json index cd97b8285c..13ea0240b6 100644 --- a/website/common/locales/sr/content.json +++ b/website/common/locales/sr/content.json @@ -211,7 +211,7 @@ "hatchingPotionGlow": "Glow-in-the-Dark", "hatchingPotionFrost": "Frost", "hatchingPotionIcySnow": "Icy Snow", - "hatchingPotionNotes": "Pospite ovo po jajetu, i iz njega će se izleći <%= potText(locale) %> ljubimac.", + "hatchingPotionNotes": "Pospite ovo po jajetu, i iz njega će se izleći <%= potText(locale) %> ljubimac.", "foodMeat": "Meso", "foodMeatThe": "the Meat", "foodMeatA": "Meat", diff --git a/website/common/locales/sr/front.json b/website/common/locales/sr/front.json index 6e07680721..00e637d62f 100644 --- a/website/common/locales/sr/front.json +++ b/website/common/locales/sr/front.json @@ -66,7 +66,7 @@ "pkQuestion3": "Why did you add social features?", "pkAnswer3": "Social pressure is a huge motivating factor for a lot of people, so we knew that we wanted to have a strong community that would hold each other accountable for their goals and cheer for their successes. Luckily, one of the things that multiplayer video games do best is foster a sense of community among their users! Habitica’s community structure borrows from these types of games; you can form a small Party of close friends, but you can also join a larger, shared-interest groups known as a Guild. Although some users choose to play solo, most decide to form a support network that encourages social accountability through features such as Quests, where Party members pool their productivity to battle monsters together.", "pkQuestion4": "Why does skipping tasks remove your avatar’s health?", - "pkAnswer4": "If you skip one of your daily goals, your avatar will lose health the following day. This serves as an important motivating factor to encourage people to follow through with their goals because people really hate hurting their little avatar! Plus, the social accountability is critical for a lot of people: if you’re fighting a monster with your friends, skipping your tasks hurts their avatars, too.", + "pkAnswer4": "If you skip one of your daily goals, your avatar will lose health the following day. This serves as an important motivating factor to encourage people to follow through with their goals because people really hate hurting their little avatar! Plus, the social accountability is critical for a lot of people: if you’re fighting a monster with your friends, skipping your tasks hurts their avatars, too.", "pkQuestion5": "What distinguishes Habitica from other gamification programs?", "pkAnswer5": "One of the ways that Habitica has been most successful at using gamification is that we've put a lot of effort into thinking about the game aspects to ensure that they are actually fun. We've also included many social components, because we feel that some of the most motivating games let you play with friends, and because research has shown that it's easier to form habits when you have accountability to other people.", "pkQuestion6": "Who is the typical user of Habitica?", @@ -133,7 +133,7 @@ "invalidReqParams": "Invalid request parameters.", "memberIdRequired": "\"member\" must be a valid UUID.", "heroIdRequired": "\"heroId\" must be a valid UUID.", - "cannotFulfillReq": "Your request cannot be fulfilled. Email admin@habitica.com if this error persists.", + "cannotFulfillReq": "Your request cannot be fulfilled. Email admin@habitica.com if this error persists.", "modelNotFound": "This model does not exist.", "signUpWithSocial": "Sign up with <%= social %>", "loginWithSocial": "Log in with <%= social %>", diff --git a/website/common/locales/sr/gear.json b/website/common/locales/sr/gear.json index 1a0c83bfa0..533598262e 100644 --- a/website/common/locales/sr/gear.json +++ b/website/common/locales/sr/gear.json @@ -84,7 +84,7 @@ "weaponSpecial2Text": "Zmajevo koplje Stivena Vebera", "weaponSpecial2Notes": "Moć zmaja ispunjava ovo koplje. Povećava Snagu i Opažanje za <%= attrs %>.", "weaponSpecial3Text": "Mastejnova jutarnja zvezda", - "weaponSpecial3Notes": "Susreti, zveri, problemi: rešeno jednim udarcem! Povećava Snagu, Inteligenciju i Vitalnost za <%= attrs %>.", + "weaponSpecial3Notes": "Susreti, zveri, problemi: rešeno jednim udarcem! Povećava Snagu, Inteligenciju i Vitalnost za <%= attrs %>.", "weaponSpecialCriticalText": "Kritični malj istrebljivača bagova", "weaponSpecialCriticalNotes": "This champion slew a critical GitHub foe where many warriors fell. Fashioned from the bones of Bug, this hammer deals a mighty critical hit. Increases Strength and Perception by <%= attrs %> each.", "weaponSpecialTakeThisText": "Uzmi Ovaj Mač", @@ -156,7 +156,7 @@ "weaponSpecialSpring2015RogueText": "Eksplozivni pisak", "weaponSpecialSpring2015RogueNotes": "Ne dozvolite da Vas zvuk zavara - ovo je veoma moćan eksploziv. Povećava Snagu za <%= str %>. Oprema iz ograničene serije Proleće 2015.", "weaponSpecialSpring2015WarriorText": "Koštana batina", - "weaponSpecialSpring2015WarriorNotes": "To jeste prava koštana batina za prave žestoke psiće i definitivno nije igračka za žvakanje koju Vam je Sezonska čarobnica dala zato što ko je dobar psić? Koooooo je to dobar psić?? To si ti!!! Ti si dobar psić!!! Povećava Snagu za <%= str %>. Oprema iz ograničene serije Proleće 2015.", + "weaponSpecialSpring2015WarriorNotes": "To jeste prava koštana batina za prave žestoke psiće i definitivno nije igračka za žvakanje koju Vam je Sezonska čarobnica dala zato što ko je dobar psić? Koooooo je to dobar psić?? To si ti!!! Ti si dobar psić!!! Povećava Snagu za <%= str %>. Oprema iz ograničene serije Proleće 2015.", "weaponSpecialSpring2015MageText": "Mađionačarev čarobni štapić", "weaponSpecialSpring2015MageNotes": "Conjure up a carrot for yourself with this fancy wand. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Spring Gear.", "weaponSpecialSpring2015HealerText": "Mačija zvečka", @@ -294,7 +294,7 @@ "weaponMystery201811Text": "Splendid Sorcerer's Staff", "weaponMystery201811Notes": "This magical stave is as powerful as it is elegant. Confers no benefit. November 2018 Subscriber Item.", "weaponMystery301404Text": "Stimpank štap", - "weaponMystery301404Notes": "Odličan za šetnju po gradu. Predmet za pretplatnike mart 3015. Ne daje nikakav bonus.", + "weaponMystery301404Notes": "Odličan za šetnju po gradu. Predmet za pretplatnike mart 3015. Ne daje nikakav bonus.", "weaponArmoireBasicCrossbowText": "Basic Crossbow", "weaponArmoireBasicCrossbowNotes": "This crossbow can pierce a task's armor from very far away! Increases Strength by <%= str %>, Perception by <%= per %>, and Constitution by <%= con %>. Enchanted Armoire: Independent Item.", "weaponArmoireLunarSceptreText": "Soothing Lunar Sceptre", @@ -422,7 +422,7 @@ "armorSpecial1Text": "Kristalni oklop", "armorSpecial1Notes": "Its tireless power inures the wearer to mundane discomfort. Increases all Stats by <%= attrs %>.", "armorSpecial2Text": "Kraljevska tunika Žana Šaralda", - "armorSpecial2Notes": "Osećaćete se izuzetno paperjasto! Povećava Vitalnost i Inteligenciju za <%= attrs %>.", + "armorSpecial2Notes": "Osećaćete se izuzetno paperjasto! Povećava Vitalnost i Inteligenciju za <%= attrs %>.", "armorSpecialTakeThisText": "Take This Armor", "armorSpecialTakeThisNotes": "This armor was earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.", "armorSpecialFinnedOceanicArmorText": "Finned Oceanic Armor", @@ -514,7 +514,7 @@ "armorSpecialSpring2015MageText": "Mađioničarevo zečje odelo", "armorSpecialSpring2015MageNotes": "Tvoji peševi se slažu s tvojim čupavim repom. Povećava Inteligenciju za <%= int %>. Oprema iz ograničene serije Proleće 2015.", "armorSpecialSpring2015HealerText": "Umirujuće mačje odelo", - "armorSpecialSpring2015HealerNotes": "Ovo meko mačje odelo je udobno, i umirujuće kao čaj od nane. Povećava Vitalnost za <%= con %>. Oprema iz ograničene serije Proleće 2015.", + "armorSpecialSpring2015HealerNotes": "Ovo meko mačje odelo je udobno, i umirujuće kao čaj od nane. Povećava Vitalnost za <%= con %>. Oprema iz ograničene serije Proleće 2015.", "armorSpecialSummer2015RogueText": "Ruby Tail", "armorSpecialSummer2015RogueNotes": "This garment of shimmering scales transforms its wearer into a real Reef Renegade! Increases Perception by <%= per %>. Limited Edition 2015 Summer Gear.", "armorSpecialSummer2015WarriorText": "Golden Tail", @@ -636,7 +636,7 @@ "armorSpecialWinter2019HealerText": "Midnight Robe", "armorSpecialWinter2019HealerNotes": "Without darkness, there wouldn't be any light. These dark robes help bring peace and rest to promote healing. Increases Constitution by <%= con %>. Limited Edition 2018-2019 Winter Gear.", "armorMystery201402Text": "Odora pismonoše", - "armorMystery201402Notes": "Ova svetlucava i izdržljiva odora ima mnoštvo džepova za čuvanje pisama. Ne daje nikakav bonus. Predmet za pretplatnike februar 2014.", + "armorMystery201402Notes": "Ova svetlucava i izdržljiva odora ima mnoštvo džepova za čuvanje pisama. Ne daje nikakav bonus. Predmet za pretplatnike februar 2014.", "armorMystery201403Text": "Šumski kamuflažni oklop", "armorMystery201403Notes": "Ovaj oklop, ispleten od pruća i obrastao mahovinom, savija se u skladu sa pokretima vlasnika. Ne daje nikakav bonus. Predmet za pretplatnike mart 2014.", "armorMystery201405Text": "Plamen iz srca", @@ -910,7 +910,7 @@ "headSpecialSpringRogueText": "Maska slatkog mačeta", "headSpecialSpringRogueNotes": "Nikom neće pasti na pamet da ste u stvari provalnik. Povećava Opažanje za <%= per %>. Oprema iz ograničene serije Proleće 2014.", "headSpecialSpringWarriorText": "Šlem od čelične deteline", - "headSpecialSpringWarriorNotes": "Ovaj šlem napravljen od kokoca može da podnese i najteže udarce. Povećava Snagu za <%= str %>. Oprema iz ograničene serije Proleće 2014.", + "headSpecialSpringWarriorNotes": "Ovaj šlem napravljen od kokoca može da podnese i najteže udarce. Povećava Snagu za <%= str %>. Oprema iz ograničene serije Proleće 2014.", "headSpecialSpringMageText": "Šešir od švajcarskog sira", "headSpecialSpringMageNotes": "Ovaj šešir čuva u sebi moćne čini. Potrudite se da ga ne grickate. Povećava Opažanje za <%= per %>. Oprema iz ograničene serije Proleće 2014.", "headSpecialSpringHealerText": "Kruna prijateljstva", @@ -942,13 +942,13 @@ "headSpecialWinter2015HealerText": "Udobni naušnik", "headSpecialWinter2015HealerNotes": "Ovaj udobni naušnik štiti od hladnoće i glasnog zvuka. Povećava Inteligenciju za <%= int %>. Oprema iz ograničene serije Zima 2014/15.", "headSpecialSpring2015RogueText": "Šlem otporan na vatru", - "headSpecialSpring2015RogueNotes": "Vatra? Jaka stvar! Vi imate vrhunsku zaštitnu opremu! Povečava Opažanje za <%= per %>. Ograničena Serija 2015 Prolećna Oprema.", + "headSpecialSpring2015RogueNotes": "Vatra? Jaka stvar! Vi imate vrhunsku zaštitnu opremu! Povečava Opažanje za <%= per %>. Ograničena Serija 2015 Prolećna Oprema.", "headSpecialSpring2015WarriorText": "Čuvaj se šlema", "headSpecialSpring2015WarriorNotes": "Opasan šlem! Samo žestoka kuca može da ga nosi. Prestanite da se smejete. Povećava Snagu za <%= str %>. Oprema iz ograničene serije Proleće 2015.", "headSpecialSpring2015MageText": "Šešir Čarobnjaka sa scene", "headSpecialSpring2015MageNotes": "Šta je prvo nastalo, zec ili šešir? Povećava Opažanje za <%= per %>. Oprema iz ograničene serije Proleće 2015.", "headSpecialSpring2015HealerText": "Umirujuća kruna", - "headSpecialSpring2015HealerNotes": "Biser u centru ove krune smiruje i raskomoćuje ljude oko sebe. Povećava Inteligenciju za <%= int %>. Oprema iz ograničene serije Proleće 2015.", + "headSpecialSpring2015HealerNotes": "Biser u centru ove krune smiruje i raskomoćuje ljude oko sebe. Povećava Inteligenciju za <%= int %>. Oprema iz ograničene serije Proleće 2015.", "headSpecialSummer2015RogueText": "Renegade Hat", "headSpecialSummer2015RogueNotes": "This pirate hat fell overboard and has been decorated with scraps of fire coral. Increases Perception by <%= per %>. Limited Edition 2015 Summer Gear.", "headSpecialSummer2015WarriorText": "Jeweled Oceanic Helm", @@ -1333,7 +1333,7 @@ "shieldSpecialWinter2015HealerText": "Umirujući štit", "shieldSpecialWinter2015HealerNotes": "Ovaj štit odbija ledeni vetar. Povećava Vitalnost za <%= con %>. Oprema iz ograničene serije Zima 2014/15.", "shieldSpecialSpring2015WarriorText": "Posuda za hranu", - "shieldSpecialSpring2015WarriorNotes": "Bacite ga na neprijatelje... ili ga jednostavno zadržite, jer će se napuniti ukusnom hranom kad dođe vreme za večeru. Povećava Vitalnost za <%= con %>. Oprema iz ograničene serije Proleće 2015.", + "shieldSpecialSpring2015WarriorNotes": "Bacite ga na neprijatelje... ili ga jednostavno zadržite, jer će se napuniti ukusnom hranom kad dođe vreme za večeru. Povećava Vitalnost za <%= con %>. Oprema iz ograničene serije Proleće 2015.", "shieldSpecialSpring2015HealerText": "Jastuk sa dezenom", "shieldSpecialSpring2015HealerNotes": "Možete odmoriti glavu na ovom udobnom jastuku, ili ga možete napasti svojim oštrim kandžama. Grrrr! Povećava Vitalnost za <%= con %>. Oprema iz ograničene serije Proleće 2015.", "shieldSpecialSummer2015WarriorText": "Sunfish Shield", diff --git a/website/common/locales/sr/groups.json b/website/common/locales/sr/groups.json index ade52f45a6..72fb806316 100644 --- a/website/common/locales/sr/groups.json +++ b/website/common/locales/sr/groups.json @@ -152,7 +152,7 @@ "onlyGroupTasksCanBeAssigned": "Only group tasks can be assigned", "assignedTo": "Assigned To", "assignedToUser": "Assigned to <%- userName %>", - "assignedToMembers": "Podeljeno je na <%= userCount %> članova", + "assignedToMembers": "Podeljeno je na <%= userCount %> članova", "assignedToYouAndMembers": "Dodeljeno je tebi i ostalim članovima(<%= userCount %>)", "youAreAssigned": "Dodeljeno: tebi", "taskIsUnassigned": "This task is unassigned", @@ -246,7 +246,7 @@ "partyDescriptionPlaceholder": "This is our Party's description. It describes what we do in this Party. If you want to learn more about what we do in this Party, read the description. Party on.", "guildGemCostInfo": "A Gem cost promotes high quality Guilds and is transferred into your Guild's bank.", "noGuildsTitle": "You aren't a member of any Guilds.", - "noGuildsParagraph1": "Guilds are social groups created by other players that can offer you support, accountability, and encouraging chat.", + "noGuildsParagraph1": "Guilds are social groups created by other players that can offer you support, accountability, and encouraging chat.", "noGuildsParagraph2": "Click the Discover tab to see recommended Guilds based on your interests, browse Habitica's public Guilds, or create your own Guild.", "noGuildsMatchFilters": "We couldn't find any matching Guilds.", "privateDescription": "A private Guild will not be displayed in Habitica's Guild directory. New members can be added by invitation only.", diff --git a/website/common/locales/sr/messages.json b/website/common/locales/sr/messages.json index 603e606044..bea8b701fd 100644 --- a/website/common/locales/sr/messages.json +++ b/website/common/locales/sr/messages.json @@ -7,7 +7,7 @@ "messageNotAvailable": "This item is not currently available for purchase.", "messageCannotFeedPet": "Ovu zver nije moguće hraniti.", "messageAlreadyMount": "Već imate takvu zver za jahanje. Hranite neku drugu zver.", - "messageEvolve": "Ukrotili ste <%= egg %>, idemo na jahanje!", + "messageEvolve": "Ukrotili ste <%= egg %>, idemo na jahanje!", "messageLikesFood": "<%= egg %> really likes <%= foodText %>!", "messageDontEnjoyFood": "<%= egg %> eats <%= foodText %> but doesn't seem to enjoy it.", "messageBought": "Predmet <%= itemText %> kupljen", diff --git a/website/common/locales/sr/questscontent.json b/website/common/locales/sr/questscontent.json index 767c4c95b1..de703bafe2 100644 --- a/website/common/locales/sr/questscontent.json +++ b/website/common/locales/sr/questscontent.json @@ -122,7 +122,7 @@ "questEggHuntCollectPlainEgg": "Obična jaja", "questEggHuntDropPlainEgg": "Obično jaje", "questDilatoryText": "The Dread Drag'on of Dilatory", - "questDilatoryNotes": "We should have heeded the warnings.

Dark shining eyes. Ancient scales. Massive jaws, and flashing teeth. We've awoken something horrifying from the crevasse: the Dread Drag'on of Dilatory! Screaming Habiticans fled in all directions when it reared out of the sea, its terrifyingly long neck extending hundreds of feet out of the water as it shattered windows with its searing roar.

\"This must be what dragged Dilatory down!\" yells Lemoness. \"It wasn't the weight of the neglected tasks - the Dark Red Dailies just attracted its attention!\"

\"It's surging with magical energy!\" @Baconsaur cries. \"To have lived this long, it must be able to heal itself! How can we defeat it?\"

Why, the same way we defeat all beasts - with productivity! Quickly, Habitica, band together and strike through your tasks, and all of us will battle this monster together. (There's no need to abandon previous quests - we believe in your ability to double-strike!) It won't attack us individually, but the more Dailies we skip, the closer we get to triggering its Neglect Strike - and I don't like the way it's eyeing the Tavern....", + "questDilatoryNotes": "We should have heeded the warnings.

Dark shining eyes. Ancient scales. Massive jaws, and flashing teeth. We've awoken something horrifying from the crevasse: the Dread Drag'on of Dilatory! Screaming Habiticans fled in all directions when it reared out of the sea, its terrifyingly long neck extending hundreds of feet out of the water as it shattered windows with its searing roar.

\"This must be what dragged Dilatory down!\" yells Lemoness. \"It wasn't the weight of the neglected tasks - the Dark Red Dailies just attracted its attention!\"

\"It's surging with magical energy!\" @Baconsaur cries. \"To have lived this long, it must be able to heal itself! How can we defeat it?\"

Why, the same way we defeat all beasts - with productivity! Quickly, Habitica, band together and strike through your tasks, and all of us will battle this monster together. (There's no need to abandon previous quests - we believe in your ability to double-strike!) It won't attack us individually, but the more Dailies we skip, the closer we get to triggering its Neglect Strike - and I don't like the way it's eyeing the Tavern....", "questDilatoryBoss": "The Dread Drag'on of Dilatory", "questDilatoryBossRageTitle": "Neglect Strike", "questDilatoryBossRageDescription": "When this bar has filled up, the Dread Drag'on of Dilatory will unleash great havoc on Habitica's terrain", @@ -567,7 +567,7 @@ "questPterodactylDropPterodactylEgg": "Pterodactyl (Egg)", "questPterodactylUnlockText": "Unlocks purchasable Pterodactyl eggs in the Market", "questBadgerText": "Stop Badgering Me!", - "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", + "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", "questBadgerCompletion": "Konačno oteravši Jazavičasto Uznemirenje, brzom parom se spuštaš u njegovu jazbinu. Na kraju tunela pronalaziš gomilu vilinskih Zadataka u režimu sna. Jama je napuštena, izuzev triju jaja koja izgledaju kao da će se ubrzo izleći.", "questBadgerBoss": "Jazavičasto Uznemirenje", "questBadgerDropBadgerEgg": "Jazavac (Jaje)", diff --git a/website/common/locales/sr/settings.json b/website/common/locales/sr/settings.json index 7d060ac1d2..8b83307ecf 100644 --- a/website/common/locales/sr/settings.json +++ b/website/common/locales/sr/settings.json @@ -55,7 +55,6 @@ "APIToken": "API ključ (ovo je lozinka – pročitajte objašnjenje iznad)", "showAPIToken": "Show API Token", "hideAPIToken": "Hide API Token", - "APITokenWarning": "If you need a new API Token (e.g., if you accidentally shared it), email <%= hrefTechAssistanceEmail %> with your User ID and current Token. Once it is reset you will need to re-authorize everything by logging out of the website and mobile app and by providing the new Token to any other Habitica tools that you use.", "thirdPartyApps": "Third Party Apps", "resetDo": "Da, vrati nalog na početno stanje!", "resetComplete": "Resetovanje završeno!", diff --git a/website/common/locales/sv/communityguidelines.json b/website/common/locales/sv/communityguidelines.json index 9eca765fbc..ad419d257f 100644 --- a/website/common/locales/sv/communityguidelines.json +++ b/website/common/locales/sv/communityguidelines.json @@ -3,19 +3,19 @@ "lastUpdated": "Senast uppdaterad:", "commGuideHeadingWelcome": "Välkommen till Habitica!", "commGuidePara001": "Var hälsad, äventyrare! Välkommen till Habitica, landet av produktivitet, hälsosamt levande, och ibland en enstaka härjande grip. Vi har en glad gemenskap full av hjälpsamma människor som stöttar varandra på deras väg att förbättra sig själva. För att passa in behöver du bara en positiv attityd, ett respektfullt beteende, och förståelse för att alla har olika förmågor och begränsningar – inklusive du! Habiticaner är tålmodiga med varandra och försöker hjälpa till när de kan.", - "commGuidePara002": "För att hjälpa alla att känna sig trygga, glada, och produktiva i vår gemenskap har vi några riktlinjer. Vi har noggrant utformat dem för att de ska vara så vänliga och lättlästa som möjligt. Var vänligt och ta en stund att läsa igenom dem innan du börjar chatta.", - "commGuidePara003": "Dessa regler gäller för alla våra sociala utrymmen, inklusive (men inte nödvändigtvis begränsat till) Trello, GitHub, Weblate, och Habitica Wikin på webbsidan Fandom. När en gemenskap växer och utvecklas kan dess regler behöva anpassas då och då. När större förändringar av riktlinjerna sker kommer du att få reda på det i ett Bailey-meddelande och/eller våra sociala medier!", + "commGuidePara002": "För att hjälpa alla att känna sig trygga, glada, och produktiva har vi några riktlinjer för Utmaningar, användarprofiler, Sällskapschatt och privata meddelanden. Vi har noggrant utformat dessa riktlinjer för att de ska vara så vänliga och lättlästa som möjligt. Var vänligt och ta en stund att läsa igenom dem innan du börjar interagera med andra användare.", + "commGuidePara003": "Dessa regler kan behöva anpassas då och då. När större förändringar av riktlinjerna sker kommer du att få reda på det i ett Bailey-meddelande och/eller våra sociala medier!", "commGuideHeadingInteractions": "Interaktioner i Habitica", - "commGuidePara015": "Habitica har två sorters sociala utrymmen: offentliga och privata. Offentliga utrymmen inkluderar Krogen, Publika Gillen, GitHub, Trello, och Wikin. Privata utrymmen är privata Gillen, Sällskapschatten, och Privata meddelanden. Alla Visningsnamn och @användarnamn måste följa riktlinjerna för de offentliga utrymmena. För att ändra ditt Visningsnamn och/eller ditt Användarnamn, gå till Meny > Inställningar > Profil på mobiltelefonen. På webbsidan, gå till Användare > Inställningar.", + "commGuidePara015": "Habitica har ett antal utrymmen där du kan interagera med andra användare. Dessa inkluderar privata chattrum (Privata meddelanden och Sällskapschatt) så väl som Leta Efter Sällskap-funktionaliteten och Utmaningar.", "commGuidePara016": "När du navigerar runt i de offentliga utrymmena i Habitica finns det några allmänna regler för att se till att alla är trygga och glada.", "commGuideList02A": "Respect each other. Be courteous, kind, friendly, and helpful. Remember: Habiticans come from all backgrounds and have had wildly divergent experiences. This is part of what makes Habitica so cool! Building a community means respecting and celebrating our differences as well as our similarities. Here are some easy ways to respect each other.", - "commGuideList02C": "Do not post images or text that are violent, threatening, or sexually explicit/suggestive, or that promote discrimination, bigotry, racism, sexism, hatred, harassment or harm against any individual or group. Not even as a joke. This includes slurs as well as statements. Not everyone has the same sense of humor, and so something that you consider a joke may be hurtful to another. Attack your Dailies, not each other.", - "commGuideList02D": "Keep discussions appropriate for all ages. We have many young Habiticans who use the site! Let's not tarnish any innocents or hinder any Habiticans in their goals.", - "commGuideList02E": "Avoid profanity. This includes milder, religious-based oaths that may be acceptable elsewhere. We have people from all religious and cultural backgrounds, and we want to make sure that all of them feel comfortable in public spaces. If a moderator or staff member tells you that a term is disallowed on Habitica, even if it is a term that you did not realize was problematic, that decision is final. Additionally, slurs will be dealt with very severely, as they are also a violation of the Terms of Service.", + "commGuideList02C": "Posta inte bilder eller text som är våldsamma, hotfulla eller sexuellt utmanande, eller sådana som uppmuntrar till diskriminering, racism, sexism, hat, trakasserier eller skada av någon individ eller grupp.. Inte ens som ett skämt eller meme. Detta inkluderar kränkande ord likaväl som längre uttalanden. Alla har inte samma slags humor, och någonting du ser som ett ett skämt kan såra en annan person.", + "commGuideList02D": "Ha i åtanke att det finns användare av alla åldrar och från olika bakgrunder.. Utmaningar och användarprofiler bör inte innehålla vuxenmaterial, använda svorfomar eller främja tvister eller konflikter.", + "commGuideList02E": "Om en medlem av Habiticas personal berättar för dig att ett uttryck inte är tillåtet att använda, även om det är ett uttryck du inte förstod var problematiskt, så är det beslutet slutgiltigt.\n Kränkande ord behandlas synnerligen allvarligt, då de även bryter mot Habiticas användarvillkor.", "commGuideList02G": "Comply immediately with any Mod request. This could include, but is not limited to, requesting you limit your posts in a particular space, editing your profile to remove unsuitable content, asking you to move your discussion to a more suitable space, etc.", - "commGuideList02J": "Do not spam. Spamming may include, but is not limited to: posting the same comment or query in multiple places, posting links without explanation or context, posting nonsensical messages, posting multiple promotional messages about a Guild, Party or Challenge, or posting many messages in a row. Asking for gems or a subscription in any of the chat spaces or via Private Message is also considered spamming. If people clicking on a link will result in any benefit to you, you need to disclose that in the text of your message or that will also be considered spam.

It is up to the mods to decide if something constitutes spam or might lead to spam, even if you don’t feel that you have been spamming. For example, advertising a Guild is acceptable once or twice, but multiple posts in one day would probably constitute spam, no matter how useful the Guild is!", + "commGuideList02J": "Spamma inte. Spammande inkluderar, men är inte begränsat till: att skicka ett flertal oönskade privata meddelanden, att skicka meningslösa meddelanden, att skicka ett flertal marknadsförande meddelanden om ett Sällskap eller en Utmaning, eller att skapa ett flertal liknande eller lågkvalitativa Utmaningar i följd. Personalen har rätt att avgöra vilka meddelanden som betraktas som spam.", "commGuideList02K": "Undvik att publicera stora rubriker i offentliga chattrum, särskilt i Krogen. Likt ENBART VERSALER, läser andra det som att du skriker vilket stör den behagliga stämningen.", - "commGuideList02L": "Vi uppmuntrar inte utbytet av personlig information -- särskilt information som kan användas för att identifiera dig -- i publika chattrum . Identifierande information kan inkludera, men är inte begränsat till: din adress, din e-postadress, och din API Pollett/lösenord. Detta är för din säkerhet! Personal eller moderatorer får ta bort sådana inlägg på eget tycke. Om du blir ombedd att dela personlig information i ett privat Gille, Sällskap eller PM, we rekomenderar starkt att du artigt vägrar och meddelar personal eller moderatorer genom att 1) flagga meddelandet om det är i ett Sällskap eller Gille, eller 2) fyller i Moderator Kontaktformulär och inkluderar skärmbilder.", + "commGuideList02L": "Vi uppmuntrar inte utbytet av personlig information -- särskilt information som kan användas för att identifiera dig . Identifierande information kan inkludera, men är inte begränsad till: din adress, din e-postadress, och din API Pollett/lösenord. Om du blir ombedd att dela personlig information i en Sällskapschatt eller ett private meddelande rekomenderar vi starkt att du inte svarar och meddelar personal eller moderatorer genom att antingen rapportera meddelandet eller kontakta admin@habitica.com med skärmdumpar av meddelandena om mer kontext behövs.", "commGuidePara037": "No Guilds, Public or Private, should be created for the purpose of attacking any group or individual. Creating such a Guild is grounds for an instant ban. Fight bad habits, not your fellow adventurers!", "commGuideHeadingInfractionsEtc": "Överträdelser, påföljder och återupprättande", "commGuideHeadingInfractions": "Överträdelser", @@ -78,5 +78,5 @@ "commGuideLink03": "GitHub: for bug reports or helping with code!", "commGuideLink04": "The Main Trello: for site feature requests.", "commGuidePara069": "De följande talangfyllda konstnärerna har bidragit till dessa illustrationer:", - "commGuideList01A": "Användarvillkoren gäller för alla utrymmen, inklusive privata gillen, sällskapschatten och meddelanden." + "commGuideList01A": "Användarvillkoren gäller för Utmaningar, Sällskap, användarkonton och privata meddelanden." } diff --git a/website/common/locales/sv/contrib.json b/website/common/locales/sv/contrib.json index 635db5e6d4..faee2dd156 100644 --- a/website/common/locales/sv/contrib.json +++ b/website/common/locales/sv/contrib.json @@ -7,8 +7,8 @@ "tier5": "Nivå 5 (Kämpe)", "tier6": "Nivå 6 (Kämpe)", "tier7": "Nivå 7 (Legendarisk)", - "tierModerator": "Moderator (Beskyddare)", - "tierStaff": "Personal (Hjälte)", + "tierModerator": "Moderator", + "tierStaff": "Personal", "tierNPC": "NPC", "friend": "Vän", "elite": "Elit", @@ -22,7 +22,7 @@ "contribModal": "<%= name %>, du fantastiska person! Du är nu en nivå <%= level %> medhjälpare för att ha hjälpt Habitica.", "contribLink": "Se vilka priser du har förtjänat för din insats!", "contribName": "Medarbetare", - "contribText": "Har bidragit till Habitica, antingen genom kod, konst, musik, skrivning, eller andra metoder. För att lära mer om detta, gå med i Blivande Legender gillet!", + "contribText": "Har bidragit till Habitica, antingen genom kod, konst, musik, skrivning, eller andra metoder.", "kickstartName": "Kickstarterstödjare - $<%= key %>-nivån", "kickstartText": "Stödde Kickstarter-projektet", "helped": "Hjälpte Habitica växa", diff --git a/website/common/locales/sv/faq.json b/website/common/locales/sv/faq.json index 76c3d1789e..e66126c771 100644 --- a/website/common/locales/sv/faq.json +++ b/website/common/locales/sv/faq.json @@ -2,5 +2,16 @@ "frequentlyAskedQuestions": "Vanliga frågor", "iosFaqStillNeedHelp": "Om du har en fråga som inte finns på denna listan eller på [Wiki FAQ](http://habitica.fandom.com/wiki/FAQ), så kan du ställa den i Krogchatten under Meny > Krogen! Vi hjälper gärna till.", "androidFaqStillNeedHelp": "Om du har en fråga som inte finns på den här listan eller på [Wiki FAQ](http://habitica.fandom.com/wiki/FAQ), fråga då i chatten på Krogen under Meny > Krogen! Vi hjälper gärna till.", - "webFaqStillNeedHelp": "Om du har en fråga som inte är på listan eller på [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), så kom och fråga i [Habitica Help guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! Vi hjälper gärna till." + "webFaqStillNeedHelp": "Om du har en fråga som inte är på listan eller på [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), så kom och fråga i [Habitica Help guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! Vi hjälper gärna till.", + "commonQuestions": "Vanliga frågor", + "faqQuestion25": "Vilka olika slags Uppgifter finns det?", + "webFaqAnswer27": "En uppgifts färg är en visuell representation av dess värde. Alla uppgifter börjar som gula, blå är bättre och röd är sämre. Här är hur uppgiftens typ bestämmer dess värde:\n\nVanor blir blåa eller röda baserat på ifall du trycker på plus- eller minusknappen. Positiva och negativa Vanor blir gula igen med tiden om du inte slutför dem. Duala vanor byter bara färg baserat på dina inmatningar.\n\nDagliga uppgifter byter färg baserat på hur ofta de slutförs. De blir blåare när de slutförs och rödare om de missas.\n\nAtt-göra-uppgifter blir rödare ju längre de lämnas ogjorda.\n\nJu rödare uppgiften är, desto mer Guld och Erfarenhet får du av att slutföra den, så se till att tackla även dina svåraste uppgifter!", + "webFaqAnswer28": "Ja! \"Pausa Skada\"-knappen hittas i Inställningar. Den förhindrar dig från att förlora HP för missade Dagliga uppgifter. Det här är användbart ifall du är på semester, behöver vila, eller behöver en paus av vilken som helst annan orsak. Om du deltar i ett Uppdrag pausas dina egna framsteg, men du kan fortfarande ta skada från dina Sällskapsmedlemmars missade Dagliga uppgifter.\n\nFör att pausa specifika Dagliga uppgifter, kan du byta schemaläggningen till varje 0 dagar tills du är redo att starta om den.", + "webFaqAnswer25": "Habitica har tree olika typer av Uppgifter för att tillgodose dina behov: Vanor, Dagliga uppgifter och Att göra-uppgifter.\n\nVanor kan vara positiva eller negativa och representerar någonting som du kan vilja ha koll på flera gånger om dagen, eller på ett ickespecifikt schema. Positiva Vanor ger dig belöningar, som Guld och Erfarenhet, medan Negativa Vanor kostar dig Hälsa.\n\nDagliga uppgifter är upprepade uppgifter du vill slutföra på ett mer strukturerat vis. Exempelvis en gång om dagen, tree gånger i veckan, eller fyra gånger i månaden. Ogjorda Dagliga uppgifter kostar dig Hälsa, men ju svårare de är, desto bättre är belöningarna när du genomför dem!\n\nAtt göra-uppgifter är engångsuppgifter som belönar dig efter att du genomfört dem. Att göra-uppgifter kan ha förfallodatum, men kostar dig inte Hälsa om du missar dem.\n\nVälj den typen av Uppgift som bäst passar vad du vill åstadkomma!", + "faqQuestion26": "Vad är några exempel på uppgifter?", + "webFaqAnswer26": "Positiva Vanor (beteenden du vill uppmuntra; borde ha en plussknapp)\n\n * Ta vitaminer\n * Använd tandtråd\n * En timmes studier\n\nNegativa Vanor (beteenden du vill begränsa eller undvika; borde ha en minusknapp)\n\n * Rökning\n * Domedagsskrollande\n * Nagelbitande\n\nDubbla Vanor (Vanor som har både ett positivt och ett negativt alternativ; borde ha både plus- och minusknappar)\n\n * Drick vatten vs. drick läsk\n * Plugga vs. prokrastinera\n\nExempel på Dagliga uppgifter (Uppgifter du vill genomföra regelbundet)\n * Diska\n * Vattna blommor\n * 30 minuter av fysisk aktivitet\n\nExempel på Att göra-uppgifter (Uppgifter du bara behöver göra en gång)\n\n * Boka in ett möte\n * Organisera garderoben\n * Skriv klart en uppsats", + "faqQuestion27": "Varför ändrar uppgifter färg?", + "faqQuestion28": "Kan jag pausa mina Dagliga uppgifter om jag behöver en paus?", + "faqQuestion29": "Hur återfår jag HP?", + "webFaqAnswer29": "Du kan få tillbaka HP genom att köpa en Hälsobrygd från dina Belöningar för 25 Guld. Utöver det kommer du alltid att återfå all din HP när du når nästa Nivå!" } diff --git a/website/common/locales/sv/front.json b/website/common/locales/sv/front.json index b62a7d9a1e..238f2dec88 100644 --- a/website/common/locales/sv/front.json +++ b/website/common/locales/sv/front.json @@ -7,11 +7,11 @@ "communityFacebook": "Facebook", "companyAbout": "Hur Det Funkar", "companyBlog": "Blogg", - "companyContribute": "Bidra", - "companyDonate": "Donera", + "companyContribute": "Bidra till Habitica", + "companyDonate": "Donera till Habitica", "forgotPassword": "Glömt ditt lösenord?", "emailNewPass": "Maila en länk för att återställa lösenord", - "forgotPasswordSteps": "Skriv in email-adressen som du använde när du registrerade ditt Habitica konto.", + "forgotPasswordSteps": "Skriv in ditt användarnamn eller email-adressen som du använde när du registrerade ditt Habitica konto.", "sendLink": "Skicka länk", "featuredIn": "Syns i", "footerDevs": "Utvecklare", @@ -70,7 +70,7 @@ "pkQuestion5": "What distinguishes Habitica from other gamification programs?", "pkAnswer5": "One of the ways that Habitica has been most successful at using gamification is that we've put a lot of effort into thinking about the game aspects to ensure that they are actually fun. We've also included many social components, because we feel that some of the most motivating games let you play with friends, and because research has shown that it's easier to form habits when you have accountability to other people.", "pkQuestion6": "Vem är den typiska användaren av Habitica?", - "pkAnswer6": "Massor med olika människor använder Habitica! Mer än hälften av våra användare är från 18 till 34, men vi har också mor- och farföräldrar som använder hemsidan tillsammans med sina unga barnbarn och alla åldrar däremellan. Familjer går ofta med i sällskap och slåss mot monster tillsammans.
Många av våra användare har en spelbakgrund, men en av våra undersökningar visar förvånande att 40% av våra användare identifierade som icke-spelare! Så det ser ut som att vår metod kan vara effektiv för den som vill att produktivitet och välmående kan vara roligare.", + "pkAnswer6": "Massor med olika människor använder Habitica! Mer än hälften av våra användare är från 18 till 34, men vi har också mor- och farföräldrar som använder hemsidan tillsammans med sina unga barnbarn och alla åldrar däremellan. Familjer går ofta med i sällskap och slåss mot monster tillsammans.
Många av våra användare har en spelbakgrund, men en av våra undersökningar visar förvånande att 40% av våra användare identifierade som icke-spelare! Så det ser ut som att vår metod kan vara effektiv för den som vill att produktivitet och välmående kan vara roligare.", "pkQuestion7": "Varför använder Habitica pixelkonst?", "pkAnswer7": "Habitica uses pixel art for several reasons. In addition to the fun nostalgia factor, pixel art is very approachable to our volunteer artists who want to chip in. It's much easier to keep our pixel art consistent even when lots of different artists contribute, and it lets us quickly generate a ton of new content!", "pkQuestion8": "Hur har Habitica påverkat personers riktiga liv?", @@ -125,7 +125,7 @@ "passwordReset": "If we have your email on file, instructions for setting a new password have been sent to your email.", "invalidLoginCredentialsLong": "Uh-oh - your email address / username or password is incorrect.\n- Make sure they are typed correctly. Your username and password are case-sensitive.\n- You may have signed up with Facebook or Google-sign-in, not email so double-check by trying them.\n- If you forgot your password, click \"Forgot Password\".", "invalidCredentials": "Det finns inget konto som använder de uppgifterna.", - "accountSuspended": "Detta kontot, Användar ID \"<%= userId %>\", har blivit blockerat för att ha brutit mot Gemenskapens Riktlinjer (https://habitica.com/static/community-guidelines) eller Användarvillkor (https://habitica.com/static/terms). För detaljer eller för att bli oblockerad, var snäll och mejla vår Community Manager på <%= communityManagerEmail %> eller fråga din förälder eller vårdnadshavare att mejla dem. Var snäll och inkludera @Användarnamn i mejlet.", + "accountSuspended": "Detta kontot, Användar ID \"<%= userId %>\", har blivit blockerat för att ha brutit mot Gemenskapens Riktlinjer (https://habitica.com/static/community-guidelines) eller Användarvillkor (https://habitica.com/static/terms). För detaljer eller för att bli oblockerad, var snäll och mejla vår Community Manager på <%= communityManagerEmail %> eller fråga din förälder eller vårdnadshavare att mejla dem. Var snäll och inkludera @Användarnamn i mejlet.", "accountSuspendedTitle": "Account has been suspended", "unsupportedNetwork": "Detta nätverk stöds inte för tillfället.", "cantDetachSocial": "Account lacks another authentication method; can't detach this authentication method.", diff --git a/website/common/locales/sv/gear.json b/website/common/locales/sv/gear.json index eb6115c099..9296ee5a57 100644 --- a/website/common/locales/sv/gear.json +++ b/website/common/locales/sv/gear.json @@ -40,7 +40,7 @@ "weaponRogue1Text": "Kortsvärd", "weaponRogue1Notes": "Lätt, utfällbar klinga. Ökar Styrka med <%= str %>.", "weaponRogue2Text": "Kroksabel", - "weaponRogue2Notes": "Skarpt svärd, snabbt med ett dödande slag. Ökar Styrka med <%= str %>.", + "weaponRogue2Notes": "Skarpt svärd, snabbt med ett dödande slag. Ökar Styrka med <%= str %>.", "weaponRogue3Text": "Kukri", "weaponRogue3Notes": "Utpräglad vildmarkskniv, både ett överlevnadsverktyg och ett vapen. Ökar styrka med <%= str %>.", "weaponRogue4Text": "Nunchaku", @@ -380,7 +380,7 @@ "armorWarrior1Text": "Läderrustning", "armorWarrior1Notes": "Jerkin of sturdy boiled hide. Increases Constitution by <%= con %>.", "armorWarrior2Text": "Ringbrynja", - "armorWarrior2Notes": "Rustning av sammankopplade metallringar. Ökar Tålighet med <%= con %>.", + "armorWarrior2Notes": "Rustning av sammankopplade metallringar. Ökar Tålighet med <%= con %>.", "armorWarrior3Text": "Plåtrustning", "armorWarrior3Notes": "Suit of all-encasing steel, the pride of knights. Increases Constitution by <%= con %>.", "armorWarrior4Text": "Röd rustning", @@ -418,7 +418,7 @@ "armorHealer5Text": "Kunglig mantel", "armorHealer5Notes": "Klädnad för de som har räddat livet på kungar. Ökar Tålighet med <%= con %>.", "armorSpecial0Text": "Skuggrustning", - "armorSpecial0Notes": "Skriker när den blir träffad, ty den känner dess bärares smärta. Ökar Tålighet med <%= con %>.", + "armorSpecial0Notes": "Skriker när den blir träffad, ty den känner dess bärares smärta. Ökar Tålighet med <%= con %>.", "armorSpecial1Text": "Kristallrustning", "armorSpecial1Notes": "Its tireless power inures the wearer to mundane discomfort. Increases all Stats by <%= attrs %>.", "armorSpecial2Text": "Jean Chalards ädla tunika", @@ -856,7 +856,7 @@ "headHealer3Text": "Safir Diadem", "headHealer3Notes": "Shines to let sufferers know their salvation is at hand. Increases Intelligence by <%= int %>.", "headHealer4Text": "Smaragdbeklätt diadem", - "headHealer4Notes": "Utstrålar en aura av liv och tillväxt. Ökar intelligens med <%= int %>.", + "headHealer4Notes": "Utstrålar en aura av liv och tillväxt. Ökar intelligens med <%= int %>.", "headHealer5Text": "Kungligt diadem", "headHealer5Notes": "För kung, drottning eller undergörare. Ökar intelligens med <%= int %>.", "headSpecial0Text": "Skugghjälm", diff --git a/website/common/locales/sv/generic.json b/website/common/locales/sv/generic.json index ddc1d3ed88..fde1e74253 100644 --- a/website/common/locales/sv/generic.json +++ b/website/common/locales/sv/generic.json @@ -12,7 +12,7 @@ "showLess": "Visa Mindre", "markdownHelpLink": "Markdown formateringshjälp", "bold": "**Fetstilt**", - "markdownImageEx": "![mandatory alt text](https://habitica.com/cake.png \"optional mouseover title\")", + "markdownImageEx": "![obligatorisk alternativ text](https://habitica.com/cake.png \"valfri mouseover-titel\")", "code": "`kod`", "achievements": "Prestationer", "basicAchievs": "Grundläggande prestationer", diff --git a/website/common/locales/sv/groups.json b/website/common/locales/sv/groups.json index 9b1484cd2c..b4dbfae3ac 100644 --- a/website/common/locales/sv/groups.json +++ b/website/common/locales/sv/groups.json @@ -1,8 +1,8 @@ { "tavern": "Krogchatt", "tavernChat": "Krogchatt", - "innCheckOutBanner": "Du är för närvarande incheckad på Värdshuset. Dina Dagliga uppgifter kommer inte skada dig och du kommer inte gå framåt i dina Uppdrag.", - "innCheckOutBannerShort": "Du är incheckad på Värdshuset.", + "innCheckOutBanner": "Du har för närvarande pausat skada. Dina Dagliga uppgifter kommer inte skada dig och du kommer inte gå framåt i dina Uppdrag.", + "innCheckOutBannerShort": "Du har pausat skada.", "resumeDamage": "Återuppta skada", "helpfulLinks": "Hjälpfulla Länkar", "lookingForGroup": "Letar efter Grupp (Sällskap Sökes) Inlägg", @@ -12,11 +12,11 @@ "contributing": "Bidragande", "faq": "Vanliga frågor", "tutorial": "Handledning", - "glossary": "Ordlista", + "glossary": "Ordlista", "wiki": "Wiki", "resources": "Resurser", "communityGuidelines": "Gemenskapens riktlinjer", - "bannedWordUsed": "Hoppsan! Verkar som att det här inlägget innehåller ett svärord eller en religiös ed, eller syftar på ett beroendeframkallande ämne eller vuxentema (<%= swearWordsUsed %>). Habitica har användare från alla slags bakgrunder, så vi strävar efter att hålla vår chatt fri från stötande innehåll. Redigera gärna ditt meddelande så att du kan lägga upp det!", + "bannedWordUsed": "Hoppsan! Verkar som att det här inlägget innehåller ett svärord eller en religiös ed, eller syftar på ett beroendeframkallande ämne eller vuxentema (<%= swearWordsUsed %>). Habitica har användare från alla slags bakgrunder, så vi strävar efter att hålla vår chatt fri från stötande innehåll. Redigera gärna ditt meddelande så att du kan lägga upp det! Du måste ta bort ordet i fråga, inte bara censurera det.", "bannedSlurUsed": "Ditt inlägg innehöll olämpligt språk och dina chatt privilegium har återkallats.", "party": "Sällskap", "usernameCopied": "Användarnamn kopierat till urklipp.", @@ -105,7 +105,7 @@ "invitationSent": "Inbjudan skickad!", "invitedFriend": "Bjöd in en Vän", "invitedFriendText": "Denna användaren bjöd in en vän (eller vänner) som anslöt sig till deras äventyr!", - "inviteLimitReached": "Du har redan skickat det maximala antalet inbjudningar via mejl. Vi har en gräns för att förhindra spam, om du vill ha fler var vänlig att kontakta oss på <%= techAssistanceEmail %> och vi är glada över att diskutera det!", + "inviteLimitReached": "Du har redan skickat det maximala antalet inbjudningar via mejl. Vi har en gräns för att förhindra spam, om du vill ha fler var vänlig att kontakta oss på <%= techAssistanceEmail %> och vi är glada över att diskutera det!", "sendGiftHeading": "Skicka Gåva till <%= name %>", "sendGiftGemsBalance": "Från <%= number %> Juveler", "sendGiftCost": "Totalt: $<%= cost %> USD", @@ -161,7 +161,7 @@ "userRequestsApproval": "<%- userName %> frågar om godkännande", "userCountRequestsApproval": "<%= userCount %> medlemmar ber om godkännande", "youAreRequestingApproval": "You are requesting approval", - "chatPrivilegesRevoked": "Du kan inte göra detta eftersom dina chatt privilegier har tagits bort. För detaljer eller för att fråga om att återställa privilegierna, var snäll och mejla vår Community Manager på admin@habitica.com eller fråga din förälder eller vårdnadshavare att mejla dem. Var snäll att inkludera ditt @Användarnamn i mejlet. Om en moderator redan har berättat att ditt chattförbud är temporärt, behöver du inte skicka ett mejl.", + "chatPrivilegesRevoked": "Du kan inte göra detta eftersom dina chatt privilegier har tagits bort. För detaljer eller för att fråga om att återställa privilegierna, var snäll och mejla vår Community Manager på admin@habitica.com eller fråga din förälder eller vårdnadshavare att mejla dem. Var snäll att inkludera ditt @Användarnamn i mejlet. Om en moderator redan har berättat att ditt chattförbud är temporärt, behöver du inte skicka ett mejl.", "to": "Till:", "from": "Från:", "assignTask": "Tilldela Uppgift", @@ -246,7 +246,7 @@ "partyDescriptionPlaceholder": "This is our Party's description. It describes what we do in this Party. If you want to learn more about what we do in this Party, read the description. Party on.", "guildGemCostInfo": "A Gem cost promotes high quality Guilds and is transferred into your Guild's bank.", "noGuildsTitle": "Du är inte medlem i några Gillen.", - "noGuildsParagraph1": "Guilds are social groups created by other players that can offer you support, accountability, and encouraging chat.", + "noGuildsParagraph1": "Guilds are social groups created by other players that can offer you support, accountability, and encouraging chat.", "noGuildsParagraph2": "Click the Discover tab to see recommended Guilds based on your interests, browse Habitica's public Guilds, or create your own Guild.", "noGuildsMatchFilters": "We couldn't find any matching Guilds.", "privateDescription": "En privat Gille kommer inte att visas i Habiticas Gille register. Nya medlemmar kan bara läggas till via inbjudningar.", diff --git a/website/common/locales/sv/loginincentives.json b/website/common/locales/sv/loginincentives.json index 20c1103247..4e8eb2ed66 100644 --- a/website/common/locales/sv/loginincentives.json +++ b/website/common/locales/sv/loginincentives.json @@ -7,7 +7,7 @@ "checkinEarned": "Din incheckningsmätare gick upp!", "unlockedCheckInReward": "Du låste upp ett Incheckningspris!", "checkinProgressTitle": "Framsteg till nästa", - "incentiveBackgroundsUnlockedWithCheckins": "Låsta Vanliga Bakgrunder kommer att låsas upp genom dagliga incheckningar.", + "incentiveBackgroundsUnlockedWithCheckins": "Fler Vanliga Bakgrunder kommer att låsas upp genom dagliga incheckningar.", "oneOfAllPetEggs": "en av varje vanligt Husdjursägg", "twoOfAllPetEggs": "två av varje vanligt Husdjursägg", "threeOfAllPetEggs": "tre av varje vanligt Husdjursägg", diff --git a/website/common/locales/sv/messages.json b/website/common/locales/sv/messages.json index 263504632c..6803e03cfb 100644 --- a/website/common/locales/sv/messages.json +++ b/website/common/locales/sv/messages.json @@ -15,7 +15,7 @@ "messageMissingEggPotion": "Du saknar antingen det ägget eller den brygden.", "messageInvalidEggPotionCombo": "Du kan inte kläcka Uppdragshusdjursägg med Magiska kläckningsbrygder! Försök med ett annat ägg.", "messageAlreadyPet": "Du har redan det här husdjuret. Prova en annan kombination!", - "messageHatched": "Ditt ägg kläcktes! Besök ditt stall för att rusta ditt husdjur.", + "messageHatched": "Ditt ägg kläcktes! Besök Husdjur och Riddjur för att rusta ditt husdjur.", "messageNotEnoughGold": "Inte tillräckligt med Guld", "messageTwoHandedEquip": "Att använda <%= twoHandedText %> kräver två händer, så <%= offHandedText %> har tagits av.", "messageTwoHandedUnequip": "Att använda <%= twoHandedText %> kräver två händer, så den togs av när du utrustade dig med <%= offHandedText %>.", diff --git a/website/common/locales/sv/npc.json b/website/common/locales/sv/npc.json index da98234879..c62525f942 100644 --- a/website/common/locales/sv/npc.json +++ b/website/common/locales/sv/npc.json @@ -7,7 +7,7 @@ "justin": "Justin", "justinIntroMessage1": "Hej där! Du måste vara ny här. Jag heter Justin, och jag kommer vara din guide i Habitica.", "justinIntroMessage3": "Bra! Nu så, vad är du intresserad av att jobba på under den här resan?", - "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageUsername": "Innan vi startar ska vi komma fram till vad du ska kallas. Nedanför ser ut ett Visningsnamn och ett Användarnamn som jag genererat för dig. Efter att du valt ett eget Visningsnamn och Användarnamn övergår vi till att skapa en avatar!", "justinIntroMessageAppearance": "Så hur vill du se ut? Oroa dig inte, du kan ändra detta senare.", "introTour": "Nu så! Jag har fyllt i några uppgifter baserat på dina intressent så att du kan starta på en gång. Klicka på en uppgift för att redigera eller lägga till nya uppgifter för din rutin!", "prev": "Föregående", @@ -16,14 +16,14 @@ "mattBoch": "Matt Boch", "mattBochText1": "Välkommen till Stallet! Jag är Matt, djurmästaren. Varje gång som du slutför en uppgift har du en slumpmässig chans att få ett Ägg eller en Kläckningsbrygd att kläcka Husdjur med. När du kläcker ett Husdjur så kommer det att dyka upp här! Klicka på ett Husdjurs bild för att lägga till det till din Avatar. Mata dem med Djurfodret du hittar, så växer de till kraftfulla Riddjur.", "welcomeToTavern": "Välkommen till Krogen!", - "sleepDescription": "Behöver du en paus? Checka in på Daniel's Värdshus för att pausa några av Habiticas svårare spelmekanismer:", - "sleepBullet1": "Ogjorda Dagliga uppgifter kommer inte att skada dig", + "sleepDescription": "Behöver du en paus? Pausa Skada (finns i Inställningar) för att pausa några av Habiticas svårare spelmekanismer:", + "sleepBullet1": "Ogjorda Dagliga uppgifter kommer inte att skada dig (Bossar kommer fortfarande göra skada som kommer av andra Sällskapsmedlemmars ogjorda Dagliga uppgifter)", "sleepBullet2": "Uppgifter förlorar inte följder", - "sleepBullet3": "Bossar gör inte skada för dina egna missade Dagliga Uppgifter", + "sleepBullet3": "Din skada på Uppdragets Boss och upphittade samlingsföremål kommer att ligga vilande tills du återupptar Skada", "pauseDailies": "Pausa Skada", "unpauseDailies": "Starta Skada", "staffAndModerators": "Personal och Moderatorer", - "communityGuidelinesIntro": "Habitica försöker skapa en välkomnande miljö för användare av alla åldrar och bakgrunder - särskilt i offentliga utrymmen som Krogen. Om du har några frågor, var snäll och läs igenom Gemenskapens Riktlinjer.", + "communityGuidelinesIntro": "Habitica försöker skapa en välkomnande miljö för användare av alla åldrar och bakgrunder, särskilt i utrymmen som Grupper och Sällskap. Om du har några frågor, var snäll och läs igenom Gemenskapens Riktlinjer.", "acceptCommunityGuidelines": "Jag samtycker med att följa Gemenskapens Riktlinjer", "worldBossEvent": "World Boss Event", "worldBossDescription": "World Boss Description", diff --git a/website/common/locales/sv/pets.json b/website/common/locales/sv/pets.json index ec61f55e7f..b3a7947915 100644 --- a/website/common/locales/sv/pets.json +++ b/website/common/locales/sv/pets.json @@ -1,5 +1,5 @@ { - "stable": "Stall", + "stable": "Husdjur och riddjur", "pets": "Husdjur", "activePet": "Aktivt husdjur", "noActivePet": "Inget aktivt husdjur", diff --git a/website/common/locales/sv/questscontent.json b/website/common/locales/sv/questscontent.json index 01e487c39f..3d3ef6220a 100644 --- a/website/common/locales/sv/questscontent.json +++ b/website/common/locales/sv/questscontent.json @@ -1,11 +1,11 @@ { "questEvilSantaText": "Pälsjägartomten", - "questEvilSantaNotes": "Du hör sorgfulla vrål djupt från isfälten. Du följer rytandet och morrandet - blandat med en kacklande röst - till en glänta i skogen där du ser en fullvuxen isbjörn. Hon är inburad och kedjad och vrålar för sitt liv. Ovanpå buren dansar en ondsint liten imp, iförd gamla tomtedräkter. Besegra PälsjägarTomten och rädda besten!", + "questEvilSantaNotes": "Du hör sorgfulla vrål djupt från isfälten. Du följer rytandet och morrandet - blandat med en kacklande röst - till en glänta i skogen där du ser en fullvuxen isbjörn. Hon är inburad och kedjad och vrålar för sitt liv. Ovanpå buren dansar en ondsint liten imp, iförd gamla tomtedräkter. Besegra Pälsjägartomten och rädda besten!

Notera: Pälsjägartomten belönar dig med en upprepbar prestation men delar ut ett ovanligt riddjur som endast kan läggas till i ditt stall en gång.", "questEvilSantaCompletion": "Pälsjägartomten tjuter av ilska och studsar iväg i natten. En tacksam hon-björn försöker genom att ryta och morra tala om något för dig. Du tar henne till stallet, där Djurviskaren Matt Boch lyssnar till hennes berättelse och flämtar till av fasa. Hon har en unge! Han flydde till isfälten när mamma björn fångades.", "questEvilSantaBoss": "Pälsjägartomten", "questEvilSantaDropBearCubPolarMount": "Isbjörn (Riddjur)", "questEvilSanta2Text": "Hitta Björnungen", - "questEvilSanta2Notes": "När pälsjägartomten fångade isbjörnsriddjuret sprang hennes unge iväg över isfälten. Du hör grenar brytas och snö krasa genom det kristallklara ljudet av skogen. Tassavtryck! Ni börjar båda springa efter spåren. Hitta alla spår och brutna kvistar, och hämta tillbaka ungen!", + "questEvilSanta2Notes": "När pälsjägartomten fångade isbjörnsriddjuret sprang hennes unge iväg över isfälten. Du hör grenar brytas och snö krasa genom det kristallklara ljudet av skogen. Tassavtryck! Ni börjar båda springa efter spåren. Hitta alla spår och brutna kvistar, och hämta tillbaka ungen!

Notera: “Björnungen” belönar dig med en upprepbar prestation men delar ut ett ovanligt riddjur som endast kan läggas till i ditt stall en gång.", "questEvilSanta2Completion": "Du har hittat björnungen! Den kommer hålla dig sällskap för alltid.", "questEvilSanta2CollectTracks": "Spår", "questEvilSanta2CollectBranches": "Brutna Kvistar", @@ -54,7 +54,7 @@ "questRoosterUnlockText": "Låser upp Tuppägg att köpa på Marknaden", "questSpiderText": "Frostspindeln", "questSpiderNotes": "När vädret går mot kallare tider börjar frost dyka upp på Habiticanernas fönster, likt skira spindelnät.. Utom hos @Arcosine, vars fönster är helt igenfrusna av Frostspindeln som valt att flytta in i hans hem. Kära nån..", - "questSpiderCompletion": "Frostspindeln kollapsar i en liten hög av iskristaller och några av hennes förtrollade ägg. @Arcosine skyndar sig att erbjuda er dem i belöning - kanske kan ni föda upp några snällare spindlar som husdjur?", + "questSpiderCompletion": "Frostspindeln kollapsar i en liten hög av iskristaller och några av hennes förtrollade ägg. @Arcosine skyndar sig att erbjuda er dem i belöning - kanske kan ni föda upp några snällare spindlar som husdjur?", "questSpiderBoss": "Spindel", "questSpiderDropSpiderEgg": "Spindel (ägg)", "questSpiderUnlockText": "Låser upp Spindelägg att köpa på Marknaden", @@ -122,7 +122,7 @@ "questEggHuntCollectPlainEgg": "Vanliga Ägg", "questEggHuntDropPlainEgg": "Vanligt Ägg", "questDilatoryText": "Den Demoniska Draken från Dilatory", - "questDilatoryNotes": "We should have heeded the warnings.

Dark shining eyes. Ancient scales. Massive jaws, and flashing teeth. We've awoken something horrifying from the crevasse: the Dread Drag'on of Dilatory! Screaming Habiticans fled in all directions when it reared out of the sea, its terrifyingly long neck extending hundreds of feet out of the water as it shattered windows with its searing roar.

\"This must be what dragged Dilatory down!\" yells Lemoness. \"It wasn't the weight of the neglected tasks - the Dark Red Dailies just attracted its attention!\"

\"It's surging with magical energy!\" @Baconsaur cries. \"To have lived this long, it must be able to heal itself! How can we defeat it?\"

Why, the same way we defeat all beasts - with productivity! Quickly, Habitica, band together and strike through your tasks, and all of us will battle this monster together. (There's no need to abandon previous quests - we believe in your ability to double-strike!) It won't attack us individually, but the more Dailies we skip, the closer we get to triggering its Neglect Strike - and I don't like the way it's eyeing the Tavern....", + "questDilatoryNotes": "We should have heeded the warnings.

Dark shining eyes. Ancient scales. Massive jaws, and flashing teeth. We've awoken something horrifying from the crevasse: the Dread Drag'on of Dilatory! Screaming Habiticans fled in all directions when it reared out of the sea, its terrifyingly long neck extending hundreds of feet out of the water as it shattered windows with its searing roar.

\"This must be what dragged Dilatory down!\" yells Lemoness. \"It wasn't the weight of the neglected tasks - the Dark Red Dailies just attracted its attention!\"

\"It's surging with magical energy!\" @Baconsaur cries. \"To have lived this long, it must be able to heal itself! How can we defeat it?\"

Why, the same way we defeat all beasts - with productivity! Quickly, Habitica, band together and strike through your tasks, and all of us will battle this monster together. (There's no need to abandon previous quests - we believe in your ability to double-strike!) It won't attack us individually, but the more Dailies we skip, the closer we get to triggering its Neglect Strike - and I don't like the way it's eyeing the Tavern....", "questDilatoryBoss": "Den Demoniska Draken från Dilatory", "questDilatoryBossRageTitle": "FörsumningsAttack", "questDilatoryBossRageDescription": "När den här mätaren fylls kommer Den Demoniska Draken från Dilatory att släppa loss enorm förödelse av Habiticas terräng", @@ -567,8 +567,8 @@ "questPterodactylDropPterodactylEgg": "Pterodactyl (Ägg)", "questPterodactylUnlockText": "Låser upp Pterodactylägg att köpa på Marknaden", "questBadgerText": "Stop Badgering Me!", - "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", - "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", + "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", + "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", "questBadgerBoss": "The Badgering Bother", "questBadgerDropBadgerEgg": "Grävling (Ägg)", "questBadgerUnlockText": "Låser upp Grävlingsägg att köpa på Marknaden", diff --git a/website/common/locales/sv/rebirth.json b/website/common/locales/sv/rebirth.json index b5fb10838e..363688480b 100644 --- a/website/common/locales/sv/rebirth.json +++ b/website/common/locales/sv/rebirth.json @@ -8,7 +8,7 @@ "rebirthOrb": "Använde en Återfödelsens sfär för att starta om efter att ha uppnått Nivå <%= level %>.", "rebirthOrb100": "Använd en Återfödelsens sfär för att starta om efter att ha uppnått Nivå 100 eller högre.", "rebirthOrbNoLevel": "Använde en Återfödelsens Sfär för att börja om.", - "rebirthPop": "Starta om din karaktär omedelbart vid nivå 1 och behåll dina prestationer, samlarföremål och utrustning. Dina uppgifter och deras historik kommer behållas men de kommer att bli återställda till gult. Dina följer kommer att bli borttagna förutom på utmanings-uppgifter. Allt ditt guld, erfarenhet, mana och alla effekter från färdigheter kommer att bli borttaget. Detta kommer att träda i kraft omedelbart. För mer information, se wikins Återfödelsens sfär sida.", + "rebirthPop": "Starta om din karaktär omedelbart vid nivå 1 och behåll dina prestationer, samlarföremål och utrustning. Dina uppgifter och deras historik kommer behållas men de kommer att bli återställda till gult. Dina följer kommer att bli borttagna förutom på utmanings-uppgifter. Allt ditt guld, erfarenhet, mana och alla effekter från färdigheter kommer att bli borttaget. Detta kommer att träda i kraft omedelbart.", "rebirthName": "Pånyttfödelsesfär", "rebirthComplete": "Du har återfötts!" } diff --git a/website/common/locales/sv/settings.json b/website/common/locales/sv/settings.json index 51191cc922..8922d614c6 100644 --- a/website/common/locales/sv/settings.json +++ b/website/common/locales/sv/settings.json @@ -2,7 +2,7 @@ "settings": "Inställningar", "language": "Språk", "americanEnglishGovern": "I den händelse att det uppstår en oförenlighet i översättningarna, så är den amerikansk engelska versionen styrande.", - "helpWithTranslation": "Skulle du vilja hjälpa till med översättningen av Habitica? Toppen! Besök då det Aspiring Linguists Gille!", + "helpWithTranslation": "Är du intresserad av att hjälpa till med översättningen av Habitica? Toppen! Besök då Habiticas Weblate-sida!", "stickyHeader": "Fastklistrat sidhuvud", "newTaskEdit": "Öppna nya uppgifter i redigeringsläge", "reverseChatOrder": "Visa chatt meddelanden i omvänd ordning", @@ -53,9 +53,8 @@ "APIv3": "API v3", "APIText": "Kopiera dessa för användning i tredjepartsapplikationer. Du bör behandla ditt API-token som ett lösenord och inte dela med dig av det publikt. Du kan få frågan att ange ditt User ID, men lägg inte ut ditt API-token där andra kan se det, inklusive på Github.", "APIToken": "API Token (detta är ett lösenord - se varningen ovanför)", - "showAPIToken": "Visa API-nyckel", - "hideAPIToken": "Göm API-nyckel", - "APITokenWarning": "Om du behöver en ny API Pollett (till exempel om du delade det av misstag), mejla <%= hrefTechAssistanceEmail %> med sitt Användar ID och nuvarande Pollett. När det är återställt måste du åter godkänna allt genom att logga ut från webbsidan och mobil appen genom att ge den nya Palletten till någon annan av Habiticas verktyg som du använder.", + "showAPIToken": "Visa API-nyckel", + "hideAPIToken": "Göm API-nyckel", "thirdPartyApps": "Tredjehandsappar", "resetDo": "Gör det, återställ mitt konto!", "resetComplete": "Återställningen lyckades!", @@ -70,7 +69,7 @@ "displayNameSuccess": "Visningsnamn har ändrats", "emailSuccess": "E-postadress framgångsrikt ändrad", "detachSocial": "Avregistrera <%= network %>", - "detachedSocial": "Tog framgångsrikt bort <%= network %>autentisering från ditt konto.", + "detachedSocial": "Tog framgångsrikt bort <%= network %>autentisering från ditt konto.", "addedLocalAuth": "Lokal autentisering har lagts till", "data": "Data", "email": "E-postadress", diff --git a/website/common/locales/sv/spells.json b/website/common/locales/sv/spells.json index 641f262a32..04405e2dd6 100644 --- a/website/common/locales/sv/spells.json +++ b/website/common/locales/sv/spells.json @@ -6,7 +6,7 @@ "spellWizardEarthText": "Jordbävning", "spellWizardEarthNotes": "Din mentala kraft skakar jorden och förbättrar ditt Sällskaps Intelligens! (Baserat på: oförbättrad INT)", "spellWizardFrostText": "Isande Köld", - "spellWizardFrostNotes": "Med ett kast fryser du allt du har gjort i följd så att de inte kommer att återställas till noll imorgon! ", + "spellWizardFrostNotes": "Med ett kast fryser du allt du har gjort i följd så att de inte kommer att återställas till noll imorgon!", "spellWarriorSmashText": "Brutalt Slag", "spellWarriorSmashNotes": "Du gör en uppgift mer blå/mindre röd och gör extra skada till Bossar! (Baserat på: STY)", "spellWarriorDefensiveStanceText": "Försvarsställning", @@ -18,7 +18,7 @@ "spellRoguePickPocketText": "Ficktjuv", "spellRoguePickPocketNotes": "Du rånar en uppgift som är i närheten och får guld! (Baserat på: UPP)", "spellRogueBackStabText": "Rygghugg", - "spellRogueBackStabNotes": "Du föråder en dåraktig uppgift och får guld och XP! (Baserat på: STY)", + "spellRogueBackStabNotes": "Du förråder en dåraktig uppgift och får guld och XP! (Baserat på: STY)", "spellRogueToolsOfTradeText": "Handelsverktyg", "spellRogueToolsOfTradeNotes": "Dina listiga talanger förbättrar hela ditt Sällskaps Uppmärksamhet! (Baserat på: oförbättrad UPP)", "spellRogueStealthText": "Smygande", diff --git a/website/common/locales/sv/subscriber.json b/website/common/locales/sv/subscriber.json index 765629b41b..746f412723 100644 --- a/website/common/locales/sv/subscriber.json +++ b/website/common/locales/sv/subscriber.json @@ -2,9 +2,9 @@ "subscription": "Abonnemang", "subscriptions": "Abonnemang", "sendGems": "Skicka Juveler", - "buyGemsGold": "Köp Juveler med Guld", + "buyGemsGold": "Gratis Månatliga Juveler", "mustSubscribeToPurchaseGems": "Majoritieten prenumererar för att kunna köpa juveler med guld", - "reachedGoldToGemCapQuantity": "Det begärda beloppet <%= quantity %> överskrider Guld=>Juvel konverterings-begränsningen <%= convCap %> för denna månaden. Vi har detta för att förebygga missbruk/överanvändning. Begränsningen återställs inom de första tre dagarna för varje månad.", + "reachedGoldToGemCapQuantity": "Det begärda beloppet <%= quantity %> överskrider Guld=>Juvel konverterings-begränsningen <%= convCap %> för denna månaden. Begränsningen återställs inom de första tre dagarna för varje månad. Tack för att du abonnerar!", "mysteryItem": "Exklusiva föremål varje månad", "mysteryItemText": "Varje månad får du en unik kosmetiskt föremål för din karaktär! Dessutom, för varje tredje månad av konsekutiv prenumeration så kommer de Mysteriska Tidsresenärerna att ge dig tillgång till historiska (och framtida!) kosmetiska föremålen.", "exclusiveJackalopePet": "Exklusivt husdjur", diff --git a/website/common/locales/tr/character.json b/website/common/locales/tr/character.json index 311d6a1b0c..a6aeb27cdd 100644 --- a/website/common/locales/tr/character.json +++ b/website/common/locales/tr/character.json @@ -83,7 +83,7 @@ "allocatePerPop": "Sezgiye bir Puan ekle", "allocateInt": "Zekaya verilen puanlar:", "allocateIntPop": "Zekaya bir Puan ekle", - "noMoreAllocate": "Artık seviye 100'e ulaştın, bu yüzden artık Stat Puanı kazanamayacaksın. Seviye atlamaya devam edebilir veya \nYeniden Doğuş Küresini kullanarak 1. seviyeden yeni bir maceraya başlayabilirsin!", + "noMoreAllocate": "Artık seviye 100'e ulaştın, bu yüzden artık Stat Puanı kazanamayacaksın. Seviye atlamaya devam edebilir veya \nYeniden Doğuş Küresini kullanarak 1. seviyeden yeni bir maceraya başlayabilirsin!", "stats": "Nitelikler", "strength": "Güç", "strText": "Güç, rastgele \"kritik vuruş\" şansını ve kritik vuruştan kazanılan Altın ile Tecrübe miktarını ve eşya düşürme olasılığını arttırır. Aynı zamanda canavarlara hasar verilmesine katkı sağlar.", diff --git a/website/common/locales/tr/communityguidelines.json b/website/common/locales/tr/communityguidelines.json index 2b12e4f65f..3bb761eac4 100644 --- a/website/common/locales/tr/communityguidelines.json +++ b/website/common/locales/tr/communityguidelines.json @@ -2,9 +2,9 @@ "tavernCommunityGuidelinesPlaceholder": "Dostane bir uyarı: bu tüm yaş gruplarına açık bir sohbettir, bu yüzden mesajlarının içeriğini ve üslubunu uygun sınırlar içerisinde tutmaya özen göster! Aklına takılan bir şeyler olursa aşağıdan Topluluk Kuralları'na göz at.", "lastUpdated": "Son güncelleme:", "commGuideHeadingWelcome": "Habitica'ya hoş geldin!", - "commGuidePara001": "Selamlar, maceracı! Habitica'ya hoş geldin, burası üretkenlik, sağlıklı yaşam ve zaman zaman deli gibi saldıran gryphon'ların diyarı.", - "commGuidePara002": "Herkesi güvende, mutlu ve üretken tutmak için, Zorluklar, oyuncu profilleri, Parti sohbeti ve özel mesajlar için bazı yönergelerimiz bulunmaktadır. Bu Yönergeleri, olabildiğince dostça ve okunması kolay olacak şekilde dikkatlice hazırladık. Lütfen, diğer oyuncularla etkileşime başlamadan önce bunları okuma zaman ayırın.", - "commGuidePara003": "Bu kurallar zaman zaman uyarlanabilir. Burada listelenen topluluk kurallarında önemli değişiklikler olduğunda, bunu Bailey duyurusunda ve/veya sosyal medya hesaplarımızda duyacaksınız!", + "commGuidePara001": "Merhaba, maceracı! Üretkenliğin, sağlıklı yaşamın ve nadiren de olsa öfkeli griffonların diyarı Habitica'ya hoş geldin.", + "commGuidePara002": "herkesi güvende, mutlu ve üretken olmasına yardım etmek amacıyla; Mücadeleler, Oyuncu Profilleri, Parti Sohbeti ve gizli mesajlar için bazı kurallarımız var. Bu kuralları içten olmaları ve kolaylıkla okunabilmeleri için özenerek hazırladık. Lütfen sohbet etmeye başlamadan önce kuralları okumaya vakit ayır.", + "commGuidePara003": "Bu kurallar arada sırada uyarlanabilir. Burada listelenen topluluk kurallarında önemli değişiklikler olduğunda, bunu Bailey duyurusunda ve/veya sosyal medya hesaplarımızda duyacaksınız!", "commGuideHeadingInteractions": "Habitica'daki Etkileşimler", "commGuidePara015": "Habitica, diğer oyuncularla etkileşimde bulunabileceğiniz birkaç alana sahiptir. Bunlar, özel sohbet bağlamları (özel mesajlar ve Parti sohbeti) ile Looking for Party özelliği ve Zorluklar gibi alanlardır.", "commGuidePara016": "Habitica'nın sosyal bileşenlerinde gezinirken, herkesin güvende ve mutlu olmasını sağlamak için bazı genel kurallar vardır.", diff --git a/website/common/locales/tr/settings.json b/website/common/locales/tr/settings.json index cd164f7de9..9882d4169b 100644 --- a/website/common/locales/tr/settings.json +++ b/website/common/locales/tr/settings.json @@ -55,7 +55,6 @@ "APIToken": "API Dizgesi (bu bir şifredir - yukarıdaki uyarıya dikkat!)", "showAPIToken": "API Dizgesini Göster", "hideAPIToken": "API Dizgesini Gizle", - "APITokenWarning": "Eğer yeni bir API Dizgisine ihtiyaç duyarsan (örn. yanlışlıkla paylaştığında), <%= hrefTechAssistanceEmail %> adresine Kullanıcı ID'ni ve o anki Dizgini mail at. Dizgin sıfırlandığında siteden ve mobil uygulamadan çıkıp, kullandığın tüm Habitica araçlarına yeni Dizgini girmen gerekecektir.", "thirdPartyApps": "Üçüncü Parti Uygulamalar", "resetDo": "Evet, hesabımı sıfırla!", "resetComplete": "Sıfırlama tamamlandı!", diff --git a/website/common/locales/uk/backgrounds.json b/website/common/locales/uk/backgrounds.json index 6a62da71d0..e3f47b05dd 100644 --- a/website/common/locales/uk/backgrounds.json +++ b/website/common/locales/uk/backgrounds.json @@ -209,7 +209,7 @@ "backgrounds112016": "Набір 30: листопад 2016", "backgroundMidnightCloudsText": "Опівнічні хмари", "backgroundMidnightCloudsNotes": "Пролетіть крізь опівнічні хмари.", - "backgroundStormyRooftopsText": "Шалені дахи", + "backgroundStormyRooftopsText": "Дахи, занурені в шторм", "backgroundStormyRooftopsNotes": "Полізьте лабіринтом цих небезпених дахів.", "backgroundWindyAutumnText": "Вітряна осінь", "backgroundWindyAutumnNotes": "Женіться за листям вітряною осінню.", @@ -906,5 +906,8 @@ "backgroundTrailThroughAForestNotes": "Поблукайте стежкою через ліс.", "backgrounds062025": "Набір 133: червень 2025", "backgroundSummerSeashoreText": "Літнє узбережжя", - "backgroundSummerSeashoreNotes": "Спіймайте хвилю на літньому пляжі." + "backgroundSummerSeashoreNotes": "Спіймайте хвилю на літньому пляжі.", + "backgrounds072025": "Набір 134: липень 2025", + "backgroundSirensLairText": "Лігво сирени", + "backgroundSirensLairNotes": "Наважтеся пірнути до лігва сирени." } diff --git a/website/common/locales/uk/faq.json b/website/common/locales/uk/faq.json index 73ccfffefd..10d12755b7 100644 --- a/website/common/locales/uk/faq.json +++ b/website/common/locales/uk/faq.json @@ -62,7 +62,7 @@ "faqQuestion30": "Що станеться, коли у мене закінчаться ОЗ?", "webFaqAnswer30": "Якщо ваш рівень здоров'я досягне нуля, ви втратите один рівень, все золото і одиницю спорядження, яку можна буде викупити.", "faqQuestion31": "Чому я втрати(в/ла) ОЗ при взаємодії з позитивною задачею?", - "faqQuestion32": "Коли я зможу обрати клас?", + "faqQuestion32": "Як я можу вибрати клас?", "faqQuestion33": "Що за синя смуга, яка з’являється після рівня 10?", "webFaqAnswer33": "Після того, як ви розблокуєте систему класів, ви також розблокуєте Вміння, які потребують Мани. Кількість Мани визначається вашим показником ІНТ і може бути скоригована за допомогою Вмінь та Спорядження.", "faqQuestion34": "Який корм любить мій вихованець?", @@ -143,5 +143,6 @@ "contentFaqTitle": "Habitica Зміни Випуску Контенту ЧаПи", "webFaqAnswer67": "Клас — особлива роль вашого персонажа. Кожен клас має набір бонусів та навичок, які стають доступні за збільшенням рівня. Навички можуть допомогти вам у роботі із вашими задачами, а також вашій команді під час проходження квестів.\n\nКлас також впливає на те, яке спорядження буде доступним до покупки на ринку та ярмарку чи з'являтиметься у винагородах.\n\nОберіть клас, що найкраще підійде вашому стилю гри:\n#### **Воїн**\n* Воїн завдає більше шкоди босам та має вищий шанс критичних ударів у роботі над завданнями, що принесе вам додаткові Досвід та Золото.\n* Основна харакатеристика — Сила. Чим більша сила, тим більше шкоди завдає воїн.\n* Друга за значенням характеристика — Витривалість, яка зменшує отримання шкоди персонажем.\n* Навички воїна підсилюють Витривалість та Силу членів команди.\n* Оберіть Воїна, якщо вам подобається битися із босами або також хочеться підвищити захист персонажа на випадок, якщо раптом не виконали задачу.\n#### **Цілитель**\n* Цілитель має високий захист та може зцілити як себе, так і членів своєї команди.\n* Основна харакатеристика — Витривалість, підвищує зцілення та зменшує отримання шкоди.\n* Друга за значенням характеристика — Інтелект, яка збільшує отримання Мани та Досвіду.\n* Навички цілителя зменшують почервоніння задач персонажа та підсилюють Витривалість членів команди.\n* Оберіть Цілителя, якщо ви часто пропускаєте задачі і бажаєте мати змогу зцілити себе чи команду. Також цілителі швидко підвищують рівень.\n#### **Маг**\n* Маг швидко підвищує рівень, отримує багато Мани і завдає високого рівня шкоди босам у Квестах.\n* Основна харакатеристика — Інтелект, яка збільшує отримання Мани та Досвіду.\n* Друга за значенням характеристика — Сприйняття. Чим більше сприйняття, тим більше Золота отримує персонаж і тим вищий шанс знайти предмет.\n* Навички мага заморожують серійність задач персонажа, а також відновлюють Ману і підсилюють Інтелект членів команди.\n* Оберіть Мага, якщо вас мотивує підвищення рівня і вам подобається завдавати багато шкоди босам у Квестах.\n#### **Розбійник**\n* Розбійник найчастіше знаходить предмети та отримує більше золота, коли завершує задачі, а також має вищий шанс критичних ударів, що принесе ще більше Досвіду та Золота.\n* Основна харакатеристика — Сприйняття. им більше сприйняття, тим більше Золота отримує персонаж і тим вищий шанс знайти предмет.\n* Друга за значенням характеристика — Сила. Чим більша сила, тим більше шкоди завдає розбійник.\n* Навички розбійника допомагають ухилитися від пропущених Щоденок, поцупити Золото та підсилити Сприйняття членів команди.\n* Оберіть Розбійника, якщо найбільше вас мотивують винагороди.", "faqQuestion67": "Які класи доступні у грі Habitica?", - "contentAnswer202": "Зимова Країна Див: з 21 грудня по 20 березня" + "contentAnswer202": "Зимова Країна Див: з 21 грудня по 20 березня", + "contentAnswer12": "Гравцям буде легше колекціонувати предмети, якщо існує більш передбачуваний розклад їх випуску." } diff --git a/website/common/locales/uk/gear.json b/website/common/locales/uk/gear.json index 971546c180..b1ae1c2b0d 100644 --- a/website/common/locales/uk/gear.json +++ b/website/common/locales/uk/gear.json @@ -42,7 +42,7 @@ "weaponRogue2Text": "Ятаґан", "weaponRogue2Notes": "Шабля, що забирає життя одним махом. Збільшує Силу на <%= str %>.", "weaponRogue3Text": "Кукрі", - "weaponRogue3Notes": "Саморобний ніж, корисна річ для виживання, а також добра зброя. Збільшує силу на <%= str %>.", + "weaponRogue3Notes": "Саморобний ніж – корисна річ для виживання, а також добра зброя. Збільшує силу на <%= str %>.", "weaponRogue4Text": "Нунчаки", "weaponRogue4Notes": "Дві важкі палиці скріплені між собою ціпком. Збільшує силу на <%= str %>.", "weaponRogue5Text": "Ніндзя-то", @@ -2398,5 +2398,9 @@ "weaponSpecialSpring2024MageText": "Гібіскусовий посох", "gearItemsCompleted": "Ви зібрали усе спорядження класу <%= klass %>! Нове спорядження класу з'являється на сезонних Урочистих подіях.", "moreArmoireGearAvailable": "А до того ви можете дістати ще <%= armoireCount %> предметів спорядження із Зачарованої скрині!", - "moreArmoireGearComing": "Асортимент Зачарованої скрині оновлюється щомісяця!" + "moreArmoireGearComing": "Асортимент Зачарованої скрині оновлюється щомісяця!", + "eyewearMystery202308Text": "Заспані очі", + "eyewearMystery202303Text": "Замріяні очі", + "eyewearMystery202312Text": "Зимово-блакитні очі", + "eyewearMystery202204AText": "Віртуальне обличчя" } diff --git a/website/common/locales/uk/groups.json b/website/common/locales/uk/groups.json index 36b79b3699..fd5ae992e5 100644 --- a/website/common/locales/uk/groups.json +++ b/website/common/locales/uk/groups.json @@ -294,8 +294,8 @@ "teamBasedTasksListDesc": "Усі учасники групи можуть працювати з однієї дошки завдань, щоб переконатися, що група завжди в курсі подій. Виконуйте завдання зі спільної дошки завдань або скопіюйте їх у свої особисті завдання, щоб виконувати їх у дорозі. Призначайте завдання своїм колегам-учасникам групи або дозвольте їм оголошувати свої власні завдання, щоб було зрозуміло, над чим кожен працює.", "groupManagementControls": "Гнучка підзвітність", "groupManagementControlsDesc": "Переглядайте статус завдання, щоб переконатися, що його виконано, додайте менеджерів груп, щоб розділити обов’язки, і насолоджуйтеся приватним груповим чатом для всіх членів команди.", - "inGameBenefits": "Внутрішньо-ігрові бонуси", - "inGameBenefitsDesc": "Члени спільноти отримують ексклюзивного скакуна Кроленя, а також повні переваги підписки, включаючи спеціальні щомісячні набори спорядження та можливість купувати самоцвіти за золото.", + "inGameBenefits": "Усі бонуси!", + "inGameBenefitsDesc": "Члени групи отримують ексклюзивного скакуна Кроленя, а також повні переваги підписки, включаючи спеціальні щомісячні набори спорядження та можливість купувати самоцвіти за золото.", "letsMakeAccount": "По-перше, давайте створимо вам обліковий запис", "nameYourGroup": "Далі - введіть назву своєї групи", "exampleGroupName": "Приклад: Академія Месників", @@ -424,5 +424,8 @@ "challengeBannedSlursPrivate": "Ваше Випробування містить приниження, що порушує правила спільноти Habitica. Просимо вас прибрати це, щоб ви могли зберегти ваше Випробування.", "messageCopiedToClipboard": "Повідомлення скопійовано.", "createGroupTitle": "Створіть групу", - "createGroupToday": "Створіть групу сьогодні!" + "createGroupToday": "Створіть групу сьогодні!", + "upgradeYourCrew": "Готові поповнити вашу команду?", + "readyToUpgrade": "Готові до апгрейду?", + "interestedLearningMore": "Ви хотіли б дізнатись більше?" } diff --git a/website/common/locales/uk/settings.json b/website/common/locales/uk/settings.json index 09c2169400..4d8a16b3e2 100644 --- a/website/common/locales/uk/settings.json +++ b/website/common/locales/uk/settings.json @@ -55,7 +55,6 @@ "APIToken": "API токен (це пароль - дивіться застереження вище!)", "showAPIToken": "Показати API токен", "hideAPIToken": "Сховати API токен", - "APITokenWarning": "Якщо вам потрібен новий API токен (наприклад, якщо ви випадково поділились ним), напишіть на пошту <%= hrefTechAssistanceEmail %>, вказавши свій ID користувача та поточний токен. Після зміни токена вам потрібно буде розлогуватись та повторно авторизуватись на сайті та мобільних пристроях, а також ввести новий токен в усіх сторонніх інструментах Habitica, якими ви користуєтесь.", "thirdPartyApps": "Сторонні додатки", "resetDo": "Так, зробіть повне скидання акаунту!", "resetComplete": "Скидання завершено!", @@ -238,12 +237,12 @@ "resetDetail3": "Всі ваші завдання (окрім тих, що з випробувань) будуть видалені і ви втратите всю історію про них.", "resetDetail4": "Ви втратите все своє спорядження, окрім Містичних Предметів Підписника та безкоштовних пам'ятних речей. Ви матимете змогу придбати всі видалені речі знову, включаючи порядження з обмеженого видання (вам потрібно мати правильний клас для того, щоб викупити речі специфічні для цього класу).", "connected": "Підключено", - "APITokenDisclaimer": "Ваш API токен схожий на пароль; Не діліться ним публічно. Іноді вас можуть попросити ввести ваш ID користувача, але ніколи не публікуйте свій API токен там, де його можуть побачити інші, в тому числі на Github.

Примітка: Якщо вам потрібен новий API токен (наприклад, якщо ви випадково поділились ним), напишіть на пошту admin@habitica.com, вказавши свій ID користувача та поточний токен. Після зміни токена вам потрібно буде розлогуватись та повторно авторизуватись на сайті та мобільних пристроях, а також ввести новий токен в усіх сторонніх інструментах Habitica, якими ви користуєтесь.", + "APITokenDisclaimer": "Ваш API токен схожий на пароль; Не діліться ним публічно. Іноді вас можуть попросити ввести ваш ID користувача, але ніколи не публікуйте свій API токен там, де його можуть побачити інші, в тому числі на Github.

Якщо вам потрібен новий API токен (наприклад, якщо ви випадково поділились ним), ви можете змінити свій пароль, щоб змінити токен. Після зміни токена, вам потрібно буде залогуватись назад на будь-якому іншому девайсі, де ви використовуєте Habitica, а також ввести новий API токен в усіх сторонніх інструментах, якими ви, можливо, користуєтесь.", "userNameSuccess": "Нікнейм користувача успішно змінено", "addWebhook": "Додати веб-гук", "changeEmailDisclaimer": "Це адреса електронної пошти, яку ви використовуєте для входу в Habitica, а також для отримання сповіщень.", "changeDisplayNameDisclaimer": "Це ім’я, яке відображатиметься для вашого аватара в Habitica.", - "changePasswordDisclaimer": "Пароль має складатися з 8 символів або більше. Ми рекомендуємо використовувати надійний пароль, який ви більше ніде не використовуєте.", + "changePasswordDisclaimer": "Паролі мають складатися з 8 символів або більше. Зміна вашого пароля призведе до завершення сеансу на будь-яких інших девайсах та сторонніх інструментах, якщо ви ними користуєтесь.", "dateFormatDisclaimer": "Налаштуйте форматування дати в Habitica.", "enableAudio": "Увімкнути звук", "playDemoAudio": "Грати демо", diff --git a/website/common/locales/uk/spells.json b/website/common/locales/uk/spells.json index 8b9d3dcdb9..b53a93e1c3 100644 --- a/website/common/locales/uk/spells.json +++ b/website/common/locales/uk/spells.json @@ -8,7 +8,7 @@ "spellWizardFrostText": "Лютий мороз", "spellWizardFrostNotes": "Лише одне чарування і лід заморожує всі ваші серії, щоб завтра вони не скинулись до нуля!", "spellWarriorSmashText": "Безжальний удар", - "spellWarriorSmashNotes": "Ви робите завдання більш синім/менш червоним і завдаєте додаткової шкоди босам! (На основі: СИЛ)", + "spellWarriorSmashNotes": "Ви робите завдання синішим/менш червоним і завдаєте додаткової шкоди босам! (На основі: СИЛ)", "spellWarriorDefensiveStanceText": "Оборонна стійка", "spellWarriorDefensiveStanceNotes": "Ви низько присідаєте і отримуєте підсилення до витривалості! (На основі: ВИТ без підсилень)", "spellWarriorValorousPresenceText": "Присутність доблесті", diff --git a/website/common/locales/uk/subscriber.json b/website/common/locales/uk/subscriber.json index 021a356f39..255bea0aae 100644 --- a/website/common/locales/uk/subscriber.json +++ b/website/common/locales/uk/subscriber.json @@ -17,11 +17,11 @@ "cancelingSubscription": "Скасувати підписку", "contactUs": "Зв'язатися з нами", "checkout": "Розрахувати", - "subGemPop": "Оскільки ви підписалися на Habitica, ви можете щомісяця купувати певну кількість дорогоцінних каменів, використовуючи золото.", + "subGemPop": "Оскільки ви підписалися на Habitica, ви можете щомісяця купувати певну кількість самоцвітів, використовуючи золото.", "subGemName": "Самоцвіти Передплатника", "maxBuyGems": "Ви купили всі дорогоцінні камені, які можете цього місяця. Більше стане доступно протягом перших трьох днів наступного місяця. Дякуємо за підписку!", "timeTravelers": "Мандрівники у часі", - "timeTravelersPopoverNoSubMobile": "Схоже, вам знадобиться Містичний пісочний годинник, щоб відкрити часовий портал і покликати таємничих мандрівників у часі.", + "timeTravelersPopoverNoSubMobile": "Підписники щомісяця отримують рідкісний Містичний пісочний годинник – щоб платити в крамниці мандрівників у часі!", "timeTravelersPopover": "Ваш містичний пісочний годинник відкрив часовий портал! Виберіть, що ви хочете отримати з минулого чи майбутнього.", "mysterySetNotFound": "Таємничий набір не знайдено, або набір вже належить вам.", "mysteryItemIsEmpty": "Таємничі предмети порожні", @@ -37,7 +37,7 @@ "mysterySet201410": "Набір крилатого гобліна", "mysterySet201411": "Набір свята та веселощів", "mysterySet201412": "Набір пінгвіна", - "mysterySet201501": "Набір зоряного лицара", + "mysterySet201501": "Набір зоряного лицаря", "mysterySet201502": "Набір крилатого чарівника", "mysterySet201503": "Набір аквамариновий", "mysterySet201504": "Набір бджоли-трудівниці", @@ -232,5 +232,15 @@ "mysterySet202405": "Позолочений дракон набір", "mysterySet202406": "Набір фантомного буканьєра", "mysterySet202404": "Набір Грибного Мага", - "mysterySet202407": "Набір привітного аксолотля" + "mysterySet202407": "Набір привітного аксолотля", + "giftSubscriptionLeadText": "Виберіть план підписки, яку ви хочете подарувати, серед запропонованих нижче! Ця покупка не буде оновлюватись автоматично.", + "subscribeAgainContinueHourglasses": "Підписуйся знову, щоб продовжити отримувати таємничі пісочні годинники", + "popular": "Популярний", + "oneMonthGift": "На один місяць", + "nMonthsGift": "На <%= months %> місяців", + "earn2GemsGift": "Вони отримають +2 Самоцвіти щомісяця, допоки підписка лишається активною", + "selectPayment": "Оберіть метод оплати", + "subscribe": "Підписатися", + "unlockNGemsGift": "Вони відкриють <%= count %> Самоцвітів на ринку щомісяця", + "immediate12Hourglasses": "Отримай 12 Містичний пісочних годинників щойно минуть перші 12 місяців підписки!" } diff --git a/website/common/locales/zh/backgrounds.json b/website/common/locales/zh/backgrounds.json index aff4a13cac..aa2e5576c8 100644 --- a/website/common/locales/zh/backgrounds.json +++ b/website/common/locales/zh/backgrounds.json @@ -900,8 +900,17 @@ "backgroundMountainSceneWithBlossomsText": "山景与花", "backgrounds0420205": "第131组:2025年4月发布", "backgroundGardenWithFlowerBedsText": "带花坛的花园", - "backgroundGardenWithFlowerBedsNotes": "漫步花园苗圃,尽赏春日繁花", + "backgroundGardenWithFlowerBedsNotes": "漫步花园苗圃,尽赏春日繁花。", "backgrounds052025": "第132组:2025年5月发布", "backgroundTrailThroughAForestText": "林间小径", - "backgroundTrailThroughAForestNotes": "漫步在林间小径。" + "backgroundTrailThroughAForestNotes": "漫步在林间小径。", + "backgrounds062025": "第133组:2025年6月发布", + "backgroundSummerSeashoreText": "夏日海滨", + "backgroundSummerSeashoreNotes": "在夏日海滨冲浪。", + "backgrounds072025": "第134组:2025年7月发布", + "backgroundSirensLairText": "塞壬秘境", + "backgroundSirensLairNotes": "勇闯深海魅影之境。", + "backgrounds082025": "第135组:2025年8月发布", + "backgroundSunnyStreetWithShopsText": "暖阳商业街", + "backgroundSunnyStreetWithShopsNotes": "店铺林立暖阳下,街巷人声正熙攘。" } diff --git a/website/common/locales/zh/faq.json b/website/common/locales/zh/faq.json index 505821c766..0364a5c567 100644 --- a/website/common/locales/zh/faq.json +++ b/website/common/locales/zh/faq.json @@ -72,7 +72,7 @@ "webFaqAnswer33": "在解锁职业系统后,你还会解锁需要消耗法力值来施放的技能。法力值由智力属性决定,并会根据技能和装备进行调整。", "faqQuestion34": "我的宠物喜欢吃什么种类的食物?", "faqQuestion35": "我喂了宠物后它消失了!发生了什么?", - "webFaqAnswer35": "在你喂了宠物足够的食物使其成长为坐骑后,你就需要再次孵化这种类型的宠物才能在马厩中重新拥有它。\n\n在移动客户端上查看坐骑的方法:\n\n * 从菜单中选择“宠物与坐骑”,然后切换到“坐骑”选项\n\n在网页版上查看坐骑的方法:\n\n * 在背包菜单中选择“宠物与坐骑”,然后向下滚动鼠标至坐骑的部分", + "webFaqAnswer35": "当你喂了宠物足够的食物使其成长为坐骑后,你需要再次孵化这种类型的宠物才能在马厩中重新拥有该宠物。\n\n在移动客户端上查看坐骑的方法:\n\n * 从菜单中选择“宠物与坐骑”,然后切换到“坐骑”选项\n\n在网页版上查看坐骑的方法:\n\n * 在背包菜单中选择“宠物与坐骑”,然后向下滚动鼠标至坐骑部分", "faqQuestion36": "我该如何改变我的头像的外观?", "webFaqAnswer36": "自定义你的Habitica头像外观的方法多到数不清!你可以从菜单中选择“自定义头像”,更改头像显示的体型、发型,以及发色、肤色,或者添加眼镜或轮椅。\n\n在移动客户端上自定义头像:\n * 在菜单中选择“自定义头像”\n\n在网页版上自定义头像的:\n * 在导航栏的用户菜单中选择“自定义头像”", "faqQuestion37": "为什么我的头像上没有显示我的装备?", @@ -99,7 +99,7 @@ "webFaqAnswer48": "是的,和队伍一起!你可以组建自己的队伍,也可以加入现有的队伍。与其他Habitica玩家组队是完成副本、从队友的技能中获得增益及通过附加的责任来激发自身动力的好方法。", "faqQuestion49": "当我不在队伍中时,我该如何找到一支队伍?", "faqQuestion47": "我能看到我的任务和习惯完成情况的数据吗?", - "webFaqAnswer49": "如果你想要与其他人一起体验Habitica,但又不认识其他玩家,那么搜索队伍是你最佳的选择!如果你已经认识其他拥有队伍的玩家, 你可以与他们分享你的@用户名 以获得邀请。此外,你也可以创建新的队伍,然后通过其他玩家的@用户名 或邮箱地址邀请他们。\n\n要创建或搜索一支队伍,请在导航菜单中选择“队伍”,然后选择适合你的选项。", + "webFaqAnswer49": "如果你想要与其他人一起体验Habitica,但又不认识其他玩家,那么搜索队伍是你最佳的选择!如果你已经认识其他已加入队伍的玩家, 你可以与他们分享你的@用户名 以获得邀请。此外,你也可以创建新的队伍,然后通过其他玩家的@用户名 或邮箱地址邀请他们加入。\n\n要创建或搜索一支队伍,请在导航菜单中选择“队伍”,然后选择适合你的选项。", "faqQuestion50": "如何寻找一支队伍?", "webFaqAnswer50": "在选择“寻找队伍”后,你将会被添加到想要加入队伍的玩家名单中。队伍的队长可以查看此名单并发送邀请 。收到邀请后,你可以从通知中接受邀请,加入自己选择的队伍!\n\n你可能会接收到来自不同队伍的多份邀请。但是,你一次只能成为一支队伍的成员。", "faqQuestion51": "进入名单后,我可以搜索队伍多长时间?", @@ -109,7 +109,7 @@ "webFaqAnswer53": "如果你使用的是Habitica网页版,请从队伍的下拉菜单中选择“寻找队友”。如果你使用的是安卓客户端,请点击队伍成员列表上方的“寻找队友”。这将显示正在寻找队伍且可被邀请加入的玩家名单。\n\n你可以通过查看一些信息,如语言、职业、等级及使用Habitica的天数来帮助自己找到适合你队伍的成员。如果你想要与某人交谈后再发送邀请,你可以查看其简介并发送私信。", "webFaqAnswer57": "加入队伍后,你将不再收到任何邀请。如果你想阻止来自特定玩家的邀请和信息,请查看其简介并点击拉黑按钮。移动端请点击其简介页面右上角的三个点,然后选择“拉黑”。\n\n如果你认为某位玩家的姓名、简介或发送的信息违反了我们的社区准则,请举报他们的发送的信息或通过admin@habitica.com联系我们。", "webFaqAnswer64": "共享任务将会在相同的时间重置,以确保所有人的共享任务栏保持同步。这个时间可以在共享任务栏上看到,由团队计划队长的每日起始时间决定。因为共享任务会自动重置,所以第二天早上登录时,你将没有机会来勾选完成昨天未完成的共享日常任务。\n\n错过的日常任务不会造成伤害,但它们的颜色等级将会降低,以帮助直观了解其进度。", - "webFaqAnswer60": "以下是一些可帮助你开始使用新的Habitica团队计划的快速提示:\n\n * 将一名成员晋升为管理员,让其有能力创建和编辑任务\n * 不分配任何人都能完成且只需完成一次的任务\n * 如果其他人无需完成某项任务,请将其分配给特定的成员\n * 如果很多人都需要完成某项任务,请将其分配给复数的成员\n * 在个人任务栏上切换显示共享任务的功能,以免错过任何任务\n * 完成任务即可获得奖励,即使是多人完成的任务,奖励也不会被拆分\n * 根据团队面板上的任务颜色来判断任务的平均完成率\n * 定期检查共享任务栏上的任务,确保它们仍有价值\n * 错过的日常任务不会对你或你的团队造成伤害,但任务的颜色等级将会降低", + "webFaqAnswer60": "以下是一些可帮助你开始使用新的Habitica团队计划的快速提示:\n\n * 将一名成员晋升为管理员,让其有能力创建和编辑任务\n * 如果任何人都能完成且只需完成一次,则不要分配该任务\n * 如果其他人无需完成某项任务,请将其分配给特定的成员\n * 如果很多人都需要完成某项任务,请将其分配给那些成员\n * 打开在个人任务栏上显示共享任务的功能,以免错过任何任务\n * 完成任务即可获得奖励,即使是多人完成的任务,奖励也不会被拆分\n * 任务完成奖励不会分配给成员\n * 根据团队面板上的任务颜色来判断任务的平均完成率\n * 定期检查共享任务栏上的任务,确保它们仍有价值\n * 错过的日常任务不会对你或你的团队造成伤害,但任务的颜色等级将会降低", "webFaqAnswer47": "目前Habitica还无法直观地显示你的任务数据变化情况。不过在Habitica网页版上,你可以从设置中的网站数据选项里导出你的任务数据。", "faqQuestion54": "我最多可以邀请多少人加入我的队伍?", "faqQuestion53": "我有一支队伍,我该如何找到更多成员?", @@ -240,7 +240,7 @@ "subscriptionDetail451": "每个赠送的订阅都会增加玩家享受订阅额外奖励的月份数,使他们能够在接下来的每个月继续获得更多神秘沙漏并增加宝石上限。", "subscriptionDetail480": "这些改动只会影响神秘沙漏和订阅者的宝石。其他所有的额外奖励都不会变动。", "subscriptionDetail48": "其他订阅的额外奖励会做出改变吗,比如神秘套装之类的?", - "webFaqAnswer67": "职业是你的角色可以扮演的不同角色。随着您的等级提升,每个职业都会提供自己的一套独特额外奖励和技能。这些技能可以增加您与任务的交互方式,或帮助您完成队伍中的任务。\n\n您的职业还决定了您在奖励、市场和赛季商店中可以购买的装备。\n\n以下是每个职业的概要,可以帮助您选择最适合您的游戏风格的职业:\n#### **战士**\n* 战士对 Boss 造成高伤害,并在完成任务时有很高的几率暴击,奖励您额外的经验和金币。\n* 力量是他们的主要属性,可以提高他们造成的伤害。\n* 体质是他们的次要属性,可以降低他们受到的伤害。\n* 战士的技能可以增强队友的体质和力量。\n* 如果您喜欢与 Boss 战斗,或者您偶尔错过任务但希望减轻惩罚,选择战士吧。\n\n#### **医者**\n* 医者防御力高,可以治疗自己和队友。\n* 体质是他们的主要属性,可以增加他们的治疗并降低他们受到的伤害。\n* 智力是他们的次要属性,可以增加他们的法力值和经验值。\n* 医者技能使他们的任务不那么危急,并且可以增强他们队友的体质。\n* 如果您经常错过任务并需要治愈自己或队友,请选择治疗师吧。此外,医者升级也很快。\n\n#### **法师**\n* 法师升级很快,法力值很高,可以在任务中重创 Boss。\n* 智力是他们的主要属性,可以增加他们的法力值和经验值。\n* 感知力是他们的次要属性,可以增加金币和其他物品的掉落。\n* 法师的技能会暂停他们的任务连击,恢复队友的法力值,并增强他们的智力。\n* 如果你喜欢快速过关升级并且重创boss,请选择法师吧。\n#### **盗贼**\n* 盗贼通过完成任务获得的物品掉落和金币最多,并且有很高的暴击率,获得更多的经验和金币。\n* 感知力是他们的主要属性,可以增加金币和其他物品的掉落。\n* 力量是他们的次要属性,可以提高他们造成的伤害。\n* 盗贼的技能帮助他们躲避错过的每日任务,窃取黄金,并提升队友的感知力。\n* 如果您很喜欢赢取丰厚的奖励,请选择盗贼吧。", + "webFaqAnswer67": "职业是你的角色可以扮演的不同角色。随着您的等级提升,每个职业都会提供自己的一套独特额外奖励和技能。这些技能可以增加您与任务的交互方式,或帮助您完成队伍中的任务。\n\n您的职业还决定了您在奖励、市场和赛季商店中可以购买的装备。\n\n以下是每个职业的概要,可以帮助您选择最适合您的游戏风格的职业:\n#### **战士**\n* 战士对 Boss 造成高伤害,并在完成任务时有很高的几率暴击,奖励您额外的经验和金币。\n* 力量是他们的主要属性,可以提高他们造成的伤害。\n* 体质是他们的次要属性,可以降低他们受到的伤害。\n* 战士的技能可以增强队友的体质和力量。\n* 如果您喜欢与 Boss 战斗,或者您偶尔错过任务但希望减轻惩罚,选择战士吧。\n#### **医者**\n* 医者防御力高,可以治疗自己和队友。\n* 体质是他们的主要属性,可以增加他们的治疗并降低他们受到的伤害。\n* 智力是他们的次要属性,可以增加他们的法力值和经验值。\n* 医者技能使他们的任务不那么危急,并且可以增强他们队友的体质。\n* 如果您经常错过任务并需要治愈自己或队友,请选择治疗师吧。此外,医者升级也很快。\n#### **法师**\n* 法师升级很快,法力值很高,可以在任务中重创 Boss。\n* 智力是他们的主要属性,可以增加他们的法力值和经验值。\n* 感知力是他们的次要属性,可以增加金币和其他物品的掉落。\n* 法师的技能会暂停他们的任务连击,恢复队友的法力值,并增强他们的智力。\n* 如果你喜欢快速过关升级并且重创boss,请选择法师吧。\n#### **盗贼**\n* 盗贼通过完成任务获得的物品掉落和金币最多,并且有很高的暴击率,获得更多的经验和金币。\n* 感知力是他们的主要属性,可以增加金币和其他物品的掉落。\n* 力量是他们的次要属性,可以提高他们造成的伤害。\n* 盗贼的技能帮助他们躲避错过的每日任务,窃取黄金,并提升队友的感知力。\n* 如果您很喜欢赢取丰厚的奖励,请选择盗贼吧。", "subscriptionPara3": "我们希望这个新的计划表更加可预测,使得用户有更多的机会获得时空旅行者商店里的众多厉害的物品,甚至让你更积极地完成月度计划,实现进步!", "faqQuestion67": "Habitica中的职业是什么意思?", "subscriptionPara2": "如果你仍有未被涉及的问题,你依然可以通过<%= mailto %>联系我们的团队。" diff --git a/website/common/locales/zh/front.json b/website/common/locales/zh/front.json index 3259c7e0cb..938665fd18 100644 --- a/website/common/locales/zh/front.json +++ b/website/common/locales/zh/front.json @@ -25,32 +25,32 @@ "invalidEmail": "执行密码重置需要有效的电子邮箱地址。", "login": "登录", "logout": "退出", - "marketing1Header": "通过游戏改善你的习惯", - "marketing1Lead1Title": "你的人生RPG", - "marketing1Lead1": "Habitica是一款帮助你改善现实生活习惯的游戏。它通过将你所有的任务(习惯,日常任务和待办事项) 变成你需要打败的小怪物来“游戏化”你的生活。你在生活中做得越好,你在游戏中的进步就越大。如果你在生活中犯了错误,你的角色也会在游戏中退步。", - "marketing1Lead2Title": "获取精美装备", - "marketing1Lead2": "改善你的习惯来使你的角色成长。炫耀你得到的炫酷装备吧!", - "marketing1Lead3Title": "寻找随机奖励", - "marketing1Lead3": "对有些人来说,最能激励他们的方式是赌博:一种叫做“随机奖励”机制。Habitica支持所有的强化与惩罚方式:无论是积极的、消极的、指定的还是随机的。", - "marketing2Header": "与朋友一起竞争", - "marketing2Lead1Title": "和朋友一起提高效率", - "marketing2Lead1": "你当然可以独自玩Habitica,但是当你开始合作、竞争和对他人负责的时候,Habitica才能发挥真正的作用。自我提高最有效的方法就是保持集体责任感,还有什么比电子游戏更能营造责任感和竞争环境呢?", - "marketing2Lead2Title": "与怪物战斗", - "marketing2Lead2": "RPG游戏怎么能缺少战斗元素?和你的队伍一起与怪物战斗吧。怪物是 “超级责任感模式”——你没去健身房的一天,就是怪物伤害*所有人*的一天!", + "marketing1Header": "逐级养成好习惯!", + "marketing1Lead1Title": "游戏化你的人生", + "marketing1Lead1": "Habitica 专治待办清单拖延症!熟悉的游戏化机制:完成任务即得金币、经验与物品奖励,轻松推进事项,成就感爆棚。现实任务越高效,游戏成长越突飞猛进。", + "marketing1Lead2Title": "炫装出击", + "marketing1Lead2": "做任务赚金币,收集刀剑盔甲各种装备。数百件单品自由搭配,组合玩法无穷无尽。要战力?要颜值?我全都要! ", + "marketing1Lead3Title": "努力必有回报", + "marketing1Lead3": "当生活缺乏奖励时,任务可能拖延数周。但Habitica随时待命帮你搞定!每项任务必有回报,而惊喜总在转角处——请保持前进! ", + "marketing2Header": "与朋友一起组队", + "marketing2Lead1Title": "社交生产力", + "marketing2Lead1": "协作、竞技、互动——让他人成为你的动力源泉!Habitica 深谙自我提升的核心法则:社交监督力。", + "marketing2Lead2Title": "征讨副本魔物", + "marketing2Lead2": "集结战友,征战数百副本!副本魔物考验团队极限责任感。若有人偷懒(如未刷牙),则全员需要共担伤害!", "marketing2Lead3Title": "互相挑战", - "marketing2Lead3": "挑战让你可以与朋友和陌生人竞争。挑战的获胜者会赢得特殊奖励。", - "marketing3Header": "应用程序与扩展插件", - "marketing3Lead1": "**iPhone和安卓**应用程序可让你随时随地进行操作。我们知道有时登录网站点击按钮可能会很麻烦。", - "marketing3Lead2Title": "集成", - "marketing3Lead2": "其他**第三方工具**可以将Habitica与你生活的方方面面结合起来。我们的API为像[Chrome扩展程序](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US)这样的工具提供了简便的集成功能,使你在浏览无益的网站时会损失积分,在浏览有益的网站时会获得积分。[点击此处查看更多](https://habitica.fandom.com/zh/wiki/扩展和插件)。", - "marketing4Header": "组织用途", - "marketing4Lead1": "教育是最适合游戏化的领域之一。我们都知道现在的学生有多爱玩手机和游戏;利用这种力量吧!让学生在友好的环境中相互竞争,用稀有奖品奖励良好的行为,看着他们的成绩和品行突飞猛进。", + "marketing2Lead3": "加入社区发起的挑战,获取契合您目标的精选任务清单!全力角逐冠军宝座,赢取专属宝石奖励!", + "marketing3Header": "使用 Habitica的其他方法", + "marketing3Lead1": "Android 与 iOS 设备上也可安装Habitica,随时随地完成任务。体验屡获殊荣的应用,用全新方式搞定待办事项。", + "marketing3Lead2Title": "开源社区", + "marketing3Lead2": "我们自豪地成为开源项目,诚邀专业社区用户共同添砖加瓦。您可量身定制专属 Habitica,或贡献代码改善全球玩家体验。访问 [GitHub](https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica)了解更多!", + "marketing4Header": "不止家务琐事", + "marketing4Lead1": "教育领域正是游戏化的绝佳舞台!打破日常课业的单调循环,让学习与游戏碰撞火花。通过Habitica,追踪作业进度、发起课堂挑战、展示学生成就。", "marketing4Lead1Title": "教育游戏化", - "marketing4Lead2": "医疗保健的花销越来越高,是时候做出一些改变了。现在有数以百计的降低花销和改善健康的应用程序,我们相信Habitica可以帮助你实现更健康的生活方式。", + "marketing4Lead2": "健康生活方式建设常令人望而生畏。Habitica 以灵活排期和弹性强度,全面追踪健身目标的各个维度,精准适配您的当前状态。在通往健康的征途中,也请享受游戏化乐趣吧!", "marketing4Lead2Title": "健康与保健游戏化", - "marketing4Lead3-1": "想让你的生活游戏化?", + "marketing4Lead3-1": "准备好享受完任务的乐趣了吗?", "marketing4Lead3-2": "有兴趣管理一个教育、健康等领域的团队?", - "marketing4Lead3Title": "将一切游戏化", + "marketing4Lead3Title": "即刻启程!", "mobileAndroid": "安卓客户端", "mobileIOS": "iOS客户端", "oldNews": "新闻", @@ -180,5 +180,9 @@ "emailUsernamePlaceholder": "例:habitrabbit或gryphon@example.com", "footerProduct": "产品", "translateHabitica": "翻译Habitica", - "incorrectResetPhrase": "请用大写字母输入 <%= magicWord %> 以重置你的账号。" + "incorrectResetPhrase": "请用大写字母输入 <%= magicWord %> 以重置你的账号。", + "marketing3Lead1Title": "Android和iOS上的应用程序", + "marketing4Lead3Button": "今日即刻启程", + "missingClientHeader": "缺少 x-client 请求头。", + "emailBlockedRegistration": "该邮箱已被限制注册。若您认为此系误判,请发送邮件至 admin@habitica.com 联系我们。" } diff --git a/website/common/locales/zh/gear.json b/website/common/locales/zh/gear.json index dbd9724fb4..d303d9cc74 100644 --- a/website/common/locales/zh/gear.json +++ b/website/common/locales/zh/gear.json @@ -32,7 +32,7 @@ "weaponWarrior4Text": "蓝宝石之刃", "weaponWarrior4Notes": "锋刃如北风般锐利的剑。增加<%= str %>点力量。", "weaponWarrior5Text": "红宝石之剑", - "weaponWarrior5Notes": "锻造时的光芒从未消褪的武器。增加<%= str %>点力量。", + "weaponWarrior5Notes": "锻造时光芒从未消褪的武器。增加<%= str %>点力量。", "weaponWarrior6Text": "黄金之剑", "weaponWarrior6Notes": "黑暗生物的克星。增加<%= str %>点力量。", "weaponRogue0Text": "匕首", @@ -2990,7 +2990,7 @@ "backSpecialHeroicAureoleText": "英雄光环", "headAccessorySpecialHeroicCircletNotes": "头戴王冠会感觉沉重,但这枚饰环却如你慷慨的灵魂一般轻盈。增加全属性<%= attrs %>点。", "armorArmoireSoftWhiteSuitText": "柔软的白色套装", - "armorArmoireSoftWhiteSuitNotes": "白色是一种宁静的颜色。无论你面对的是洁白的床单,还是刚落下的皑皑白雪,你都能保持一个清晰而灵敏的头脑。增加<%= con %>点体质和<%= per %>点感知。魔法宝箱:白色家居服套装(2/3)。", + "armorArmoireSoftWhiteSuitNotes": "白色乃纯净之色。无论是铺展眼前的洁净白床单,还是初雪覆盖的皑皑绒毯,皆能令你心神澄澈,思绪清明。增加<%= con %>点体质与<%= per %>点感知。魔法宝箱:白色家居服套装(2/3)。", "headArmoireWhiteFloppyHatText": "白色软帽", "shieldArmoireSoftWhitePillowText": "柔软的白色枕头", "shieldArmoireSoftWhitePillowNotes": "有条理的战士都会在远征时带上一个枕头。可以保护自己免受被忽视义务的影响……即使是在你小睡的时候。增加智力、感知各<%= attrs %>点。魔法宝箱:白色家居服套装(3/3)", @@ -3088,7 +3088,7 @@ "backMystery202405Text": "镀金龙翼", "backMystery202405Notes": "这双华丽的翅膀闪耀着纯金的光芒,却又轻如羽毛。没有属性加成。2024年5月订阅者物品。", "eyewearMystery202406Notes": "尽量避免让一帮爱管闲事的孩子和他们会说话的狗把你的面具摘下来。没有属性加成。订阅者物品。2024年6月订阅者物品。", - "shieldArmoireBuoyantBeachBallNotes": "已经有太多的球在空中飞舞了吗?这里有一个可以让你放心地放下、滚动、一遍又一遍地弹起...... 增加<%= str %>点力量。魔法宝箱:海滨套装(4/4)。", + "shieldArmoireBuoyantBeachBallNotes": "已经有太多的球在空中飞舞了吗?这里有一个可以让你放心地放下、滚动、一遍又一遍地弹起...... 增加<%= str %>点力量。魔法宝箱:海滨套装(4/4)。", "weaponSpecialSummer2024RogueText": "海蛞蝓三叉戟", "weaponSpecialSummer2024WarriorNotes": "一些脱落的鲨鱼牙齿变成了武器,能够从任何方向造成伤害。增加<%= str %>点力量。2024 年夏季限量版装备。", "weaponSpecialSummer2024MageText": "海葵魔杖", @@ -3190,7 +3190,7 @@ "shieldMystery202409Text": "向日葵法师法杖", "headArmoireFunnyFoolCapNotes": "这顶帽子上的铃铛能助你集中注意力,并使你的对手笑个不停。增加<%= con %>点体质。魔法宝箱:欢乐愚人套装(物品1/3)", "shieldSpecialFall2024WarriorText": "火焰之盾", - "shieldSpecialFallRogue2024Notes": "这件武器的催眠力量将通过螺旋击倒任务。增加<%= str %>点力量。2024年秋季限定版装备。", + "shieldSpecialFallRogue2024Notes": "任务本身也会被这件催眠武器的旋涡和螺旋所淹没。增加<%= str %>点力量。2024年秋季限定版装备。", "shieldSpecialFall2024HealerText": "太空之盾", "shieldMystery202409Notes": "这支法杖上闪光的红宝石从夏末的太阳中汲取了力量。没有属性加成。2024年9月订阅者物品。", "shieldArmoireSafetyFlashlightText": "安全手电筒", @@ -3204,9 +3204,9 @@ "armorSpecialWinter2025WarriorText": "驼鹿战士护甲", "weaponSpecialWinter2025HealerText": "星光魔杖", "weaponSpecialWinter2025RogueText": "雪花爆裂", - "weaponSpecialWinter2025RogueNotes": "重击炫光,碾压困难任务!你将势不可挡!力量属性提升<%= str %>点。2024-2025冬季限定装备。", + "weaponSpecialWinter2025RogueNotes": "重击炫光,碾压困难任务!你将势不可挡!力量属性提升<%= str %>点。2024-2025冬季限定版装备。", "weaponSpecialWinter2025WarriorNotes": "神威巨斧配至尊驼鹿!你将势不可挡!力量属性提升<%= str %>点。2024-2025冬季限定装备。", - "weaponSpecialWinter2025HealerNotes": "登顶需要更多的火花和一刻闪耀星星!你将势不可挡!智力属性提升 <%= int %>。2024-2025 年冬季限定装备。", + "weaponSpecialWinter2025HealerNotes": "登顶需要更多光芒和一颗璀璨星星!你将无往不胜!智力属性提升 <%= int %>。2024-2025 年冬季限定版装备。", "weaponSpecialFall2024RogueNotes": "受此魅惑武器的影响,任务将暂时冻结。力量属性提升<%= str %>点。2024秋季限定装备。", "weaponArmoireStormKnightAxeText": "风暴骑士战斧", "weaponArmoireStormKnightAxeNotes": "凝聚雷霆之怒,挥出霹雳一击!力量属性提升<%= str %>点。魔法宝箱:风暴骑士套装(3/3)", @@ -3215,7 +3215,7 @@ "armorSpecialWinter2025HealerNotes": "在任务途中闪烁前行。但需当心——一盏熄灭,尽数皆暗。体质属性提升<%= con %>点。2024-2025冬季限定装备。", "armorSpecialSpring2025WarriorText": "旭日护甲", "armorSpecialSpring2025RogueNotes": "这件华美斗篷缀有特殊晶石,蕴藏唯有你知晓的秘密力量。感知属性提升<%= per %>点。2025春季限定装备。", - "weaponSpecialSpring2025HealerNotes": "轻挥即可召唤传粉精灵助阵冒险。智力属性提升<%= int %>点。2025春季限定装备。", + "weaponSpecialSpring2025HealerNotes": "轻挥即可召唤传粉精灵助阵冒险。智力属性提升<%= int %>点。2025春季限定版装备。", "weaponArmoireGildedKnightsSpearText": "镀金骑士长枪", "armorSpecialWinter2025RogueText": "雪境装扮", "headSpecialSpring2025RogueText": "晶芒帽子", @@ -3223,12 +3223,12 @@ "armorSpecialWinter2025MageNotes": "身着此袍起舞,让奇思、妙想、魔幻与辉煌常伴左右。智力属性提升<%= int %>点。2024-2025冬季限定装备。", "armorSpecialSpring2025MageNotes": "这件华彩流溢的制服兼具隐秘特性,助你悄然攻克艰巨任务。智力属性提升<%= int %>点。2025春季限定装备。", "weaponSpecialSpring2025WarriorText": "旭日弯刀", - "weaponSpecialSpring2025WarriorNotes": "挥刃可裁花茎制花束,亦可斩棘开路完成任务。力量属性提升<%= str %>点。2025春季限定装备。", + "weaponSpecialSpring2025WarriorNotes": "挥刃可裁花茎制花束,亦可斩棘开路完成任务。力量属性提升<%= str %>点。2025春季限定版装备。", "weaponSpecialSpring2025RogueText": "晶刺链锤", - "weaponSpecialSpring2025RogueNotes": "一击挥扫,破除一切达成目标之路的障碍。力量属性提升<%= str %>点。2025春季限定装备。", + "weaponSpecialSpring2025RogueNotes": "一击挥扫,破除一切达成目标之路的障碍。力量属性提升<%= str %>点。2025春季限定版装备。", "weaponSpecialSpring2025HealerText": "缅栀曲杖", "weaponSpecialSpring2025MageText": "螳螂法杖", - "weaponSpecialSpring2025MageNotes": "挥斩间操纵元素魔法,掌控周边环境。抢占先机,跃进突袭!智力属性提升<%= int %>点,感知属性提升<%= per %>点。2025春季限定装备。", + "weaponSpecialSpring2025MageNotes": "挥斩间操纵元素魔法,掌控周边环境。抢占先机,跃进突袭!智力属性提升<%= int %>点,感知属性提升<%= per %>点。2025春季限定版装备。", "armorSpecialWinter2025WarriorNotes": "身披此甲,众人皆当退避三舍。体质属性提升<%= con %>点。2024-2025冬季限定装备。", "armorSpecialWinter2025MageText": "极光斗篷", "armorSpecialSpring2025WarriorNotes": "这副耀眼护甲蕴含春日晴空般的绚烂色彩。体质属性提升<%= con %>点。2024-2025冬季限定装备。", @@ -3277,7 +3277,7 @@ "headMystery202411Text": "怒发冲冠头盔", "headArmoireStormKnightHelmNotes": "鹿角引雷,荡寇摧城!体质属性提升<%= con %>点。魔法宝箱:风暴骑士套装(1/3)", "headMystery202502Text": "真心小丑帽", - "headMystery202502Notes": "这顶活泼可爱的小帽子一定会让所有见到你的人都感到高兴!没有属性加成。2025年2月订阅者限定外观。", + "headMystery202502Notes": "这顶活泼可爱的小帽子一定会让所有见到你的人都感到高兴!没有属性加成。2025年2月订阅者限定物品。", "headArmoireStormKnightHelmText": "风暴骑士头盔", "headSpecialWinter2025HealerNotes": "无需费心整理——纷乱灯串自成时尚帽型!智力属性提升<%= int %>点。2024-2025冬季限定装备。", "headMystery202503Text": "翠玉巨像发型", @@ -3293,5 +3293,95 @@ "headArmoireFestiveHelperHatNotes": "节日小贴士第27条:常备助手帽以备不时之需!超大帽檐甚至能暗藏应急玩具。智力属性提升<%= int %>点。魔法宝箱:节日助手套装(1/2)", "headArmoireFancyFloralHatText": "华饰花冠", "headArmoireFancyFloralHatNotes": "此帽缀满瑰丽花卉与精致褶边扣饰,令人目不暇接。智力属性提升<%= int %>点。魔法宝箱:华饰花艺套装(1/2)。", - "weaponSpecialSummer2025WarriorNotes": "谁也不知道它已经存在多久了,但未来它仍然能和你共同克服许多艰难的挑战。增加<%= str %>点力量。2025夏季限定装备。" + "weaponSpecialSummer2025WarriorNotes": "谁也不知道它已经存在多久了,但未来它仍然能和你共同克服许多艰难的挑战。增加<%= str %>点力量。2025夏季限定版装备。", + "weaponSpecialSummer2025RogueText": "乌贼触手", + "weaponSpecialSummer2025RogueNotes": "这个触手会紧紧抓住你的目标,因此在完成任务时你也不会失去动力。增加<%= str %>点力量。2025夏季限定版装备。", + "weaponSpecialSummer2025HealerText": "海天使翼桨", + "weaponSpecialSummer2025MageText": "枝珊瑚", + "weaponSpecialSummer2025MageNotes": "发挥你的天赋和技能,多栖发展,来应对不同的任务。增加<%= int %>点智力和<%= per %>点感知。2025夏季限定版装备", + "weaponSpecialSummer2025WarriorText": "扇贝枪", + "weaponSpecialSummer2025HealerNotes": "持桨前进时划出8字形轨迹,助你任务有成。增加<%= int %>点智力。2025夏季限定版装备。", + "weaponArmoireBeekeepersSmokerText": "喷烟器", + "armorSpecialSummer2025WarriorText": "扇贝护甲", + "armorSpecialSummer2025RogueText": "乌贼隐服", + "armorSpecialSummer2025RogueNotes": "这件衣服不仅能随意变色,还能射出一团墨水。干扰还是隐藏,选择权在你手里!增加<%= per %>点感知。2025夏季限定装备。", + "armorSpecialSummer2025HealerText": "海天使泳衣", + "armorSpecialSummer2025HealerNotes": "这件泳衣不仅能让你优雅动人,更能让你流畅如梭。随波逐流还是自在畅游,由你选择!增加<%= con %>点体质。2025夏季限定版装备。", + "weaponArmoireBeekeepersSmokerNotes": "用这个让你的蜜蜂安静下来,这样就能取得蜂蜜了。蜜蜂不会计较的。坦诚地说,我们都会时不时花些时间来冷静一下。增加<%= int %>点智力。魔法宝箱:养蜂人套装(3/4)", + "armorSpecialSummer2025WarriorNotes": "这件护甲不仅让你强悍,更使你迅敏。战斗或逃跑,选择权在你手中!增加<%= con %>点体质。2025夏季限定版装备。", + "armorSpecialSummer2025MageText": "仙女濑鱼泳衣", + "armorSpecialSummer2025MageNotes": "这套泳衣不仅色彩绚丽,还能让你在水中优美地滑行。游泳还是跳舞,由你决定!增加<%= int %>点智力。2025夏季限定版装备。", + "armorArmoireBeekeepersSuitText": "养蜂衣", + "headArmoireBeekeepersHatText": "养蜂帽", + "headArmoireBeekeepersHatNotes": "照顾嗡嗡作响的伙伴时,注意保护好你的脸。增加<%= per %>点感知。魔法宝箱:养蜂人套装(1/4)", + "shieldArmoireBeekeepersHiveText": "蜂巢", + "backMystery202505Text": "翱翔燕尾翼", + "backMystery202505Notes": "穿上这双符合空气动力学的机翼,展翅翱翔,赢得荣誉。没有属性加成。2025年5月订阅者物品。", + "backMystery202506Text": "太阳光环", + "backMystery202506Notes": "在您处理日常事务时,带来温暖的光芒。没有属性加成。2025年6月订阅者物品。", + "shieldArmoireBeekeepersHiveNotes": "蜂巢既是家,也是工作场所。你可能需要和你的蜜蜂谈谈如何平衡工作与生活。魔法宝箱:养蜂人套装(4/4)", + "armorArmoireBeekeepersSuitNotes": "照顾忙碌的蜜蜂时,注意自身安全。增加<%= con %>点体质。魔法宝箱:养蜂人套装(2/4)", + "headSpecialSummer2025HealerNotes": "恭喜你,现在你是一只海蝴蝶。智力增加<%=int%>。2025夏季限量版装备。", + "headSpecialSummer2025HealerText": "海天使头盔", + "headSpecialSummer2025WarriorText": "扇贝头盔", + "headArmoireGildedKnightsHelmText": "镀金骑士头盔", + "headSpecialSummer2025WarriorNotes": "这款头盔坚不可摧,非常尖锐的,甚至可以保护你免受海星的伤害。增加<%=str%>力量。限量版夏季2025装备。", + "headSpecialSummer2025RogueText": "鱿鱼面具", + "headSpecialSummer2025MageText": "仙女濑鱼头饰", + "headSpecialSummer2025MageNotes": "所有的人都会被你的鳍随着水流移动的方式所迷惑。提高感知力<%=per%>。限量版夏季2025装备。", + "headArmoireGildedKnightsHelmNotes": "在任何战斗的黑暗中都像太阳一样闪亮。增加体质<%=con%>。魔法宝箱:镀金骑士套装(1/3)", + "headArmoireSillyOrangeTophatNotes": "和南瓜派发型很配。增加力量和体质各<%=attrs%>。魔法宝箱:愚蠢的燕尾服套装(2/2)。", + "headSpecialSummer2025RogueNotes": "当你戴上这个面具时,你的视野会得到提升。提高感知力<%=per%>。限量版夏季2025装备。", + "headArmoireSillyOrangeTophatText": "愚蠢的橙色帽子", + "headArmoireSillierBlueTophatText": "更傻的蓝色高顶礼帽", + "shieldSpecialSpring2025WarriorText": "Sunburst Shield", + "shieldSpecialSpring2025WarriorNotes": "当阳光正好照在这面盾牌上时,你可以暂时使敌人失明。抓住机会,向前冲!增加体质 <%=con%>。限量版。2025年春季装备。", + "shieldSpecialWinter2025WarriorNotes": "用这个像麋鹿一样坚固的盾牌挡住任何不必要的干扰。增加体质<%= con %>点。2024-2025冬季限量版装备。", + "headArmoireSillierBlueTophatNotes": "一点优雅,一点精致。力量和体质各增加<%= attrs %>点。魔法衣橱:更傻气的燕尾服套装(第2件物品,共2件)。", + "shieldSpecialWinter2025HealerText": "完美的礼物", + "shieldSpecialWinter2025HealerNotes": "完美的礼物正等着被打开。里面会是什么呢?增加体质 <%=con%>。限量版冬季2024-2025装备。", + "shieldSpecialSpring2025RogueText": "晶刺链锤", + "shieldSpecialSpring2025RogueNotes": "执此晶器可洞见高效未来,顺势而为,勇往直前!力量属性提升<%= str %>点。2025年春季限定版装备。", + "shieldSpecialSpring2025HealerText": "缅栀花盾", + "shieldSpecialSpring2025HealerNotes": "执此花盾可汇聚善意,亦能驱散杂念。顺势而为,勇往直前!体质属性提升<%= con %>点。2025年春季限定版装备。", + "shieldSpecialSummer2025WarriorText": "扇贝甲盾", + "shieldSpecialSummer2025WarriorNotes": "华彩之下暗藏锋锐棱脊——劲敌当心!体质属性提升<%= con %>点。2025年夏季限定版装备。", + "shieldSpecialSummer2025RogueText": "鱿鱼触手", + "shieldSpecialSummer2025RogueNotes": "腕足看似弱柳扶风,实则吸盘紧握——劲敌当心!力量属性提升<%= str %>点。2025年夏季限定版装备。", + "shieldSpecialSummer2025HealerText": "海天使护盾", + "shieldSpecialSummer2025HealerNotes": "此盾看似简单,实则剧毒——劲敌当心。体质属性提升<%= con %>点。2025年夏季限定版装备。", + "shieldMystery202501Notes": "为任意户外精致披上闪烁钻石霜衣。没有属性加成。2025年1月订阅者专属物品。", + "shieldMystery202501Text": "霜缚者法杖", + "shieldMystery202502Notes": "情人节乃至每日,愿您心情如气球般轻盈。没有属性加成。2025年2月订阅者专属物品。", + "shieldArmoireFancyFloralFanNotes": "以华美花缎精制的一流团扇,成就绝伦风尚收官之笔。感知属性提升<%= per %>点。魔法宝箱:华饰花艺套装(2/2)。", + "shieldMystery202506Text": "耀阳护盾", + "shieldMystery202506Notes": "所至之处驱散阴霾,遍洒温暖欢欣之光。没有属性加成。2025年6月订阅者专属物品。", + "shieldArmoireSpringPetalUchiwaText": "春瓣团扇", + "shieldArmoireSpringPetalUchiwaNotes": "春暖时节执此雅扇,花瓣翻飞间为您唤起专属微风。智力与感知属性各提升 <%= attrs %>点。魔法宝箱收藏:春瓣套装(2/2)。", + "shieldMystery202502Text": "真心小丑气球", + "shieldArmoireFancyFloralFanText": "华饰花扇", + "bodyMystery202411Text": "芒刺护肩", + "headAccessoryMystery202505Text": "飞舞凤蝶触角", + "headAccessoryMystery202505Notes": "以此敏锐感官,精准探测繁花盛放之地。没有属性加成。2025年5月订阅者专属物品。", + "eyewearMystery202503Notes": "凛冽眸光威慑一切挑战者!没有属性加成。2025年3月订阅者专属物品。", + "eyewearMystery202503Text": "翠玉战神之眼", + "bodyMystery202411Notes": "肩甲尖刺森然,助您为待办清单冲锋陷阵。没有属性加成。2024年11月订阅者专属物品。", + "shieldArmoireFlyFishingRodNotes": "修长柔韧的竿身配上诱饵,每次抛竿都能让鱼儿把诱饵当作飞虫上钩。力量与智力各增加<%= attrs %>点。魔法宝箱:飞钓套装(3/3)", + "backMystery202507Text": "活力滑板", + "backMystery202507Notes": "刷街疾行如闪电,U池暴踩稳到炸。 无属性加成。2025年7月订阅者专属物品。", + "armorArmoireFlyFishingWadersText": "飞钓涉水裤", + "armorArmoireFlyFishingWadersNotes": "无论踏入溪涧、池塘、湖泊还是江河,都能让你保持温暖与干爽。力量与体质各增加<%= attrs %>点。魔法宝箱:飞钓套装(2/3)", + "headMystery202507Text": "活力滑板帽", + "headMystery202507Notes": "帽子反着戴,帅气依然在,对吧?无属性加成。2025年7月订阅者专属物品。", + "headArmoireFlyFishingHatText": "飞钓帽", + "headArmoireFlyFishingHatNotes": "飞钓帽。宽檐设计,自带备用诱饵插位,溪钓之旅必备好物。力量与感知各增加<%= attrs %>点。魔法宝箱:飞钓套装(1/3)", + "shieldArmoireFlyFishingRodText": "飞钓竿", + "weaponMystery202508Text": "辉光赤红刀", + "weaponMystery202508Notes": "这柄旋转的单刀,令怪物与红色日常任务望而却步!没有属性加成。2025年8月订阅者专属物品。", + "headArmoireRedNewsieHatText": "赤色报童帽", + "headArmoireRedNewsieHatNotes": "号外!号外!这帽子戴着舒服又时髦,日常百搭超实用。增加感知和智慧各 <%= attrs %>点。魔法宝箱:赤色马甲套装(2/2)", + "armorArmoireRedWaistcoatText": "赤色马甲", + "armorArmoireRedWaistcoatNotes": "处理任务时尽显优雅帅气,马甲暗袋里还藏着惊喜——猜猜是什么好东西?增加体质和力量各 <%= attrs %>点。魔法宝箱:赤色马甲套装(2/2)", + "shieldMystery202508Text": "辉光青芒刀", + "shieldMystery202508Notes": "一把已经很帅?双手持双刃,双倍拉风!没有属性加成。2025年8月订阅者专属物品。" } diff --git a/website/common/locales/zh/groups.json b/website/common/locales/zh/groups.json index 32e2295106..33c3875420 100644 --- a/website/common/locales/zh/groups.json +++ b/website/common/locales/zh/groups.json @@ -239,9 +239,9 @@ "privateGuild": "私人团队", "charactersRemaining": "<%= characters %>剩余字符", "guildSummary": "概要", - "guildSummaryPlaceholder": "为你的团队撰写简短的介绍。你的团队目标是什么?你希望成员们如何互动?", + "guildSummaryPlaceholder": "为你的团队撰写简短的介绍。团队主要目标是什么?成员们都会做些什么?", "groupDescription": "描述", - "guildDescriptionPlaceholder": "在这里补充更多关于你的团队的细节以便成员加深理解。建议、链接,鼓励的内容都放在这里吧!", + "guildDescriptionPlaceholder": "在这里补充更多关于你的团队的细节以便成员加深理解。实用建议、有帮助的链接、鼓励的内容都放在这里吧!", "markdownFormattingHelp": "[Markdown格式帮助](https://habitica.fandom.com/zh/wiki/Markdown格式帮助)", "partyDescriptionPlaceholder": "这是我们队伍的简介。介绍了我们是一个怎样的队伍。阅读简介后如果你想更加深入的了解我们,那就一起组队吧。", "guildGemCostInfo": "花费宝石促进高质量的公会,宝石会转移到您的公会的银行。", @@ -288,14 +288,14 @@ "worldBossBullet4": "定期访问酒馆,查看世界Boss的进度和怒气攻击", "worldBoss": "世界Boss", "groupPlanTitle": "想要为你的成员解锁更多内容?", - "groupPlanDesc": "需要安排家中杂务或小组课题?Habitica的团队方案将提供任务合作功能以及专门的交流区以帮助你与团队成员保持专注。", + "groupPlanDesc": "需要安排家中杂务或小组课题?Habitica的团队计划将提供任务合作功能以及专门的交流区以帮助你与团队成员保持动力。", "billedMonthly": "*按月捐助收费", "teamBasedTasksList": "共有任务面板", "teamBasedTasksListDesc": "团队成员可以在同一个任务面板上进行操作以确保其他成员及时了解最新情况。在共有任务面板上完成任务或将其复制至你的个人任务中以便随时操作。", "groupManagementControls": "灵活责任制", - "groupManagementControlsDesc": "将任务指派给成员以分配责任,或开放任务作为挑战看看谁先完成。团队成员可以通过查看任务状态来确认其他成员的最新进程。", + "groupManagementControlsDesc": "将任务分配给任意成员以分担责任,或将任务作为挑战看看谁先完成。团队成员可以通过查看任务状态来确认彼此的进度。", "inGameBenefits": "全部额外奖励!", - "inGameBenefitsDesc": "团队成员将获得专属的鹿角兔坐骑,并享有订阅者额外奖励,包括独特的月度订阅者装备套装以及使用金币兑换宝石的功能。", + "inGameBenefitsDesc": "团队成员将获得专属的鹿角兔坐骑,并享有订阅者额外奖励,包括独特的订阅者装备套装以及使用金币兑换宝石的功能。", "letsMakeAccount": "首先,来注册一个账号", "nameYourGroup": "然后,为你的团队命名", "exampleGroupName": "例如:复仇者学院", @@ -342,7 +342,7 @@ "chooseTeamMember": "查找一位团队成员", "unassigned": "未分配", "onlyPrivateGuildsCanUpgrade": "只有私人公会可以升级为团队计划。", - "bannedWordsAllowedDetail": "此选项生效时,将允许在该团队中使用违禁词语。", + "bannedWordsAllowedDetail": "此选项生效时,允许在该团队中使用违禁词。", "bannedWordsAllowed": "允许屏蔽字符", "languageSettings": "语言设置", "cannotRemoveQuestOwner": "无法移除当前任务的参与者。请先中止该任务。", @@ -427,6 +427,6 @@ "createGroupToday": "立即创建你的团队!", "createGroupTitle": "创建团队", "readyToUpgrade": "准备好升级了?", - "checkGroupPlanFAQ": "前往团队方案常见问题以了解任务合作功能的最佳用法。", + "checkGroupPlanFAQ": "参阅团队方案常见问题以了解任务合作功能的最佳用法。", "messageCopiedToClipboard": "信息已复制到剪贴板。" } diff --git a/website/common/locales/zh/limited.json b/website/common/locales/zh/limited.json index 9d7a466c9b..a13a3f24f1 100644 --- a/website/common/locales/zh/limited.json +++ b/website/common/locales/zh/limited.json @@ -130,7 +130,7 @@ "winter2019PyrotechnicSet": "烟花(法师)", "winter2019WinterStarSet": "冬日之星(医者)", "winter2019PoinsettiaSet": "圣诞花(盗贼)", - "winterPromoGiftHeader": "赠送其他用户一份订阅服务的同时,您自己也能同样免费获得一份订阅!", + "winterPromoGiftHeader": "赠送其他用户一份订阅的同时,您自己也能同样免费获得一份订阅!", "winterPromoGiftDetails1": "本活动持续到1月6日,当你向他人赠送一份订阅后,自己也将免费获得相同的订阅!", "winterPromoGiftDetails2": "请注意,如果你或你的礼物接收人已经拥有一份订阅,赠送的订阅将增加至结存订阅,只有在当前订阅被取消或过期后才会生效。非常感谢你的支持!<3", "discountBundle": "一批", @@ -274,5 +274,9 @@ "spring2025MantisMageSet": "螳螂法师套装", "spring2025CrystalPointRogueSet": "晶芒盗贼套装", "spring2025PlumeriaHealerSet": "缅栀医者套装", - "winter2025StringLightsHealerSet": "流光医者套装" + "winter2025StringLightsHealerSet": "流光医者套装", + "summer2025ScallopWarriorSet": "扇贝战士套装", + "summer2025SeaAngelHealerSet": "海天使医者套装", + "summer2025FairyWrasseMageSet": "仙女濑鱼法师套装", + "summer2025SquidRogueSet": "乌贼盗贼套装" } diff --git a/website/common/locales/zh/quests.json b/website/common/locales/zh/quests.json index fd7aee33af..52f8368ab9 100644 --- a/website/common/locales/zh/quests.json +++ b/website/common/locales/zh/quests.json @@ -2,7 +2,7 @@ "quests": "副本", "quest": "副本", "petQuests": "宠物与坐骑副本", - "unlockableQuests": "未解锁的副本", + "unlockableQuests": "可解锁的副本", "goldQuests": "职业大师副本线", "questDetails": "副本详情", "questDetailsTitle": "副本详情", diff --git a/website/common/locales/zh/questscontent.json b/website/common/locales/zh/questscontent.json index f6ba23ecfd..6aa46a20aa 100644 --- a/website/common/locales/zh/questscontent.json +++ b/website/common/locales/zh/questscontent.json @@ -519,7 +519,7 @@ "questGroupLostMasterclasser": "职业大师之谜", "questUnlockLostMasterclasser": "要解锁此副本,需要先完成以下副本线的最终副本:“拖延城之困”、“迷雾飞城之乱”、“坚忍大草原之灾”和“任务森林中的恐怖”。", "questLostMasterclasser1Text": "职业大师之谜,第1部:字里行间", - "questLostMasterclasser1Notes": "@beffymaroo 和@Lemoness 突然把你叫到习惯大厅。当你到达,惊讶地发现昏暗的晨光中,Habitica的4位大师鉴别者已在等待。即使是“快乐收获者”也挂着一副严峻的表情。

“哦豁,你来了,”愚人说。“要不是真的发生了这么可怕的事情,我们也不会来打扰你休息的——”

“帮我们调查一下这阵子恶灵附身的事件吧,”冰川夫人打断了他,“所有的受害者都说是个叫Tzina的人干的。”

很明显,这么简单粗暴的总结冒犯到了愚人:“你不应当浓缩如此精彩的故事。我的雷暴实验呢?我可打算演讲一通呢!”

“咱现在赶时间,”冰川夫人回怼,“可拉倒吧,我的猛犸象被那你没完没了的破实验浇了个湿透。”

“那位战士大师说的对,”魟鱼国王说道,“时间宝贵。你能帮助我们吗?”

你点了点头,他挥挥手便开启了一个传送阵,一间水下的屋子展露于眼前。“和我一起游往拖拉城,前往我的图书馆看看能不能从文献里找到线索。”看到你一脸懵,他解释说:“别担心,早在拖拉城下沉之前,书卷就附过魔了。那些书不会被水给弄糊。”他挤了挤眼:“不像冰川夫人的猛犸象。”

“魟鱼,我听见你在背后说我坏话了。”

你跟在法师大师身后潜下水底,双腿神奇地变成了鱼鳍。虽然你的身躯灵活轻快,但看到成千上万的书架之后,你的心不由得沉了下去。趁早开工为妙……", + "questLostMasterclasser1Notes": "@beffymaroo 和@Lemoness 突然把你叫到习惯大厅。当你到达,惊讶地发现昏暗的晨光中,Habitica的4位职业大师已在等待。即使是“快乐收获者”也挂着一副严峻的表情。

“哦豁,你来了,”愚人说。“要不是真的发生了这么可怕的事情,我们也不会来打扰你休息的——”

“帮我们调查一下这阵子恶灵附身的事件吧,”冰川夫人打断了他,“所有的受害者都说是个叫Tzina的人干的。”

很明显,这么简单粗暴的总结冒犯到了愚人:“你不应当浓缩如此精彩的故事。我的雷暴实验呢?我可打算演讲一通呢!”

“咱现在赶时间,”冰川夫人回怼,“可拉倒吧,我的猛犸象被那你没完没了的破实验浇了个湿透。”

“那位战士大师说的对,”魟鱼国王说道,“时间宝贵。你能帮助我们吗?”

你点了点头,他挥挥手便开启了一个传送阵,一间水下的屋子展露于眼前。“和我一起游往拖拉城,前往我的图书馆看看能不能从文献里找到线索。”看到你一脸懵,他解释说:“别担心,早在拖拉城下沉之前,书卷就附过魔了。那些书不会被水给弄糊。”他挤了挤眼:“不像冰川夫人的猛犸象。”

“魟鱼,我听见你在背后说我坏话了。”

你跟在法师大师身后潜下水底,双腿神奇地变成了鱼鳍。虽然你的身躯灵活轻快,但看到成千上万的书架之后,你的心不由得沉了下去。趁早开工为妙……", "questLostMasterclasser1Completion": "连续翻阅了几小时,你们仍然毫无头绪。

“这简直是不可能完成的任务,我们连一点相关的内容都找不到,”图书管理员@Tuqjoi说道,助手@stefalupagus挫败地点了点头。

魟鱼国王眯了眯眼。“不可能……”他说。“有意为之。”他手上的水泛起微光,几本书抖动起来。“有什么东西在隐藏信息,”他说。“不是静态咒语,而是某种拥有自己意志的东西。某种……有生命力的东西。”他从桌子边游开。“快乐收获者必须知道这件事。拿好上路的饭。”", "questLostMasterclasser1CollectAncientTomes": "古籍", "questLostMasterclasser1CollectForbiddenTomes": "禁书", @@ -768,7 +768,7 @@ "questGiraffeBoss": "“装备长颈鹿”", "questGiraffeDropGiraffeEgg": "长颈鹿(宠物蛋)", "questDogUnlockText": "在商店中解锁狗宠物蛋的购买许可。", - "questGiraffeText": "武装长颈鹿", + "questGiraffeText": "装备长颈鹿", "questGiraffeUnlockText": "在市场可以购买长颈鹿宠物蛋了。", "questChameleonUnlockText": "可以从商店购买变色龙宠物蛋了", "questGiraffeCompletion": "在帮“装备长颈鹿”简单整理了他的收藏后,你们俩都感觉元气满满!

他抓起吉他和一本入门练习曲谱,随手拨弄了几下琴弦。“哪怕只是往正确的方向迈出一小步,感觉都很棒!谢啦伙计!这些送你——听说你也是个宠物控?这几个小家伙肯定能让你家更热闹!”", @@ -835,7 +835,7 @@ "questCrabBoss": "摸鱼的螃蟹", "questCrabRageTitle": "分心的摸鱼", "questCrabRageDescription": "当你未完成每日任务时,此进度条会开始填充。当进度条填满后,摸鱼的螃蟹会扣除你队伍的部分魔法值!", - "questCrabRageEffect": "摸鱼的螃蟹会用装饰来分散你的注意力,减慢你的挖掘速度,并消耗你的部分魔力。队伍的魔法值减少了!", + "questCrabRageEffect": "摸鱼的螃蟹用装饰分散了你的注意力,拖慢你的挖掘工作,并消耗你的部分魔力。队伍的魔法值减少了!", "questCrabDropCrabEgg": "螃蟹(宠物蛋)", "questCrabUnlockText": "解锁可在商店里购买的螃蟹蛋。", "questChameleonCompletion": "经过几轮欢快的互动,变色龙精准切换出你指定的每一道彩虹的颜色。

“哇哦——”他说,“共同挑战以及把这作为一种游戏真的能帮助我专注!这些奖励你值得拥有!等这些小家伙们破壳后,记得教它们怎样玩转彩虹色彩的变换!”", diff --git a/website/common/locales/zh/settings.json b/website/common/locales/zh/settings.json index c6878e2f68..0a83e0ef72 100644 --- a/website/common/locales/zh/settings.json +++ b/website/common/locales/zh/settings.json @@ -55,7 +55,6 @@ "APIToken": "API令牌(这相当于密码——见上文警告!)", "showAPIToken": "显示API令牌", "hideAPIToken": "隐藏API令牌", - "APITokenWarning": "如果您需要一个新的API令牌(如果您不小心泄露了它),请发送电子邮件至 <%= hrefTechAssistanceEmail %> 并注明您的用户 ID 和当前令牌。重置令牌后,您需要重新登录网站和移动应用程序以及向您使用的任何其他Habitica工具提供新令牌以重新授权。", "thirdPartyApps": "第三方应用", "resetDo": "是,重置我的账号!", "resetComplete": "重置完成!", @@ -117,7 +116,7 @@ "generate": "生成", "getCodes": "获取代码", "webhooks": "Webhook", - "webhooksInfo": "Webhook为开发人员提供了一种在执行特定操作时接收通知的方式,例如评分或更新任务,或在群组中发送消息。通过创建webhook,你将能够得知Habitica的变化,并构建适应这些更改的应用程序。

有关webhook的更多信息和示例,请参阅API Docs页面", + "webhooksInfo": "Webhook为开发人员提供了一种在执行特定操作时接收通知的方式,例如评分或更新任务,或在群组中发送消息。通过创建webhook,你将能够监听Habitica的变化,并构建响应这些变化的应用程序。

有关webhook的更多信息和示例,请访问我们的API 文档。", "enabled": "已启用", "webhookURL": "Webhook链接", "invalidUrl": "无效的url", @@ -190,7 +189,7 @@ "transaction_buy_gold": "用金币购买", "gemCap": "宝石上限", "nextHourglass": "下次神秘沙漏交付", - "nextHourglassDescription": "订阅者会在每个月的前三天\n获得神秘沙漏。", + "nextHourglassDescription": "订阅者会在每个月的前2天获得1个神秘沙漏、1套神秘装备套装,以及重置市场中可购买的宝石数量。", "dayStartAdjustment": "调整每日起始时间", "transaction_change_class": "职业变更", "passwordSuccess": "密码更改成功", @@ -233,7 +232,7 @@ "resetDetail4": "你将失去除了订阅者神秘物品和免费纪念物品外的所有装备。你可以重新购买被删除的物品,包括所有限定版装备(重新购买职业专属装备需要对应的职业)。", "APICopied": "API 令牌已复制到剪贴板。", "APITokenTitle": "API 令牌", - "APITokenDisclaimer": "您的API令牌就像您的密码,请勿公开分享。 您偶尔可能会被要求提供您的用户ID,但请勿将您的API令牌发布在其他人可以看到的地方,包括Github。

注:如果您需要一个新的API令牌(如果您不小心泄露了它),请发送电子邮件至admin@habitica.com,并注明您的用户ID和当前令牌。重置令牌后,您需要重新登录网站和移动应用程序以及向您使用的任何其他Habitica工具提供新令牌以重新授权。", + "APITokenDisclaimer": "您的API令牌就像您的密码,请勿公开分享。 您偶尔可能会被要求提供您的用户ID,但请勿将您的API令牌发布在其他人可以看到的地方,包括Github。

如果您需要一个新的API令牌(如果您不小心泄露了它),您可通过修改密码进行重置。重置令牌后,您需要重新登录使用Habitica的设备,以及向您使用的第三方工具提供新令牌以重新授权。", "loginMethods": "登录方式", "showStreakModal": "取得连击成就时", "baileyAnnouncement": "Bailey的最新公告", @@ -242,7 +241,7 @@ "addWebhook": "添加webhook", "changeEmailDisclaimer": "这是您用来登录Habitica以及接收通知的电子邮件地址。", "changeDisplayNameDisclaimer": "这是您的角色在Habitica中显示的名称。", - "changePasswordDisclaimer": "密码必须大于等于8个字符。我们建议您使用没有在其他地方使用过的强密码。", + "changePasswordDisclaimer": "密码必须大于等于8个字符。变更密码将会在所有设备和第三方工具中登出您的账户。", "dateFormatDisclaimer": "调整Habitica中的日期格式。", "enableAudio": "开启音效", "playDemoAudio": "试听", diff --git a/website/common/locales/zh/subscriber.json b/website/common/locales/zh/subscriber.json index e43faf13e9..760237c8f1 100644 --- a/website/common/locales/zh/subscriber.json +++ b/website/common/locales/zh/subscriber.json @@ -21,7 +21,7 @@ "subGemName": "订阅者宝石", "maxBuyGems": "你已购买了本月的所有宝石。更多宝石将在每月的前三天上架。感谢你的订阅!", "timeTravelers": "时空旅行者", - "timeTravelersPopoverNoSubMobile": "看来你需要一个神秘沙漏才能打开时空之门,召唤神秘的时空旅行者。", + "timeTravelersPopoverNoSubMobile": "订阅用户每月会收到一个稀有的神秘沙漏,可以使用这个沙漏在时空旅行者商店进行购物!", "timeTravelersPopover": "你的神秘沙漏打开了我们的时空之门!选择你希望我们从过去或未来获取的东西。", "mysterySetNotFound": "未找到神秘套装,或已拥有该套装。", "mysteryItemIsEmpty": "神秘物品已空", @@ -121,10 +121,10 @@ "gemBenefit3": "掉落宠物蛋的精彩任务链。", "gemBenefit4": "重置角色属性点数及更改角色职业。", "subscriptionBenefit1": "最多可用金币购买50颗宝石,在市场上购买副本,自定义装扮,宠物以及更多其他好物!", - "subscriptionBenefit3": "在Habitica发现更多物品,每日享受双倍物品掉落上限。", - "subscriptionBenefit4": "每月为你提供独一无二的装备,装饰你的头像。", - "subscriptionBenefit5": "首次订阅可获得皇家紫色鹿角兔宠物。", - "subscriptionBenefit6": "获得可以在时空旅行者商店购买物品的神秘沙漏!", + "subscriptionBenefit3": "在Habitica发现更多物品,每日享受双倍物品掉落上限!", + "subscriptionBenefit4": "穿上最新的独特装备 。立即订阅 ,即可获得<%=月%> 的<%= currentMysterySetName%>!", + "subscriptionBenefit5": "现在订阅即可获得专属皇家紫色鹿角兔宠物!", + "subscriptionBenefit6": "每月可获得1个神秘沙漏,在时空旅行者商店使用,不要错过任何物品 !", "purchaseAll": "购买套装", "gemsRemaining": "剩余", "notEnoughGemsToBuy": "本月可购买宝石已达上限。每月前3天会刷新库存。", @@ -170,7 +170,7 @@ "usuallyGems": "通常<%= originalGems %>", "supportHabitica": "支持Habitica", "cancelSubInfoApple": "请按照 Apple官方说明取消订阅,或查看订阅的终止日期(如果你已经取消订阅)。本页面无法显示你的订阅是否已取消。", - "cancelSubInfoGoogle": "要取消订阅或查看订阅终止日期,请使用 Google Play 商店。取消后,任何剩余月份的订阅点数都将计入您的终止日期。", + "cancelSubInfoGoogle": "如需取消订阅或者查询订阅终止日期,请使用 Google Play 商店。 取消订阅后,您已付费但尚未使用的订阅时长将自动延长您的订阅到期时间。", "organization": "组织", "mysterySet202010": "迷人怪蝠套装", "dropCapSubs": "Habitica的订阅者每日可以获得双倍的掉落物品,而且每月还能获得神秘物品!", @@ -210,8 +210,8 @@ "mysterySet202211": "电术士套装", "mysterySet202212": "冰川守护者套装", "mysterySet202301": "英勇狡狐套装", - "haveNonRecurringSub": "您有一个临时的赠送订阅。", - "switchToRecurring": "是否转为定期订阅?", + "haveNonRecurringSub": "您有一个赠品订阅,不会自动续订。", + "switchToRecurring": "是否转为自动续订订阅?", "subscriptionCreditConversion": "现在开始新的订阅,会结存当前剩余的订阅。结存的订阅将在定期订阅取消后生效。", "continueGiftSubBenefits": "想要继续享受福利吗?您可以在获赠的订阅到期之前开始新的订阅,以继续享受您的福利。", "mysterySet202302": "骗子虎斑猫套装", @@ -244,22 +244,27 @@ "monthlyGemsLabel": "每月宝石", "popular": "热门", "mysterySet202504": "深奥雪怪套装", - "unlockNGems": "在市场中每月解锁购买 <%= count %> 宝石", + "unlockNGems": "每月解锁购买 <%= count %> 宝石资格", "mysterySet202503": "翡翠巨像套装", "maxGemCap": "即刻解锁宝石容量上限", - "earn2Gems": "订阅期间每月+2宝石", + "earn2Gems": "订阅期间每月获得+2 宝石", "mysterySet202502": "衷心小丑套装", "subscribeTo": "订阅", "resubscribeToPickUp": "重新订阅即可继续您的旅程!", - "recurringMonthly": "每月自动续费", - "recurringNMonthly": "每 <%= length %>月自动续费", + "recurringMonthly": "每月重复", + "recurringNMonthly": "每<%= length %> 月重复", "giftSubscriptionLeadText": "请在下方选择要赠送的订阅套餐!本次购买不会自动续订。", "oneMonthGift": "单月订阅", "nMonthsGift": "<%= months %> 月订阅", "subscribeAgainContinueHourglasses": "请续订以继续领取神秘沙漏", - "immediate12Hourglasses": "开启首次12个月的订阅,即刻获得12个神秘沙漏!", - "subscriptionChangeAnnouncement": "订阅福利及发放方式将于11月19日调整。 <%= linkStart %>点击此处了解详情。
", + "immediate12Hourglasses": "首次12个月订阅后,立即获得12个神秘沙漏!", + "subscriptionChangeAnnouncement": "订阅额外奖励及其发放方式将于11月19日调整。 <%= linkStart %>点击此处了解详情。", "selectPayment": "请选择付费方式", "unlockNGemsGift": "将每月在商店中解锁 <%= count %> 颗宝石", - "earn2GemsGift": "每月将获得订阅的2颗宝石" + "earn2GemsGift": "每月将获得订阅的2颗宝石", + "maxGemCapGift": "他们将拥有最高的 宝石上限 ", + "mysterySet202505": "翱翔燕尾服套装", + "mysterySet202506": "太阳辉光套装", + "mysterySet202507": "活力滑板套装", + "mysterySet202508": "辉光双刀套装" } diff --git a/website/common/locales/zh_TW/backgrounds.json b/website/common/locales/zh_TW/backgrounds.json index 4e0c81b362..4925f90493 100644 --- a/website/common/locales/zh_TW/backgrounds.json +++ b/website/common/locales/zh_TW/backgrounds.json @@ -772,5 +772,30 @@ "backgrounds042023": "第107組:2023年4月發布", "backgroundLeafyTreeTunnelNotes": "漫步在落葉隧道。", "backgroundLeafyTreeTunnelText": "落葉隧道", - "backgroundSpringtimeShowerText": "春日沐浴" + "backgroundSpringtimeShowerText": "春日沐浴", + "backgroundUnderWisteriaText": "紫藤花下", + "backgroundUnderWisteriaNotes": "在紫藤花下休息。", + "backgroundSpringtimeShowerNotes": "欣賞花香四溢的春日沐浴。", + "backgrounds052023": "第108組:2023年5月發佈", + "backgroundInAPaintingText": "在畫中", + "backgroundInAPaintingNotes": "在繪畫中享受創意追求。", + "backgroundFlyingOverHedgeMazeText": "飛越樹籬迷宮", + "backgroundFlyingOverHedgeMazeNotes": "在飛越樹籬迷宮時驚嘆不已。", + "backgroundCretaceousForestText": "白堊紀森林", + "backgroundCretaceousForestNotes": "欣賞白堊紀森林中的古老的綠色植物。", + "backgrounds062023": "第109組:2023年6月發布", + "backgroundInAnAquariumText": "在水族箱中", + "backgroundInAnAquariumNotes": "在水族箱中與魚兒一起平靜地游泳。", + "backgrounds082023": "第111組:2023年8月發布", + "backgroundInsideAdventurersHideoutText": "冒險家的藏身之處", + "backgroundInsideAdventurersHideoutNotes": "在冒險家的藏身之處規劃一次旅程。", + "backgroundCraterLakeText": "火山口湖", + "backgroundCraterLakeNotes": "欣賞一個可愛的火山口湖。", + "backgrounds072023": "第110組:2023年7月發布", + "backgroundOnAPaddlewheelBoatText": "在明輪輪船上", + "backgroundOnAPaddlewheelBoatNotes": "乘坐明輪輪船。", + "backgroundColorfulCoralText": "多彩的珊瑚", + "backgroundColorfulCoralNotes": "在彩色珊瑚間潛水。", + "backgroundBoardwalkIntoSunsetText": "夕陽下的木板路", + "backgroundBoardwalkIntoSunsetNotes": "在夕陽下的木板路上漫步。" } diff --git a/website/common/locales/zh_TW/communityguidelines.json b/website/common/locales/zh_TW/communityguidelines.json index b5ae379eef..cbaf64112e 100644 --- a/website/common/locales/zh_TW/communityguidelines.json +++ b/website/common/locales/zh_TW/communityguidelines.json @@ -82,5 +82,12 @@ "commGuideList01A": "這些條約對所有空間適用,包括私人工會,隊伍聊天和信息。", "commGuideList02M": "不要在群組計劃裡索要或乞求寶石,訂閱或會員。這在酒館,公共或私人的聊天空間和在私人訊息中都不被允許。如果你收到索要付費物品的信息,請舉報該消息。重複或嚴重的寶石或訂閱乞求,尤其在警告之後,可能會導致賬號封禁。", "commGuideList05H": "嚴重或重複地常識詐騙或威脅其他玩家贈與付費物品", - "commGuideList02N": "舉報違反這些指南或服務條款的帖子。我們會盡快處理。您也可以通過 admin@habitica.com 通知工作人員,但舉報是獲得幫助的最快方式。" + "commGuideList02N": "舉報違反這些指南或服務條款的帖子。我們會盡快處理。您也可以通過 admin@habitica.com 通知工作人員,但舉報是獲得幫助的最快方式。", + "commGuideList02H": "所有顯示名稱和 @用戶名 必須遵守服務條款。要更改您的顯示名稱和/或 @用戶名:手機端,請前往菜單 > 設定 >帳戶。網頁版,請從頂部導航欄的用戶圖標進入設定。", + "commGuideList02I": "在創建挑戰時請記住挑戰名稱應該適合所有場合,因為它們將顯示在獲勝者的公共檔案中。如果收到報告,我們可能不得不編輯其檔案中的記錄。", + "commGuideList02O": "为了满足成员的舒适度和偏好,各群組可以制定自己的聊天规则. 不过,管理员无法在这些私密聊天室中强制执行聊天规则,除非存在违反服务条款的行为,包括骚扰。如果您的群组中有成员造成问题,我们建议群组管理员将其移除。", + "commGuideList02P": "我們不鼓励发送未经允許的私人信息. If you receive an unwanted message that makes you uncomfortable or that breaks these Guidelines or the Terms of Service, please block the sender and report it to bring it to Staff attention.如果您收到使您感到不舒服或违反这些准则或服务条款的信息,请拉黑发件人并报告给工作人员引起注意。", + "commGuideList02Q": "切勿嘗試規避封鎖功能. 若對方已封鎖您的私訊功能,請勿透過其他管道聯繫對方要求解封。", + "commGuideList09E": "永久喪失私訊發送權限與隊伍成員搜索列表顯示資格", + "commGuideList10G": "暫停私訊發送與隊伍成員搜索顯示權限" } diff --git a/website/common/locales/zh_TW/content.json b/website/common/locales/zh_TW/content.json index daf9cc55d8..7c5db4df4c 100644 --- a/website/common/locales/zh_TW/content.json +++ b/website/common/locales/zh_TW/content.json @@ -372,5 +372,23 @@ "hatchingPotionOnyx": "縞瑪瑙", "hatchingPotionPorcelain": "瓷器", "hatchingPotionVirtualPet": "電子寵物", - "hatchingPotionPinkMarble": "粉色大理石" + "hatchingPotionPinkMarble": "粉色大理石", + "questEggRaccoonText": "浣熊", + "questEggRaccoonMountText": "浣熊", + "questEggGiraffeText": "長頸鹿", + "questEggGiraffeMountText": "長頸鹿", + "questEggGiraffeAdjective": "一個高聳的", + "questEggChameleonText": "變色龍", + "questEggChameleonMountText": "變色龍", + "questEggChameleonAdjective": "一個混亂的", + "questEggCrabText": "螃蟹", + "questEggCrabMountText": "螃蟹", + "questEggDogMountText": "狗", + "questEggDogText": "小狗", + "questEggDogAdjective": "友善的", + "questEggCatText": "小貓", + "questEggCatMountText": "貓", + "hatchingPotionRoseGold": "玫瑰金", + "questEggOtterMountText": "水獺", + "hatchingPotionTeaShop": "茶館" } diff --git a/website/common/locales/zh_TW/faq.json b/website/common/locales/zh_TW/faq.json index 461ac4eedd..62137440b9 100644 --- a/website/common/locales/zh_TW/faq.json +++ b/website/common/locales/zh_TW/faq.json @@ -5,7 +5,7 @@ "webFaqStillNeedHelp": "如果您有任何疑問,但沒出現在以上列表中或是 [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ)中,請至 [Habitica Help guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)裡詢問,我們相當樂意協助。", "commonQuestions": "常見問題", "faqQuestion25": "這些不同的任務類型是什麼?", - "webFaqAnswer25": "為滿足你的需要,Habitica有三種不同的任務類型:習慣、每日任務和待辦事項。\n\n習慣可以用於你希望每天做多次的事情,或是一些不確定的計劃。 它們可以被選擇完成或完不成,選擇完成會帶來金幣和經驗的獎勵,而另一種則會對你造成生命值傷害。\n\n每日任務是你希望更嚴謹地按計畫進行的重複任務,例如每天一次、每週三次或是每月四次。 錯過完成每日任務會導致你受到生命值傷害,但這些任務越艱難,帶來的獎勵就越豐厚!\n\n待辦事項是一次性任務,當你完成時會提供獎勵。 待辦事項可以設定截止時間,但你不會因為錯過時間而失去生命值。\n\n選擇最適合你想要完成的任務類型吧!", + "webFaqAnswer25": "習慣可以用於你希望每天做多次的事情,或是一些不確定的計劃。 它們可以被選擇完成或完不成,選擇完成會帶來金幣和經驗的獎勵,而另一種則會對你造成生命值傷害。\n\n每日任務是你希望更嚴謹地按計畫進行的重複任務,例如每天一次、每週三次或是每月四次。 錯過完成每日任務會導致你受到生命值傷害,但這些任務越艱難,帶來的獎勵就越豐厚!\n\n待辦事項是一次性任務,當你完成時會提供獎勵。 待辦事項可以設定截止時間,但你不會因為錯過時間而失去生命值。\n\n選擇最適合你想要完成的任務類型吧!", "faqQuestion26": "什麼是範例任務?", "contentAnswer62": "情人節魔術孵化藥水現在已納入每月的時間表中。", "contentFaqPara3": "如果您有任何上述答案未涵蓋的問題,您可以隨時透過 <%= mailto %> 聯絡我們的團隊!我們對於新內容發行計畫感到非常興奮,並期待未來有更多的計畫能幫助所有玩家讓 Habitica 變得更好。", @@ -31,14 +31,14 @@ "faqQuestion27": "為什麼任務會改變顏色?", "faqQuestion28": "如果我需要休息,可以暫停每日任務嗎?", "faqQuestion29": "如何恢復 HP(生命值)?", - "faqQuestion30": "HP (生命值)用盡時怎麼辦?", - "faqQuestion32": "何時可以選擇課程?", + "faqQuestion30": "HP(生命值)歸零時會發生什麼事?", + "faqQuestion32": "要怎麼選擇職業?", "faqQuestion33": "等級 10 級後出現的藍色長條是什麼?", "faqQuestion34": "我的寵物喜歡什麼樣的食物?", "faqQuestion35": "當我餵了我的寵物後他就消失了!發生了什麼事?", "faqQuestion36": "如何變更我的角色頭像外觀?", "faqQuestion37": "為什麼我的角色頭像上沒有顯示我的裝備?", - "faqQuestion38": "為什麼不能購買某些商品?", + "faqQuestion38": "為什麼我不能購買某些商品?", "faqQuestion39": "我在哪裡可以取得更多裝備?", "faqQuestion40": "什麼是寶石?該如何獲得?", "faqQuestion43": "如何進行任務?", @@ -63,5 +63,39 @@ "contactAdmin": "聯絡人admin@habitica.com", "sunsetFaqHeader12": "公會銀行寶石會如何?", "sunsetFaqPara21": "公會銀行中的寶石將在 8 月 8 日公會服務結束時退還給公會領袖。", - "sunsetFaqHeader2": "為什麼酒館和公會服務要結束?" + "sunsetFaqHeader2": "為什麼酒館和公會服務要結束?", + "webFaqAnswer26": "正向習慣(你想要培養的行為;應該有「+」按鈕)\n\n * 吃維他命\n * 使用牙線\n * 學習一小時\n\n負向習慣(你想要限制或避免的行為;應該有「-」按鈕)\n\n * 抽菸\n * 無止盡滑手機\n * 咬指甲\n\n雙向習慣(同時包含正面與負面選項的行為;應有「+」與「-」按鈕)\n\n * 喝水 vs. 喝汽水\n * 學習 vs. 拖延\n\n每日任務範例(你想定期執行的事情)\n * 洗碗\n * 澆花\n * 30 分鐘的運動\n\n待辦事項範例(只需要完成一次的事情)\n\n * 預約時間\n * 整理衣櫃\n * 完成報告", + "webFaqAnswer27": "任務的顏色能夠一目了然地看出其價值。所有任務的初始顏色都是黃色(代表中性)、藍色(代表較好)、紅色(代表較差)。以下是決定每種任務類型價值的方式:\n\n習慣的顏色會根據你是按下「+」或「-」按鈕而變藍或變紅。如果沒完成某個正向習慣和負向習慣,久了它們就會逐漸變成黃色;雙向習慣的顏色則只會根據你按下的按鈕而改變。\n\n每日任務的顏色會根據完成頻率而變化,完成的每日任務顏色會變藍,未完成的每日任務顏色會變紅。\n\n待辦事項的顏色會隨著未完成時間的延長而逐漸變紅。\n\n任務的紅色愈深,完成它獲得的金幣和經驗值就愈多,所以即使是最艱鉅的任務,也一定要挑戰!", + "webFaqAnswer28": "當然可以! 在「設定」中有個「暫停傷害」按鈕,可以防止你因為沒完成每日任務而損失生命值。如果你正在度假、需要休息,或因為其他原因需要暫停一下,這個功能可以幫得上忙。如果你正在打某個副本,你自己的待結算進度會暫停,但你仍然會因隊友沒完成每日任務而受到傷害。\n\n如果要暫停特定的每日任務,你可以編輯排程,改為「每 0 天到期一次」,直到你準備好重新開始為止。", + "webFaqAnswer29": "你可以從「獎勵」欄花費 25 金幣購買「治療藥水」,即可恢復 15 點生命值。另外,每次升級後都會重新滿血!", + "webFaqAnswer30": "如果 HP(生命值)歸零,你就會降級一等、失去所有金幣,以及一件可以重新購買的裝備。", + "webFaqAnswer32": "所有玩家的初始職業都是「戰士」,達到等級 10 後,你可以選擇新職業或繼續當戰士。\n\n每種職業都有不同的裝備和技能,如果你不想選擇職業,可以選擇「退出」。如果您選擇退出,您可以隨時在「設定」中啟用「職業系統」。\n\n如果你在 10 級後想要變更職業,可以使用重生寶珠。等級 50 時可以在市場花費 6 顆寶石購買重生寶珠,等級 100 級時可以免費取得。\n\n或者,你可以隨時在「設定」中花費 3 顆寶石變更職業。這不會像重生寶珠那樣重新設定你的等級,但可以讓你根據新職業重新分配升級過程中累積的屬性點。", + "faqQuestion31": "為什麼我按下的明明不是負向任務,卻還是被扣了 HP(生命值)?", + "webFaqAnswer31": "如果你完成某個任務後卻莫名損失了生命值,那是因為伺服器在同步其他平台上的變更的緣故。舉例來說,如果你在手機應用程式上使用了金幣、魔法值,或損失了生命值,然後在網頁版上完成某個任務,伺服器就會確認同步所有的變更。", + "webFaqAnswer33": "解鎖職業系統後,你同時也解鎖了「技能」,這需要消耗魔法值才能施放。魔法值由你的「智力」屬性決定,可透過技能和裝備進行調整。", + "webFaqAnswer34": "寵物喜歡跟自己同個顏色的食物。普通寵物除外,但所有普通寵物都喜歡一樣的食物。每種寵物喜歡的特定食物如下:\n\n* 普通寵物喜歡肉\n* 灰白色寵物喜歡牛奶\n* 沙漠寵物喜歡馬鈴薯\n* 赤紅色寵物喜歡草莓\n* 暗影寵物喜歡巧克力\n* 骸骨寵物喜歡魚\n* 殭屍寵物喜歡腐肉\n* 粉色棉花糖寵物喜歡粉色棉花糖\n* 藍色棉花糖寵物喜歡藍色棉花糖\n* 金黃色寵物喜歡蜂蜜", + "webFaqAnswer67": "職業代表角色所能扮演的不同職能。每個職業在你升級的過程中會提供獨特的技能與加成。這些技能可以強化你與任務互動的方式,或幫助你們的隊伍完成副本。\n\n你所選擇的職業也會決定你能在獎勵、市場與季節限定商店中購買的裝備種類。\n\n以下是每個職業的簡介,以幫助你選擇最適合你遊玩風格的職業:\n#### **戰士**\n* 戰士能對 Boss 造成大量傷害,並且在完成任務時有較高的機率觸發暴擊,獲得額外的經驗值與金幣。\n* 主屬性是「力量」,能提升所造成的傷害。\n* 副屬性是「體質」,能減少所承受的傷害。\n* 戰士的技能可以增加隊友的體質與力量。\n* 如果你喜歡 Boss 戰,又希望在偶爾錯過任務時能獲得一些保護,戰士會是不錯的選擇。\n#### **醫師**\n* 醫師防禦力高,能為自己與隊友進行治療。\n* 主屬性是「體質」,能提升治療效果並減少所承受的傷害。\n* 副屬性是「智力」,能提升魔法值與經驗獲得量。\n* 醫師的技能可以淡化任務的紅色程度,並增加隊友的體質。\n* 如果你經常錯過任務、需要治癒自己或隊友,或想要快速升級,醫師會很適合你。\n#### **法師**\n* 法師升級速度快、擁有大量魔法值,並能在副本中對 Boss 造成傷害。\n* 主屬性是「智力」,能提升魔法值與經驗獲得量。\n* 副屬性是「感知」,能提升金幣與道具掉落率。\n* 法師的技能可以凍結任務的連擊數防止中斷,為隊友恢復法力,並增加隊友的智力。\n* 如果你喜歡快速升級或參與 Boss 戰,法師會是你的好選擇。\n#### **盜賊**\n* 盜賊在完成任務時擁有最高的道具掉落與金幣獲得率,並且暴擊的機率也很高,能獲得更多經驗值與金幣。\n* 主屬性是「感知」,能提升金幣與道具掉落率。\n* 副屬性是「力量」,能提升所造成的傷害。\n* 盜賊的技能可以讓你躲避未完成每日任務所帶來的懲罰、竊取金幣,並強化隊友的感知。\n* 如果你獲取獎勵非常有動力,那麼盜賊將會非常適合你。", + "faqQuestion67": "Habitica 中有哪些職業?", + "webFaqAnswer35": "一旦你餵養寵物到足以將其升級為坐騎,你就需要再次孵化該類型的寵物,才能在你的馬廄中同時擁有牠。\n\n在行動裝置 App 上查看坐騎的方法:\n\n * 從選單中選擇「寵物和坐騎」,然後切換到「坐騎」分頁\n\n在網站上查看坐騎的方法:\n\n * 從「背包」選單中選擇「寵物與坐騎」,然後向下捲動到「坐騎」區塊", + "webFaqAnswer36": "你可以用無數種方式來自訂你的 Habitica 角色外觀!你可以變更角色的身形、髮型與髮色、膚色,或是加入眼鏡或輔具,只要從選單中選擇「編輯角色」即可。\n\n在行動裝置 App 上自訂角色的方法:\n * 從選單中選擇「自定義頭像」\n\n在網站上自訂虛擬角色的方法:\n * 從導覽列的使用者選單中選擇「編輯角色」", + "webFaqAnswer37": "請檢查穿上裝扮選項是否已啟用。如果你的角色正在穿著服裝,顯示的將會是那套裝扮,而不是你的戰鬥裝備。\n\n在行動裝置 App 上切換裝扮:\n * 從選單中選擇「裝備」,即可找到穿上裝扮的選項\n\n在網站上切換裝扮:\n * 從你的「背包」中選擇「裝備」,並在裝備欄的「裝扮」分頁中找到使用服裝選項", + "webFaqAnswer38": "Habitica的新玩家只能購買戰士職業的裝備。玩家需要按照順序解鎖服裝。\n\n大多數的裝備屬於職業固有的,玩家只能購買當前職業的裝備。", + "webFaqAnswer39": "如果想要獲取更多的裝備,可以加入Habitica的付費會員,就有機會獲取魔法衣櫥、或者Habitica祭典中的一件裝備。\n\nHabitica的會員每月可以獲取專屬裝備和神秘沙漏,神秘沙漏可用於在時間旅行者商店購買過去上架的裝備。\n\n魔法衣櫥裡有超過350套的裝備!只要100金幣就能獲得稀有套裝、用於把寵物培養成坐騎的食物,或許也能得到升級的大量經驗!\n\n在季節祭典期間,可以使用金幣購入新的裝備套裝和以前祭典的套裝。", + "webFaqAnswer40": "寶石是Habitica的app裡的付費貨幣,可以用來購買裝備、虛擬形象或背景。如果您是Habitica會員,可以選擇金幣套裝購買寶石。您也可以通過贏得挑戰來獲得寶石。", + "faqQuestion41": "什麼是神祕沙漏,以及我該如何取得它?", + "webFaqAnswer41": "神秘砂漏是Habitica付費訂閱會員限定的貨幣,用於時間旅行者商店。在每個有訂閱獎勵的月份開始時,訂閱者會收到包含神秘沙漏在內的一系列物品。如果您對時間旅行者商店中特別的背景、寵物、任務與道具有興趣的話,請務必查看我們的訂閱選項!", + "faqQuestion42": "我可以做些什麼來提高執行力?", + "webFaqAnswer42": "激勵自己去完成各種挑戰任務的最好的方法之一就是——去加入一個隊伍!和其他的Habitica玩家一起接收任務,贏得寵物和裝備,收穫隊伍成員技能加成,激發你的動力。\n\n另一種增加動力的方法是加入一個挑戰。挑戰會自動添加在您的任務和目標欄!挑戰也會添加一些競賽元素,可以給您動力去贏取寶石。這些挑戰既有Habitica官方創建的,也有其他玩家創建的。", + "webFaqAnswer43": "如果想開啟副本,你需要加入一個隊伍。隊伍可以獨自展開冒險,也可以邀請其他的Habitica玩家一起組隊!\n\n點擊“開啟副本”並從你的物品中選擇一個副本捲軸。像平常一樣完成你的任務就能作用於副本!如果你開啟的是打Boss的副本就能給怪物造成傷害,如果開啟的是收集副本就能找到相應的物品。所有打副本的結果將在第二天結算。\n\n當你給予boss足夠的傷害或者收集到足夠的物品後,就能完成副本攻略並收穫你的報酬!", + "webFaqAnswer44": "你需要離開挑戰或者等待挑戰被關閉才能刪除關聯的任務。紅色的喇叭圖標說明該挑戰已關閉,灰色的喇叭圖標說明挑戰還在進行中。\n\n在**Android**app中刪除挑戰任務需要:\n 1. 點擊任務所屬於的挑戰。\n 2. 點擊屏幕右上角的“刪除”按鈕。\n 3. 從任務欄中選擇並移除挑戰任務。\n\n在**iOS**app中刪除挑戰任務需要:\n 1. 通過喇叭圖標找到你希望刪除的挑戰任務。\n 2. 如果喇叭圖標是紅色的,點擊任務並選擇“刪除”按鈕\n 3. 如果喇叭圖標是灰色的,你需要找到該挑戰並離開挑戰來移除任務。\n\n在**網頁端**刪除挑戰任務需要:\n 1. 通過喇叭圖標找到你希望刪除的挑戰任務。\n 2. 如果喇叭圖標是紅色的,點擊並從你得任務欄中移除該任務。\n 3. 如果喇叭圖標是灰色的,你需要找到該挑戰並離開挑戰來移除任務。", + "webFaqAnswer45": "可以對其中一名隊伍成員使用季節限定的變身道具!你的形象將在次日從變身恢復。你也可以購買解毒劑(鹽、沙子、無花瓣或不透明藥水)來更快地移除變身形象。", + "webFaqAnswer46": "如果你遇到了報錯,請讓我們知道!\n\n在移動端報告報錯:\n * 從菜單進入,選擇支持並點擊“尋求幫助”,滾動菜單到“報告錯誤”\n\n在網頁端報告報錯:\n * 從幫助菜單進入,選擇“報告錯誤”", + "faqQuestion47": "我能查看有關我的任務和習慣完成情況的數據嗎?", + "webFaqAnswer47": "目前,Habitica沒有展示你的任務數據進度的功能,在Habitica的網頁端,你可以通過設置中的網站數據按鈕導出你的任務數據。", + "webFaqAnswer48": "是的,和隊伍一起!你可以建立自己的隊伍或者加入一個隊伍。和其他Habitica玩家一起參與副本,通過隊員技能得到增益加成來增強你打卡的動力。", + "faqQuestion49": "我該在哪裡找到隊伍去加入?", + "webFaqAnswer49": "如果你想要別人一起體驗Habitica但不認識其他玩家,搜索一個隊伍是最好的選擇!如果你已經知道某個已經在隊伍裡的玩家,你可以分享自己的@用戶名來獲取邀請。同樣,你也能創建一個新的隊伍,通過@用戶名或電郵地址來邀請別人。\n\n創建或搜索隊伍需要在導航欄選擇“隊伍”,然後選擇對應的選項。", + "faqQuestion50": "該怎麼搜索隊伍?", + "webFaqAnswer50": "在選擇“尋找隊伍”之後,你將被添加到想要加入隊伍的玩家清單中。隊長能夠看到這個清單並發送邀請。當你收到邀請,你就能在通知欄中選擇想要加入的隊伍!\n\n你也許會收到來自不同隊伍的多個邀請。但是,你只能成為其中一個隊伍的隊員。", + "parties": "隊伍" } diff --git a/website/common/locales/zh_TW/groups.json b/website/common/locales/zh_TW/groups.json index 69b727158e..89ded10f5c 100644 --- a/website/common/locales/zh_TW/groups.json +++ b/website/common/locales/zh_TW/groups.json @@ -427,5 +427,6 @@ "tavernDiscontinuedDetail": "由於許多因素,包括我們的玩家群與 Habitica 互動方式的變化,維護這些空間所需的資源與參與人數不成比例,從長遠來看無法持續。", "tavernDiscontinuedLinks": "閱讀更多關於「酒館與公會服務停用」的資訊,或返回首頁。", "chatSunsetWarning": "Habitica公會和酒館聊天將於 2023 年 8 月 8 日停止。點選此處閱讀更多關於這項變更的資訊。", - "sendTotal": "總計:" + "sendTotal": "總計:", + "messageCopiedToClipboard": "訊息已複製到剪貼板。" } diff --git a/website/common/locales/zh_TW/npc.json b/website/common/locales/zh_TW/npc.json index d043e15322..4de0a2c2dd 100644 --- a/website/common/locales/zh_TW/npc.json +++ b/website/common/locales/zh_TW/npc.json @@ -128,5 +128,8 @@ "limitedAvailabilityMinutes": "購買時間剩餘<%= minutes %>分鐘<%= seconds %>秒", "groupsPaymentSubBilling": "您的下一個續簽日期是<%= renewalDate %>。", "groupsPaymentAutoRenew": "該訂閱將自動續訂,直到您取消。如有需要,您可以在團隊計費選項卡中取消它。", - "helpSupportHabitica": "支持Habitica" + "helpSupportHabitica": "支持Habitica", + "customizationsShopText": "想要改變你的造型?你來對地方了!我們備有最時尚的款式適合這個季節。", + "notAvailable": "此項目無法使用。", + "sellItems": "販賣商品" } diff --git a/website/common/locales/zh_TW/settings.json b/website/common/locales/zh_TW/settings.json index 6489fcf052..7e9e13bc3f 100644 --- a/website/common/locales/zh_TW/settings.json +++ b/website/common/locales/zh_TW/settings.json @@ -55,7 +55,6 @@ "APIToken": "API Token(這相當於密碼——注意看上面的警告!)", "showAPIToken": "顯示API Token", "hideAPIToken": "隱藏API Token", - "APITokenWarning": "如果您需要一個新的API Token(例如:您不小心將它分享了出去),請傳送電子郵件到<%= hrefTechAssistanceEmail %>並註明您的使用者名稱及現在的API Token。當它被重置之後,您需要登出Habitica網頁及手機應用程式以重新授權,並且將新的API Token提供給所有您其他正在使用中的Habitica工具。", "thirdPartyApps": "第三方應用程式", "resetDo": "好,重置我的帳號!", "resetComplete": "重置完成!", @@ -177,5 +176,32 @@ "addPasswordAuth": "加密碼", "transactions": "交易", "hourglassTransactions": "神秘沙漏交易", - "generalSettings": "一般設定" + "generalSettings": "一般設定", + "siteData": "網站資料", + "taskSettings": "任務設定", + "loginMethods": "登入方法", + "character": "角色", + "siteLanguage": "網站語言", + "showLevelUpModal": "當升級時", + "showHatchPetModal": "當孵化寵物時", + "showRaisePetModal": "當你把寵物養成坐騎時", + "showStreakModal": "當達成連續紀錄成就時", + "baileyAnnouncement": "最新Bailey公告", + "view": "預覽", + "feedbackPlaceholder": "增加你的回饋", + "downloadCSV": "下載.csv檔", + "downloadAs": "下載為", + "yourUserData": "你的使用者資料", + "taskHistory": "任務紀錄", + "yourUserDataDisclaimer": "這裡可以下載你的任務紀錄和所有你的使用者資料。", + "confirmCancelChanges": "你確定嗎?你會遺失未儲存的變更", + "account": "帳號", + "useridCopied": "使用者ID已複製到剪貼板。", + "userIdTooltip": "使用者ID是一組特殊的號碼,在使用者加入Habitica時就已自動產生,跟使用者名稱差不多。但是,它不像使用者名稱可以更改。", + "resetTextLocal": "如果你完全確定要執行這個操作,請在下方的文字框中輸入你的密碼。", + "developerMode": "開發者模式", + "developerModeTooltip": "Habitica 提供了一個開發者模式,用來啟用與 Habitica API 互動的額外功能。", + "api": "API", + "currentPass": "目前密碼", + "resetDetail1": "你將失去你的等級、所有金幣和所有經驗值。" } diff --git a/website/common/locales/zh_TW/subscriber.json b/website/common/locales/zh_TW/subscriber.json index 74376859ca..acf2a4c8be 100644 --- a/website/common/locales/zh_TW/subscriber.json +++ b/website/common/locales/zh_TW/subscriber.json @@ -231,5 +231,21 @@ "selectPayment": "選擇付款方式", "giftSubscriptionLeadText": "請在下方選擇您想要贈送的訂閱!此購買不會自動續訂。", "mysterySet202411": "鬃毛鬥士套裝", - "mysterySet202307": "危險海怪套裝" + "mysterySet202307": "危險海怪套裝", + "mysterySet202308": "紫色主角套裝", + "mysterySet202306": "炫目彩虹套裝", + "mysterySet202309": "巨型彗星飛蛾套裝", + "mysterySet202305": "黃昏之龍套裝", + "mysterySet202304": "頭等茶壺套裝", + "mysterySet202403": "幸運傳奇套裝", + "mysterySet202402": "粉紅天堂套裝", + "subscribeTo": "訂閱", + "oneMonthGift": "為期一個月", + "nMonthsGift": "為期<%= months %>個月", + "unlockNGemsGift": "每個月他們在市場將解鎖<%= count %>寶石", + "unlockNGems": "每個月在市場解鎖 <%= count %>寶石", + "earn2Gems": "每個月訂閱會得到+2寶石", + "monthlyGemsLabel": "每月寶石", + "mysterySet202506": "陽光閃耀套裝", + "monthlyGems": "每月寶石:" } diff --git a/website/common/script/content/appearance/backgrounds.js b/website/common/script/content/appearance/backgrounds.js index 3034db2013..f2c89ead8b 100644 --- a/website/common/script/content/appearance/backgrounds.js +++ b/website/common/script/content/appearance/backgrounds.js @@ -662,6 +662,9 @@ const backgrounds = { backgrounds072025: { sirens_lair: { }, }, + backgrounds082025: { + sunny_street_with_shops: { }, + }, eventBackgrounds: { birthday_bash: { price: 0, diff --git a/website/common/script/content/constants/events.js b/website/common/script/content/constants/events.js index afed1efeb1..09ddf4eb80 100644 --- a/website/common/script/content/constants/events.js +++ b/website/common/script/content/constants/events.js @@ -83,8 +83,8 @@ export const REPEATING_EVENTS = { foodSeason: 'Cake', }, fallGemSale: { - start: new Date('1970-09-17T04:00-04:00'), - end: new Date('1970-09-24T23:59-04:00'), + start: new Date('1970-08-27T04:00-04:00'), + end: new Date('1970-09-03T23:59-04:00'), event: 'fall_extra_gems', gemsPromo, }, @@ -109,8 +109,8 @@ export const REPEATING_EVENTS = { foodSeason: 'Pie', }, giftOneGetOne: { - start: new Date('1970-12-17T04:00-05:00'), - end: new Date('1970-01-09T23:59-05:00'), + start: new Date('1970-12-18T04:00-05:00'), + end: new Date('1970-01-05T23:59-05:00'), promo: 'g1g1', }, }; diff --git a/website/common/script/content/constants/gifSprites.js b/website/common/script/content/constants/gifSprites.js index cd4b6756c1..726df62367 100644 --- a/website/common/script/content/constants/gifSprites.js +++ b/website/common/script/content/constants/gifSprites.js @@ -11,7 +11,9 @@ export default [ 'head_special_0', 'head_special_1', 'head_special_ks2019', + 'Mount_Body_Dragon-Hydra', 'Mount_Body_Gryphon-Gryphatrice', + 'Mount_Head_Dragon-Hydra', 'Mount_Head_Gryphon-Gryphatrice', 'Pet_HatchingPotion_Cryptid', 'Pet_HatchingPotion_Dessert', diff --git a/website/common/script/content/constants/releaseDates.js b/website/common/script/content/constants/releaseDates.js index 9dfc37d63f..03c954d15c 100644 --- a/website/common/script/content/constants/releaseDates.js +++ b/website/common/script/content/constants/releaseDates.js @@ -22,6 +22,7 @@ export const ARMOIRE_RELEASE_DATES = { gildedKnightSet: { year: 2025, month: 5 }, beekeepersSet: { year: 2025, month: 6 }, flyFishingSet: { year: 2025, month: 7 }, + redWaistcoatSet: { year: 2025, month: 8 }, }; export const EGGS_RELEASE_DATES = { diff --git a/website/common/script/content/constants/schedule.js b/website/common/script/content/constants/schedule.js index 80d60cbd65..092febc9a7 100644 --- a/website/common/script/content/constants/schedule.js +++ b/website/common/script/content/constants/schedule.js @@ -1,5 +1,4 @@ import moment from 'moment'; -import nconf from 'nconf'; import SEASONAL_SETS from './seasonalSets'; import { getRepeatingEvents } from './events'; @@ -665,7 +664,7 @@ export const MONTHLY_SCHEDULE = { }, }; -export const GALA_SWITCHOVER_DAY = 21; +export const GALA_SWITCHOVER_DAY = 1; export const GALA_KEYS = [ 'winter', 'spring', @@ -794,7 +793,7 @@ export const GALA_SCHEDULE = { }, }; -const SWITCHOVER_TIME = nconf.get('CONTENT_SWITCHOVER_TIME_OFFSET') || process.env.CONTENT_SWITCHOVER_TIME_OFFSET || 0; +const SWITCHOVER_TIME = process.env.CONTENT_SWITCHOVER_TIME_OFFSET || 0; export const TYPE_SCHEDULE = { timeTravelers: FIRST_RELEASE_DAY, diff --git a/website/common/script/content/gear/sets/armoire.js b/website/common/script/content/gear/sets/armoire.js index e79764f14f..f4c2874c4f 100644 --- a/website/common/script/content/gear/sets/armoire.js +++ b/website/common/script/content/gear/sets/armoire.js @@ -537,6 +537,11 @@ const armor = { con: 7, set: 'flyFishingSet', }, + redWaistcoat: { + con: 8, + str: 8, + set: 'redWaistcoatSet', + }, }; const body = { @@ -1098,6 +1103,11 @@ const head = { per: 7, set: 'flyFishingSet', }, + redNewsieHat: { + per: 8, + int: 8, + set: 'redWaistcoatSet', + }, }; const shield = { diff --git a/website/common/script/content/gear/sets/mystery.js b/website/common/script/content/gear/sets/mystery.js index 7f2752ddf3..9e2092d17a 100644 --- a/website/common/script/content/gear/sets/mystery.js +++ b/website/common/script/content/gear/sets/mystery.js @@ -297,6 +297,7 @@ const shield = { 202501: { }, 202502: { }, 202506: { }, + 202508: { }, 301405: { }, 301704: { }, }; @@ -322,6 +323,7 @@ const weapon = { 202403: { }, 202404: { twoHanded: true }, 202408: { }, + 202508: { }, 301404: { }, }; diff --git a/website/common/script/content/hatching-potions.js b/website/common/script/content/hatching-potions.js index c7e11fc17c..7572666c05 100644 --- a/website/common/script/content/hatching-potions.js +++ b/website/common/script/content/hatching-potions.js @@ -1,6 +1,6 @@ import defaults from 'lodash/defaults'; import each from 'lodash/each'; -import { assign } from 'lodash'; +import assign from 'lodash/assign'; import t from './translation'; import datedMemoize from '../fns/datedMemoize'; import { filterReleased } from './is_released'; diff --git a/website/common/script/content/index.js b/website/common/script/content/index.js index 861fefb08d..779b7c1700 100644 --- a/website/common/script/content/index.js +++ b/website/common/script/content/index.js @@ -17,7 +17,7 @@ import { } from './constants'; import achievements from './achievements'; - +import categoryOptions from './categoryOptions'; import eggs from './eggs'; import hatchingPotions from './hatching-potions'; import stable from './stable'; @@ -85,6 +85,8 @@ api.officialPinnedItems = officialPinnedItems; api.bundles = bundles; +api.categoryOptions = categoryOptions; + /* --------------------------------------------------------------- Unique Rewards: Potion and Armoire diff --git a/website/common/script/content/is_released.js b/website/common/script/content/is_released.js index e1b4f69cef..4f3f4d415d 100644 --- a/website/common/script/content/is_released.js +++ b/website/common/script/content/is_released.js @@ -1,9 +1,8 @@ import moment from 'moment'; import filter from 'lodash/filter'; -import { pickBy } from 'lodash'; -import nconf from 'nconf'; +import pickBy from 'lodash/pickBy'; -const SWITCHOVER_TIME = nconf.get('CONTENT_SWITCHOVER_TIME_OFFSET') || 0; +const SWITCHOVER_TIME = process.env.CONTENT_SWITCHOVER_TIME_OFFSET || 0; const releaseDateEndPart = `T${String(SWITCHOVER_TIME).padStart(2, '0')}:00-0000`; diff --git a/website/common/script/content/stable.js b/website/common/script/content/stable.js index 7a0bf27803..378b16e69a 100644 --- a/website/common/script/content/stable.js +++ b/website/common/script/content/stable.js @@ -115,6 +115,7 @@ const canFindSpecial = { 'Hippogriff-Hopeful': true, // Contributor/Backer pets + 'Dragon-Hydra': true, // Contributor level 7 'LionCub-Ethereal': false, // Backer tier 90 'Jackalope-RoyalPurple': true, // subscription 'Gryphon-Gryphatrice': false, // Pet once granted to kickstarter @@ -152,6 +153,7 @@ const specialPets = { const specialMounts = { 'BearCub-Polar': 'polarBear', + 'Dragon-Hydra': 'hydra', 'LionCub-Ethereal': 'etherealLion', 'MantisShrimp-Base': 'mantisShrimp', 'Turkey-Base': 'turkey', diff --git a/website/common/script/errors/apiErrorMessages.js b/website/common/script/errors/apiErrorMessages.js index ff129b4280..95198226a8 100644 --- a/website/common/script/errors/apiErrorMessages.js +++ b/website/common/script/errors/apiErrorMessages.js @@ -32,7 +32,8 @@ export default { postIdRequired: '"postId" must be a valid UUID.', noNewsPosterAccess: 'You don\'t have news poster access.', - ipAddressBlocked: 'Your access to Habitica has been blocked. This may be due to a breach of our Terms of Service or for other reasons. For details or to ask to be unblocked, please email admin@habitica.com or ask your parent or guardian to email them. Include your Habitica @Username or User Id in the email if you know it.', + ipAddressBlocked: 'Your connection to Habitica has been blocked. For additional information, or to request an appeal, email admin@habitica.com with your Habitica username or User ID.', + clientBlocked: 'This client or third-party tool has been blocked. For additional information, email admin@habitica.com with your Habitica username or User ID.', clientRateLimited: 'This User ID or IP address has been rate limited due to an excess amount of requests to the Habitica API v3. More info can be found in the response headers and at https://github.com/HabitRPG/habitica/wiki/API-Usage-Guidelines#rate-limiting .', invalidPlatform: 'Invalid platform specified', diff --git a/website/common/script/fns/datedMemoize.js b/website/common/script/fns/datedMemoize.js index c71ab59248..44c023539b 100644 --- a/website/common/script/fns/datedMemoize.js +++ b/website/common/script/fns/datedMemoize.js @@ -1,7 +1,6 @@ import moment from 'moment'; -import nconf from 'nconf'; -const SWITCHOVER_TIME = nconf.get('CONTENT_SWITCHOVER_TIME_OFFSET') || 0; +const SWITCHOVER_TIME = process.env.CONTENT_SWITCHOVER_TIME_OFFSET || 0; function getDay (date) { if (date === undefined) { diff --git a/website/server/controllers/api-v3/auth.js b/website/server/controllers/api-v3/auth.js index 9700ddfe1a..d8359beaba 100644 --- a/website/server/controllers/api-v3/auth.js +++ b/website/server/controllers/api-v3/auth.js @@ -151,9 +151,7 @@ api.loginSocial = { // Called by apple for web authentication. api.redirectApple = { method: 'POST', - middlewares: [authWithHeaders({ - optional: true, - })], + middlewares: [], url: '/user/auth/apple', async handler (req, res) { if (req.body.id_token) { @@ -271,7 +269,7 @@ api.updateUsername = { * @apiParam (Body) {String} newPassword The new password * @apiParam (Body) {String} confirmPassword New password confirmation * - * @apiSuccess {Object} data An empty object + * @apiSuccess {String} data.apiToken The new apiToken * */ api.updatePassword = { method: 'PUT', @@ -316,9 +314,14 @@ api.updatePassword = { // set new password and make sure it's using bcrypt for hashing await passwordUtils.convertToBcrypt(user, newPassword); + + user.apiToken = common.uuid(); + await user.save(); - res.respond(200, {}); + res.respond(200, { + apiToken: user.apiToken, + }); }, }; @@ -350,6 +353,7 @@ api.resetPassword = { { 'auth.local.email': email }, // Prefer to reset password for local auth { auth: 1 }, ).exec(); + if (!user) { // If no local auth with that email... const potentialUsers = await User.find( { @@ -486,6 +490,9 @@ api.resetPasswordSetNewOne = { await passwordUtils.convertToBcrypt(user, String(newPassword)); user.auth.local.passwordResetCode = undefined; // Reset saved password reset code if (!user.auth.local.email) user.auth.local.email = await socialEmailToLocal(user); + + user.apiToken = common.uuid(); + await user.save(); return res.respond(200, {}, res.t('passwordChangeSuccess')); diff --git a/website/server/controllers/api-v4/admin.js b/website/server/controllers/api-v4/admin.js index bf1decf363..bd4aaedbd2 100644 --- a/website/server/controllers/api-v4/admin.js +++ b/website/server/controllers/api-v4/admin.js @@ -1,8 +1,11 @@ import validator from 'validator'; +import merge from 'lodash/merge'; +import { v4 as uuid } from 'uuid'; import { authWithHeaders } from '../../middlewares/auth'; import { ensurePermission } from '../../middlewares/ensureAccessRight'; import { model as User } from '../../models/user'; import { model as UserHistory } from '../../models/userHistory'; +import { model as Blocker } from '../../models/blocker'; import { NotFound, } from '../../libs/errors'; @@ -116,4 +119,73 @@ api.getUserHistory = { }, }; +api.getBlockers = { + method: 'GET', + url: '/admin/blockers', + middlewares: [authWithHeaders(), ensurePermission('accessControl')], + async handler (req, res) { + const blockers = await Blocker + .find({ disabled: false }) + .lean() + .exec(); + + res.respond(200, blockers); + }, +}; + +api.createBlocker = { + method: 'POST', + url: '/admin/blockers', + middlewares: [authWithHeaders(), ensurePermission('accessControl')], + async handler (req, res) { + const id = uuid(); + const blocker = await Blocker({ + _id: id, + ...Blocker.sanitize(req.body), + }).save(); + + res.respond(200, blocker); + }, +}; + +api.updateBlocker = { + method: 'PUT', + url: '/admin/blockers/:blockerId', + middlewares: [authWithHeaders(), ensurePermission('accessControl')], + async handler (req, res) { + req.checkParams('blockerId', res.t('blockerIdRequired')).notEmpty().isUUID(); + + const validationErrors = req.validationErrors(); + if (validationErrors) throw validationErrors; + + const blocker = await Blocker.findById(req.params.blockerId).exec(); + if (!blocker) throw new NotFound(res.t('blockerNotFound')); + + merge(blocker, Blocker.sanitize(req.body)); + const savedBlocker = await blocker.save(); + + res.respond(200, savedBlocker); + }, +}; + +api.deleteBlocker = { + method: 'DELETE', + url: '/admin/blockers/:blockerId', + middlewares: [authWithHeaders(), ensurePermission('accessControl')], + async handler (req, res) { + req.checkParams('blockerId', res.t('blockerIdRequired')).notEmpty().isUUID(); + + const validationErrors = req.validationErrors(); + if (validationErrors) throw validationErrors; + + const blocker = await Blocker.findById(req.params.blockerId).exec(); + if (!blocker) throw new NotFound(res.t('blockerNotFound')); + + blocker.disabled = true; + const savedBlocker = await blocker.save(); + + res.respond(200, savedBlocker); + }, +}; + export default api; diff --git a/website/server/index.js b/website/server/index.js index c1288e4b20..6434ee31a0 100644 --- a/website/server/index.js +++ b/website/server/index.js @@ -9,7 +9,7 @@ if (process.env.NODE_ENV !== 'production') { const cluster = require('cluster'); -const setupNconf = require('./libs/setupNconf'); +const setupNconf = require('./libs/setupNconf').default; // Initialize configuration BEFORE anything setupNconf(); diff --git a/website/server/libs/errors.js b/website/server/libs/errors.js index 2b570dbb7e..0e3a2f0486 100644 --- a/website/server/libs/errors.js +++ b/website/server/libs/errors.js @@ -117,3 +117,27 @@ export class InternalServerError extends CustomError { this.message = customMessage || 'An unexpected error occurred.'; } } + +/** + * @apiDefine InvalidCredentials + * @apiError InvalidCredentials The user’s credentials are no longer valid. + * + * @apiNote + * The 'invalid_credentials' error code is language-agnostic: + * clients should use this code (regardless of locale or translated message) + * to unambiguously trigger a user logout. + * + * @apiErrorExample Error-Response: + * HTTP/1.1 401 Unauthorized + * { + * "error": "invalid_credentials", + * "message": "There is no account that uses those credentials." + * } + */ +export class InvalidCredentialsError extends NotAuthorized { + constructor (message) { + super(message); + this.name = this.constructor.name; + this.code = 'invalid_credentials'; + } +} diff --git a/website/server/libs/setupNconf.js b/website/server/libs/setupNconf.js index 073f499687..d37bf07d14 100644 --- a/website/server/libs/setupNconf.js +++ b/website/server/libs/setupNconf.js @@ -1,11 +1,11 @@ /* eslint-disable import/no-commonjs */ // NOTE es5 requires/exports to allow import from webpack -const nconfDefault = require('nconf'); -const { join, resolve } = require('path'); +import nconfDefault from 'nconf'; +import { join, resolve } from 'path'; const PATH_TO_CONFIG = join(resolve(__dirname, '../../../config.json')); -module.exports = function setupNconf (file, nconfInstance = nconfDefault) { +export default function setupNconf (file, nconfInstance = nconfDefault) { const configFile = file || PATH_TO_CONFIG; nconfInstance @@ -16,4 +16,7 @@ module.exports = function setupNconf (file, nconfInstance = nconfDefault) { nconfInstance.set('IS_PROD', nconfInstance.get('NODE_ENV') === 'production'); nconfInstance.set('IS_DEV', nconfInstance.get('NODE_ENV') === 'development'); nconfInstance.set('IS_TEST', nconfInstance.get('NODE_ENV') === 'test'); -}; + + // we need this in common and can't use nconf on the client. + process.env.CONTENT_SWITCHOVER_TIME_OFFSET = nconfInstance.get('CONTENT_SWITCHOVER_TIME_OFFSET') || 0; +} diff --git a/website/server/middlewares/auth.js b/website/server/middlewares/auth.js index f5d5614847..d5cd9abde3 100644 --- a/website/server/middlewares/auth.js +++ b/website/server/middlewares/auth.js @@ -2,7 +2,9 @@ import moment from 'moment'; import nconf from 'nconf'; import url from 'url'; import { + InvalidCredentialsError, NotAuthorized, + BadRequest, } from '../libs/errors'; import { model as User, @@ -11,6 +13,8 @@ import gcpStackdriverTracer from '../libs/gcpTraceAgent'; import common from '../../common'; import { getLanguageFromUser } from '../libs/language'; +const ENFORCE_CLIENT_HEADER = nconf.get('ENFORCE_CLIENT_HEADER') === 'true'; + const OFFICIAL_PLATFORMS = ['habitica-web', 'habitica-ios', 'habitica-android']; const COMMUNITY_MANAGER_EMAIL = nconf.get('EMAILS_COMMUNITY_MANAGER_EMAIL'); const USER_FIELDS_ALWAYS_LOADED = ['_id', '_v', 'notifications', 'preferences', 'auth', 'flags', 'permissions']; @@ -62,6 +66,10 @@ export function authWithHeaders (options = {}) { const client = req.header('x-client'); const optional = options.optional || false; + if (ENFORCE_CLIENT_HEADER && !client) { + return next(new BadRequest(res.t('missingClientHeader'))); + } + if (!userId || !apiToken) { if (optional) return next(); return next(new NotAuthorized(res.t('missingAuthHeaders'))); @@ -81,7 +89,7 @@ export function authWithHeaders (options = {}) { .exec() .then(user => { if (!user || apiToken !== user.apiToken) { - throw new NotAuthorized(res.t('invalidCredentials')); + throw new InvalidCredentialsError(res.t('invalidCredentials')); } if (user.auth.blocked) { diff --git a/website/server/middlewares/blocker.js b/website/server/middlewares/blocker.js new file mode 100644 index 0000000000..6388394865 --- /dev/null +++ b/website/server/middlewares/blocker.js @@ -0,0 +1,56 @@ +import { + Forbidden, +} from '../libs/errors'; +import { apiError } from '../libs/apiError'; +import { model as Blocker } from '../models/blocker'; + +// Middleware to block unwanted IP addresses and clients + +// NOTE: it's meant to be used behind a proxy (for example a load balancer) +// that uses the 'x-forwarded-for' header to forward the original IP addresses. + +const blockedIps = []; +const blockedClients = []; + +Blocker.watchBlockers({ + $or: [ + { type: 'ipaddress' }, + { type: 'client' }, + ], + area: 'full', +}, { + initial: true, +}).on('change', async change => { + const { operation, blocker } = change; + const checkedList = blocker.type === 'ipaddress' ? blockedIps : blockedClients; + if (operation === 'add') { + if (blocker.value && !checkedList.includes(blocker.value)) { + checkedList.push(blocker.value); + } + } else if (operation === 'delete') { + const index = checkedList.indexOf(blocker.value); + if (index !== -1) { + checkedList.splice(index, 1); + } + } +}); + +export default function ipBlocker (req, res, next) { + if (blockedIps.length === 0 && blockedClients.length === 0) return next(); + + const ipMatch = blockedIps.find(blockedIp => blockedIp === req.ip) !== undefined; + if (ipMatch === true) { + const error = new Forbidden(apiError('ipAddressBlocked')); + error.skipLogging = true; + return next(error); + } + + const clientMatch = blockedClients.find(blockedClient => blockedClient === req.headers['x-client']) !== undefined; + if (clientMatch === true) { + const error = new Forbidden(apiError('clientBlocked')); + error.skipLogging = true; + return next(error); + } + + return next(); +} diff --git a/website/server/middlewares/errorHandler.js b/website/server/middlewares/errorHandler.js index bd317a2b4a..9480752517 100644 --- a/website/server/middlewares/errorHandler.js +++ b/website/server/middlewares/errorHandler.js @@ -66,23 +66,25 @@ export default function errorHandler (err, req, res, next) { // eslint-disable-l responseErr = new InternalServerError(); } - // log the error - logger.error(err, { - method: req.method, - originalUrl: req.originalUrl, + if (!err.skipLogging) { + // log the error + logger.error(err, { + method: req.method, + originalUrl: req.originalUrl, - // don't send sensitive information that only adds noise - headers: omit(req.headers, ['x-api-key', 'cookie', 'password', 'confirmPassword']), - body: omit(req.body, ['password', 'confirmPassword']), - query: omit(req.query, ['password', 'confirmPassword']), + // don't send sensitive information that only adds noise + headers: omit(req.headers, ['x-api-key', 'cookie', 'password', 'confirmPassword']), + body: omit(req.body, ['password', 'confirmPassword']), + query: omit(req.query, ['password', 'confirmPassword']), - httpCode: responseErr.httpCode, - isHandledError: responseErr.httpCode < 500, - }); + httpCode: responseErr.httpCode, + isHandledError: responseErr.httpCode < 500, + }); + } const jsonRes = { success: false, - error: responseErr.name, + error: responseErr.code || responseErr.name, message: responseErr.message, }; diff --git a/website/server/middlewares/index.js b/website/server/middlewares/index.js index e43e38ba00..4cd0df9ace 100644 --- a/website/server/middlewares/index.js +++ b/website/server/middlewares/index.js @@ -23,7 +23,7 @@ import { forceSSL, forceHabitica, } from './redirects'; -import ipBlocker from './ipBlocker'; +import blocker from './blocker'; import v1 from './v1'; import v2 from './v2'; import appRoutes from './appRoutes'; @@ -81,7 +81,7 @@ export default function attachMiddlewares (app, server) { app.use(maintenanceMode); - app.use(ipBlocker); + app.use(blocker); app.use(cors); app.use(forceSSL); diff --git a/website/server/middlewares/ipBlocker.js b/website/server/middlewares/ipBlocker.js deleted file mode 100644 index c11f3e47d1..0000000000 --- a/website/server/middlewares/ipBlocker.js +++ /dev/null @@ -1,38 +0,0 @@ -import nconf from 'nconf'; -import { - Forbidden, -} from '../libs/errors'; -import { apiError } from '../libs/apiError'; - -// Middleware to block unwanted IP addresses - -// NOTE: it's meant to be used behind a proxy (for example a load balancer) -// that uses the 'x-forwarded-for' header to forward the original IP addresses. - -// A list of comma separated IPs to block -// It works fine as long as the list is short, -// if the list becomes too long for an env variable we'll switch to Redis. -const BLOCKED_IPS_RAW = nconf.get('BLOCKED_IPS'); - -const blockedIps = BLOCKED_IPS_RAW - ? BLOCKED_IPS_RAW - .trim() - .split(',') - .map(blockedIp => blockedIp.trim()) - .filter(blockedIp => Boolean(blockedIp)) - : []; - -export default function ipBlocker (req, res, next) { - // If there are no IPs to block, skip the middleware - if (blockedIps.length === 0) return next(); - - // Is the client IP, req.ip, blocked? - const match = blockedIps.find(blockedIp => blockedIp === req.ip) !== undefined; - - if (match === true) { - // Not translated because no user is loaded at this point - return next(new Forbidden(apiError('ipAddressBlocked'))); - } - - return next(); -} diff --git a/website/server/middlewares/static.js b/website/server/middlewares/static.js index 757e942fe1..e1ae9b6c23 100644 --- a/website/server/middlewares/static.js +++ b/website/server/middlewares/static.js @@ -17,6 +17,7 @@ export default function staticMiddleware (expressApp) { expressApp.use('/static/css', express.static(`${BASE_DIR}/website/client/dist/static/css`, { maxAge: ONE_YEAR })); expressApp.use('/static/svg', express.static(`${BASE_DIR}/website/client/dist/static/svg`, { maxAge: ONE_YEAR })); expressApp.use('/static/img', express.static(`${BASE_DIR}/website/client/dist/static/img`, { maxAge: ONE_YEAR })); + expressApp.use('/assets', express.static(`${BASE_DIR}/website/client/dist/assets`, { maxAge: ONE_YEAR })); /* Expose other static files (audio, emails images, ...) These files are not processed by Webpack but they change very rarely. diff --git a/website/server/models/blocker.js b/website/server/models/blocker.js new file mode 100644 index 0000000000..51f1c13529 --- /dev/null +++ b/website/server/models/blocker.js @@ -0,0 +1,103 @@ +/* eslint-disable camelcase */ + +import mongoose from 'mongoose'; +import EventEmitter from 'events'; +import baseModel from '../libs/baseModel'; + +export const blockTypes = [ + 'ipaddress', + 'email', + 'client', +]; + +export const blockArea = [ + 'full', + 'payments', +]; + +export const schema = new mongoose.Schema({ + disabled: { + $type: Boolean, default: false, // If true, the block is disabled + }, + type: { + $type: String, enum: blockTypes, required: true, + }, + area: { + $type: String, enum: blockArea, default: 'full', // full or payment + }, + value: { + $type: String, required: true, // e.g. IP address + }, + blockSource: { + $type: String, enum: ['administrator', 'system', 'worker'], default: 'administrator', // who created the block + }, + reason: { + $type: String, required: false, // e.g. 'abusive behavior' + }, +}, { + strict: true, + minimize: false, // So empty objects are returned + typeKey: '$type', // So that we can use fields named `type` +}); + +schema.plugin(baseModel, { + timestamps: true, +}); + +schema.statics.watchBlockers = function watchBlockers (query, options) { + const emitter = new EventEmitter(); + const matchQuery = { + $match: {}, + }; + if (query) { + if (query.type) { + matchQuery.$match['fullDocument.type'] = query.type; + } + if (query.area) { + matchQuery.$match['fullDocument.area'] = query.area; + } + } + process.nextTick(() => { + this.watch([matchQuery], { + fullDocument: 'updateLookup', + }) + .on('change', change => { + if (!change.fullDocument) { + return; // Ignore changes that don't have a fullDocument + } + if (change.operationType === 'insert' || !change.fullDocument.disabled) { + emitter.emit('change', { + operation: 'add', + blocker: change.fullDocument, + }); + } else if (change.operationType === 'update' && change.fullDocument.disabled) { + emitter.emit('change', { + operation: 'delete', + blocker: change.fullDocument, + }); + } + }) + .on('error', error => { + emitter.emit('error', error); + }); + if (options.initial) { + const initialQuery = { + disabled: false, + ...query, + }; + this.find(initialQuery).then(docs => { + for (const doc of docs) { + emitter.emit('change', { + operation: 'add', + blocker: doc, + }); + } + }).catch(error => { + emitter.emit('error', error); + }); + } + }); + return emitter; +}; + +export const model = mongoose.model('Blocker', schema); diff --git a/website/server/models/group.js b/website/server/models/group.js index fc4d259f8f..7d181c818e 100644 --- a/website/server/models/group.js +++ b/website/server/models/group.js @@ -1503,8 +1503,13 @@ schema.methods.unlinkTask = async function groupUnlinkTask ( 'group.assignedUsers': user._id, }; - delete unlinkingTask.group.assignedUsersDetail[user._id]; - unlinkingTask.group.assignedUsers = _.keys(unlinkingTask.group.assignedUsersDetail); + if (unlinkingTask.group.assignedUsersDetail) { + delete unlinkingTask.group.assignedUsersDetail[user._id]; + unlinkingTask.group.assignedUsers = _.keys(unlinkingTask.group.assignedUsersDetail); + } else { + // Task was created before assignedUsersDetail was added + removeFromArray(unlinkingTask.group.assignedUsers, user._id); + } unlinkingTask.markModified('group'); const promises = [unlinkingTask.save()]; diff --git a/website/server/models/user/schema.js b/website/server/models/user/schema.js index efffc176c0..477d522181 100644 --- a/website/server/models/user/schema.js +++ b/website/server/models/user/schema.js @@ -9,9 +9,31 @@ import { schema as SubscriptionPlanSchema } from '../subscriptionPlan'; import { schema as TagSchema } from '../tag'; import { schema as UserNotificationSchema } from '../userNotification'; import { schema as WebhookSchema } from '../webhook'; +import { model as Blocker } from '../blocker'; const RESTRICTED_EMAIL_DOMAINS = Object.freeze(['habitica.com', 'habitrpg.com']); +const BLOCKED_EMAILS = []; + +Blocker.watchBlockers({ + type: 'email', + area: 'full', +}, { + initial: true, +}).on('change', async change => { + const { operation, blocker: { value } } = change; + if (operation === 'add') { + if (value && !BLOCKED_EMAILS.includes(value)) { + BLOCKED_EMAILS.push(value); + } + } else if (operation === 'delete') { + const index = BLOCKED_EMAILS.indexOf(value); + if (index !== -1) { + BLOCKED_EMAILS.splice(index, 1); + } + } +}); + // User schema definition export const UserSchema = new Schema({ apiToken: { @@ -43,6 +65,12 @@ export const UserSchema = new Schema({ return RESTRICTED_EMAIL_DOMAINS.every(domain => !lowercaseEmail.endsWith(`@${domain}`)); }, message: shared.i18n.t('invalidEmailDomain', { domains: RESTRICTED_EMAIL_DOMAINS.join(', ') }), + }, { + validator (email) { + const lowercaseEmail = email.toLowerCase(); + return BLOCKED_EMAILS.every(block => lowercaseEmail.indexOf(block) === -1); + }, + message: shared.i18n.t('emailBlockedRegistration'), }], }, username: { @@ -196,6 +224,7 @@ export const UserSchema = new Schema({ userSupport: Boolean, // access User Support feature in Admin Panel challengeAdmin: Boolean, // Can manage and administrate challenges moderator: Boolean, // Can ban, flag users and manage social spaces + accessControl: Boolean, // Can manage IP and client blockers coupons: Boolean, // Can generate and request coupons }, balance: { $type: Number, default: 0 },