diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index daf50a9e9f..22e922a148 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,7 +1,7 @@ [//]: # (Note: See http://habitica.wikia.com/wiki/Using_Your_Local_Install_to_Modify_Habitica%27s_Website_and_API for more info) -[//]: # (Put Issue # or URL here, if applicable. This will automatically close the issue if your PR is merged in) -Fixes put_issue_url_here +[//]: # (Put Issue # here, if applicable. This will automatically close the issue if your PR is merged in) +Fixes put_#_and_issue_numer_here ### Changes [//]: # (Describe the changes that were made in detail here. Include pictures if necessary) diff --git a/Dockerfile-Production b/Dockerfile-Production index a12952819b..d881667b24 100644 --- a/Dockerfile-Production +++ b/Dockerfile-Production @@ -17,7 +17,7 @@ RUN npm install -g gulp-cli mocha # Clone Habitica repo and install dependencies RUN mkdir -p /usr/src/habitrpg WORKDIR /usr/src/habitrpg -RUN git clone --branch v4.41.0 https://github.com/HabitRPG/habitica.git /usr/src/habitrpg +RUN git clone --branch v4.42.4 https://github.com/HabitRPG/habitica.git /usr/src/habitrpg RUN npm install RUN gulp build:prod --force diff --git a/gulp/gulp-tests.js b/gulp/gulp-tests.js index 4a38458d83..d805765b86 100644 --- a/gulp/gulp-tests.js +++ b/gulp/gulp-tests.js @@ -167,7 +167,7 @@ gulp.task('test:content:safe', gulp.series('test:prepare:build', (cb) => { gulp.task('test:api-v3:unit', (done) => { let runner = exec( - testBin('node_modules/.bin/istanbul cover --dir coverage/api-v3-unit --report lcovonly node_modules/mocha/bin/_mocha -- test/api/v3/unit --recursive --require ./test/helpers/start-server'), + testBin('node_modules/.bin/istanbul cover --dir coverage/api-v3-unit node_modules/mocha/bin/_mocha -- test/api/v3/unit --recursive --require ./test/helpers/start-server'), (err) => { if (err) { process.exit(1); diff --git a/package-lock.json b/package-lock.json index 04c53244a2..efcde093ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "habitica", - "version": "4.41.5", + "version": "4.42.6", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -151,7 +151,7 @@ }, "@sinonjs/formatio": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", "dev": true, "requires": { @@ -191,9 +191,9 @@ } }, "@vue/test-utils": { - "version": "1.0.0-beta.15", - "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-1.0.0-beta.15.tgz", - "integrity": "sha512-Oev99e+LorKARoFFt/+T5RegOLyO+fHLXBr0XvpaDOukxzJEWaerYtuFpoZ4DFIF9qPdCJZN0luBm4mRtj0nnQ==", + "version": "1.0.0-beta.16", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-1.0.0-beta.16.tgz", + "integrity": "sha512-TF9ae3zhs8qBN98Bix2Bh3IrwkhscEV3HRthPgtzJPNG0YHUyNTlZNXH36vbP0nuSAs9Om8XjVd8/MDj8ehpEA==", "dev": true, "requires": { "lodash": "4.17.10" @@ -329,11 +329,11 @@ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" }, "amazon-payments": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/amazon-payments/-/amazon-payments-0.2.6.tgz", - "integrity": "sha1-4e34TDjOJXzApFwnPaByaHVhs20=", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/amazon-payments/-/amazon-payments-0.2.7.tgz", + "integrity": "sha512-TDaE0N9IeFJGIKHSIMyDBP8iq9jMcdT/BcpVEAunwL22he1/nI4/tnaOZs4TYFNMnWj2r5pVgDJzwQXTW9wFzw==", "requires": { - "request": "2.85.0", + "request": "2.86.0", "xml2js": "0.4.4" }, "dependencies": { @@ -424,14 +424,14 @@ } }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "request": { - "version": "2.85.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", - "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", + "version": "2.86.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.86.0.tgz", + "integrity": "sha512-BQZih67o9r+Ys94tcIW4S7Uu8pthjrQVxhsZ/weOwHbDfACxvIyvnAbzFQxjy1jMtvFSzv5zf4my6cZsJBbVzw==", "requires": { "aws-sign2": "0.7.0", "aws4": "1.6.0", @@ -449,9 +449,8 @@ "mime-types": "2.1.18", "oauth-sign": "0.8.2", "performance-now": "2.1.0", - "qs": "6.5.1", + "qs": "6.5.2", "safe-buffer": "5.1.1", - "stringstream": "0.0.5", "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", "uuid": "3.2.1" @@ -917,7 +916,7 @@ "requires": { "bn.js": "4.11.8", "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" } }, "assert": { @@ -1014,12 +1013,12 @@ "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=" }, "autoprefixer": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.4.1.tgz", - "integrity": "sha512-YqUclCBDXUT9Y7aQ8Xv+ja8yhTZYJoMsOD7WS++gZIJLCpCu+gPcKGDlhk6S3WxhLkTcNVdaMZAWys2nzZCH7g==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.5.0.tgz", + "integrity": "sha512-buY1XxFoBrXvLsoFb0jP+niSu1tCj2RwMwHj96+RfQ8DJTgb0vUhh0dg6wjJT3JzsFYBrkSj8/sGtarNdlxTFw==", "requires": { - "browserslist": "3.2.6", - "caniuse-lite": "1.0.30000832", + "browserslist": "3.2.7", + "caniuse-lite": "1.0.30000840", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "6.0.22", @@ -1047,9 +1046,9 @@ } }, "aws-sdk": { - "version": "2.230.1", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.230.1.tgz", - "integrity": "sha1-SUzvau0uFtse2cEqz0vSpzF/U2U=", + "version": "2.239.1", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.239.1.tgz", + "integrity": "sha1-KZo+YR5cR7OSML0fUeLSXR+9s0U=", "requires": { "buffer": "4.9.1", "events": "1.1.1", @@ -1059,8 +1058,7 @@ "sax": "1.2.1", "url": "0.10.3", "uuid": "3.1.0", - "xml2js": "0.4.17", - "xmlbuilder": "4.2.1" + "xml2js": "0.4.17" }, "dependencies": { "sax": { @@ -1772,9 +1770,9 @@ "dev": true }, "base64-js": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", - "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" }, "base64-stream": { "version": "0.1.3", @@ -2246,9 +2244,9 @@ } }, "bfj-node4": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bfj-node4/-/bfj-node4-5.2.1.tgz", - "integrity": "sha512-w+OTPD/R0AvDVR/sy/uVUVeoCpEgUoYj9/1P2zB6mR1yx7F/ADzLX4nlvZ/91WWzGgdZnuLxWP/J89D7ZDt0DA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/bfj-node4/-/bfj-node4-5.3.1.tgz", + "integrity": "sha512-SOmOsowQWfXc7ybFARsK3C4MCOWzERaOMV/Fl3Tgjs+5dJWyzo3oa127jL44eMbQiAN17J7SvAs2TRxEScTUmg==", "dev": true, "requires": { "bluebird": "3.5.1", @@ -2411,26 +2409,61 @@ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", "requires": { "bytes": "3.0.0", "content-type": "1.0.4", "debug": "2.6.9", "depd": "1.1.2", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", + "qs": "6.5.2", + "raw-body": "2.3.3", "type-is": "1.6.16" }, "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.4.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": "2.1.2" + } + }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" } } }, @@ -2570,32 +2603,32 @@ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=" }, "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { "buffer-xor": "1.0.3", "cipher-base": "1.0.4", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "evp_bytestokey": "1.0.3", "inherits": "2.0.3", "safe-buffer": "5.1.1" } }, "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", + "browserify-aes": "1.2.0", + "browserify-des": "1.0.1", "evp_bytestokey": "1.0.3" } }, "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", + "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", "requires": { "cipher-base": "1.0.4", "des.js": "1.0.0", @@ -2618,11 +2651,11 @@ "requires": { "bn.js": "4.11.8", "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", "elliptic": "6.4.0", "inherits": "2.0.3", - "parse-asn1": "5.1.0" + "parse-asn1": "5.1.1" } }, "browserify-zlib": { @@ -2634,18 +2667,18 @@ } }, "browserslist": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.6.tgz", - "integrity": "sha512-XCsMSg9V4S1VRdcp265dJ+8kBRjfuFXcavbisY7G6T9QI0H1Z24PP53vvs0WDYWqm38Mco1ILDtafcS8ZR4xiw==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.7.tgz", + "integrity": "sha512-oYVLxFVqpX9uMhOIQBLtZL+CX4uY8ZpWcjNTaxyWl5rO8yA9SSNikFnAfvk8J3P/7z3BZwNmEqFKaJoYltj3MQ==", "requires": { - "caniuse-lite": "1.0.30000832", - "electron-to-chromium": "1.3.44" + "caniuse-lite": "1.0.30000840", + "electron-to-chromium": "1.3.45" }, "dependencies": { "electron-to-chromium": { - "version": "1.3.44", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.44.tgz", - "integrity": "sha1-72sVCmDVIwgjiMra2ICF7NL9RoQ=" + "version": "1.3.45", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.45.tgz", + "integrity": "sha1-RYrBscXHYM6IEaFtK/vZfsMLr7g=" } } }, @@ -2659,7 +2692,7 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { - "base64-js": "1.2.3", + "base64-js": "1.3.0", "ieee754": "1.1.8", "isarray": "1.0.0" } @@ -2920,9 +2953,9 @@ "integrity": "sha1-DiGPoTPQ0HHIhqoEG0NSWMx0aJE=" }, "caniuse-lite": { - "version": "1.0.30000832", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000832.tgz", - "integrity": "sha512-WMC2GiGTPxGywFL70h+CnP7GAYo6LM6JSI1sF13vAZfXCzOeunHzl20DpfbDGMdvtT2wpqvabY96MHEp/la+BQ==" + "version": "1.0.30000840", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000840.tgz", + "integrity": "sha512-Lw6AaouV6lh7TgIdQtLiUFKKO2mtDnZFkzCq5/V6tqs4ZI0OGVSDCEt1uegZ3OOBEBUYuVw3Hhr9DQSbgVofFA==" }, "capture-stack-trace": { "version": "1.0.0", @@ -3213,16 +3246,16 @@ } }, "chromedriver": { - "version": "2.38.2", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-2.38.2.tgz", - "integrity": "sha512-gh77kozqCPTtr74RZpnSgBCoClpNznsg2NEKwi8t54UyzrcpMRkG9nH1qhwI+ojLQpsdpsSjGiASSdMsFZT/mw==", + "version": "2.38.3", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-2.38.3.tgz", + "integrity": "sha512-tczy6RHl0LOVA4p+xezcu3NRjr9A1iLyyfjP9yPIUynvV28YSKH/Ll1iw0jMCjN9jwtaB2HB4aPjv0Uuw2VARw==", "dev": true, "requires": { "del": "3.0.0", "extract-zip": "1.6.6", "kew": "0.7.0", "mkdirp": "0.5.1", - "request": "2.85.0" + "request": "2.86.0" }, "dependencies": { "assert-plus": { @@ -3323,15 +3356,15 @@ } }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, "request": { - "version": "2.85.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", - "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", + "version": "2.86.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.86.0.tgz", + "integrity": "sha512-BQZih67o9r+Ys94tcIW4S7Uu8pthjrQVxhsZ/weOwHbDfACxvIyvnAbzFQxjy1jMtvFSzv5zf4my6cZsJBbVzw==", "dev": true, "requires": { "aws-sign2": "0.7.0", @@ -3350,9 +3383,8 @@ "mime-types": "2.1.18", "oauth-sign": "0.8.2", "performance-now": "2.1.0", - "qs": "6.5.1", + "qs": "6.5.2", "safe-buffer": "5.1.1", - "stringstream": "0.0.5", "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", "uuid": "3.2.1" @@ -3733,7 +3765,7 @@ }, "compression": { "version": "1.7.2", - "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.2.tgz", "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", "requires": { "accepts": "1.3.5", @@ -3991,9 +4023,9 @@ } }, "coveralls": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.0.tgz", - "integrity": "sha512-ZppXR9y5PraUOrf/DzHJY6gzNUhXYE3b9D43xEXs4QYZ7/Oe0Gy0CS+IPKWFfvQFXB3RG9QduaQUFehzSpGAFw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.1.tgz", + "integrity": "sha512-FAzXwiDOYLGDWH+zgoIA+8GbWv50hlx+kpEJyvzLKOdnIBv9uWoVl4DhqGgyUHpiRjAlF8KYZSipWXYtllWH6Q==", "dev": true, "requires": { "js-yaml": "3.7.0", @@ -4107,9 +4139,9 @@ "dev": true }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, "request": { @@ -4134,7 +4166,7 @@ "mime-types": "2.1.18", "oauth-sign": "0.8.2", "performance-now": "2.1.0", - "qs": "6.5.1", + "qs": "6.5.2", "safe-buffer": "5.1.1", "stringstream": "0.0.5", "tough-cookie": "2.3.4", @@ -4163,9 +4195,9 @@ } }, "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "requires": { "bn.js": "4.11.8", "elliptic": "6.4.0" @@ -4180,33 +4212,34 @@ } }, "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { "cipher-base": "1.0.4", "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.10" + "md5.js": "1.3.4", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" } }, "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { "cipher-base": "1.0.4", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "inherits": "2.0.3", - "ripemd160": "2.0.1", + "ripemd160": "2.0.2", "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "sha.js": "2.4.11" } }, "cross-env": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.4.tgz", - "integrity": "sha512-Mx8mw6JWhfpYoEk7PGvHxJMLQwQHORAs8+2bX+C1lGQ4h3GkDb1zbzC2Nw85YH9ZQMlO0BHZxMacgrfPmMFxbg==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.5.tgz", + "integrity": "sha512-GSiNTbvTU3pXzewRKGP0Y+rVP2CzifY2pqSEdtHzLLj41pRdkrgY7e4uSnBoR/pmYaqZr/lwwjg/Q4kNX30hWQ==", "requires": { "cross-spawn": "5.1.0", "is-windows": "1.0.2" @@ -4258,15 +4291,15 @@ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "requires": { - "browserify-cipher": "1.0.0", + "browserify-cipher": "1.0.1", "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", + "pbkdf2": "3.0.16", + "public-encrypt": "4.0.2", "randombytes": "2.0.6", "randomfill": "1.0.4" } @@ -5306,7 +5339,7 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "requires": { "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" } }, "destroy": { @@ -5339,9 +5372,9 @@ "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=" }, "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "requires": { "bn.js": "4.11.8", "miller-rabin": "4.0.1", @@ -5885,7 +5918,7 @@ "hash.js": "1.1.3", "hmac-drbg": "1.0.1", "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", + "minimalistic-assert": "1.0.1", "minimalistic-crypto-utils": "1.0.1" } }, @@ -6834,6 +6867,23 @@ "vary": "1.1.2" }, "dependencies": { + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + } + }, "qs": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", @@ -6855,12 +6905,19 @@ } }, "express-validator": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-5.1.2.tgz", - "integrity": "sha512-dzPMpwBk/nGbF6Tj9HssTB+4q2mWl/w8ydEyBxJwAwIQAbcF0QqXEloCg5XFxtKcrMCzMw/6k/7fEbOiSo0SSw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-5.2.0.tgz", + "integrity": "sha512-FyQ7gAaNwnIYvtfagy+fDrtzjNDFKRVjzplCPDXEu8fxSR/XBdXZHAtLR22446GWlw48LZPSKldqUVmySBWApA==", "requires": { "lodash": "4.17.10", - "validator": "9.4.1" + "validator": "10.2.0" + }, + "dependencies": { + "validator": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.2.0.tgz", + "integrity": "sha512-gz/uknWtNfZTj1BLUzYHDxOoiQ7A4wZ6xPuuE6RpxswR4cNyT4I5kN9jmU0AQr7IBEap9vfYChI2TpssTN6Itg==" + } } }, "extend": { @@ -7161,9 +7218,9 @@ } }, "filesize": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.0.tgz", - "integrity": "sha512-g5OWtoZWcPI56js1DFhIEqyG9tnu/7sG3foHwgS9KGYFMfsYguI3E+PRVCmtmE96VajQIEMRU2OhN+ME589Gdw==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", "dev": true }, "fill-range": { @@ -7487,7 +7544,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", - "optional": true, "requires": { "nan": "2.6.2", "node-pre-gyp": "0.6.39" @@ -7524,7 +7580,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "optional": true, "requires": { "delegates": "1.0.0", "readable-stream": "2.2.9" @@ -7758,7 +7813,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", - "optional": true, "requires": { "fstream": "1.0.11", "inherits": "2.0.3", @@ -7769,7 +7823,6 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "optional": true, "requires": { "aproba": "1.1.1", "console-control-strings": "1.1.0", @@ -7858,7 +7911,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "optional": true, "requires": { "assert-plus": "0.2.0", "jsprim": "1.4.0", @@ -7956,7 +8008,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", - "optional": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.0.2", @@ -8016,7 +8067,6 @@ "version": "0.6.39", "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz", "integrity": "sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==", - "optional": true, "requires": { "detect-libc": "1.0.2", "hawk": "3.1.3", @@ -8045,7 +8095,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", - "optional": true, "requires": { "are-we-there-yet": "1.1.4", "console-control-strings": "1.1.0", @@ -8166,7 +8215,6 @@ "version": "2.81.0", "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "optional": true, "requires": { "aws-sign2": "0.6.0", "aws4": "1.6.0", @@ -8308,7 +8356,6 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", - "optional": true, "requires": { "debug": "2.6.8", "fstream": "1.0.11", @@ -8358,14 +8405,12 @@ "uuid": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", - "optional": true + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=" }, "verror": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "optional": true, "requires": { "extsprintf": "1.0.2" } @@ -8374,7 +8419,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "optional": true, "requires": { "string-width": "1.0.2" } @@ -9552,11 +9596,12 @@ } }, "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "requires": { - "inherits": "2.0.3" + "inherits": "2.0.3", + "safe-buffer": "5.1.1" } }, "hash-sum": { @@ -9570,7 +9615,7 @@ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "requires": { "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" } }, "hasha": { @@ -9620,7 +9665,7 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "requires": { "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", + "minimalistic-assert": "1.0.1", "minimalistic-crypto-utils": "1.0.1" } }, @@ -9966,9 +10011,9 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "in-app-purchase": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/in-app-purchase/-/in-app-purchase-1.9.3.tgz", - "integrity": "sha1-RGCKSDhqcNMYlFUaixOJmecB8go=", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/in-app-purchase/-/in-app-purchase-1.9.4.tgz", + "integrity": "sha1-Eo0tXV5jURyOneSvY/Sj6tFdY78=", "requires": { "request": "2.83.0", "xml-crypto": "0.10.1", @@ -10062,9 +10107,9 @@ } }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "request": { "version": "2.83.0", @@ -10087,7 +10132,7 @@ "mime-types": "2.1.18", "oauth-sign": "0.8.2", "performance-now": "2.1.0", - "qs": "6.5.1", + "qs": "6.5.2", "safe-buffer": "5.1.1", "stringstream": "0.0.5", "tough-cookie": "2.3.4", @@ -11089,7 +11134,7 @@ "dev": true, "requires": { "bluebird": "3.5.1", - "body-parser": "1.18.2", + "body-parser": "1.18.3", "chokidar": "1.7.0", "colors": "1.2.1", "combine-lists": "1.0.1", @@ -11385,14 +11430,14 @@ } }, "karma-coverage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.1.tgz", - "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.2.tgz", + "integrity": "sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw==", "dev": true, "requires": { "dateformat": "1.0.12", "istanbul": "0.4.5", - "lodash": "3.10.1", + "lodash": "4.17.10", "minimatch": "3.0.4", "source-map": "0.5.7" }, @@ -11485,21 +11530,6 @@ "wordwrap": "1.0.0" } }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1.0.9" - } - }, "resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", @@ -12925,17 +12955,6 @@ "requires": { "hash-base": "3.0.4", "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } } }, "mdn-data": { @@ -13091,9 +13110,9 @@ "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=" }, "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimalistic-crypto-utils": { "version": "1.0.1", @@ -13330,70 +13349,14 @@ } }, "mongodb": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.7.tgz", - "integrity": "sha512-n/14kMJEoARXz1qhpNPhUocqy+z5130jhqgEIX1Tsl8UVpHrndQ8et+VmgC4yPK/I8Tcgc93JEMQCHTekBUnNA==", - "requires": { - "mongodb-core": "3.0.7" - } - }, - "mongodb-core": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.7.tgz", - "integrity": "sha512-z6YufO7s40wLiv2ssFshqoLS4+Kf+huhHq6KZ7gDArsKNzXYjAwTMnhEIJ9GQ8fIfBGs5tBLNPfbIDoCKGPmOw==", - "requires": { - "bson": "1.0.6", - "require_optional": "1.0.1" - } - }, - "mongoose": { - "version": "5.0.17", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.0.17.tgz", - "integrity": "sha512-RV1WBQhzW7oOhStR+s7LQYfgQWTJm4hgmU3TqtgTiBCfnj5/sNliX2/SY+ef7tpIZRUqEBV5xITZdAlwQ6Ymdg==", - "requires": { - "async": "2.1.4", - "bson": "1.0.6", - "kareem": "2.0.7", - "lodash.get": "4.4.2", - "mongodb": "3.0.7", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.4.1", - "mquery": "3.0.0", - "ms": "2.0.0", - "regexp-clone": "0.0.1", - "sliced": "1.0.1" - }, - "dependencies": { - "async": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", - "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", - "requires": { - "lodash": "4.17.10" - } - } - } - }, - "mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" - }, - "monk": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/monk/-/monk-6.0.5.tgz", - "integrity": "sha512-NEygZ2fhRkPE9zxyOT/GhEYKIGClMCQ+StsTruZSlAWf1aRsgvdu8suVvOj3KWfdiOtsIMs9gg8eyyVHPNWRwg==", + "version": "2.2.35", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.35.tgz", + "integrity": "sha512-3HGLucDg/8EeYMin3k+nFWChTA85hcYDCw1lPsWR6yV9A6RgKb24BkLiZ9ySZR+S0nfBjWoIUS7cyV6ceGx5Gg==", "dev": true, "requires": { - "debug": "2.6.9", - "mongodb": "2.2.35", - "monk-middleware-cast-ids": "0.2.1", - "monk-middleware-fields": "0.2.0", - "monk-middleware-handle-callback": "0.2.2", - "monk-middleware-options": "0.2.1", - "monk-middleware-query": "0.2.0", - "monk-middleware-wait-for-connection": "0.2.0", - "object-assign": "4.1.1" + "es6-promise": "3.2.1", + "mongodb-core": "2.1.19", + "readable-stream": "2.2.7" }, "dependencies": { "es6-promise": { @@ -13402,27 +13365,6 @@ "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=", "dev": true }, - "mongodb": { - "version": "2.2.35", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.35.tgz", - "integrity": "sha512-3HGLucDg/8EeYMin3k+nFWChTA85hcYDCw1lPsWR6yV9A6RgKb24BkLiZ9ySZR+S0nfBjWoIUS7cyV6ceGx5Gg==", - "dev": true, - "requires": { - "es6-promise": "3.2.1", - "mongodb-core": "2.1.19", - "readable-stream": "2.2.7" - } - }, - "mongodb-core": { - "version": "2.1.19", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.19.tgz", - "integrity": "sha512-Jt4AtWUkpuW03kRdYGxga4O65O1UHlFfvvInslEfLlGi+zDMxbBe3J2NVmN9qPJ957Mn6Iz0UpMtV80cmxCVxw==", - "dev": true, - "requires": { - "bson": "1.0.6", - "require_optional": "1.0.1" - } - }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", @@ -13446,6 +13388,83 @@ } } }, + "mongodb-core": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.19.tgz", + "integrity": "sha512-Jt4AtWUkpuW03kRdYGxga4O65O1UHlFfvvInslEfLlGi+zDMxbBe3J2NVmN9qPJ957Mn6Iz0UpMtV80cmxCVxw==", + "dev": true, + "requires": { + "bson": "1.0.6", + "require_optional": "1.0.1" + } + }, + "mongoose": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.1.1.tgz", + "integrity": "sha512-pmVX//61yX8hV/Db790Cym8CGYd29OYQROYx6ve6ab4LbUW0+GehiBVDlnE9Tvogaz8nndHlVUb+iXwOBw/MNw==", + "requires": { + "async": "2.1.4", + "bson": "1.0.6", + "kareem": "2.0.7", + "lodash.get": "4.4.2", + "mongodb": "3.0.8", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.4.1", + "mquery": "3.0.0", + "ms": "2.0.0", + "regexp-clone": "0.0.1", + "sliced": "1.0.1" + }, + "dependencies": { + "async": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", + "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", + "requires": { + "lodash": "4.17.10" + } + }, + "mongodb": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.8.tgz", + "integrity": "sha512-mj7yIUyAr9xnO2ev8pcVJ9uX7gSum5LLs1qIFoWLxA5Il50+jcojKtaO1/TbexsScZ9Poz00Pc3b86GiSqJ7WA==", + "requires": { + "mongodb-core": "3.0.8" + } + }, + "mongodb-core": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.8.tgz", + "integrity": "sha512-dFxfhH9N7ohuQnINyIl6dqEF8sYOE0WKuymrFf3L3cipJNrx+S8rAbNOTwa00/fuJCjBMJNFsaA+R2N16//UIw==", + "requires": { + "bson": "1.0.6", + "require_optional": "1.0.1" + } + } + } + }, + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + }, + "monk": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/monk/-/monk-6.0.6.tgz", + "integrity": "sha512-bSuADQGwIxBcRzCzQaMoGmiGl30Dr+0iB1FQAQb3VwWwAKbtpDN2wkVHCjthzw/jXhPHWxTQFUtlSt/nSagojQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "mongodb": "2.2.35", + "monk-middleware-cast-ids": "0.2.1", + "monk-middleware-fields": "0.2.0", + "monk-middleware-handle-callback": "0.2.2", + "monk-middleware-options": "0.2.1", + "monk-middleware-query": "0.2.0", + "monk-middleware-wait-for-connection": "0.2.0", + "object-assign": "4.1.1" + } + }, "monk-middleware-cast-ids": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/monk-middleware-cast-ids/-/monk-middleware-cast-ids-0.2.1.tgz", @@ -13594,8 +13613,7 @@ "nan": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", - "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", - "optional": true + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=" }, "nanomatch": { "version": "1.2.9", @@ -13972,9 +13990,9 @@ "querystring-es3": "0.2.1", "readable-stream": "2.3.5", "stream-browserify": "2.0.1", - "stream-http": "2.8.1", + "stream-http": "2.8.2", "string_decoder": "1.0.3", - "timers-browserify": "2.0.6", + "timers-browserify": "2.0.10", "tty-browserify": "0.0.0", "url": "0.11.0", "util": "0.10.3", @@ -15026,15 +15044,15 @@ } }, "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "requires": { "asn1.js": "4.10.1", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" + "pbkdf2": "3.0.16" } }, "parse-cookie-phantomjs": { @@ -15294,15 +15312,15 @@ } }, "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "sha.js": "2.4.11" } }, "pend": { @@ -17425,14 +17443,14 @@ } }, "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "requires": { "bn.js": "4.11.8", "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", "randombytes": "2.0.6" } }, @@ -17575,15 +17593,15 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "puppeteer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.3.0.tgz", - "integrity": "sha512-wx10aPQPpGJVxdB6yoDSLm9p4rCwARUSLMVV0bx++owuqkvviXKyiFM3EWsywaFmjOKNPXacIjplF7xhHiFP3w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.4.0.tgz", + "integrity": "sha512-WDnC1FSHTedvRSS8BZB73tPAx2svUCWFdcxVjrybw8pbKOAB1v5S/pW0EamkqQoL1mXiBc+v8lyYjhhzMHIk1Q==", "dev": true, "requires": { - "debug": "2.6.9", + "debug": "3.1.0", "extract-zip": "1.6.6", "https-proxy-agent": "2.2.1", - "mime": "1.6.0", + "mime": "2.3.1", "progress": "2.0.0", "proxy-from-env": "1.0.0", "rimraf": "2.6.2", @@ -17599,6 +17617,15 @@ "es6-promisify": "5.0.0" } }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "https-proxy-agent": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", @@ -17607,19 +17634,14 @@ "requires": { "agent-base": "4.2.0", "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } } }, + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "dev": true + }, "progress": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", @@ -18514,11 +18536,11 @@ } }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { - "hash-base": "2.0.2", + "hash-base": "3.0.4", "inherits": "2.0.3" } }, @@ -18548,6 +18570,11 @@ "ret": "0.1.15" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "samsam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", @@ -18666,9 +18693,9 @@ } }, "selenium-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/selenium-server/-/selenium-server-3.11.0.tgz", - "integrity": "sha512-Gj4T/2YGBCLUeGnGU+Y3TNQW6WI/KTUES5de4Jc0jdPvTOrdbC/ZIOxI0MITvnQ1HtXqaBHbaaPYcsumX7N/aw==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/selenium-server/-/selenium-server-3.12.0.tgz", + "integrity": "sha512-2qFVvAhn6JwsJ/UnYJjISJq7flIssDMVgaYLoh24SkZJ8YEdjSbMWEK5LTpN1stma5HPHSknaXBe38trf0NUww==", "dev": true }, "semver": { @@ -18800,9 +18827,9 @@ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" }, "sha.js": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", - "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { "inherits": "2.0.3", "safe-buffer": "5.1.1" @@ -18844,9 +18871,9 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "shelljs": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.1.tgz", - "integrity": "sha512-YA/iYtZpzFe5HyWVGrb02FjPxc4EMCfpoU/Phg9fQoyMC72u9598OUBrsU8IrtwAKG0tO8IYaqbaLIw+k3IRGA==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz", + "integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==", "requires": { "glob": "7.1.2", "interpret": "1.1.0", @@ -19670,15 +19697,39 @@ "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" }, "stream-http": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", - "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.2.tgz", + "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==", "requires": { "builtin-status-codes": "3.0.0", "inherits": "2.0.3", - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "to-arraybuffer": "1.0.1", "xtend": "4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "1.0.2", + "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.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.1" + } + } } }, "stream-shift": { @@ -19839,19 +19890,19 @@ "integrity": "sha1-IrD6OkE4WzO+PzMVUbu4N/oM164=" }, "stripe": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/stripe/-/stripe-5.8.0.tgz", - "integrity": "sha512-SNGoKRgnyX0FGHrQ0xX4YmRKesMH4FEb6eQuDpZqi4mo7L/ctGS2vMWQfpdeIChwlSTGcgEAfc0l8q3IPZKTDA==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-5.10.0.tgz", + "integrity": "sha512-AUDmXfNAAY/oOfW87HPO4bDzNWJp8iQd0blVWwwEgPxO1DmEC//foI0C9rhr2ZNsuF6kLypPfNtGB9Uf+RCQzQ==", "requires": { "lodash.isplainobject": "4.0.6", - "qs": "6.5.1", + "qs": "6.5.2", "safe-buffer": "5.1.1" }, "dependencies": { "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" } } }, @@ -19890,7 +19941,7 @@ "formidable": "1.2.1", "methods": "1.1.2", "mime": "1.6.0", - "qs": "6.5.1", + "qs": "6.5.2", "readable-stream": "2.3.5" }, "dependencies": { @@ -19913,9 +19964,9 @@ } }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" } } }, @@ -20241,9 +20292,9 @@ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, "timers-browserify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", - "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "requires": { "setimmediate": "1.0.5" } @@ -20765,6 +20816,21 @@ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" }, + "uri-js": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.1.tgz", + "integrity": "sha512-jpKCA3HjsBfSDOEgxRDAxQCNyHfCPSbq57PqCkd3gAyBuPb3IWxw54EHncqESznIdqSetHfw3D7ylThu2Kcc9A==", + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" + } + } + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -21287,9 +21353,9 @@ } }, "watchpack": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", - "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "requires": { "chokidar": "2.0.2", "graceful-fs": "4.1.11", @@ -21305,13 +21371,13 @@ } }, "webpack": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", - "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", + "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==", "requires": { "acorn": "5.5.3", "acorn-dynamic-import": "2.0.2", - "ajv": "6.3.0", + "ajv": "6.5.0", "ajv-keywords": "3.1.0", "async": "2.6.0", "enhanced-resolve": "3.4.1", @@ -21328,19 +21394,20 @@ "supports-color": "4.5.0", "tapable": "0.2.8", "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.5.0", + "watchpack": "1.6.0", "webpack-sources": "1.1.0", "yargs": "8.0.2" }, "dependencies": { "ajv": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.3.0.tgz", - "integrity": "sha1-FlCkERTvAFdMrBC4Ay2PTBSBLac=", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.0.tgz", + "integrity": "sha512-VDUX1oSajablmiyFyED9L1DFndg0P9h7p1F+NO8FkIzei6EPrR6Zu1n18rd5P8PqaSRd/FrWv3G1TVBqpM83gA==", "requires": { - "fast-deep-equal": "1.1.0", + "fast-deep-equal": "2.0.1", "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "json-schema-traverse": "0.3.1", + "uri-js": "4.2.1" } }, "ansi-regex": { @@ -21361,6 +21428,11 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", @@ -21495,18 +21567,18 @@ } }, "webpack-bundle-analyzer": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.11.1.tgz", - "integrity": "sha512-VKUVkVMc6TWVXmF1OxsBXoiRjYiDRA4XT0KqtbLMDK+891VX7FCuklYwzldND8J2upUcHHnuXYNTP+4mSFi4Kg==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.12.0.tgz", + "integrity": "sha512-fuP11YxvAd8DYuwC4otr7hDwx7cRutew49dz0+PTlVPl544aqFqjGLCdxKz9c03eWnBMpMFTK5SG4SDrUmZ+JA==", "dev": true, "requires": { "acorn": "5.5.3", - "bfj-node4": "5.2.1", + "bfj-node4": "5.3.1", "chalk": "2.4.1", "commander": "2.15.0", "ejs": "2.5.7", "express": "4.16.3", - "filesize": "3.6.0", + "filesize": "3.6.1", "gzip-size": "4.1.0", "lodash": "4.17.10", "mkdirp": "0.5.1", @@ -21556,9 +21628,9 @@ } }, "webpack-hot-middleware": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.22.1.tgz", - "integrity": "sha512-wbjnvcc3HOPKRE/L0KmTv2MrByfLFOJlVFNKo5Svxy+1plR/bMIMYQDgB4pUOzJXhiBLU7Clp6P1SSzS89iKxA==", + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.22.2.tgz", + "integrity": "sha512-uccPS6b/UlXJoNCS+3fuc40z2KZgO0qQhnu+Ne1iZiHTy9s5fMCJAV+Vc8VTVkN203UphsxQmkumxYeHLiQ5jg==", "dev": true, "requires": { "ansi-html": "0.0.7", diff --git a/package.json b/package.json index 78f2872b2c..f58602da38 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,16 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "4.41.5", + "version": "4.42.6", "main": "./website/server/index.js", "dependencies": { "@slack/client": "^3.8.1", "accepts": "^1.3.5", - "amazon-payments": "^0.2.6", + "amazon-payments": "^0.2.7", "amplitude": "^3.5.0", "apidoc": "^0.17.5", - "autoprefixer": "^8.4.1", - "aws-sdk": "^2.230.1", + "autoprefixer": "^8.5.0", + "aws-sdk": "^2.239.1", "axios": "^0.18.0", "axios-progress-bar": "^1.2.0", "babel-core": "^6.26.3", @@ -26,20 +26,20 @@ "babel-register": "^6.6.0", "babel-runtime": "^6.11.6", "bcrypt": "^2.0.0", - "body-parser": "^1.15.0", + "body-parser": "^1.18.3", "bootstrap": "^4.1.1", "bootstrap-vue": "^2.0.0-rc.9", "compression": "^1.7.2", "cookie-session": "^1.2.0", "coupon-code": "^0.4.5", - "cross-env": "^5.1.4", + "cross-env": "^5.1.5", "css-loader": "^0.28.11", "csv-stringify": "^2.1.0", "cwait": "^1.1.1", "domain-middleware": "~0.1.0", "express": "^4.16.3", "express-basic-auth": "^1.1.5", - "express-validator": "^5.1.2", + "express-validator": "^5.2.0", "extract-text-webpack-plugin": "^3.0.2", "glob": "^7.1.2", "got": "^8.3.1", @@ -52,7 +52,7 @@ "hellojs": "^1.15.1", "html-webpack-plugin": "^3.2.0", "image-size": "^0.6.2", - "in-app-purchase": "^1.9.3", + "in-app-purchase": "^1.9.4", "intro.js": "^2.9.3", "jquery": ">=3.0.0", "js2xmlparser": "^3.0.0", @@ -61,7 +61,7 @@ "method-override": "^2.3.5", "moment": "^2.22.1", "moment-recur": "^1.0.7", - "mongoose": "^5.0.17", + "mongoose": "^5.1.1", "morgan": "^1.7.0", "nconf": "^0.10.0", "node-gcm": "^0.14.4", @@ -82,8 +82,8 @@ "pusher": "^1.3.0", "rimraf": "^2.4.3", "sass-loader": "^7.0.0", - "shelljs": "^0.8.1", - "stripe": "^5.8.0", + "shelljs": "^0.8.2", + "stripe": "^5.9.0", "superagent": "^3.8.3", "svg-inline-loader": "^0.8.0", "svg-url-loader": "^2.3.2", @@ -103,7 +103,7 @@ "vue-template-compiler": "^2.5.16", "vuedraggable": "^2.15.0", "vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#5d237615463a84a23dd6f3f77c6ab577d68593ec", - "webpack": "^3.11.0", + "webpack": "^3.12.0", "webpack-merge": "^4.0.0", "winston": "^2.4.2", "winston-loggly-bulk": "^2.0.2", @@ -139,15 +139,15 @@ "apidoc": "gulp apidoc" }, "devDependencies": { - "@vue/test-utils": "^1.0.0-beta.15", + "@vue/test-utils": "^1.0.0-beta.16", "babel-plugin-istanbul": "^4.1.6", "babel-plugin-syntax-object-rest-spread": "^6.13.0", "chai": "^4.1.2", "chai-as-promised": "^7.1.1", "chalk": "^2.4.1", - "chromedriver": "^2.38.2", + "chromedriver": "^2.38.3", "connect-history-api-fallback": "^1.1.0", - "coveralls": "^3.0.0", + "coveralls": "^3.0.1", "cross-spawn": "^6.0.5", "eslint": "^4.19.1", "eslint-config-habitrpg": "^4.0.0", @@ -163,7 +163,7 @@ "karma-babel-preprocessor": "^7.0.0", "karma-chai-plugins": "^0.9.0", "karma-chrome-launcher": "^2.2.0", - "karma-coverage": "^1.1.1", + "karma-coverage": "^1.1.2", "karma-mocha": "^1.3.0", "karma-mocha-reporter": "^2.2.5", "karma-sinon-chai": "^1.3.4", @@ -173,17 +173,17 @@ "karma-webpack": "^3.0.0", "lcov-result-merger": "^2.0.0", "mocha": "^5.1.1", - "monk": "^6.0.5", + "monk": "^6.0.6", "nightwatch": "^0.9.21", - "puppeteer": "^1.3.0", + "puppeteer": "^1.4.0", "require-again": "^2.0.0", - "selenium-server": "^3.11.0", + "selenium-server": "^3.12.0", "sinon": "^4.5.0", "sinon-chai": "^3.0.0", "sinon-stub-promise": "^4.0.0", - "webpack-bundle-analyzer": "^2.11.1", + "webpack-bundle-analyzer": "^2.12.0", "webpack-dev-middleware": "^2.0.5", - "webpack-hot-middleware": "^2.22.1" + "webpack-hot-middleware": "^2.22.2" }, "optionalDependencies": { "memwatch-next": "^0.3.0", diff --git a/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js b/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js index a7d750fdb9..0ea0c966aa 100644 --- a/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js @@ -123,7 +123,8 @@ describe('GET /challenges/:challengeId/members', () => { }); }); - it('supports using req.query.lastId to get more members', async () => { + it('supports using req.query.lastId to get more members', async function () { + this.timeout(30000); // @TODO: times out after 8 seconds let group = await generateGroup(user, {type: 'party', name: generateUUID()}); let challenge = await generateChallenge(user, group); diff --git a/test/api/v3/integration/groups/GET-groups_groupId_members.test.js b/test/api/v3/integration/groups/GET-groups_groupId_members.test.js index 36fa584466..99be54d4a9 100644 --- a/test/api/v3/integration/groups/GET-groups_groupId_members.test.js +++ b/test/api/v3/integration/groups/GET-groups_groupId_members.test.js @@ -142,7 +142,8 @@ describe('GET /groups/:groupId/members', () => { }); }); - it('supports using req.query.lastId to get more members', async () => { + it('supports using req.query.lastId to get more members', async function () { + this.timeout(30000); // @TODO: times out after 8 seconds let leader = await generateUser({balance: 4}); let group = await generateGroup(leader, {type: 'guild', privacy: 'public', name: generateUUID()}); diff --git a/test/api/v3/unit/libs/payments/payments.test.js b/test/api/v3/unit/libs/payments/payments.test.js index 85e6d91676..d67c51afe2 100644 --- a/test/api/v3/unit/libs/payments/payments.test.js +++ b/test/api/v3/unit/libs/payments/payments.test.js @@ -632,6 +632,15 @@ describe('payments/index', () => { expect(user.sendMessage).to.be.calledWith(recipient, { receiverMsg: msg, senderMsg: msg }); }); + it('sends a message from purchaser to recipient wtih custom message', async () => { + data.gift.message = 'giftmessage'; + + await api.buyGems(data); + + const msg = `\`Hello recipient, sender has sent you 4 gems!\` ${data.gift.message}`; + expect(user.sendMessage).to.be.calledWith(recipient, { receiverMsg: msg, senderMsg: msg }); + }); + it('sends a push notification if user did not gift to self', async () => { await api.buyGems(data); expect(notifications.sendNotification).to.be.calledOnce; diff --git a/test/client/unit/specs/components/categories/categoryTags.js b/test/client/unit/specs/components/categories/categoryTags.js new file mode 100644 index 0000000000..a0ea2e69b7 --- /dev/null +++ b/test/client/unit/specs/components/categories/categoryTags.js @@ -0,0 +1,65 @@ +import {shallow} from '@vue/test-utils'; + +import CategoryTags from 'client/components/categories/categoryTags.vue'; + +describe('Category Tags', () => { + let wrapper; + + beforeEach(function () { + wrapper = shallow(CategoryTags, { + propsData: { + categories: [], + }, + slots: { + default: '

This is a slot.

', + }, + mocks: { + $t: (string) => string, + }, + }); + }); + + it('displays a category', () => { + wrapper.setProps({ + categories: [ + { + name: 'test', + }, + ], + }); + expect(wrapper.contains('.category-label')).to.eq(true); + expect(wrapper.find('.category-label').text()).to.eq('test'); + }); + + it('displays a habitica official in purple', () => { + wrapper.setProps({ + categories: [ + { + name: 'habitica_official', + }, + ], + }); + expect(wrapper.contains('.category-label-purple')).to.eq(true); + expect(wrapper.find('.category-label').text()).to.eq('habitica_official'); + }); + + it('displays owner label', () => { + wrapper.setProps({ + owner: true, + }); + expect(wrapper.contains('.category-label-blue')).to.eq(true); + expect(wrapper.find('.category-label').text()).to.eq('owned'); + }); + + it('displays member label', () => { + wrapper.setProps({ + member: true, + }); + expect(wrapper.contains('.category-label-green')).to.eq(true); + expect(wrapper.find('.category-label').text()).to.eq('joined'); + }); + + it('displays additional content at the end', () => { + expect(wrapper.find('p').text()).to.eq('This is a slot.'); + }); +}); \ No newline at end of file diff --git a/test/client/unit/specs/components/sidebarSection.js b/test/client/unit/specs/components/sidebarSection.js new file mode 100644 index 0000000000..23b651b7fc --- /dev/null +++ b/test/client/unit/specs/components/sidebarSection.js @@ -0,0 +1,54 @@ +import {shallow} from '@vue/test-utils'; + +import SidebarSection from 'client/components/sidebarSection.vue'; + +describe('Sidebar Section', () => { + let wrapper; + + beforeEach(function () { + wrapper = shallow(SidebarSection, { + propsData: { + title: 'Hello World', + }, + slots: { + default: '

This is a test.

', + }, + }); + }); + + it('displays title', () => { + expect(wrapper.find('h3').text()).to.eq('Hello World'); + }); + + it('displays contents', () => { + expect(wrapper.find('.section-body').find('p').text()).to.eq('This is a test.'); + }); + + it('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', () => { + expect(wrapper.find('.section-body').element.style.display).to.not.eq('none'); + wrapper.find('.section-toggle').trigger('click'); + expect(wrapper.find('.section-body').element.style.display).to.eq('none'); + wrapper.find('.section-toggle').trigger('click'); + expect(wrapper.find('.section-body').element.style.display).to.not.eq('none'); + }); + + it('can hide contents by default', () => { + wrapper = shallow(SidebarSection, { + propsData: { + title: 'Hello World', + show: false, + }, + slots: { + default: '

This is a test.

', + }, + }); + + expect(wrapper.find('.section-body').element.style.display).to.eq('none'); + }); +}); \ No newline at end of file diff --git a/test/common/fns/updateStats.test.js b/test/common/fns/updateStats.test.js index 60bd489db2..de14a8ffff 100644 --- a/test/common/fns/updateStats.test.js +++ b/test/common/fns/updateStats.test.js @@ -122,11 +122,10 @@ describe('common.fns.updateStats', () => { updateStats(user, { exp: 3000, }); - expect(user.addNotification).to.be.calledTwice; // once is for drops enabled - expect(user.addNotification).to.be.calledWith('LEVELED_UP', { + expect(user._tmp.leveledUp).to.eql([{ initialLvl, newLvl: user.stats.lvl, - }); + }]); }); it('add user notification when rebirth is enabled', () => { diff --git a/test/common/ops/buy/buySpecialSpell.js b/test/common/ops/buy/buySpell.js similarity index 90% rename from test/common/ops/buy/buySpecialSpell.js rename to test/common/ops/buy/buySpell.js index bd4b0cf22c..02d0bda6a4 100644 --- a/test/common/ops/buy/buySpecialSpell.js +++ b/test/common/ops/buy/buySpell.js @@ -1,4 +1,4 @@ -import buySpecialSpell from '../../../../website/common/script/ops/buy/buySpecialSpell'; +import {BuySpellOperation} from '../../../../website/common/script/ops/buy/buySpell'; import { BadRequest, NotFound, @@ -15,6 +15,11 @@ describe('shared.ops.buySpecialSpell', () => { let user; let analytics = {track () {}}; + function buySpecialSpell (_user, _req, _analytics) { + const buyOp = new BuySpellOperation(_user, _req, _analytics); + + return buyOp.purchase(); + } beforeEach(() => { user = generateUser(); sinon.stub(analytics, 'track'); diff --git a/website/client/app.vue b/website/client/app.vue index 3f9031a071..8471bb1adb 100644 --- a/website/client/app.vue +++ b/website/client/app.vue @@ -44,8 +44,6 @@ div router-view app-footer audio#sound(autoplay, ref="sound") - source#oggSource(type="audio/ogg", :src="sound.oggSource") - source#mp3Source(type="audio/mp3", :src="sound.mp3Source") - - diff --git a/website/client/components/challenges/findChallenges.vue b/website/client/components/challenges/findChallenges.vue index 8bfe6c6e1b..6b3308adae 100644 --- a/website/client/components/challenges/findChallenges.vue +++ b/website/client/components/challenges/findChallenges.vue @@ -15,7 +15,7 @@ .svg-icon.positive-icon(v-html="icons.positiveIcon") span(v-once) {{$t('createChallenge')}} .row - .col-12.col-md-6(v-for='challenge in filteredChallenges', v-if='!memberOf(challenge)') + .col-12.col-md-6(v-for='challenge in filteredChallenges') challenge-item(:challenge='challenge') .row .col-12.text-center @@ -105,9 +105,6 @@ export default { }, }, methods: { - memberOf (challenge) { - return this.user.challenges.indexOf(challenge._id) !== -1; - }, updateSearch (eventData) { this.search = eventData.searchTerm; this.page = 0; diff --git a/website/client/components/challenges/groupChallenges.vue b/website/client/components/challenges/groupChallenges.vue index ceeeccf370..1415b921a9 100644 --- a/website/client/components/challenges/groupChallenges.vue +++ b/website/client/components/challenges/groupChallenges.vue @@ -6,131 +6,87 @@ div .svg-icon.challenge-icon(v-html="icons.challengeIcon") h4(v-once) {{ $t('haveNoChallenges') }} p(v-once) {{ $t('challengeDetails') }} - router-link.title(:to="{ name: 'challenge', params: { challengeId: challenge._id } }", v-for='challenge in challenges',:key='challenge._id') - .col-12.challenge-item - .row - .col-9 - router-link.title(:to="{ name: 'challenge', params: { challengeId: challenge._id } }") - strong(v-markdown='challenge.name') - p(v-markdown='challenge.summary || challenge.name') - div - .svg-icon.member-icon(v-html="icons.memberIcon") - .member-count {{challenge.memberCount}} - .col-3 - div - span.svg-icon.gem(v-html="icons.gemIcon") - span.prize {{challenge.prize}} - div.prize-title Prize - .col-12.text-center - button.btn.btn-secondary(@click='createChallenge()') {{ $t('createChallenge') }} + button.btn.btn-secondary(@click='createChallenge()') {{ $t('createChallenge') }} + template(v-else) + challenge-item(v-for='challenge in challenges',:challenge='challenge',:key='challenge._id',:fullLayout='false') + .col-12.text-center + button.btn.btn-secondary(@click='createChallenge()') {{ $t('createChallenge') }} - diff --git a/website/client/components/challenges/myChallenges.vue b/website/client/components/challenges/myChallenges.vue index c80d73763b..a512c355f4 100644 --- a/website/client/components/challenges/myChallenges.vue +++ b/website/client/components/challenges/myChallenges.vue @@ -63,8 +63,6 @@ \ No newline at end of file diff --git a/website/client/components/groups/chat.vue b/website/client/components/groups/chat.vue new file mode 100644 index 0000000000..2ba54afb4e --- /dev/null +++ b/website/client/components/groups/chat.vue @@ -0,0 +1,222 @@ + + + + + diff --git a/website/client/components/groups/group.vue b/website/client/components/groups/group.vue index ff5372f734..28436ff084 100644 --- a/website/client/components/groups/group.vue +++ b/website/client/components/groups/group.vue @@ -9,8 +9,10 @@ .row .col-12.col-md-6.title-details h1 {{group.name}} - strong.float-left(v-once) {{$t('groupLeader')}} - span.leader.float-left(v-if='group.leader.profile', @click='showMemberProfile(group.leader)') : {{group.leader.profile.name}} + div + span.mr-1.ml-0 + strong(v-once) {{$t('groupLeader')}}: + user-link.mx-1(:user="group.leader") .col-12.col-md-6 .row.icon-row .col-4.offset-4(v-bind:class="{ 'offset-8': isParty }") @@ -25,25 +27,16 @@ .svg-icon.gem(v-html="icons.gem") span.number {{group.balance * 4}} div(v-once) {{ $t('guildBank') }} - .row.chat-row - .col-12 - h3(v-once) {{ $t('chat') }} - .row.new-message-row - textarea(:placeholder="!isParty ? $t('chatPlaceholder') : $t('partyChatPlaceholder')", v-model='newMessage', @keydown='updateCarretPosition', @keyup.ctrl.enter='sendMessage()') - autocomplete(:text='newMessage', v-on:select="selectedAutocomplete", :coords='coords', :chat='group.chat') - .row.chat-actions - .col-6.chat-receive-actions - button.btn.btn-secondary.float-left.fetch(v-once, @click='fetchRecentMessages()') {{ $t('fetchRecentMessages') }} - button.btn.btn-secondary.float-left(v-once, @click='reverseChat()') {{ $t('reverseChat') }} - .col-6.chat-send-actions - button.btn.btn-secondary.send-chat.float-right(v-once, @click='sendMessage()') {{ $t('send') }} - community-guidelines + chat( + :label="$t('chat')", + :group="group", + :placeholder="!isParty ? $t('chatPlaceholder') : $t('partyChatPlaceholder')", + @fetchRecentMessages="fetchRecentMessages()" + ) + template(slot="additionRow") .row(v-if='showNoNotificationsMessage') .col-12.no-notifications | {{$t('groupNoNotifications')}} - .row - .col-12.hr - chat-message(:chat.sync='group.chat', :group-id='group._id', :group-name='group.name') .col-12.col-sm-4.sidebar .row(:class='{"guild-background": !isParty}') .col-12 @@ -61,47 +54,16 @@ // @TODO: V2 button.btn.btn-primary(v-once, v-if='!isLeader') {{$t('messageGuildLeader')}} // Suggest making the button visible to the leader too - useful for them to test how the feature works or to send a note to themself. -- Alys .button-container // @TODO: V2 button.btn.btn-primary(v-once, v-if='isMember && !isParty') {{$t('donateGems')}} // Suggest removing the isMember restriction - it's okay if non-members donate to a public guild. Also probably allow it for parties if parties can buy imagery. -- Alys - .section-header(v-if='isParty') - quest-sidebar-section(@toggle='toggleQuestSection', :show='sections.quest', :group='group') - .section-header(v-if='!isParty') - .row - .col-10 - h3(v-once) {{ $t('guildSummary') }} - .col-2 - .toggle-up(@click="sections.summary = !sections.summary", v-if="sections.summary") - .svg-icon(v-html="icons.upIcon") - .toggle-down(@click="sections.summary = !sections.summary", v-if="!sections.summary") - .svg-icon(v-html="icons.downIcon") - .section(v-if="sections.summary") + div + quest-sidebar-section(:group='group', v-if='isParty') + sidebar-section(:title="$t('guildSummary')", v-if='!isParty') p(v-markdown='group.summary') - .section-header - .row - .col-10 - h3 {{ $t('groupDescription') }} - .col-2 - .toggle-up(@click="sections.description = !sections.description", v-if="sections.description") - .svg-icon(v-html="icons.upIcon") - .toggle-down(@click="sections.description = !sections.description", v-if="!sections.description") - .svg-icon(v-html="icons.downIcon") - .section(v-if="sections.description") + sidebar-section(:title="$t('groupDescription')") p(v-markdown='group.description') - .section-header.challenge - .row - .col-10.information-header - h3(v-once) - | {{ $t('challenges') }} - #groupPrivateDescOrChallengeInfo.icon.tooltip-wrapper(:title="isParty ? $t('challengeDetails') : $t('privateDescription')") - .svg-icon(v-html='icons.information') - b-tooltip( - :title="isParty ? $t('challengeDetails') : $t('privateDescription')", - target="groupPrivateDescOrChallengeInfo", - ) - .col-2 - .toggle-up(@click="sections.challenges = !sections.challenges", v-if="sections.challenges") - .svg-icon(v-html="icons.upIcon") - .toggle-down(@click="sections.challenges = !sections.challenges", v-if="!sections.challenges") - .svg-icon(v-html="icons.downIcon") - .section(v-if="sections.challenges") + sidebar-section( + :title="$t('challenges')", + :tooltip="isParty ? $t('challengeDetails') : $t('privateDescription')" + ) group-challenges(:groupId='searchId') div.text-center button.btn.btn-danger(v-if='isMember', @click='clickLeave()') {{ isParty ? $t('leaveParty') : $t('leaveGroup') }} @@ -124,10 +86,6 @@ color: $purple-200; } - .leader:hover { - cursor: pointer; - } - .button-container { margin-bottom: 1em; @@ -270,29 +228,6 @@ margin-right: .3em; } - .information-header { - h3, .tooltip-wrapper { - display: inline-block; - } - - .tooltip-wrapper { - width: 15px; - margin-left: 1.2em; - } - } - - .section-header { - border-top: 1px solid #e1e0e3; - margin-top: 1em; - padding-top: 1em; - } - - .section-header.challenge { - border-bottom: 1px solid #e1e0e3; - margin-bottom: 1em; - padding-bottom: 1em; - } - .hr { width: 100%; height: 20px; @@ -316,7 +251,6 @@ diff --git a/website/client/components/groups/membersModal.vue b/website/client/components/groups/membersModal.vue index 8b63c6b21a..c9ca4ca013 100644 --- a/website/client/components/groups/membersModal.vue +++ b/website/client/components/groups/membersModal.vue @@ -10,13 +10,18 @@ div .col-6 button(type="button" aria-label="Close" class="close", @click='close()') span(aria-hidden="true") × - .row - .form-group.col-6 - input.form-control.search(type="text", :placeholder="$t('search')", v-model='searchTerm') - .col-5.offset-1 - span.dropdown-label {{ $t('sortBy') }} - b-dropdown(:text="$t('sort')", right=true) - b-dropdown-item(v-for='sortOption in sortOptions', @click='sort(sortOption)', :key='sortOption.value') {{sortOption.text}} + .row.d-flex.align-items-center + .col-4 + input.form-control.input-search(type="text", :placeholder="$t('search')", v-model='searchTerm') + .col + select.form-control(@change='changeSortOption($event)') + option(v-for='sortOption in sortOptions', :value='sortOption.value') {{sortOption.text}} + .col-3 + select.form-control(@change='changeSortDirection($event)') + option(v-for='sortDirection in sortDirections', :value='sortDirection.value') {{sortDirection.text}} + + .row.apply-options.d-flex.justify-content-center(v-if='sortDirty') + a(@click='applySortOptions()') {{ $t('applySortToHeader') }} .row(v-if='invites.length > 0') .col-6.offset-3.nav .nav-item(@click='viewMembers()', :class="{active: selectedPage === 'members'}") {{ $t('members') }} @@ -69,14 +74,30 @@ div diff --git a/website/client/components/header/index.vue b/website/client/components/header/index.vue index e679b2c5cf..5e032622a7 100644 --- a/website/client/components/header/index.vue +++ b/website/client/components/header/index.vue @@ -18,7 +18,7 @@ div @resized="setPartyMembersWidth($event)" ) member-details( - v-for="(member, $index) in partyMembers", + v-for="(member, $index) in sortedPartyMembers", :key="member._id", v-if="member._id !== user._id && $index < membersToShow", :member="member", @@ -55,7 +55,6 @@ div } #app-header { - margin-top: 56px; padding-left: 24px; padding-top: 9px; padding-bottom: 8px; @@ -107,6 +106,7 @@ div diff --git a/website/client/components/inventory/stable/index.vue b/website/client/components/inventory/stable/index.vue index b118f8f679..641e091b1d 100644 --- a/website/client/components/inventory/stable/index.vue +++ b/website/client/components/inventory/stable/index.vue @@ -47,7 +47,7 @@ label.custom-control-label(v-once, :for="mountGroup.key") {{ mountGroup.label }} div.form-group.clearfix - h3.float-left Hide Missing + h3.float-left {{ $t('hideMissing') }} toggle-switch.float-right( :checked="hideMissing", @change="updateHideMissing" @@ -935,10 +935,22 @@ } }, async feedAction (petKey, foodKey) { - const result = await this.$store.dispatch('common:feed', {pet: petKey, food: foodKey}); - if (result.message) this.text(result.message); - if (this.user.preferences.suppressModals.raisePet) return; - if (this.user.items.pets[petKey] === -1) this.$root.$emit('habitica::mount-raised', petKey); + try { + const result = await this.$store.dispatch('common:feed', {pet: petKey, food: foodKey}); + + if (result.message) this.text(result.message); + if (this.user.preferences.suppressModals.raisePet) return; + if (this.user.items.pets[petKey] === -1) this.$root.$emit('habitica::mount-raised', petKey); + } catch (e) { + const errorMessage = e.message || e; + + this.$store.dispatch('snackbars:add', { + title: 'Habitica', + text: errorMessage, + type: 'error', + timeout: true, + }); + } }, closeHatchPetDialog () { this.$root.$emit('bv::hide::modal', 'hatching-modal'); diff --git a/website/client/components/shops/market/sellModal.vue b/website/client/components/shops/market/sellModal.vue index b22bd3fb74..a3c2f654da 100644 --- a/website/client/components/shops/market/sellModal.vue +++ b/website/client/components/shops/market/sellModal.vue @@ -26,7 +26,7 @@ b.how-many-to-sell {{ $t('howManyToSell') }} div - b-input.itemsToSell(type="number", v-model="selectedAmountToSell", :max="itemCount", min="1", @keyup.native="preventNegative($event)") + b-input.itemsToSell(type="number", v-model="selectedAmountToSell", :max="itemCount", min="1", @keyup.native="preventNegative($event)", step="1") span.svg-icon.inline.icon-32(aria-hidden="true", v-html="icons.gold") span.value {{ item.value }} @@ -144,11 +144,16 @@ preventNegative ($event) { let value = $event.target.value; - if (isNaN($event.target.valueAsNumber) || Number(value) < 0) { + if (Number(value) < 0) { this.selectedAmountToSell = 0; } }, sellItems () { + if (!Number.isInteger(Number(this.selectedAmountToSell))) { + this.selectedAmountToSell = 0; + return; + } + this.$store.dispatch('shops:sellItems', { type: this.itemType, key: this.item.key, diff --git a/website/client/components/shops/quests/index.vue b/website/client/components/shops/quests/index.vue index e3f9171745..f63b93fa94 100644 --- a/website/client/components/shops/quests/index.vue +++ b/website/client/components/shops/quests/index.vue @@ -139,7 +139,7 @@ h4.popover-content-title(v-else) {{ item.text }} .popover-content-text(v-if='item.locked && item.key === "lostMasterclasser1"') {{ `${$t('questUnlockLostMasterclasser')}` }} .popover-content-text(v-if='item.locked && item.unlockCondition && item.unlockCondition.incentiveThreshold') {{ `${$t('loginIncentiveQuest', {count: item.unlockCondition.incentiveThreshold})}` }} - .popover-content-text(v-if='item.locked && item.previous') {{ `${$t('unlockByQuesting', {title: item.previous})}` }} + .popover-content-text(v-if='item.locked && item.previous && isBuyingDependentOnPrevious(item)') {{ `${$t('unlockByQuesting', {title: item.previous})}` }} .popover-content-text(v-if='item.lvl > user.stats.lvl') {{ `${$t('mustLvlQuest', {level: item.lvl})}` }} questInfo(v-if='!item.locked', :quest="item") @@ -486,6 +486,11 @@ export default { this.$root.$emit('bv::show::modal', 'buy-quest-modal'); }, + isBuyingDependentOnPrevious (item) { + let questsNotDependentToPrevious = ['moon2', 'moon3']; + if (item.key in questsNotDependentToPrevious) return false; + return true; + }, }, }; diff --git a/website/client/components/sidebarSection.vue b/website/client/components/sidebarSection.vue new file mode 100644 index 0000000000..24f150ef00 --- /dev/null +++ b/website/client/components/sidebarSection.vue @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/website/client/components/snackbars/notification.vue b/website/client/components/snackbars/notification.vue index ec544e6c93..256806f6dc 100644 --- a/website/client/components/snackbars/notification.vue +++ b/website/client/components/snackbars/notification.vue @@ -130,7 +130,6 @@ export default { }; }, created () { - // @TODO the notifications always close even if timeout is false let timeout = this.notification.hasOwnProperty('timeout') ? this.notification.timeout : true; if (timeout) { let delay = this.notification.delay || 1500; diff --git a/website/client/components/snackbars/notifications.vue b/website/client/components/snackbars/notifications.vue index 18705af494..22b0d78030 100644 --- a/website/client/components/snackbars/notifications.vue +++ b/website/client/components/snackbars/notifications.vue @@ -1,6 +1,6 @@ @@ -8,13 +8,23 @@ .notifications { position: fixed; right: 10px; - top: 65px; width: 350px; - z-index: 1041; // 1041 is above modal backgrounds + z-index: 1070; // 1070 is above modal backgrounds + + &-top-pos { + &-normal { + top: 65px; + } + + &-sleeping { + top: 105px; + } + } } \ No newline at end of file diff --git a/website/client/components/userMenu/profileStats.vue b/website/client/components/userMenu/profileStats.vue index a0a2cc55bd..01f9fc8383 100644 --- a/website/client/components/userMenu/profileStats.vue +++ b/website/client/components/userMenu/profileStats.vue @@ -55,7 +55,6 @@ h3(v-if="label !== 'skip'") {{ label }} h3(v-else) {{ $t('background') }} - .row.pet-mount-row .col-12.col-md-6 h2.text-center(v-once) {{ $t('pets') }} @@ -134,15 +133,15 @@ .row .col-12.col-md-3(v-for='(statInfo, stat) in allocateStatsList') .box.white.row.col-12 - .col-12.col-md-8 + .col-12.col-md-9 div(:class='stat') {{ $t(stats[stat].title) }} .number {{ user.stats[stat] }} .points {{$t('pts')}} - .col-12.col-md-4 + .col-12.col-md-3 div .up(v-if='user.stats.points', @click='allocate(stat)') div - .down(@click='deallocate(stat)') + .down(@click='deallocate(stat)', v-if='user.stats.points') .row.save-row .col-12.col-md-6.offset-md-3.text-center button.btn.btn-primary(@click='saveAttributes()', :disabled='loading') {{ this.loading ? $t('loading') : $t('save') }} @@ -212,7 +211,7 @@ popover: 'perText', }, }, - statsAtStart: { + statUpdates: { str: 0, int: 0, con: 0, @@ -221,9 +220,6 @@ content: Content, }; }, - mounted () { - this.statsAtStart = Object.assign({}, this.user.stats); - }, computed: { ...mapState({ flatGear: 'content.gear.flat', @@ -291,25 +287,33 @@ }, allocate (stat) { allocate(this.user, {query: { stat }}); + this.statUpdates[stat] += 1; }, deallocate (stat) { if (this.user.stats[stat] === 0) return; this.user.stats[stat] -= 1; this.user.stats.points += 1; + this.statUpdates[stat] -= 1; }, async saveAttributes () { this.loading = true; const statUpdates = {}; ['str', 'int', 'per', 'con'].forEach(stat => { - const diff = this.user.stats[stat] - this.statsAtStart[stat]; - statUpdates[stat] = diff; + if (this.statUpdates[stat] > 0) statUpdates[stat] = this.statUpdates[stat]; }); await axios.post('/api/v3/user/allocate-bulk', { stats: statUpdates, }); + this.statUpdates = { + str: 0, + int: 0, + con: 0, + per: 0, + }; + this.loading = false; }, allocateNow () { diff --git a/website/client/libs/spellQueue.js b/website/client/libs/spellQueue.js deleted file mode 100644 index 3fa82c0f97..0000000000 --- a/website/client/libs/spellQueue.js +++ /dev/null @@ -1,40 +0,0 @@ -let store = {}; - -let currentCount = 1; -let currentSpell = { - key: '', -}; -let timer = null; - -// @TODO: We are using this lib in actions, so we have to inject store -function setStore (storeInc) { - store = storeInc; -} - -function castSpell () { - clearTimeout(timer); - - currentSpell.quantity = currentCount; - store.dispatch('user:castSpell', currentSpell); - - currentCount = 0; -} - -function queue (spell, storeInc) { - setStore(storeInc); - - currentCount += 1; - - if (currentSpell.key && spell.key !== currentSpell.key) { - castSpell(); - } - - currentSpell = spell; - - clearTimeout(timer); - timer = setTimeout(() => { - castSpell(); - }, 1500); -} - -export default { queue }; diff --git a/website/client/libs/staffList.js b/website/client/libs/staffList.js new file mode 100644 index 0000000000..96eb262fc3 --- /dev/null +++ b/website/client/libs/staffList.js @@ -0,0 +1,97 @@ +export default [ + { + name: 'beffymaroo', + type: 'Staff', + uuid: '9fe7183a-4b79-4c15-9629-a1aee3873390', + }, + // { + // name: 'lefnire', + // type: 'Staff', + // uuid: '00000000-0000-4000-9000-000000000000', + // }, + { + name: 'Lemoness', + type: 'Staff', + uuid: '7bde7864-ebc5-4ee2-a4b7-1070d464cdb0', + }, + { + name: 'paglias', + type: 'Staff', + uuid: 'ed4c688c-6652-4a92-9d03-a5a79844174a', + }, + { + name: 'redphoenix', + type: 'Staff', + uuid: 'cb46ad54-8c78-4dbc-a8ed-4e3185b2b3ff', + }, + { + name: 'SabreCat', + type: 'Staff', + uuid: '7f14ed62-5408-4e1b-be83-ada62d504931', + }, + { + name: 'TheHollidayInn', + type: 'Staff', + uuid: '206039c6-24e4-4b9f-8a31-61cbb9aa3f66', + }, + { + name: 'viirus', + type: 'Staff', + uuid: 'a327d7e0-1c2e-41be-9193-7b30b484413f', + }, + { + name: 'It\'s Bailey', + type: 'Moderator', + uuid: '9da65443-ed43-4c21-804f-d260c1361596', + }, + { + name: 'Alys', + type: 'Moderator', + uuid: 'd904bd62-da08-416b-a816-ba797c9ee265', + }, + { + name: 'Blade', + type: 'Moderator', + uuid: '75f270e8-c5db-4722-a5e6-a83f1b23f76b', + }, + { + name: 'Breadstrings', + type: 'Moderator', + uuid: '3b675c0e-d7a6-440c-8687-bc67cd0bf4e9', + }, + { + name: 'Cantras', + type: 'Moderator', + uuid: '28771972-ca6d-4c03-8261-e1734aa7d21d', + }, + // { + // name: 'Daniel the Bard', + // type: 'Moderator', + // uuid: '1f7c4a74-03a3-4b2c-b015-112d0acbd593', + // }, + { + name: 'deilann 5.0.5b', + type: 'Moderator', + uuid: 'e7b5d1e2-3b6e-4192-b867-8bafdb03eeec', + }, + { + name: 'Dewines', + type: 'Moderator', + uuid: '262a7afb-6b57-4d81-88e0-80d2e9f6cbdc', + }, + { + name: 'Fox_town', + type: 'Moderator', + uuid: 'a05f0152-d66b-4ef1-93ac-4adb195d0031', + }, + { + name: 'Megan', + type: 'Moderator', + uuid: '73e5125c-2c87-4004-8ccd-972aeac4f17a', + }, + { + name: 'shanaqui', + type: 'Moderator', + uuid: 'bb089388-28ae-4e42-a8fa-f0c2bfb6f779', + }, +]; diff --git a/website/client/mixins/spells.js b/website/client/mixins/spells.js index 4c40934630..f1d776c95d 100644 --- a/website/client/mixins/spells.js +++ b/website/client/mixins/spells.js @@ -133,23 +133,6 @@ export default { this.markdown(msg); // @TODO: mardown directive? - - // If using mpheal and there are other mages in the party, show extra notification - if (type === 'party' && spell.key === 'mpheal') { - // Counting mages - let magesCount = 0; - for (let i = 0; i < target.length; i++) { - if (target[i].stats.class === 'wizard') { - magesCount++; - } - } - // If there are mages, show message telling that the mpheal don't work on other mages - // The count must be bigger than 1 because the user casting the spell is a mage - if (magesCount > 1) { - this.markdown(this.$t('spellWizardNoEthOnMage')); - } - } - if (!beforeQuestProgress) return; let questProgress = this.questProgress() - beforeQuestProgress; if (questProgress > 0) { diff --git a/website/client/store/actions/shops.js b/website/client/store/actions/shops.js index 56bbf4ac9b..1900533e1a 100644 --- a/website/client/store/actions/shops.js +++ b/website/client/store/actions/shops.js @@ -1,7 +1,6 @@ import axios from 'axios'; import buyOp from 'common/script/ops/buy/buy'; import content from 'common/script/content/index'; -import purchaseOp from 'common/script/ops/buy/purchaseWithSpell'; import hourglassPurchaseOp from 'common/script/ops/buy/hourglassPurchase'; import sellOp from 'common/script/ops/sell'; import unlockOp from 'common/script/ops/unlock'; @@ -91,7 +90,7 @@ async function buyArmoire (store, params) { export function purchase (store, params) { const quantity = params.quantity || 1; const user = store.state.user.data; - let opResult = purchaseOp(user, {params, quantity}); + let opResult = buyOp(user, {params, quantity}); return { result: opResult, diff --git a/website/client/store/actions/user.js b/website/client/store/actions/user.js index 7c44d90e7e..4edea0983a 100644 --- a/website/client/store/actions/user.js +++ b/website/client/store/actions/user.js @@ -1,5 +1,4 @@ import { loadAsyncResource } from 'client/libs/asyncResource'; -import spellQueue from 'client/libs/spellQueue'; import setProps from 'lodash/set'; import axios from 'axios'; @@ -118,11 +117,6 @@ export async function movePinnedItem (store, params) { } export function castSpell (store, params) { - if (params.pinType !== 'card' && !params.quantity) { - spellQueue.queue({key: params.key, targetId: params.targetId}, store); - return; - } - let spellUrl = `/api/v3/user/class/cast/${params.key}`; const data = {}; diff --git a/website/common/locales/bg/challenge.json b/website/common/locales/bg/challenge.json index c4c26315db..0c33c92da7 100644 --- a/website/common/locales/bg/challenge.json +++ b/website/common/locales/bg/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Беше победител в следните предизвикателства", "challenges": "Предизвикателства", "challengesLink": "Предизвикателства", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Все още няма предизвикателства. Посетете", "toCreate": "за да създадете.", "selectWinner": "Изберете победител и завършете предизвикателството:", @@ -23,7 +25,9 @@ "filter": "Филтриране", "groups": "Групи", "noNone": "Нищо", + "category": "Category", "membership": "Участие", + "ownership": "Ownership", "participating": "Участвам", "notParticipating": "Не участвам", "either": "Без значение", diff --git a/website/common/locales/bg/character.json b/website/common/locales/bg/character.json index effa387adf..40ce153515 100644 --- a/website/common/locales/bg/character.json +++ b/website/common/locales/bg/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Показване на разпределението на показателните точки", "hideQuickAllocation": "Скриване на разпределението на показателните точки", "quickAllocationLevelPopover": "Всяко ниво Ви дава една точка, която можете да разпределите на показател по свой избор. Можете да го направите ръчно или да оставите играта да реши вместо Вас, използвайки една възможностите за автоматично разпределяне, които можете да намерите в Потребителската иконка > Показатели.", - "invalidAttribute": "„<%= attr %>“ не е правилен показател.", "notEnoughAttrPoints": "Нямате достатъчно показателни точки.", "style": "Стил", "facialhair": "Лице", @@ -219,6 +218,5 @@ "mainHand": "Основна ръка", "offHand": "Страничен", "pointsAvailable": "Налични точки", - "pts": "точки", - "statsObjectRequired": "Промяната на показателите е задължителна" + "pts": "точки" } \ No newline at end of file diff --git a/website/common/locales/bg/contrib.json b/website/common/locales/bg/contrib.json index e4f3d1e70c..987b2c9ceb 100644 --- a/website/common/locales/bg/contrib.json +++ b/website/common/locales/bg/contrib.json @@ -49,7 +49,6 @@ "UUID": "Потребителски идентификатор", "loadUser": "Зареждане на потребителя", "noAdminAccess": "Нямате администраторски достъп.", - "pageMustBeNumber": "req.query.page трябва да бъде число", "userNotFound": "Потребителят не е намерен.", "invalidUUID": "Идентификаторът UUID трябва да бъде правилен", "title": "Звание", diff --git a/website/common/locales/bg/front.json b/website/common/locales/bg/front.json index daafb96532..bbe5dfc2aa 100644 --- a/website/common/locales/bg/front.json +++ b/website/common/locales/bg/front.json @@ -304,7 +304,7 @@ "alreadyHaveAccountLogin": "Вече имате регистрация? Влезте.", "dontHaveAccountSignup": "Нямате регистрация? Регистрирайте се.", "motivateYourself": "Мотивирайте се, за да изпълните целите си.", - "timeToGetThingsDone": "It's time to have fun when you get things done! Join over <%= userCountInMillions %> million Habiticans and improve your life one task at a time.", + "timeToGetThingsDone": "Време е да започнете да се забавлявате, докато вършите нещата си! Присъединете се към над <%= userCountInMillions %> милиона хабитиканци и подобрете живота си, задача по задача.", "singUpForFree": "Регистрирайте се безплатно", "or": "ИЛИ", "gamifyYourLife": "Превърнете живота си в игра", diff --git a/website/common/locales/bg/groups.json b/website/common/locales/bg/groups.json index 2a504e077c..dd18aa1d02 100644 --- a/website/common/locales/bg/groups.json +++ b/website/common/locales/bg/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Незадължително съобщение", "yesRemove": "Да, нека бъдат премахнати", "foreverAlone": "Не можете да харесате собственото си съобщение. Не бъдете такъв човек.", - "sortDateJoinedAsc": "Най-ранна дата на присъединяване", - "sortDateJoinedDesc": "Най-скорошна дата на присъединяване", - "sortLoginAsc": "Най-ранно вписване", - "sortLoginDesc": "Най-скорошно вписване", - "sortLevelAsc": "Най-ниско ниво", - "sortLevelDesc": "Най-високо ниво", - "sortNameAsc": "Име (А-Я)", - "sortNameDesc": "Име (Я-А)", - "sortTierAsc": "Най-ниско ниво в системата", - "sortTierDesc": "Най-високо ниво в системата", + "sortBackground": "Подреждане по фоново изображение", + "sortClass": "Подреждане по клас", + "sortDateJoined": "Подреждане по дата на присъединяване", + "sortLogin": "Подреждане по дата на вписване", + "sortLevel": "Подреждане по ниво", + "sortName": "Подреждане по име", + "sortTier": "Подреждане по ниво на сътрудник", + "ascendingAbbrev": "Възходящ ред", + "descendingAbbrev": "Низходящ ред", + "applySortToHeader": "Прилагане на настройките за подреждане към заглавната част на групата", "confirmGuild": "Създавате ли гилдията за 4 диаманта?", "leaveGroupCha": "Напускане на предизвикателствата на гилдията и…", "confirm": "Потвърждаване", @@ -131,6 +131,10 @@ "clearAll": "Изтриване на всички съобщения", "confirmDeleteAllMessages": "Наистина ли искате да изтриете всички съобщения от входящата поща? Другите потребители ще виждат изпратените от Вас съобщения.", "optOutPopover": "Личните съобщения не Ви допадат? Щракнете тук, за да се откажете напълно от тях.", + "PMPlaceholderTitle": "Тук все още няма нищо", + "PMPlaceholderDescription": "Изберете разговор отляво", + "PMPlaceholderTitleRevoked": "Привилегиите Ви в чата Ви бяха отнети", + "PMPlaceholderDescriptionRevoked": "Не можете да изпращате лични съобщения, тъй като привилегиите Ви в чата Ви бяха отнети. Ако имате въпроси или притеснения относно това, моля, пишете на admin@habitica.com, за да ги обсъдите с екипа.", "block": "Блокиране", "unblock": "Отблокиране", "pm-reply": "Изпращане на отговор", @@ -207,7 +211,6 @@ "partyOnName": "Купонът продължава", "partyUpText": "Присъединил(а) се към група с още един човек! Забавлявайте се, докато заедно се биете с чудовища и се подкрепяте взаимно.", "partyOnText": "Присъединил(а) се към група с поне четири човека! Радвайте се на допълнителната отговорност, докато се съюзявате с приятелите си, за да побеждавате враговете си!", - "groupIdRequired": "„groupId“ трябва да бъде правилно форматиран идентификатор UUID", "groupNotFound": "Групата не е намерена или нямате достъп.", "groupTypesRequired": "Трябва да подадете правилен низ за заявка в „type“.", "questLeaderCannotLeaveGroup": "Не можете да напуснете групата си, след като сте започнали мисия. Първо прекратете мисията.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Не можете да премахнете себе си!", "groupMemberNotFound": "Потребителят не е намерен сред членовете на групата", "mustBeGroupMember": "Трябва да бъде член на групата.", - "keepOrRemoveAll": "req.query.keep трябва да бъде или „keep-all“, или „remove-all“", - "keepOrRemove": "req.query.keep трябва да бъде или „keep“, или „remove“", "canOnlyInviteEmailUuid": "Покани могат да бъдат изпращани само чрез UUID идентификатор или е-поща.", "inviteMissingEmail": "В поканата липсва адрес на е-поща.", "inviteMissingUuid": "В поканата липсва потребителски идентификатор", @@ -252,7 +253,7 @@ "userRequestsApproval": "<%= userName %> иска одобрение", "userCountRequestsApproval": "<%= userCount %> потребители искат одобрение", "youAreRequestingApproval": "Вие искате одобрение", - "chatPrivilegesRevoked": "You cannot do that because your chat privileges have been revoked.", + "chatPrivilegesRevoked": "Не можете да направите това, защото привилегиите Ви в чата са Ви били отнети.", "cannotCreatePublicGuildWhenMuted": "Не можете да създадете обществена гилдия, защото привилегиите Ви в чата са Ви били отнети.", "cannotInviteWhenMuted": "Не можете да изпратите покана за гилдия или група, защото привилегиите Ви в чата са Ви били отнети.", "newChatMessagePlainNotification": "Има ново съобщение в <%= groupName %> от <%= authorName %>. Щракнете тук, за да отворите страницата!", @@ -315,7 +316,7 @@ "approvalsTitle": "Задачи, чакащи одобрение", "upgradeTitle": "Надграждане", "blankApprovalsDescription": "Когато групата Ви завърши задача, която се нуждае от одобрение, тя ще се появи тук! Можете да зададете дали дадена задача се нуждае от одобрение в настройките ѝ при редактиране.", - "userIsClamingTask": "`<%= username %> пое „<%= task %>“`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Заявено е одобрение", "refreshApprovals": "Опресняване на одобренията", "refreshGroupTasks": "Опресняване на груповите задачи", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Не можете да изтриете груповите задачи, които са Ви разпределени.", "confirmGuildPlanCreation": "Създаване на тази група?", "onlyGroupLeaderCanInviteToGroupPlan": "Само водачът на групата може да кани хора в група с абонамент.", - "remainOrLeaveChallenges": "req.query.keep трябва да бъде или „remain-in-challenges“ или „leave-challenges“", "paymentDetails": "Подробности за разплащането", "aboutToJoinCancelledGroupPlan": "На път сте да се присъедините към група, чийто план е прекратен. НЯМА да получите безплатен абонамент.", "cannotChangeLeaderWithActiveGroupPlan": "Не можете да промените водача, докато групата има план.", @@ -366,9 +366,11 @@ "recentActivity": "Последна дейност", "myGuilds": "Моите гилдии", "guildsDiscovery": "Разглеждане на гилдиите", + "role": "Role", "guildOrPartyLeader": "Водач", "guildLeader": "Водач на гилдията", "member": "Член", + "guildSize": "Guild Size", "goldTier": "Златно ниво", "silverTier": "Сребърно ниво", "bronzeTier": "Бронзово ниво", diff --git a/website/common/locales/bg/loadingscreentips.json b/website/common/locales/bg/loadingscreentips.json index 099b88c24d..f0d5bf4de8 100644 --- a/website/common/locales/bg/loadingscreentips.json +++ b/website/common/locales/bg/loadingscreentips.json @@ -25,7 +25,7 @@ "tip23": "Достигнете ниво 100, за да отключите Кълбото за прераждане безплатно и да започнете ново приключение!", "tip24": "Имате въпрос? Задайте го в помощната гилдия на Хабитика)", "tip25": "Четирите сезонни големи празненства започват около слънцестоенията и равноденствията.", - "tip26": "You can look for a Party or find Party members in the Party Wanted Guild!", + "tip26": "Можете да си потърсите група, или да откриете хора, желаещи да влязат в група, в гилдията „Търсене на група“ (Party Wanted Guild)!", "tip27": "Изпълнихте ежедневна задача вчера, но забравихте да го отбележите? Не се притеснявайте! С възможността за запис на вчерашната дейност можете да записвате това, което сте свършили, преди да започнете новия си ден.", "tip28": "Задайте свое персонализирано начало на деня от Потребителската иконка > Настройки, за да определите кога започва Вашият ден.", "tip29": "Завършете всичките си ежедневни задачи, за да получите подсилването „Перфектен ден“, което увеличава показателите Ви!", diff --git a/website/common/locales/bg/npc.json b/website/common/locales/bg/npc.json index 8ad8d781c1..b1b58471df 100644 --- a/website/common/locales/bg/npc.json +++ b/website/common/locales/bg/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Препоръчани предмети!", "hideLocked": "Скриване на заключените", "hidePinned": "Скриване на закачените", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> точки опит", "amountGold": "<%= amount %> злато", "namedHatchingPotion": "Излюпваща отвара с(ъс) <%= type %>", @@ -74,20 +75,13 @@ "ianTextMobile": "Мога ли да Ви заинтересовам с няколко свитъка за мисии? Активирайте ги, за да се биете срещу чудовища заедно с групата си!", "ianBrokenText": "Добре дошли в магазина за мисии… Тук може да използвате свитъците си с мисии, за да се биете срещу чудовища заедно с приятелите си… Вижте чудесните ни свитъци с мисии, налични за купуване, вдясно…", "featuredQuests": "Препоръчани мисии!", - "missingKeyParam": "„req.params.key“ е задължително.", - "itemNotFound": "Предметът „<%= key %>“ не е намерен.", "cannotBuyItem": "Не може да купите този предмет.", - "missingTypeKeyEquip": "„key“ и „type“ са задължителни параметри.", - "missingPetFoodFeed": "„pet“ и „food“ са задължителни параметри.", - "invalidPetName": "Подадено е неправилно име на любимец.", - "missingEggHatchingPotionHatch": "„egg“ и „hatchingPotion“ са задължителни параметри.", - "invalidTypeEquip": "„type“ трябва да бъде едно от следните: „equipped“, „pet“, „mount“ или „costume“.", "mustPurchaseToSet": "Трябва да закупите <%= val %>, за да го/я зададете на <%= key %>.", "typeRequired": "Типът е задължителен", "positiveAmountRequired": "Изисква се положително количество", "notAccteptedType": "Типът трябва да бъде един от следните: eggs, hatchingPotions, premiumHatchingPotions, food, quests, gear", "contentKeyNotFound": "Ключът не е открит за съдържанието <%= type %>", - "plusGem": "+<%= count %> Gem", + "plusGem": "+<%= count %> диамант", "typeNotSellable": "Този тип не може да се продава. Трябва да бъде един от следните: <%= acceptedTypes %>", "userItemsKeyNotFound": "Ключът не е намерен за user.items <%= type %>", "userItemsNotEnough": "Нямате достатъчно <%= type %>", diff --git a/website/common/locales/bg/quests.json b/website/common/locales/bg/quests.json index 59381b5226..63c01451a1 100644 --- a/website/common/locales/bg/quests.json +++ b/website/common/locales/bg/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Няма изпратени покани за мисията.", "questInviteNotFound": "Няма намерени покани за мисията.", "guildQuestsNotSupported": "Гилдиите не могат да бъдат канени в мисии.", - "questNotFound": "Мисията „<%= key %>“ не беше намерена.", "questNotOwned": "Не притежавате този свитък с мисия.", "questNotGoldPurchasable": "Мисията „<%= key %>“ не може да бъде купена със злато.", "questLevelTooHigh": "Трябва да бъдете ниво <%= level %>, за да започнете тази мисия.", diff --git a/website/common/locales/bg/questscontent.json b/website/common/locales/bg/questscontent.json index c052ffe89d..945a7eaab3 100644 --- a/website/common/locales/bg/questscontent.json +++ b/website/common/locales/bg/questscontent.json @@ -102,7 +102,7 @@ "questGoldenknight2Text": "Златният рицар, част 2: Златен рицар", "questGoldenknight2Notes": "Въоръжен(а) със стотици показания на хабитиканци, ти най-после се изправяш срещу Златния рицар. Започваш да четеш оплакванията на хабитиканците срещу нея, едно по едно: „А @Pfeffernusse казва, че постоянното ти натякване…“ — рицарят вдига ръка, за да те спре, и казва надменно: „Моля те, тези хора просто завиждат на успеха ми. Вместо да се оплакват, може просто да работят усърдно като мен! Може би трябва да ти демонстрирам силата, която може да получиш, ако се стараеш като мен!“ — тя вдига боздугана си и се приготвя да те нападне!", "questGoldenknight2Boss": "Златен рицар", - "questGoldenknight2Completion": "The Golden Knight lowers her Morningstar in consternation. “I apologize for my rash outburst,” she says. “The truth is, it’s painful to think that I’ve been inadvertently hurting others, and it made me lash out in defense… but perhaps I can still apologize?”", + "questGoldenknight2Completion": "Златният рицар със смайване сваля боздугана си. — „Извинявам се за прибързаното си избухване“ — казва тя. — „Истината е, че ме боли, когато си помисля, че може да наранявам останалите, и това ме накара да се защитавам твърде упорито… Надявам се, че не е късно да се извиня?“", "questGoldenknight2DropGoldenknight3Quest": "Златният рицар, част 3: Железният рицар (свитък)", "questGoldenknight3Text": "Златният рицар, част 3: Железният рицар", "questGoldenknight3Notes": "@Jon Arinbjorn изкрещява, за да привлече вниманието ти. След края на битката ти се е появила някаква нова фигура. Рицар, облечен в желязо на черни петна, бавно се приближава към теб с меч в ръка. Златният рицар извиква към фигурата: „Татко, не!“ — но рицарят изглежда не смята да спира. Тя се обръща към теб и казва: „Съжалявам. Бях глупачка, не осъзнавах колко съм жестока. Но баща ми е по-жесток, отколкото аз бих могла да бъда някога. Ако не бъде спрян, ще унищожи всички ни. Ето, използвай боздугана ми и спри Железния рицар!“", @@ -600,5 +600,7 @@ "questSquirrelCompletion": "С внимателен подход, подкупи и няколко успокояващи заклинания, успявате да придумате катерицата да се отмести от плячката си и да се насочи към конюшнята, където @Shtut вече е успял да премахне всички жълъди. Няколко от жълъдите са подредени на една работна маса. „Това са яйца на катерица! Може би ще успееш да отгледаш някоя катерица, която няма да си играе толкова много с храната си.“", "questSquirrelBoss": "Хитра катерица", "questSquirrelDropSquirrelEgg": "Катерица (яйце)", - "questSquirrelUnlockText": "Отключва възможността за купуване на яйца на катерица от пазара." + "questSquirrelUnlockText": "Отключва възможността за купуване на яйца на катерица от пазара.", + "cuddleBuddiesText": "Пакет мисии „Пухкави приятелчета“", + "cuddleBuddiesNotes": "Съдържа: „Зайчето-убиец“, „Нечестивият пор“ и „Бандата на морските свинчета“. Наличен до 31 май." } \ No newline at end of file diff --git a/website/common/locales/bg/settings.json b/website/common/locales/bg/settings.json index 12023d000f..d2f9038c82 100644 --- a/website/common/locales/bg/settings.json +++ b/website/common/locales/bg/settings.json @@ -32,7 +32,7 @@ "resetAccPop": "Започнете отначало, премахвайки всички нива, злато, екипировка, история и задачи.", "deleteAccount": "Изтриване на профила", "deleteAccPop": "Изтрива и премахва Вашия профил в Хабитика.", - "feedback": "If you'd like to give us feedback, please enter it below - we'd love to know what you liked or didn't like about Habitica! Don't speak English well? No problem! Use the language you prefer.", + "feedback": "Ако искате да ни изпратите отзивите си, моля, въведете ги по-долу. Ще се радваме да научим какво Ви е харесало, или пък не, в Хабитика! Не говорите английски добре? Няма проблем! Пишете на който искате език.", "qrCode": "QR-код", "dataExport": "Изнасяне на данни", "saveData": "Ето няколко възможности за запазване на данните Ви.", diff --git a/website/common/locales/bg/spells.json b/website/common/locales/bg/spells.json index f3ac5f6986..136c62f65a 100644 --- a/website/common/locales/bg/spells.json +++ b/website/common/locales/bg/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Превърнете приятел в морско създание!", "spellSpecialSandText": "Пясък", "spellSpecialSandNotes": "Развалете заклинанието, което Ви е превърнало в морска звезда.", - "spellNotFound": "Умението „<%= spellId %>“ не е намерено.", "partyNotFound": "Групата не е намерена", "targetIdUUID": "„targetId“ трябва да бъде правилен потребителски идентификатор.", "challengeTasksNoCast": "Използването на умения върху задачи от предизвикателства не е позволено.", diff --git a/website/common/locales/bg/subscriber.json b/website/common/locales/bg/subscriber.json index b6992f0104..9e5d65913d 100644 --- a/website/common/locales/bg/subscriber.json +++ b/website/common/locales/bg/subscriber.json @@ -7,7 +7,7 @@ "buyGemsGoldText": "Александър Търговеца ще Ви продава диаманти на цената от 20 злато за диамант. Месечните му доставки първоначално са ограничени до 25 диаманта на месец, но това ограничение се увеличава с 5 диаманта за всеки 3 месеца на непрекъснат абонамент, докато достигне 50 диаманта на месец!", "mustSubscribeToPurchaseGems": "Купуването на диаманти със злато изисква абонамент", "reachedGoldToGemCap": "Достигнахте месечното ограничение на златото, което може да бъде превърнато в диаманти: <%= convCap %>. Целта на това е да предотвратим злоупотребите. Ограничението се нулира през първите три дни на всеки месец.", - "reachedGoldToGemCapQuantity": "Your requested amount <%= quantity %> exceeds the Gold=>Gem conversion cap <%= convCap %> for this month. We have this to prevent abuse / farming. The cap resets within the first three days of each month.", + "reachedGoldToGemCapQuantity": "Заявеното от Вас количество – <%= quantity %>, превишава месечното ограничение на златото, което може да бъде превърнато в диаманти – <%= convCap %>. Целта на това е да предотвратим злоупотребите. Ограничението се нулира през първите три дни на всеки месец.", "retainHistory": "Запазвате по-голяма история", "retainHistoryText": "Завършените задачи за изпълнение остават по-дълго в историята.", "doubleDrops": "Ежедневното ограничение на паданията е два пъти по-голямо", @@ -175,12 +175,6 @@ "invalidCoupon": "Грешен код от купон.", "couponUsed": "Този код от купон вече е използван.", "couponCodeRequired": "Кодът от купона е задължителен.", - "eventRequired": "„req.params.event“ е задължително.", - "countRequired": "„req.query.count“ е задължително.", - "missingPaymentId": "Липсва „req.query.paymentId“", - "missingCustomerId": "Липсва „req.query.customerId“", - "missingPaypalBlock": "Липсва „req.session.paypalBlock“", - "missingSubKey": "Липсва „req.query.sub“", "paypalCanceled": "Абонаментът Ви е прекратен", "earnGemsMonthly": "Получавайте до **<%= cap %> диаманта** на месец", "receiveMysticHourglass": "Получете Тайнствен пясъчен часовник!", diff --git a/website/common/locales/bg/tasks.json b/website/common/locales/bg/tasks.json index 709ffbfbc4..2eb75e3ae8 100644 --- a/website/common/locales/bg/tasks.json +++ b/website/common/locales/bg/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "По време на световни събития, тук ще се появява специалната екипировка.", "rewardHelp4": "Не се притеснявайте да си създадете свои собствени награди! Вижте примерите тук.", "clickForHelp": "Щракнете за помощ", - "taskIdRequired": "„taskId“ трябва да бъде правилно форматиран идентификатор UUID.", "taskAliasAlreadyUsed": "Псевдонимът на задачата вече се използва за друга задача.", "taskNotFound": "Задачата не е намерена.", "invalidTaskType": "Типът на задачата трябва да бъде един от следните: „habit“, „daily“, „todo“, „reward“.", diff --git a/website/common/locales/cs/challenge.json b/website/common/locales/cs/challenge.json index 80dd9ffb3a..99c53bcbc1 100644 --- a/website/common/locales/cs/challenge.json +++ b/website/common/locales/cs/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Stal se výhercem následujících výzev", "challenges": "Výzvy", "challengesLink": "Challenges", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Zatím nemáš žádné výzvy. Navštiv", "toCreate": "abys nějakou vytvořil.", "selectWinner": "Zvolit vítěze a zavřít výzvu:", @@ -23,7 +25,9 @@ "filter": "Filtr", "groups": "Skupiny", "noNone": "Žádné", + "category": "Category", "membership": "Členství", + "ownership": "Ownership", "participating": "Účastní se", "notParticipating": "Neúčastní se", "either": "Obojí", diff --git a/website/common/locales/cs/character.json b/website/common/locales/cs/character.json index 6159da6835..fc6f4c35d2 100644 --- a/website/common/locales/cs/character.json +++ b/website/common/locales/cs/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Zobrazit přidělení vlastnostních bodů", "hideQuickAllocation": "Skrýt přidělení vlastnostních bodů", "quickAllocationLevelPopover": "S každou další úrovní získáš jeden bod, který můžeš přiřadit k libovolné vlastnosti. Přiřadit body můžeš buď manuálně anebo můžeš nechat hru rozhodnout za tebe na základě některé z možností Automatického Přiřazení, které nalezneš v Uživatel -> Statistiky.", - "invalidAttribute": "\"<%= attr %>\" není platný atribut.", "notEnoughAttrPoints": "Nemáš dostatek vlastnostních bodů", "style": "Styl", "facialhair": "Vousy", @@ -219,6 +218,5 @@ "mainHand": "Hlavní ruka", "offHand": "Druhá ruka", "pointsAvailable": "Dostupné body", - "pts": "Body", - "statsObjectRequired": "Je požadována aktualizace atributů" + "pts": "Body" } \ No newline at end of file diff --git a/website/common/locales/cs/contrib.json b/website/common/locales/cs/contrib.json index b89e70df23..a20984db4c 100644 --- a/website/common/locales/cs/contrib.json +++ b/website/common/locales/cs/contrib.json @@ -49,7 +49,6 @@ "UUID": "ID uživatele", "loadUser": "Načíst uživatele", "noAdminAccess": "Nemáte adminský přístup.", - "pageMustBeNumber": "req.query.page musí být číslo", "userNotFound": "Uživatel nenalezen.", "invalidUUID": "UUID musí být platné.", "title": "Název", diff --git a/website/common/locales/cs/groups.json b/website/common/locales/cs/groups.json index f5c8c81530..e046c75e0c 100644 --- a/website/common/locales/cs/groups.json +++ b/website/common/locales/cs/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Nepovinná zpráva", "yesRemove": "Ano, odstraň je", "foreverAlone": "Nemůže se ti líbit tvoje vlastní zpráva. Nebuď takový.", - "sortDateJoinedAsc": "Earliest Date Joined", - "sortDateJoinedDesc": "Latest Date Joined", - "sortLoginAsc": "Earliest Login", - "sortLoginDesc": "Latest Login", - "sortLevelAsc": "Lowest Level", - "sortLevelDesc": "Highest Level", - "sortNameAsc": "Name (A - Z)", - "sortNameDesc": "Name (Z - A)", - "sortTierAsc": "Lowest Tier", - "sortTierDesc": "Highest Tier", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Vytvořit cech za 4 drahokamy?", "leaveGroupCha": "Opustit výzvy cechu a...", "confirm": "Potvrdit", @@ -131,6 +131,10 @@ "clearAll": "Vymazat všechny zprávy", "confirmDeleteAllMessages": "Jsi si jistý, že chceš vymazat všechny zprávy ve schránce? Ostatní uživatelé stále uvidí všechny zprávy, které jsi jim poslal.", "optOutPopover": "Nemáš rád soukromé zprávy? Klikni pro úplné odhlášení", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Blokovat", "unblock": "Odblokovat", "pm-reply": "Poslat odpověď", @@ -207,7 +211,6 @@ "partyOnName": "Velká družina", "partyUpText": "Joined a Party with another person! Have fun battling monsters and supporting each other.", "partyOnText": "Joined a Party with at least four people! Enjoy your increased accountability as you unite with your friends to vanquish your foes!", - "groupIdRequired": "„groupId\" musí být platné UUID", "groupNotFound": "Group not found or you don't have access.", "groupTypesRequired": "You must supply a valid \"type\" query string.", "questLeaderCannotLeaveGroup": "You cannot leave your Party when you have started a quest. Abort the quest first.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Nemůžete se sám odebrat!", "groupMemberNotFound": "Uživatel nenalezen mezi členy skupiny.", "mustBeGroupMember": "Musí být členem skupiny.", - "keepOrRemoveAll": "req.query.keep must be either \"keep-all\" or \"remove-all\"", - "keepOrRemove": "req.query.keep must be either \"keep\" or \"remove\"", "canOnlyInviteEmailUuid": "Lze použít pouze uuids nebo emaily.", "inviteMissingEmail": "Chybějící emailová adresa v pozvánce.", "inviteMissingUuid": "Missing user id in invite", @@ -315,7 +316,7 @@ "approvalsTitle": "Tasks Awaiting Approval", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "When your group completes tasks that need your approval, they'll appear here! Adjust approval requirement settings under task editing.", - "userIsClamingTask": "`<%= username %> has claimed \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Approval Requested", "refreshApprovals": "Refresh Approvals", "refreshGroupTasks": "Refresh Group Tasks", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Can't delete group tasks that are assigned to you.", "confirmGuildPlanCreation": "Create this group?", "onlyGroupLeaderCanInviteToGroupPlan": "Only the group leader can invite users to a group with a subscription.", - "remainOrLeaveChallenges": "req.query.keep must be either 'remain-in-challenges' or 'leave-challenges'", "paymentDetails": "Payment Details", "aboutToJoinCancelledGroupPlan": "You are about to join a group with a canceled plan. You will NOT receive a free subscription.", "cannotChangeLeaderWithActiveGroupPlan": "You can not change the leader while the group has an active plan.", @@ -366,9 +366,11 @@ "recentActivity": "Recent Activity", "myGuilds": "My Guilds", "guildsDiscovery": "Discover Guilds", + "role": "Role", "guildOrPartyLeader": "Leader", "guildLeader": "Guild Leader", "member": "Member", + "guildSize": "Guild Size", "goldTier": "Gold Tier", "silverTier": "Silver Tier", "bronzeTier": "Bronze Tier", diff --git a/website/common/locales/cs/npc.json b/website/common/locales/cs/npc.json index 2caaa6377d..6b980811ff 100644 --- a/website/common/locales/cs/npc.json +++ b/website/common/locales/cs/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Zmíněné předměty!", "hideLocked": "Hide locked", "hidePinned": "Hide pinned", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Zkušenost", "amountGold": "<%= amount %> Zlato", "namedHatchingPotion": "<%= type %> Líhnoucí lektvar", @@ -74,14 +75,7 @@ "ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!", "ianBrokenText": "Vítej v obchodě s Výpravami... Můžeš tu s přáteli využít svitky s výpravami k bojům s monstry... V klidu si prohlédni všechny Výpravy, které tu prodáváme...", "featuredQuests": "Zmíněné výpravy!", - "missingKeyParam": "Je požadovaný \"req.params.key\".", - "itemNotFound": "Předmět „<%= key %>\" nenalezen.", "cannotBuyItem": "Tento předmět nelze zakoupit.", - "missingTypeKeyEquip": "\"key\" a \"type\" jsou požadované parametry.", - "missingPetFoodFeed": "\"pet\" a \"food\" jsou požadované parametry.", - "invalidPetName": "Neplatné jméno mazlíčka.", - "missingEggHatchingPotionHatch": "\"egg\" a \"hatchingPotion\" jsou požadované parametry.", - "invalidTypeEquip": "\"typ\" vybavení musí být jeden z následujících: 'vybaveno', 'mazlíček', 'zvíře k osedlání', 'kostým'", "mustPurchaseToSet": "Musíte koupit <%= val %> k nastavení na <%= key %>.", "typeRequired": "Je požadován typ", "positiveAmountRequired": "Pozitivní množství je požadováno", diff --git a/website/common/locales/cs/quests.json b/website/common/locales/cs/quests.json index 341621a450..82980e8873 100644 --- a/website/common/locales/cs/quests.json +++ b/website/common/locales/cs/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Zatím vám nebyla poslána žádná pozvánka na výpravu.", "questInviteNotFound": "Nebyla nalezena žádná pozvánka na výpravu.", "guildQuestsNotSupported": "Cechy nelze pozvat na výpravy.", - "questNotFound": "Výprava „<%= key %>\" nenalezena.", "questNotOwned": "Nevlastníte tento svitek výpravy.", "questNotGoldPurchasable": "Výpravu „<%= key %>\" nelze koupit na zlato.", "questLevelTooHigh": "Pro začátek výpravy musíte mít úroveň <%= level %>.", diff --git a/website/common/locales/cs/questscontent.json b/website/common/locales/cs/questscontent.json index 99bc1e542e..fbc3c34edd 100644 --- a/website/common/locales/cs/questscontent.json +++ b/website/common/locales/cs/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/cs/spells.json b/website/common/locales/cs/spells.json index 6e8b12558b..ca986f2383 100644 --- a/website/common/locales/cs/spells.json +++ b/website/common/locales/cs/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Přeměň svého kamaráda na mořskou příšerku!", "spellSpecialSandText": "Písek", "spellSpecialSandNotes": "Zvrať kouzlo, které z tebe udělalo mořskou hvězdu.", - "spellNotFound": "Schopnost „<%= spellId %>\" nenalezena.", "partyNotFound": "Družina nenalezena", "targetIdUUID": "„cílovéId\" musí být platné ID uživatele. ", "challengeTasksNoCast": "Použití schopnosti na úkol z výzvy není povoleno.", diff --git a/website/common/locales/cs/subscriber.json b/website/common/locales/cs/subscriber.json index 1968af8e72..8b80675616 100644 --- a/website/common/locales/cs/subscriber.json +++ b/website/common/locales/cs/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Neplatný kód kupónu.", "couponUsed": "Kód kupónu byl již použit.", "couponCodeRequired": "Je požadován kód kupónu.", - "eventRequired": "je požadováno „req.params.event\".", - "countRequired": "je požadováno „req.query.count\".", - "missingPaymentId": "Missing req.query.paymentId", - "missingCustomerId": "Missing req.query.customerId", - "missingPaypalBlock": "Missing req.session.paypalBlock", - "missingSubKey": "Missing req.query.sub", "paypalCanceled": "Your subscription has been canceled", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "receiveMysticHourglass": "Receive a Mystic Hourglass!", diff --git a/website/common/locales/cs/tasks.json b/website/common/locales/cs/tasks.json index b2c25003e3..425d4de975 100644 --- a/website/common/locales/cs/tasks.json +++ b/website/common/locales/cs/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "V průběhu světových událostí se speciální vybavení zobrazí zde.", "rewardHelp4": "Neboj se vytvořit si své Odměny! Koukni na na ukázku tady.", "clickForHelp": "Klikni pro nápovědu", - "taskIdRequired": "\"taskId\" musí být platné UUID.", "taskAliasAlreadyUsed": "Alias úkolu byl již použit na jiném úkolu.", "taskNotFound": "Úkol nenalezen.", "invalidTaskType": "Typ úkolu musí být „zvyk\", „denní úkol\", „úkol\" nebo „odměna\".", diff --git a/website/common/locales/da/challenge.json b/website/common/locales/da/challenge.json index 2ccf9b4452..0913d5f145 100644 --- a/website/common/locales/da/challenge.json +++ b/website/common/locales/da/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Blev vinderen i de følgende udfordringer", "challenges": "Udfordringer", "challengesLink": "Udfordringer", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Ingen udfordringer endnu, besøg", "toCreate": "for at oprette en.", "selectWinner": "Vælg en vinder og luk udfordringen:", @@ -23,7 +25,9 @@ "filter": "Filter", "groups": "Grupper", "noNone": "Ingen", + "category": "Category", "membership": "Medlemskab", + "ownership": "Ownership", "participating": "Deltager", "notParticipating": "Deltager ikke", "either": "Begge", diff --git a/website/common/locales/da/character.json b/website/common/locales/da/character.json index 249a7ee08d..bebe6cb341 100644 --- a/website/common/locales/da/character.json +++ b/website/common/locales/da/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Show Stat Allocation", "hideQuickAllocation": "Hide Stat Allocation", "quickAllocationLevelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User Icon > Stats.", - "invalidAttribute": "\"<%= attr %>\" is not a valid Stat.", "notEnoughAttrPoints": "You don't have enough Stat Points.", "style": "Stil", "facialhair": "Facial", @@ -219,6 +218,5 @@ "mainHand": "Main-Hand", "offHand": "Off-Hand", "pointsAvailable": "Points Available", - "pts": "pts", - "statsObjectRequired": "Stats update is required" + "pts": "pts" } \ No newline at end of file diff --git a/website/common/locales/da/contrib.json b/website/common/locales/da/contrib.json index 65ddbed29e..13c0f1d7af 100644 --- a/website/common/locales/da/contrib.json +++ b/website/common/locales/da/contrib.json @@ -49,7 +49,6 @@ "UUID": "BrugerID", "loadUser": "Indlæs bruger", "noAdminAccess": "Du har ikke administrator-adgang.", - "pageMustBeNumber": "req.query.page skal være et tal", "userNotFound": "Bruger ikke fundet.", "invalidUUID": "UUID skal være gyldigt", "title": "Titel", diff --git a/website/common/locales/da/groups.json b/website/common/locales/da/groups.json index 85f7ba2af1..31075c5840 100644 --- a/website/common/locales/da/groups.json +++ b/website/common/locales/da/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Valgfri besked", "yesRemove": "Ja, fjern dem", "foreverAlone": "Du kan ikke synes godt om din egen besked. Lad være med at være sådan.", - "sortDateJoinedAsc": "Earliest Date Joined", - "sortDateJoinedDesc": "Latest Date Joined", - "sortLoginAsc": "Earliest Login", - "sortLoginDesc": "Latest Login", - "sortLevelAsc": "Lowest Level", - "sortLevelDesc": "Highest Level", - "sortNameAsc": "Name (A - Z)", - "sortNameDesc": "Name (Z - A)", - "sortTierAsc": "Lowest Tier", - "sortTierDesc": "Highest Tier", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Opret Klan for 4 Ædelsten?", "leaveGroupCha": "Forlad Klanudfordringer og...", "confirm": "Bekræft", @@ -131,6 +131,10 @@ "clearAll": "Slet Alle Beskeder", "confirmDeleteAllMessages": "Er du sikker på, at du vil slette alle beskeder i din indbakke? Andre brugere kan stadig se beskeder, du har sendt til dem.", "optOutPopover": "Vil du ikke modtage private beskeder? Klik for at afmelde", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Blokér", "unblock": "Fjern blokering", "pm-reply": "Send svar", @@ -207,7 +211,6 @@ "partyOnName": "Et godt selskab", "partyUpText": "Sluttede sig til en Gruppe med en anden! Hav det sjovt med at bekæmpe monstre og støtte hinanden.", "partyOnText": "Sluttede sig til en gruppe med mindst fire personer! Nyd at du har flere at stå til regnskab for mens du og dine venner går sammen for at besejre jeres fjender!", - "groupIdRequired": "\"groupId\" skal være et gyldigt Unikt Bruger-ID", "groupNotFound": "Gruppen blev ikke fundet eller du har ikke adgang.", "groupTypesRequired": "Du skal angive en gyldig \"type\" forespørgelses-string.", "questLeaderCannotLeaveGroup": "You cannot leave your Party when you have started a quest. Abort the quest first.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Du kan ikke fjerne dig selv!", "groupMemberNotFound": "Bruger ikke fundet blandt gruppens medlemmer", "mustBeGroupMember": "Skal være medlem af gruppen", - "keepOrRemoveAll": "req.query.keep skal være enten \"keep-all\" eller \"remove-all\"", - "keepOrRemove": "req.query.keep skal være enten \"keep\" eller \"remove\"", "canOnlyInviteEmailUuid": "Kan kun invitere via unikke bruger-id eller email.", "inviteMissingEmail": "Manglende emailadresse i invitationen", "inviteMissingUuid": "Manglende bruger-id i invitationen", @@ -315,7 +316,7 @@ "approvalsTitle": "Tasks Awaiting Approval", "upgradeTitle": "Opgradér", "blankApprovalsDescription": "When your group completes tasks that need your approval, they'll appear here! Adjust approval requirement settings under task editing.", - "userIsClamingTask": "`<%= username %> har gjort krav på \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Godkendelse anmodet", "refreshApprovals": "Refresh Approvals", "refreshGroupTasks": "Refresh Group Tasks", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Du kan ikke slette gruppe opgaver, der er blevet tildelt til dig.", "confirmGuildPlanCreation": "Opret denne gruppe?", "onlyGroupLeaderCanInviteToGroupPlan": "Only the group leader can invite users to a group with a subscription.", - "remainOrLeaveChallenges": "req.query.keep must be either 'remain-in-challenges' or 'leave-challenges'", "paymentDetails": "Betalingsdetaljer", "aboutToJoinCancelledGroupPlan": "You are about to join a group with a canceled plan. You will NOT receive a free subscription.", "cannotChangeLeaderWithActiveGroupPlan": "You can not change the leader while the group has an active plan.", @@ -366,9 +366,11 @@ "recentActivity": "Recent Activity", "myGuilds": "My Guilds", "guildsDiscovery": "Discover Guilds", + "role": "Role", "guildOrPartyLeader": "Leader", "guildLeader": "Guild Leader", "member": "Member", + "guildSize": "Guild Size", "goldTier": "Gold Tier", "silverTier": "Silver Tier", "bronzeTier": "Bronze Tier", diff --git a/website/common/locales/da/npc.json b/website/common/locales/da/npc.json index 6ee05d67e6..28aa11c899 100644 --- a/website/common/locales/da/npc.json +++ b/website/common/locales/da/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Featured Items!", "hideLocked": "Hide locked", "hidePinned": "Hide pinned", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Experience", "amountGold": "<%= amount %> Gold", "namedHatchingPotion": "<%= type %> Hatching Potion", @@ -74,14 +75,7 @@ "ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!", "ianBrokenText": "Velkommen til quest-butikken... Her kan du aktivere quest-skriftruller for at kæmpe mod monstre sammen med dine venner... Husk at gennemse det fine udvalg af quest-skriftruller til højre...", "featuredQuests": "Featured Quests!", - "missingKeyParam": "\"req.params.key\" nødvendig.", - "itemNotFound": "Objekt \"<%= key %>\" ikke fundet", "cannotBuyItem": "Du kan ikke købe dette objekt.", - "missingTypeKeyEquip": "\"key\" og \"type\" er nødvendige parametre", - "missingPetFoodFeed": "\"pet\" og \"food\" er nødvendige parametre", - "invalidPetName": "Ugyldigt kæledyrnavn opgivet", - "missingEggHatchingPotionHatch": "\"egg\" og \"hatchingPotion\" er nødvendige parametre.", - "invalidTypeEquip": "\"type\" skal være en af 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Skal købes <%= val %> for at putte det på <%= key %>.", "typeRequired": "Type er nødvendig", "positiveAmountRequired": "Positive amount is required", diff --git a/website/common/locales/da/quests.json b/website/common/locales/da/quests.json index 039608e28c..85f11868c6 100644 --- a/website/common/locales/da/quests.json +++ b/website/common/locales/da/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Ingen quest invitation er blevet udsendt endnu.", "questInviteNotFound": "Ingen questinvitation fundet.", "guildQuestsNotSupported": "Klaner kan ikke blive inviteret på quests.", - "questNotFound": "Quest \"<%= key %>\" ikke fundet.", "questNotOwned": "Du ejer ikke den quest-skriftrulle", "questNotGoldPurchasable": "Quest \"<%= key %>\" er ikke en quest, der kan købes for Guld.", "questLevelTooHigh": "Du skal være niveau <%= level %> for at starte denne quest.", diff --git a/website/common/locales/da/questscontent.json b/website/common/locales/da/questscontent.json index 1eddb0cec0..a978181e47 100644 --- a/website/common/locales/da/questscontent.json +++ b/website/common/locales/da/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/da/spells.json b/website/common/locales/da/spells.json index dd88d69d50..79140318cf 100644 --- a/website/common/locales/da/spells.json +++ b/website/common/locales/da/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Gør en ven til et søuhyre!", "spellSpecialSandText": "Sand", "spellSpecialSandNotes": "Reverse the spell that made you a sea star.", - "spellNotFound": "Evne \"<%= spellId %>\" blev ikke fundet.", "partyNotFound": "Gruppe blev ikke fundet", "targetIdUUID": "\"targetId\" skal være et gyldigt Bruger ID.", "challengeTasksNoCast": "Det er ikke tilladt at kaste evner på en udfordrings-opgave.", diff --git a/website/common/locales/da/subscriber.json b/website/common/locales/da/subscriber.json index 562aff92f4..1a10c7ba50 100644 --- a/website/common/locales/da/subscriber.json +++ b/website/common/locales/da/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Ugyldig kuponkode.", "couponUsed": "Kuponkode allerede i brug.", "couponCodeRequired": "Kuponkode påkrævet.", - "eventRequired": "\"req.params.event\" påkrævet.", - "countRequired": "\"req.query.count\" påkrævet.", - "missingPaymentId": "Manglende req.query.paymentId", - "missingCustomerId": "Manglende req.query.customerId", - "missingPaypalBlock": "Manglende req.session.paypalBlock", - "missingSubKey": "Manglende req.query.sub", "paypalCanceled": "Dit abonnement er blevet annulleret.", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "receiveMysticHourglass": "Receive a Mystic Hourglass!", diff --git a/website/common/locales/da/tasks.json b/website/common/locales/da/tasks.json index e09e93431b..da7fc83158 100644 --- a/website/common/locales/da/tasks.json +++ b/website/common/locales/da/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "Specielt Udstyr vil dukke op her når der er Verdensevents.", "rewardHelp4": "Vær ikke bange for at oprette selvvalgte Belønninger! Se nogle eksempler her.", "clickForHelp": "Klik for hjælp", - "taskIdRequired": "\"taksID\" skal være et gyldigt Unikt Bruger-ID.", "taskAliasAlreadyUsed": "Alias allerede i brug på en anden opgave.", "taskNotFound": "Opgave ikke fundet.", "invalidTaskType": "Opgave type skal være \"vane\", \"daglig\", \"todo\" eller \"belønning\".", diff --git a/website/common/locales/de/backgrounds.json b/website/common/locales/de/backgrounds.json index 6a144debb5..edd98e8dc7 100644 --- a/website/common/locales/de/backgrounds.json +++ b/website/common/locales/de/backgrounds.json @@ -346,11 +346,11 @@ "backgroundFlyingOverWildflowerFieldNotes": "Schwebe über einer Wildblumenwiese.", "backgroundFlyingOverAncientForestText": "Uralter Wald", "backgroundFlyingOverAncientForestNotes": "Fliege über das Blätterdach eines uralten Waldes.", - "backgrounds052018": "SET 48: Released May 2018", - "backgroundTerracedRiceFieldText": "Terraced Rice Field", - "backgroundTerracedRiceFieldNotes": "Enjoy a Terraced Rice Field in the growing season.", - "backgroundFantasticalShoeStoreText": "Fantastical Shoe Store", - "backgroundFantasticalShoeStoreNotes": "Look for fun new footwear in the Fantastical Shoe Store.", - "backgroundChampionsColosseumText": "Champions' Colosseum", - "backgroundChampionsColosseumNotes": "Bask in the glory of the Champions' Colosseum." + "backgrounds052018": "SATZ 48: Erschien im May 2018", + "backgroundTerracedRiceFieldText": "Terrassenreisfeld", + "backgroundTerracedRiceFieldNotes": "Genieße ein Terrassenreisfeld während der Wachstumsphase.", + "backgroundFantasticalShoeStoreText": "Großartiges Schuhgeschäft", + "backgroundFantasticalShoeStoreNotes": "Schau' dich im Großartigen Schuhgeschäft nach tollen neuen Schuhen um.", + "backgroundChampionsColosseumText": "Kolosseum der Champions", + "backgroundChampionsColosseumNotes": "Sonne dich im Ruhm des Kolosseums der Champions." } \ No newline at end of file diff --git a/website/common/locales/de/challenge.json b/website/common/locales/de/challenge.json index 1f20be3f72..ea8379b6cb 100644 --- a/website/common/locales/de/challenge.json +++ b/website/common/locales/de/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Hat die folgenden Wettbewerbe gewonnen", "challenges": "Wettbewerbe", "challengesLink": "Herausforderungen", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Keine Wettbewerbe gefunden, besuche", "toCreate": "um einen Wettbewerb zu erstellen.", "selectWinner": "Wähle einen Gewinner und beende den Wettbewerb.", @@ -23,7 +25,9 @@ "filter": "Filter", "groups": "Gruppen", "noNone": "Niemand", + "category": "Category", "membership": "Mitgliedschaft", + "ownership": "Ownership", "participating": "Teilnehmer", "notParticipating": "Nicht Teilnehmer", "either": "Beides", diff --git a/website/common/locales/de/character.json b/website/common/locales/de/character.json index ee9f40207b..b4b0e28b1d 100644 --- a/website/common/locales/de/character.json +++ b/website/common/locales/de/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Attributspunkte verteilung anzeigen", "hideQuickAllocation": "Attributwertzuweisung ausblenden", "quickAllocationLevelPopover": "Mit jedem Level erhältst Du einen Punkt, den Du einem Attribut Deiner Wahl zuweisen kannst. Du kannst Deine Punkte manuell verteilen, oder das Spiel entscheiden lassen, indem Du eines der vorgegebenen Verteilungsmuster unter Benutzer Icon > Werte wählst.", - "invalidAttribute": "\"<%= attr %>\" ist kein gültiges Attribut.", "notEnoughAttrPoints": "Du hast nicht genug Attributpunkte.", "style": "Stil", "facialhair": "Bart", @@ -219,6 +218,5 @@ "mainHand": "Haupthand", "offHand": "Schildhand", "pointsAvailable": "Verfügbare Punkte", - "pts": "Pkte", - "statsObjectRequired": "Werte-Update ist erforderlich" + "pts": "Pkte" } \ No newline at end of file diff --git a/website/common/locales/de/communityguidelines.json b/website/common/locales/de/communityguidelines.json index 2610b7f5b0..29dfbe29c7 100644 --- a/website/common/locales/de/communityguidelines.json +++ b/website/common/locales/de/communityguidelines.json @@ -10,8 +10,8 @@ "commGuideHeadingInteractions": "Interaktionen in Habitica", "commGuidePara015": "Habitica hat zwei Arten sozialer Orte: öffentliche und private. Öffentliche Orte sind das Gasthaus, öffentliche Gilden, GitHub, Trello und das Wiki. Private Orte sind private Gilden, der Gruppenchat und Private Nachrichten. Alle Anzeigenamen müssen den Community-Richtlinien für öffentliche Orte entsprechen. Um Deinen Anzeigenamen zu ändern, wähle auf der Webseite Benutzer Icon > Profil und klicke auf den \"Bearbeiten\"-Knopf. ", "commGuidePara016": "Wenn Du Dich durch die öffentlichen Orte in Habitica bewegst, gibt es ein paar allgemeine Regeln, damit jeder sicher und glücklich ist. Diese sollten für einen Abenteurer wie Dich einfach sein!", - "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:", - "commGuideList02B": "Obey all of the Terms and Conditions.", + "commGuideList02A": "Respektiert einander. Sei höflich, freundlich und hilfsbereit. Vergiss nicht: Habiticaner kommen aus den verschiedensten Hintergründen und haben sehr andere Erfahrungen gemacht. Das macht Habitica so eigenartig! Es ist wichtig, das man beim Aufbauen einer Community seine Unterschiede und Ähnlichkeiten respektieren aber natürlich auch feiern kann. Dies sind einfache Möglichkeiten einander zu respektieren:", + "commGuideList02B": "Befolge alle allgemeinen Geschäftsbedingungen.", "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.", @@ -119,7 +119,7 @@ "commGuideHeadingLinks": "Nützliche Links", "commGuideLink01": "Habitica Help: Ask a Question: a Guild for users to ask questions!", "commGuideLink02": "The Wiki: the biggest collection of information about Habitica.", - "commGuideLink03": "GitHub: for bug reports or helping with code!", + "commGuideLink03": "GitHub: für Fehlermeldungen oder für das Mithelfen beim Programmieren.", "commGuideLink04": "The Main Trello: for site feature requests.", "commGuideLink05": "The Mobile Trello: for mobile feature requests.", "commGuideLink06": "The Art Trello: for submitting pixel art.", diff --git a/website/common/locales/de/contrib.json b/website/common/locales/de/contrib.json index e6074aa1da..2ae9ab4802 100644 --- a/website/common/locales/de/contrib.json +++ b/website/common/locales/de/contrib.json @@ -49,7 +49,6 @@ "UUID": "Benutzer-ID", "loadUser": "Spieler laden", "noAdminAccess": "Du hast keine Administratorrechte.", - "pageMustBeNumber": "req.query.page muss eine Zahl sein", "userNotFound": "Benutzer nicht gefunden.", "invalidUUID": "UUID muss gültig sein", "title": "Titel", diff --git a/website/common/locales/de/front.json b/website/common/locales/de/front.json index 5ae6b4c9bc..ce21b850ec 100644 --- a/website/common/locales/de/front.json +++ b/website/common/locales/de/front.json @@ -156,7 +156,7 @@ "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": "Wie hat Habitica das reale Leben von Leuten beeinflusst?", "pkAnswer8": "You can find lots of testimonials for how Habitica has helped people here: https://habitversary.tumblr.com", - "pkMoreQuestions": "Do you have a question that’s not on this list? Send an email to admin@habitica.com!", + "pkMoreQuestions": "Hast du eine Frage, welche nicht in der Liste zu finden ist? Bitte sende uns eine Email an admin@habitica.com! ", "pkVideo": "Video", "pkPromo": "Aktionen", "pkLogo": "Logos", @@ -283,7 +283,7 @@ "invalidLoginCredentialsLong": "Uh-oh - your email address / login name or password is incorrect.\n- Make sure they are typed correctly. Your login name 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": "Es gibt kein Konto, das diese Anmeldedaten verwendet.", "accountSuspended": "This account, User ID \"<%= userId %>\", has been blocked for breaking the [Community Guidelines](https://habitica.com/static/community-guidelines) or [Terms of Service](https://habitica.com/static/terms). For details or to ask to be unblocked, please email our Community Manager at <%= communityManagerEmail %> or ask your parent or guardian to email them. Please copy your User ID into the email and include your Profile Name.", - "accountSuspendedTitle": "Account has been suspended", + "accountSuspendedTitle": "Dieser Account wurde suspendiert. ", "unsupportedNetwork": "Dieses Netzwerk wird aktuell nicht unterstützt.", "cantDetachSocial": "Der Account hat nur noch diese Authentifizierung, sie kann nicht getrennt werden.", "onlySocialAttachLocal": "Lokale Authentifizierung kann nur zu einem Social-Media-Konto hinzugefügt werden.", diff --git a/website/common/locales/de/gear.json b/website/common/locales/de/gear.json index 79e49ec704..b5d30fd904 100644 --- a/website/common/locales/de/gear.json +++ b/website/common/locales/de/gear.json @@ -1021,7 +1021,7 @@ "headMystery201802Text": "Liebeskäfer-Helm", "headMystery201802Notes": "Die Fühler auf diesem Helm funktionieren wie niedliche Wünschelruten, die Gefühle der Liebe und Unterstützung in der Nähe aufspüren. Gewährt keinen Attributbonus. Abonnentengegenstand, Februar 2018.", "headMystery201803Text": "Wagemutiges Libellendiadem", - "headMystery201803Notes": "Although its appearance is quite decorative, you can engage the wings on this circlet for extra lift! Confers no benefit. March 2018 Subscriber Item.", + "headMystery201803Notes": "Trotz ihres dekorativen Aussehens können Dir die Flügel auf diesen Diadem extra Auftrieb geben! Gewährt keinen Attributbonus. Abonnentengegenstand, März 2018. ", "headMystery301404Text": "Schicker Zylinder", "headMystery301404Notes": "Ein schicker Zylinder für die feinsten Ehrenleute! Gewährt keinen Attributbonus. Abonnentengegenstand, Januar 3015.", "headMystery301405Text": "Einfacher Zylinder", @@ -1357,11 +1357,11 @@ "backMystery201709Text": "Zauberbücherstapel", "backMystery201709Notes": "Magie zu erlernen erfordert eine Menge zu Lesen, aber Du bist Dir sicher, dass Dir nicht langweilig wird! Gewährt keinen Attributbonus. Abonnentengegenstand, September 2017.", "backMystery201801Text": "Frostkobold-Flügel", - "backMystery201801Notes": "They may look as delicate as snowflakes, but these enchanted wings can carry you anywhere you wish! Confers no benefit. January 2018 Subscriber Item.", + "backMystery201801Notes": "Diese verzauberten Flügel sehen vielleicht so delikat wie Schneeflocken aus, aber sie werden Dich tragen wohin du willst! Gewährt keinen Attributbonus. Abonnentengegenstand, Januar 2018.", "backMystery201803Text": "Wagemutige Libellenflügel", - "backMystery201803Notes": "These bright and shiny wings will carry you through soft spring breezes and across lily ponds with ease. Confers no benefit. March 2018 Subscriber Item.", - "backMystery201804Text": "Squirrel Tail", - "backMystery201804Notes": "Sure, it helps you balance while you jump on branches, but the most important thing is MAXIMUM FLUFF. Confers no benefit. April 2018 Subscriber Item.", + "backMystery201803Notes": "Diese glänzenden, hellen Fügel werden Dich mühelos durch leichte Frühlingsbrisen und über Lilienteiche tragen. Gewährt keinen Attributbonus. Abonnentengegenstand, März 2018.", + "backMystery201804Text": "Eichörnchenschwanz", + "backMystery201804Notes": "Klar hilft dieser Schwanz Dir beim Springen von Ast zu Ast, aber viel wichtiger ist seine MAXIMALE FLAUSCHIGKEIT. Gewährt keinen Attributbonus. Abonnentengegenstand, April 2018.", "backSpecialWonderconRedText": "Mächtiger Umhang", "backSpecialWonderconRedNotes": "Strotzt vor Stärke und Schönheit. Gewährt keinen Attributbonus. Special Edition Convention-Gegenstand.", "backSpecialWonderconBlackText": "Tückischer Umhang", @@ -1405,7 +1405,7 @@ "bodyMystery201706Text": "Zerlumpter Korsarenumhang", "bodyMystery201706Notes": "Dieser Umhang hat geheime Taschen um all das Gold zu verstecken, dass Du von Deinen Aufgaben erbeutet hast. Gewährt keinen Attributbonus. Abonnentengegenstand, Juni 2017.", "bodyMystery201711Text": "Teppichreiterschal", - "bodyMystery201711Notes": "This soft knitted scarf looks quite majestic blowing in the wind. Confers no benefit. November 2017 Subscriber Item.", + "bodyMystery201711Notes": "Dieser weiche Schal sieht sehr majestätisch aus wenn er sich leicht im Wind bewegt. Gewährt keinen Attributbonus. Abonnentengegenstand, November 2017.", "bodyArmoireCozyScarfText": "Gemütlicher Schal", "bodyArmoireCozyScarfNotes": "This fine scarf will keep you warm as you go about your wintry business. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Lamplighter's Set (Item 4 of 4).", "headAccessory": "Kopfschmuck", @@ -1474,8 +1474,8 @@ "headAccessoryMystery201510Notes": "Diese schreckenerregenden Hörner sind ein wenig schleimig. Gewährt keinen Attributbonus. Abonnentengegenstand, Oktober 2015.", "headAccessoryMystery201801Text": "Frostkobold-Geweih", "headAccessoryMystery201801Notes": "Dieses eigige Geweih schimmert mit dem Glanze eines Winterpolarlichts. Gewährt keinen Attributbonus. Abonnentengegenstand, Januar 2018.", - "headAccessoryMystery201804Text": "Squirrel Ears", - "headAccessoryMystery201804Notes": "These fuzzy sound-catchers will ensure you never miss the rustle of a leaf or the sound of an acorn falling! Confers no benefit. April 2018 Subscriber Item.", + "headAccessoryMystery201804Text": "Eichörnchenohren", + "headAccessoryMystery201804Notes": "Mit diesem flauschigen Geräuschfänger wirst Du nie das Rascheln eines Blatts oder das Geräusch einer fallenden Eichel verpassen! Gewährt keinen Attributbonus. Abonnentengegenstand, April 2018.", "headAccessoryMystery301405Text": "Kopf-Brille", "headAccessoryMystery301405Notes": "\"Brillen sind für die Augen,\" haben sie gesagt. \"Niemand will Brillen, die man nur auf dem Kopf tragen kann,\" haben sie gesagt. Ha! Da hast Du es ihnen aber ordentlich gezeigt! Gewährt keinen Attributbonus. Abonnentengegenstand, August 3015.", "headAccessoryArmoireComicalArrowText": "Komischer Pfeil", diff --git a/website/common/locales/de/groups.json b/website/common/locales/de/groups.json index 9f0708726a..9406d633e9 100644 --- a/website/common/locales/de/groups.json +++ b/website/common/locales/de/groups.json @@ -5,7 +5,7 @@ "innCheckIn": "Im Gasthaus erholen", "innText": "Du erholst Dich im Gasthaus! Während Du dort verweilst, werden Dir Deine täglichen Aufgaben keinen Schaden zufügen, aber trotzdem täglich aktualisiert. Vorsicht: Wenn Du an einem Bosskampf teilnimmst, erhältst Du weiterhin Schaden für die verpassten Aufgaben Deiner Gruppenmitglieder, sofern sich diese nicht auch im Gasthaus befinden! Außerdem wird der Schaden, den Du dem Boss zufügst, (und gefundene Gegenstände) erst angewendet, wenn Du das Gasthaus verlässt.", "innTextBroken": "Du erholst Dich im Gasthaus, schätze ich ... Während Du dort verweilst, werden Dir Deine täglichen Aufgaben keinen Schaden zufügen, aber trotzdem täglich aktualisiert ... Wenn Du an einem Bosskampf teilnimmst, erhältst Du weiterhin Schaden für die verpassten Aufgaben Deiner Gruppenmitglieder ... sofern sich diese nicht auch im Gasthaus befinden ... Außerdem wird Dein Schaden am Boss (oder gesammelte Gegenstände) nicht berücksichtigt, bis Du das Gasthaus verlässt ... So müde ...", - "innCheckOutBanner": "You are currently checked into the Inn. Your Dailies won't damage you and you won't make progress towards Quests.", + "innCheckOutBanner": "Du hast derzeit in das Gasthaus eingecheckt. Deine Tagesaufgaben können dir nicht schaden und du erzielst keinen Fortschritt bei deinen Quests.", "resumeDamage": "Schaden fortsetzen", "helpfulLinks": "Weiterführende Links", "communityGuidelinesLink": "Community-Richtlinien", @@ -34,7 +34,7 @@ "communityGuidelines": "Community-Richtlinien", "communityGuidelinesRead1": "Bitte lies unsere", "communityGuidelinesRead2": "vor dem Chatten.", - "bannedWordUsed": "Oops! Looks like this post contains a swearword, religious oath, or reference to an addictive substance or adult topic (<%= swearWordsUsed %>). Habitica has users from all backgrounds, so we keep our chat very clean. Feel free to edit your message so you can post it!", + "bannedWordUsed": "Hoppla! Es sieht so aus, als würde dieser Beitrag ein Schimpfwort oder einen religiösen Fluch enthält, oder sich auf Suchtstoffe oder nicht-jugendfreie Themen bezieht (<%= swearWordsUsed %>). Habitica hat Spieler unterschiedlichster Herkunft, weswegen wir unseren Chat besonders sauber halten wollen. Du kannst Deine Nachricht gerne überarbeiten, um sie doch noch posten zu können! ", "bannedSlurUsed": "Dein Beitrag enthielt unangebrachten Inhalt und deine Chat Privilegien wurden Dir entzogen.", "party": "Gruppe", "createAParty": "Gruppe erstellen", @@ -106,16 +106,16 @@ "optionalMessage": "Optionale Nachricht", "yesRemove": "Ja, entferne sie", "foreverAlone": "\"Gefällt mir\" funktioniert nicht bei eigenen Nachrichten. Sei nicht so einer.", - "sortDateJoinedAsc": "Frühestes Beitrittsdatum", - "sortDateJoinedDesc": "Letztes Beitrittsdatum", - "sortLoginAsc": "Frühester Login", - "sortLoginDesc": "Letzter Login", - "sortLevelAsc": "Niedrigster Level", - "sortLevelDesc": "Höchster Level", - "sortNameAsc": "Name (A - Z)", - "sortNameDesc": "Name (Z - A)", - "sortTierAsc": "Niedrigster Rang", - "sortTierDesc": "Höchster Rang", + "sortBackground": "Nach Hintergrund sortieren", + "sortClass": "Sortiere nach Klasse", + "sortDateJoined": "Nach Beitrittsdatum sortieren", + "sortLogin": "Sortiere nach Login Datum ", + "sortLevel": "Nach Level sortieren", + "sortName": "Sortiere nach Name", + "sortTier": "Nach Rang sortieren", + "ascendingAbbrev": "Aufsteigend", + "descendingAbbrev": "Absteigend", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Gilde für 4 Edelsteine gründen?", "leaveGroupCha": "Gildenwettbewerbe verlassen und ...", "confirm": "Bestätigen", @@ -131,6 +131,10 @@ "clearAll": "Lösche alle Nachrichten", "confirmDeleteAllMessages": "Bist Du sicher, dass Du alle Nachrichten im Posteingang löschen möchtest? Andere Benutzer können immer noch die Nachrichten sehen, die Du ihnen geschickt hast.", "optOutPopover": "Du willst keine privaten Nachrichten? Klick hier um sie zu deaktivieren", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Sperren", "unblock": "Entsperren", "pm-reply": "Eine Antwort schicken", @@ -146,12 +150,12 @@ "report": "Melden", "abuseFlag": "Verletzung der Community-Richtlinien melden", "abuseFlagModalHeading": "Melde einen Verstoß", - "abuseFlagModalBody": "Are you sure you want to report this post? You should only report a post that violates the <%= firstLinkStart %>Community Guidelines<%= linkEnd %> and/or <%= secondLinkStart %>Terms of Service<%= linkEnd %>. Inappropriately reporting a post is a violation of the Community Guidelines and may give you an infraction.", + "abuseFlagModalBody": "Möchtest Du diesen Beitrag wirklich melden? Du solltest ausschließlich Beiträge melden, die unsere <%= firstLinkStart %>Community-Richtlinien<%= linkEnd %> und/oder unsere <%= secondLinkStart %>Nutzungsbedingungen<%= linkEnd %> verletzen. Das ungerechtfertigte Melden von Beiträgen stellt eine Verletzung der Community-Richtlinien dar und kann geahndet werden.", "abuseFlagModalButton": "Verstoß melden", "abuseReported": "Danke, dass Du diesen Verstoß gemeldet hast. Die Moderatoren wurden benachrichtigt.", "abuseAlreadyReported": "Du hast diese Nachricht bereits gemeldet.", "whyReportingPost": "Wieso meldest Du diesen Post?", - "whyReportingPostPlaceholder": "Please help our moderators by letting us know why you are reporting this post for a violation, e.g., spam, swearing, religious oaths, bigotry, slurs, adult topics, violence.", + "whyReportingPostPlaceholder": "Bitte hilf unseren Moderatoren und gib einen Grund an, warum Du diesen Beitrag als Verstoß gemeldet hast, z.B. Spam, Fluchen, Religiöse Schwüre, Intoleranz, Beleidigungen, Nicht jugendfreie Themen, Gewalt.", "optional": "Wahlweise", "needsText": "Bitte gib eine Nachricht ein.", "needsTextPlaceholder": "Gib Deine Nachricht hier ein.", @@ -163,7 +167,7 @@ "leaderOnlyChallenges": "Nur der Gruppenleiter kann Wettbewerbe erstellen", "sendGift": "Geschenk schicken", "inviteFriends": "Lade Freunde ein", - "partyMembersInfo": "Your Party currently has <%= memberCount %> members and <%= invitationCount %> pending invitations. The limit of members in a Party is <%= limitMembers %>. Invitations above this limit cannot be sent.", + "partyMembersInfo": "Deine Gruppe hat aktuell <%= memberCount %> Mitglieder und <%= invitationCount %> ausstehende Einladungen. Die maximale Anzahl an Mitgliedern in einer Gruppe ist <%= limitMembers %>. Einladungen über diesem Limit können nicht verschickt werden.", "inviteByEmail": "Lade per E-Mail ein", "inviteByEmailExplanation": "Wenn Freunde über Deine E-Mail zu Habitica stoßen, werden sie automatisch zu Deiner Gruppe eingeladen!", "inviteMembersHowTo": "Leute einladen: mit einer gültigen Email-Adresse oder der 36-stelligen Nutzer ID. Wenn eine Email-Adresse noch nicht registriert ist, laden wir diejenigen nach Habitica ein.", @@ -197,17 +201,16 @@ "partyExplanation2": "Bekämpfe Monster und nimm an Wettbewerben teil!", "partyExplanation3": "Lade jetzt Freunde ein und erhalte eine Questschriftrolle!", "wantToStartParty": "Willst Du eine Gruppe gründen?", - "exclusiveQuestScroll": "Inviting a friend to your Party will grant you an exclusive Quest Scroll to battle the Basi-List together!", + "exclusiveQuestScroll": "Wenn Du Freunde in Deine Gruppe einlädst, erhältst Du eine exklusive Questschriftrolle, mit der ihr gemeinsam den Basi-List bekämpfen könnt!", "nameYourParty": "Gib Deiner neuen Gruppe einen Namen!", "partyEmpty": "Du bist alleine in Deiner Gruppe. Lade Deine Freunde ein!", "partyChatEmpty": "Dein Gruppenchat ist leer. Tippe eine Nachricht in die Box oben, um mit dem Chat zu beginnen.", "guildChatEmpty": "Dieser Gildenchat ist leer. Gib eine Nachricht ein und beginne mit dem Chat.", - "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any Party or Guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them.", + "requestAcceptGuidelines": "Wenn Du Nachrichten im Gasthaus oder in irgendeinem Gruppen- oder Gilden-Chat posten willst, lies bitte zuerst unsere <%= linkStart %>Community-Richtlinien<%= linkEnd %>. Klicke danach unten auf den Button, um sie zu akzeptieren.", "partyUpName": "Party!", "partyOnName": "Riesenparty!", "partyUpText": "Du bist einer Gruppe mit einer anderen Person beigetreten! Ihr werdet zusammen Monster bekämpfen und euch unterstützen - viel Spaß dabei. ", "partyOnText": "Du bist einer Gruppe mit mindestens vier Personen beigetreten! Erkenne die Vorteile einer erhöhten Verantwortung während Du Dich mit Deinen Freunden vereinst, um Eure Gegner zu besiegen!", - "groupIdRequired": "\"groupId\" muss eine gültige UUID sein", "groupNotFound": "Team nicht gefunden, oder Du hast keine Zugriffsrechte.", "groupTypesRequired": "Du musst einen gültigen \"Type\" Suchbegriff eingeben.", "questLeaderCannotLeaveGroup": "Du kannst Deine Gruppe nicht verlassen, wenn Du eine Quest gestartet hast. Brich die Quest zuvor ab.", @@ -217,15 +220,13 @@ "memberCannotRemoveYourself": "Du kannst Dich nicht selbst entfernen!", "groupMemberNotFound": "Benutzer nicht unter den Team-Mitgliedern gefunden", "mustBeGroupMember": "Muss ein Mitglied des Teams sein.", - "keepOrRemoveAll": "req.query.keep muss entweder \"keep-all\" oder \"remove-all\" sein", - "keepOrRemove": "req.query.keep muss entweder \"keep\" oder \"remove\" sein", "canOnlyInviteEmailUuid": "Es kann nur mittels UUID oder E-Mail eingeladen werden.", "inviteMissingEmail": "Fehlende E-Mail-Adresse zum Einladen.", "inviteMissingUuid": "User-ID in der Einladung fehlt", "inviteMustNotBeEmpty": "Einladung muss Daten enthalten", "partyMustbePrivate": "Gruppen müssen privat sein", "userAlreadyInGroup": "Nutzer-ID: <%= userId %>, Nutzer \"<%= username %>\" ist bereits in dieser Gruppe.", - "youAreAlreadyInGroup": "You are already a member of this group.", + "youAreAlreadyInGroup": "Du bist bereits Mitglied dieser Gruppe. ", "cannotInviteSelfToGroup": "Du kannst Dich nicht selbst in eine Gruppe einladen.", "userAlreadyInvitedToGroup": "Nutzer-ID: <%= userId %>, Nutzer \"<%= username %>\" wurde bereits zu dieser Gruppe eingeladen.", "userAlreadyPendingInvitation": "Nutzer-ID: <%= userId %>, Nutzer \"<%= username %>\" hat bereits eine ausstehende Einladung.", @@ -248,13 +249,13 @@ "confirmClaim": "Bist Du sicher, dass Du diese Aufgabe beanspruchen möchtest?", "confirmUnClaim": "Bist Du sicher, dass Du diese Aufgabe abgeben möchtest?", "confirmApproval": "Bist Du sicher, dass Du diese Aufgabe bestätigen möchtest?", - "confirmNeedsWork": "Are you sure you want to mark this task as needing work?", + "confirmNeedsWork": "Bist Du sicher, dass Du diese Aufgabe auf \"Benötigt Arbeit\" setzen möchtest?", "userRequestsApproval": "<%= userName %> beantragt eine Bestätigung", "userCountRequestsApproval": "<%= userCount %> beantragen eine Bestätigung", "youAreRequestingApproval": "Du beantragst eine Bestätigung", - "chatPrivilegesRevoked": "You cannot do that because your chat privileges have been revoked.", - "cannotCreatePublicGuildWhenMuted": "You cannot create a public guild because your chat privileges have been revoked.", - "cannotInviteWhenMuted": "You cannot invite anyone to a guild or party because your chat privileges have been revoked.", + "chatPrivilegesRevoked": "Du kannst dies nicht tun, da Dir Deine Chat-Privilegien entzogen wurden.", + "cannotCreatePublicGuildWhenMuted": "Du kannst keine öffentliche Gilde erstellen, da Dir Deine Chat-Privilegien entzogen wurden.", + "cannotInviteWhenMuted": "Du kannst niemanden zu einer Gruppe oder Gilde einladen, da Dir Deine Chat-Privilegien entzogen wurden.", "newChatMessagePlainNotification": "Neue Nachricht in <%= groupName %> von <%= authorName %>. Hier geht's zur Chat Seite!", "newChatMessageTitle": "Neue Nachricht in <%= groupName %>", "exportInbox": "Nachrichten exportieren", @@ -268,7 +269,7 @@ "groupHomeTitle": "Startseite", "assignTask": "Aufgabe zuweisen", "claim": "Anspruch", - "removeClaim": "Remove Claim", + "removeClaim": "Anspruch abtreten", "onlyGroupLeaderCanManageSubscription": "Nur der Team-Leiter kann Team-Registrierungen verwalten", "yourTaskHasBeenApproved": "Your task <%= taskText %> has been approved.", "taskNeedsWork": "<%= managerName %> marked <%= taskText %> as needing additional work.", @@ -315,7 +316,7 @@ "approvalsTitle": "Aufgaben-Zustimmung erwartet", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "Wenn Dein Team Aufgaben erledigt, die deine Zustimmung brauchen, erscheinen sie hier! Passe die Zustimmungs-Einstellungen in den Aufgaben an.", - "userIsClamingTask": "`<%= username %> hat \"<%= task %>\"` eingefordert", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Zustimmung erbeten", "refreshApprovals": "Zustimmungen aktualisieren", "refreshGroupTasks": "Team-Aufgaben aktualisieren", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Du kannst Team-Aufgaben, die Dir zugewiesen wurden, nicht löschen.", "confirmGuildPlanCreation": "Dieses Team erstellen?", "onlyGroupLeaderCanInviteToGroupPlan": "Nur der Teamleiter kann Nutzer zu einem Team mit einem Abonnement hinzufügen.", - "remainOrLeaveChallenges": "req.query.keep muss entweder 'remain-in-challenges' oder 'leave-challenges' sein", "paymentDetails": "Zahlungsinformationen", "aboutToJoinCancelledGroupPlan": "Du bist dabei einem Team mit gekündigtem Plan beizutreten. Du erhältst KEIN freies Abonnement.", "cannotChangeLeaderWithActiveGroupPlan": "Du kannst den Leiter nicht ändern während das Team einen aktiven Plan hat.", @@ -366,9 +366,11 @@ "recentActivity": "Kürzliche Aktivitäten", "myGuilds": "Meine Gilden", "guildsDiscovery": "Gilden entdecken", + "role": "Role", "guildOrPartyLeader": "Leiter", "guildLeader": "Gildenleiter", "member": "Mitglied", + "guildSize": "Guild Size", "goldTier": "Gold", "silverTier": "Silber", "bronzeTier": "Bronze", @@ -424,10 +426,10 @@ "managerAdded": "Manager erfolgreich hinzugefügt", "managerRemoved": "Manager erfolgreich entfernt", "leaderChanged": "Gruppenleitung wurde gewechselt", - "groupNoNotifications": "This Guild does not have notifications due to member size. Be sure to check back often for replies to your messages!", + "groupNoNotifications": "Diese Gilde ist zu groß, um Hinweismeldungen zu unterstützen! Schau öfter rein, um keine Antwort auf Deine Nachrichten zu verpassen!", "whatIsWorldBoss": "Was ist ein Weltboss?", - "worldBossDesc": "A World Boss is a special event that brings the Habitica community together to take down a powerful monster with their tasks! All Habitica users are rewarded upon its defeat, even those who have been resting in the Inn or have not used Habitica for the entirety of the quest.", - "worldBossLink": "Read more about the previous World Bosses of Habitica on the Wiki.", + "worldBossDesc": "Ein Weltboss ist ein besonderes Ereignis, bei dem die ganze Habitica Community zusammen arbeitet, um ein mächtiges Monster durch ihre Aufgaben zu besiegen! Alle Benutzer Habiticas erhalten nach dem Sieg eine Belohnung, sogar diejenigen, die im Gasthaus waren oder Habitica während der ganzen Quest nicht genutzt haben.", + "worldBossLink": "Erfahre mehr über die vorigen Weltbosse von Habitica im Wiki.", "worldBossBullet1": "Erfülle Deine Aufgaben, um dem Welt-Boss Schaden zuzufügen", "worldBossBullet2": "Der Welt-Boss wird Dir keinen Schaden für nicht erledigte Aufgaben zufügen, aber sein Raserei-Balken wird ansteigen. Wenn dieser voll ist, wird der Boss einen von Habiticas Händlern angreifen!", "worldBossBullet3": "Du kannst weiterhin Quest-Bosse bekämpfen, Dein Schaden wird beiden zugefügt werden.", @@ -436,16 +438,16 @@ "groupPlanTitle": "Need more for your crew?", "groupPlanDesc": "Managing a small team or organizing household chores? Our group plans grant you exclusive access to a private task board and chat area dedicated to you and your group members!", "billedMonthly": "*billed as a monthly subscription", - "teamBasedTasksList": "Team-Based Task List", + "teamBasedTasksList": "Teambasierte Aufgabenliste", "teamBasedTasksListDesc": "Set up an easily-viewed shared task list for the group. Assign tasks to your fellow group members, or let them claim their own tasks to make it clear what everyone is working on!", "groupManagementControls": "Group Management Controls", "groupManagementControlsDesc": "Use task approvals to verify that a task that was really completed, add Group Managers to share responsibilities, and enjoy a private group chat for all team members.", "inGameBenefits": "In-Game Benefits", "inGameBenefitsDesc": "Group members get an exclusive Jackalope Mount, as well as full subscription benefits, including special monthly equipment sets and the ability to buy gems with gold.", "inspireYourParty": "Inspire your party, gamify life together.", - "letsMakeAccount": "First, let’s make you an account", - "nameYourGroup": "Next, Name Your Group", - "exampleGroupName": "Example: Avengers Academy", + "letsMakeAccount": "Lass uns dir als erstes einen Account erstellen", + "nameYourGroup": "Wähle als nächstes einen Namen für deine Gruppe", + "exampleGroupName": "Beispiel: Avangers Academy", "exampleGroupDesc": "For those selected to join the training academy for The Avengers Superhero Initiative", "thisGroupInviteOnly": "This group is invitation only.", "gettingStarted": "Getting Started", @@ -454,12 +456,12 @@ "whatsIncludedGroupDesc": "All members of the Group receive full subscription benefits, including the monthly subscriber items, the ability to buy Gems with Gold, and the Royal Purple Jackalope mount, which is exclusive to users with a Group Plan membership.", "howDoesBillingWork": "How does billing work?", "howDoesBillingWorkDesc": "Group Leaders are billed based on group member count on a monthly basis. This charge includes the $9 (USD) price for the Group Leader subscription, plus $3 USD for each additional group member. For example: A group of four users will cost $18 USD/month, as the group consists of 1 Group Leader + 3 group members.", - "howToAssignTask": "How do you assign a Task?", + "howToAssignTask": "Wie weise ich eine Aufgabe zu? ", "howToAssignTaskDesc": "Assign any Task to one or more Group members (including the Group Leader or Managers themselves) by entering their usernames in the \"Assign To\" field within the Create Task modal. You can also decide to assign a Task after creating it, by editing the Task and adding the user in the \"Assign To\" field!", "howToRequireApproval": "How do you mark a Task as requiring approval?", "howToRequireApprovalDesc": "Toggle the \"Requires Approval\" setting to mark a specific task as requiring Group Leader or Manager confirmation. The user who checked off the task won't get their rewards for completing it until it has been approved.", "howToRequireApprovalDesc2": "Group Leaders and Managers can approve completed Tasks directly from the Task Board or from the Notifications panel.", - "whatIsGroupManager": "What is a Group Manager?", + "whatIsGroupManager": "Was ist ein Gruppen Manager? ", "whatIsGroupManagerDesc": "A Group Manager is a user role that do not have access to the group's billing details, but can create, assign, and approve shared Tasks for the Group's members. Promote Group Managers from the Group’s member list.", - "goToTaskBoard": "Go to Task Board" + "goToTaskBoard": "Gehe zum Aufgabenbrett" } \ No newline at end of file diff --git a/website/common/locales/de/loadingscreentips.json b/website/common/locales/de/loadingscreentips.json index 7256c7bd40..7bd14bf107 100644 --- a/website/common/locales/de/loadingscreentips.json +++ b/website/common/locales/de/loadingscreentips.json @@ -25,7 +25,7 @@ "tip23": "Erreiche Level 100, um die Sphäre der Wiedergeburt kostenlos zu erhalten und ein neues Abenteuer zu beginnen.", "tip24": "Du hast eine Frage? Stelle sie in der Habitica Help Gilde!", "tip25": "Die vier großen Galas der Jahreszeiten starten um die Sonnenwenden und Tagundnachtgleichen.", - "tip26": "You can look for a Party or find Party members in the Party Wanted Guild!", + "tip26": "Du kannst dich nach einer Gruppe umsehen oder Gruppenmitglieder in der Gruppe-Gesucht-Gilde finden!", "tip27": "Du hast gestern eine tägliche Aufgabe abgeschlossen, aber vergessen, sie abzuhaken? Mach Dir keine Sorgen! Mit der Funktion \"Gestrige Aktivität aufzeichnen\" hast Du die Chance, einzutragen, was Du gemacht hast, bevor Du einen neuen Tag startest.", "tip28": "Setze Deinen Tageswechsel individuell unter Benutzer Icon > Einstellungen, um festzulegen, wann Dein Tag beginnt.", "tip29": "Erledige alle Deine Tagesaufgaben und Du erhältst einen Perfekter-Tag-Bonus, der Deine Attribute erhöht!", diff --git a/website/common/locales/de/npc.json b/website/common/locales/de/npc.json index e8040b739a..e02d35bce6 100644 --- a/website/common/locales/de/npc.json +++ b/website/common/locales/de/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Besondere Empfehlungen!", "hideLocked": "Gesperrte verbergen", "hidePinned": "In der Pinnwand angezeigte verbergen", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Erfahrung", "amountGold": "<%= amount %> Gold", "namedHatchingPotion": "<%= type %> Schlüpfelixier", @@ -74,20 +75,13 @@ "ianTextMobile": "Kann ich Dein Interesse an einigen Questschriftrollen wecken? Aktiviere sie um mit deiner Gruppe Monster zu bekämpfen!", "ianBrokenText": "Willkommen im Quest-Shop ... Hier kannst Du Questschriftrollen besorgen, um mit Deinen Freunden Monster zu bekämpfen ... Durchstöbere unsere große Anzahl an Schriftrollen und investiere in die Richtige ...", "featuredQuests": "Empfohlene Quests!", - "missingKeyParam": "\"req.params.key\" wird benötigt.", - "itemNotFound": "Eintrag \"<%= key %>\" nicht gefunden.", "cannotBuyItem": "Du kannst diesen Gegenstand nicht kaufen.", - "missingTypeKeyEquip": "\"Schlüssel\" und \"Typ\" sind erforderliche Parameter.", - "missingPetFoodFeed": "\"Haustier\" und \"Futter\" sind erforderliche Parameter.", - "invalidPetName": "Haustier-Name ist ungültig.", - "missingEggHatchingPotionHatch": "\"Ei\" und \"Schlüpfelixier\" sind erforderliche Parameter.", - "invalidTypeEquip": "\"Typ\" muss eines der folgenden sein: 'ausgerüstet', 'Haustier', 'Reittier', 'Kostüm'.", "mustPurchaseToSet": "Du musst <%= val %> kaufen, um es auf <%= key %> zu setzen.", "typeRequired": "Typ ist erforderlich", "positiveAmountRequired": "Positiver Betrag benötigt", "notAccteptedType": "Typ muss eins der Folgenden sein: [Eier, Schlüpftränke, Premium-Schlüpftränke, Futter, Quests, Ausrüstung]", "contentKeyNotFound": "Schlüssel für Inhalt <%= type %> nicht gefunden", - "plusGem": "+<%= count %> Gem", + "plusGem": "+<%= count %> Edelstein", "typeNotSellable": "Typ ist nicht verkäuflich. Dieser muss einer der Folgenden sein: <%= acceptedTypes %>", "userItemsKeyNotFound": "Schlüssel für user.items <%= type %> nicht gefunden", "userItemsNotEnough": "Du hast nicht genug <%= type %>", diff --git a/website/common/locales/de/quests.json b/website/common/locales/de/quests.json index 23bf3d68ee..f9ead6f7f6 100644 --- a/website/common/locales/de/quests.json +++ b/website/common/locales/de/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Es wurde noch keine Questeinladung verschickt.", "questInviteNotFound": "Keine Questeinladung gefunden.", "guildQuestsNotSupported": "Gilden können nicht zu Quests eingeladen werden.", - "questNotFound": "Quest \"<%= key %>\" nicht gefunden.", "questNotOwned": "Du besitzt diese Quest-Schriftrolle nicht.", "questNotGoldPurchasable": "Quest \"<%= key %>\" ist nicht mit Gold käuflich.", "questLevelTooHigh": "Du musst Level <%= level %> haben, um diese Quest zu starten.", diff --git a/website/common/locales/de/questscontent.json b/website/common/locales/de/questscontent.json index fb5a2a546f..768788a665 100644 --- a/website/common/locales/de/questscontent.json +++ b/website/common/locales/de/questscontent.json @@ -599,6 +599,8 @@ "questSquirrelNotes": "You wake up and find you’ve overslept! Why didn’t your alarm go off? … How did an acorn get stuck in the ringer?

When you try to make breakfast, the toaster is stuffed with acorns. When you go to retrieve your mount, @Shtut is there, trying unsuccessfully to unlock their stable. They look into the keyhole. “Is that an acorn in there?”

@randomdaisy cries out, “Oh no! I knew my pet squirrels had gotten out, but I didn’t know they’d made such trouble! Can you help me round them up before they make any more of a mess?”

Following the trail of mischievously placed oak nuts, you track and catch the wayward sciurines, with @Cantras helping secure each one safely at home. But just when you think your task is almost complete, an acorn bounces off your helm! You look up to see a mighty beast of a squirrel, crouched in defense of a prodigious pile of seeds.

“Oh dear,” says @randomdaisy, softly. “She’s always been something of a resource guarder. We’ll have to proceed very carefully!” You circle up with your party, ready for trouble!", "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", - "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelDropSquirrelEgg": "Eichörnchen (Ei)", + "questSquirrelUnlockText": "Ermöglicht den Kauf von Eichörncheneiern auf dem Marktplatz ", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/de/settings.json b/website/common/locales/de/settings.json index 86b62ea333..ff63561772 100644 --- a/website/common/locales/de/settings.json +++ b/website/common/locales/de/settings.json @@ -32,7 +32,7 @@ "resetAccPop": "Starte neu, dabei werden alle Level, Gold, Ausrüstung, Verlauf und Aufgaben entfernt.", "deleteAccount": "Konto löschen", "deleteAccPop": "Kündige und entferne Dein Habitica-Konto.", - "feedback": "If you'd like to give us feedback, please enter it below - we'd love to know what you liked or didn't like about Habitica! Don't speak English well? No problem! Use the language you prefer.", + "feedback": "Wenn Du uns Feedback geben möchtest, gib es bitte unten ein - wir freuen uns darauf zu erfahren, was Dir an Habitica gefällt - oder auch nicht gefällt! Und falls Du Schwierigkeiten mit Englisch hast? Kein Problem! Schreib' in der Sprache, die Dir liegt.", "qrCode": "QR-Code", "dataExport": "Daten exportieren", "saveData": "Hier sind ein paar Möglichkeiten Deine Daten zu sichern.", diff --git a/website/common/locales/de/spells.json b/website/common/locales/de/spells.json index e1c478d714..bc21a4a204 100644 --- a/website/common/locales/de/spells.json +++ b/website/common/locales/de/spells.json @@ -2,8 +2,8 @@ "spellWizardFireballText": "Flammenstoß", "spellWizardFireballNotes": "Du erhältst XP und fügst Bossen zusätzlichen Schaden zu! (Basiert auf: INT)", "spellWizardMPHealText": "Ätherischer Schwall", - "spellWizardMPHealNotes": "You sacrifice Mana so the rest of your Party, except Mages, gains MP! (Based on: INT)", - "spellWizardNoEthOnMage": "Your Skill backfires when mixed with another's magic. Only non-Mages gain MP.", + "spellWizardMPHealNotes": "Du opferst Mana, demit der Rest deiner Gruppe, außer Magiern, MP erhält! (Basierend auf: INT)", + "spellWizardNoEthOnMage": "Dein Zauberspruch geht nach hinten los, wenn er mit der Magie eines anderen gemischt wird. Nur nicht-Magier erhalten MP.", "spellWizardEarthText": "Erdbeben", "spellWizardEarthNotes": "Deine mentalen Kräfte bringen die Erde zum Beben und hebt die Intelligenz Deiner Gruppe an! (Basiert auf: INT ohne Boni)", "spellWizardFrostText": "Klirrender Frost", @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Verwandle einen Freund in ein Meereslebewesen!", "spellSpecialSandText": "Sand", "spellSpecialSandNotes": "Hebe den Spruch auf, der einen Seestern aus Dir gemacht hat.", - "spellNotFound": "Fähigkeit \"<%= spellId %>\" nicht gefunden.", "partyNotFound": "Gruppe nicht gefunden", "targetIdUUID": "\"targetId\" muss eine gültige Benutzer-ID sein.", "challengeTasksNoCast": "Fähigkeiten auf Wettbewerbsaufgaben anzuwenden ist nicht erlaubt.", diff --git a/website/common/locales/de/subscriber.json b/website/common/locales/de/subscriber.json index 5131fae616..24e91327e9 100644 --- a/website/common/locales/de/subscriber.json +++ b/website/common/locales/de/subscriber.json @@ -142,7 +142,7 @@ "mysterySet201801": "Frostkobold-Set", "mysterySet201802": "Liebeskäfer-Set", "mysterySet201803": "Wagemutige-Libelle-Set", - "mysterySet201804": "Spiffy Squirrel Set", + "mysterySet201804": "Schickes Eichörnchen Set", "mysterySet301404": "Steampunk-Standard-Set", "mysterySet301405": "Steampunk-Zubehör-Set", "mysterySet301703": "Pfauen-Steampunk-Set", @@ -175,12 +175,6 @@ "invalidCoupon": "Ungültiger Gutscheincode.", "couponUsed": "Gutschein wurde bereits eingelöst.", "couponCodeRequired": "Gutscheincode erforderlich.", - "eventRequired": "\"req.params.event\" erforderlich.", - "countRequired": "\"req.query.count\" erforderlich.", - "missingPaymentId": "req.query.paymentId fehlt", - "missingCustomerId": "req.query.customerId fehlt", - "missingPaypalBlock": "req.session.paypalBlock fehlt", - "missingSubKey": "req.query.sub fehlt", "paypalCanceled": "Dein Abonnement wurde gekündigt", "earnGemsMonthly": "Verdiene bis zu **<%= cap %> Edelsteine** pro Monat", "receiveMysticHourglass": "Erhalte eine Mystische Sanduhr!", diff --git a/website/common/locales/de/tasks.json b/website/common/locales/de/tasks.json index fc4969d7b1..bd60f50c26 100644 --- a/website/common/locales/de/tasks.json +++ b/website/common/locales/de/tasks.json @@ -145,12 +145,11 @@ "rewardHelp3": "Während Welt-Events wird hier Spezialausrüstung erscheinen.", "rewardHelp4": "Scheue Dich nicht davor eigene Belohnungen hinzuzufügen! Sieh Dir einige Beispielbelohnungen durch.", "clickForHelp": "Klicke hier für Hilfe", - "taskIdRequired": "\"taskId\" muss eine gültige UUID sein.", "taskAliasAlreadyUsed": "Dieser Aufgaben Alias wird bereits verwendet.", "taskNotFound": "Aufgabe nicht gefunden.", "invalidTaskType": "Aufgabenart muss eines der folgenden sein: \"Gewohnheit\", \"tägliche Aufgabe\", \"To-Do\", \"Belohnung\".", "invalidTasksType": "Aufgabenart muss eines der folgenden Werte haben: \"habits\", \"dailys\", \"todos\", \"rewards\".", - "invalidTasksTypeExtra": "Task type must be one of \"habits\", \"dailys\", \"todos\", \"rewards\", \"completedTodos\".", + "invalidTasksTypeExtra": "Aufgabentyp muss einer der folgenden sein: \"Gewohnheiten\", \"Tagesaufgaben\", \"To-Dos\", \"Belohnungen\", \"erfüllte To-Dos\".", "cantDeleteChallengeTasks": "Eine Aufgabe, die zu einem Wettbewerb gehört, kann nicht gelöscht werden.", "checklistOnlyDailyTodo": "Checklisten sind nur für Tägliche Aufgaben und To-Do's verfügbar.", "checklistItemNotFound": "Es wurde kein Checklisten-Eintrag mit dieser ID gefunden.", @@ -174,7 +173,7 @@ "habitCounterDown": "Negativer Zähler (wird jede/n <%= frequency %> zurückgesetzt)", "taskRequiresApproval": "Dieser Aufgabe muss zugestimmt werden, bevor du sie abschließen kannst. Eine Zustimmung wurde bereits angefragt.", "taskApprovalHasBeenRequested": "Die Zustimmung wurde angefragt.", - "taskApprovalWasNotRequested": "Only a task waiting for approval can be marked as needing more work", + "taskApprovalWasNotRequested": "Nur eine Aufgabe, deren Bestätigung noch aussteht, kann mit \"noch viel zu tun\" markiert werden.", "approvals": "Zustimmungen", "approvalRequired": "Benötigt Zustimming", "repeatZero": "Die Tagesaufgabe ist nie fällig", diff --git a/website/common/locales/en/challenge.json b/website/common/locales/en/challenge.json index a5ca557e4a..39d0342263 100644 --- a/website/common/locales/en/challenge.json +++ b/website/common/locales/en/challenge.json @@ -13,7 +13,8 @@ "challengeWinner": "Was the winner in the following challenges", "challenges": "Challenges", "challengesLink": "Challenges", - + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "No challenges yet, visit", "toCreate": "to create one.", @@ -25,7 +26,9 @@ "filter": "Filter", "groups": "Groups", "noNone": "None", + "category": "Category", "membership": "Membership", + "ownership": "Ownership", "participating": "Participating", "notParticipating": "Not Participating", "either": "Either", diff --git a/website/common/locales/en/groups.json b/website/common/locales/en/groups.json index 2e1ef1f810..0c955b9c2e 100644 --- a/website/common/locales/en/groups.json +++ b/website/common/locales/en/groups.json @@ -107,16 +107,16 @@ "yesRemove": "Yes, remove them", "foreverAlone": "Can't like your own message. Don't be that person.", - "sortDateJoinedAsc": "Earliest Date Joined", - "sortDateJoinedDesc": "Latest Date Joined", - "sortLoginAsc": "Earliest Login", - "sortLoginDesc": "Latest Login", - "sortLevelAsc": "Lowest Level", - "sortLevelDesc": "Highest Level", - "sortNameAsc": "Name (A - Z)", - "sortNameDesc": "Name (Z - A)", - "sortTierAsc": "Lowest Tier", - "sortTierDesc": "Highest Tier", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Create Guild for 4 Gems?", "leaveGroupCha": "Leave Guild challenges and...", @@ -321,7 +321,7 @@ "approvalsTitle": "Tasks Awaiting Approval", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "When your group completes tasks that need your approval, they'll appear here! Adjust approval requirement settings under task editing.", - "userIsClamingTask": "`<%= username %> has claimed \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Approval Requested", "refreshApprovals": "Refresh Approvals", "refreshGroupTasks": "Refresh Group Tasks", @@ -371,9 +371,11 @@ "recentActivity": "Recent Activity", "myGuilds": "My Guilds", "guildsDiscovery": "Discover Guilds", + "role": "Role", "guildOrPartyLeader": "Leader", "guildLeader": "Guild Leader", "member": "Member", + "guildSize": "Guild Size", "goldTier": "Gold Tier", "silverTier": "Silver Tier", "bronzeTier": "Bronze Tier", diff --git a/website/common/locales/en/npc.json b/website/common/locales/en/npc.json index 49b4a6b456..5c404f64d4 100644 --- a/website/common/locales/en/npc.json +++ b/website/common/locales/en/npc.json @@ -53,6 +53,7 @@ "featuredItems": "Featured Items!", "hideLocked": "Hide locked", "hidePinned": "Hide pinned", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Experience", "amountGold": "<%= amount %> Gold", "namedHatchingPotion": "<%= type %> Hatching Potion", diff --git a/website/common/locales/en/questsContent.json b/website/common/locales/en/questsContent.json index 1f80de4127..92485ac2e8 100644 --- a/website/common/locales/en/questsContent.json +++ b/website/common/locales/en/questsContent.json @@ -694,5 +694,8 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } diff --git a/website/common/locales/en/spells.json b/website/common/locales/en/spells.json index d67816a19a..850b49dd85 100644 --- a/website/common/locales/en/spells.json +++ b/website/common/locales/en/spells.json @@ -4,7 +4,6 @@ "spellWizardMPHealText": "Ethereal Surge", "spellWizardMPHealNotes": "You sacrifice Mana so the rest of your Party, except Mages, gains MP! (Based on: INT)", - "spellWizardNoEthOnMage": "Your Skill backfires when mixed with another's magic. Only non-Mages gain MP.", "spellWizardEarthText": "Earthquake", "spellWizardEarthNotes": "Your mental power shakes the earth and buffs your Party's Intelligence! (Based on: Unbuffed INT)", diff --git a/website/common/locales/en/tasks.json b/website/common/locales/en/tasks.json index afaba0032a..50ba001de6 100644 --- a/website/common/locales/en/tasks.json +++ b/website/common/locales/en/tasks.json @@ -5,7 +5,7 @@ "sureDeleteCompletedTodos": "Are you sure you want to delete your completed To-Dos?", "lotOfToDos": "Your most recent 30 completed To-Dos are shown here. You can see older completed To-Dos from Data > Data Display Tool or Data > Export Data > User Data.", "deleteToDosExplanation": "If you click the button below, all of your completed To-Dos and archived To-Dos will be permanently deleted, except for To-Dos from active challenges and Group Plans. Export them first if you want to keep a record of them.", - "addMultipleTip": "Tip: To add multiple Tasks, separate each one using a line break (Shift + Enter) and then press \"Enter.\"", + "addMultipleTip": "Tip: To add multiple <%= taskType %>, separate each one using a line break (Shift + Enter) and then press \"Enter.\"", "addsingle": "Add Single", "addATask": "Add a <%= type %>", "editATask": "Edit a <%= type %>", @@ -210,7 +210,6 @@ "yesterDailiesDescription": "If this setting is applied, Habitica will ask you if you meant to leave the Daily undone before calculating and applying damage to your avatar. This can protect you against unintentional damage.", "repeatDayError": "Please ensure that you have at least one day of the week selected.", "searchTasks": "Search titles and descriptions...", - "repeatDayError": "Please ensure that you have at least one day of the week selected.", "sessionOutdated": "Your session is outdated. Please refresh or sync.", "errorTemporaryItem": "This item is temporary and cannot be pinned." } diff --git a/website/common/locales/en@pirate/challenge.json b/website/common/locales/en@pirate/challenge.json index 66ecdcf2bf..a631ac7004 100644 --- a/website/common/locales/en@pirate/challenge.json +++ b/website/common/locales/en@pirate/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Was t' victor in t' followin' challenges", "challenges": "Challenges", "challengesLink": "Challenges", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "No challenges yet, visit", "toCreate": "t' create one.", "selectWinner": "Select a winner an' close th' challenge:", @@ -23,7 +25,9 @@ "filter": "Filter", "groups": "Groups", "noNone": "None", + "category": "Category", "membership": "Membership", + "ownership": "Ownership", "participating": "Embarking", "notParticipating": "Not Embarking", "either": "Either", diff --git a/website/common/locales/en@pirate/character.json b/website/common/locales/en@pirate/character.json index a47e7c07d0..578a90666e 100644 --- a/website/common/locales/en@pirate/character.json +++ b/website/common/locales/en@pirate/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Show Stat Allocation", "hideQuickAllocation": "Hide Stat Allocation", "quickAllocationLevelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User Icon > Stats.", - "invalidAttribute": "\"<%= attr %>\" is not a valid Stat.", "notEnoughAttrPoints": "You don't have enough Stat Points.", "style": "Style", "facialhair": "Facial", @@ -219,6 +218,5 @@ "mainHand": "Main-Hand", "offHand": "Off-Hand", "pointsAvailable": "Points Available", - "pts": "pts", - "statsObjectRequired": "Stats update is required" + "pts": "pts" } \ No newline at end of file diff --git a/website/common/locales/en@pirate/contrib.json b/website/common/locales/en@pirate/contrib.json index e723c3e84d..2333b97eaf 100644 --- a/website/common/locales/en@pirate/contrib.json +++ b/website/common/locales/en@pirate/contrib.json @@ -49,7 +49,6 @@ "UUID": "User ID", "loadUser": "Load User", "noAdminAccess": "Ye don't have admin access.", - "pageMustBeNumber": "req.query.page must be a number", "userNotFound": "User not found.", "invalidUUID": "UUID must be valid", "title": "Title", diff --git a/website/common/locales/en@pirate/groups.json b/website/common/locales/en@pirate/groups.json index e89a316695..2ce032471e 100644 --- a/website/common/locales/en@pirate/groups.json +++ b/website/common/locales/en@pirate/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Optional message", "yesRemove": "Aye, scuttle them", "foreverAlone": "Can't like yer own message. Don't be a knave.", - "sortDateJoinedAsc": "Earliest Date Joined", - "sortDateJoinedDesc": "Latest Date Joined", - "sortLoginAsc": "Earliest Login", - "sortLoginDesc": "Latest Login", - "sortLevelAsc": "Lowest Level", - "sortLevelDesc": "Highest Level", - "sortNameAsc": "Name (A - Z)", - "sortNameDesc": "Name (Z - A)", - "sortTierAsc": "Lowest Tier", - "sortTierDesc": "Highest Tier", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Create Ship fer 4 Sapphires?", "leaveGroupCha": "Leave Ship challenges 'n...", "confirm": "Confirm", @@ -131,6 +131,10 @@ "clearAll": "Delete All Messages", "confirmDeleteAllMessages": "Are ye sure ye want t' delete all messages in yer inbox? Other users will still see messages ye've sent t' them.", "optOutPopover": "Don't like private messages? Click t' completely opt out", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Block", "unblock": "Un-block", "pm-reply": "Send a reply", @@ -207,7 +211,6 @@ "partyOnName": "Crew Ahead", "partyUpText": "Joined a Party with another person! Have fun battling monsters and supporting each other.", "partyOnText": "Joined a Party with at least four people! Enjoy your increased accountability as you unite with your friends to vanquish your foes!", - "groupIdRequired": "\"groupId\" must be a valid UUID", "groupNotFound": "Group not found or you don't have access.", "groupTypesRequired": "You must supply a valid \"type\" query string.", "questLeaderCannotLeaveGroup": "You cannot leave your Party when you have started a quest. Abort the quest first.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "You cannot remove yourself!", "groupMemberNotFound": "User not found among group's members", "mustBeGroupMember": "Must be member of the group.", - "keepOrRemoveAll": "req.query.keep must be either \"keep-all\" or \"remove-all\"", - "keepOrRemove": "req.query.keep must be either \"keep\" or \"remove\"", "canOnlyInviteEmailUuid": "Can only invite using uuids or emails.", "inviteMissingEmail": "Missing email address in invite.", "inviteMissingUuid": "Missing user id in invite", @@ -315,7 +316,7 @@ "approvalsTitle": "Tasks Awaiting Approval", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "When your group completes tasks that need your approval, they'll appear here! Adjust approval requirement settings under task editing.", - "userIsClamingTask": "`<%= username %> has claimed \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Approval Requested", "refreshApprovals": "Refresh Approvals", "refreshGroupTasks": "Refresh Group Tasks", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Can't delete group tasks that are assigned to you.", "confirmGuildPlanCreation": "Create this group?", "onlyGroupLeaderCanInviteToGroupPlan": "Only the group leader can invite users to a group with a subscription.", - "remainOrLeaveChallenges": "req.query.keep must be either 'remain-in-challenges' or 'leave-challenges'", "paymentDetails": "Payment Details", "aboutToJoinCancelledGroupPlan": "You are about to join a group with a canceled plan. You will NOT receive a free subscription.", "cannotChangeLeaderWithActiveGroupPlan": "You can not change the leader while the group has an active plan.", @@ -366,9 +366,11 @@ "recentActivity": "Recent Activity", "myGuilds": "My Guilds", "guildsDiscovery": "Discover Guilds", + "role": "Role", "guildOrPartyLeader": "Leader", "guildLeader": "Guild Leader", "member": "Member", + "guildSize": "Guild Size", "goldTier": "Gold Tier", "silverTier": "Silver Tier", "bronzeTier": "Bronze Tier", diff --git a/website/common/locales/en@pirate/npc.json b/website/common/locales/en@pirate/npc.json index 23cb532be0..50d892b210 100644 --- a/website/common/locales/en@pirate/npc.json +++ b/website/common/locales/en@pirate/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Featured Items!", "hideLocked": "Hide locked", "hidePinned": "Hide pinned", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Experience", "amountGold": "<%= amount %> Gold", "namedHatchingPotion": "<%= type %> Hatching Potion", @@ -74,14 +75,7 @@ "ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!", "ianBrokenText": "Ahoy! Welcome to the Quest Shop... Here ye can use Quest Scrolls to fight monsters wit' yer mates... Be sure t' check out our fine array of Quest Scrolls fer purchase on th' right...", "featuredQuests": "Featured Quests!", - "missingKeyParam": "\"req.params.key\" is required.", - "itemNotFound": "Item \"<%= key %>\" not found.", "cannotBuyItem": "Ye can't buy this here item.", - "missingTypeKeyEquip": "\"key\" and \"type\" are required parameters.", - "missingPetFoodFeed": "\"pet\" and \"food\" are required parameters.", - "invalidPetName": "Invalid pet name supplied.", - "missingEggHatchingPotionHatch": "\"egg\" and \"hatchingPotion\" are required parameters.", - "invalidTypeEquip": "\"type\" must be one of 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.", "typeRequired": "Type is required", "positiveAmountRequired": "Positive amount is required", diff --git a/website/common/locales/en@pirate/quests.json b/website/common/locales/en@pirate/quests.json index 99f48f4329..867a79e8f6 100644 --- a/website/common/locales/en@pirate/quests.json +++ b/website/common/locales/en@pirate/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "No quest invitation has been sent out yet.", "questInviteNotFound": "No quest invitation found.", "guildQuestsNotSupported": "Ships cannot sail to adventures without a crew.", - "questNotFound": "Quest \"<%= key %>\" not found.", "questNotOwned": "You don't own that quest scroll.", "questNotGoldPurchasable": "Quest \"<%= key %>\" is not a Gold-purchasable quest.", "questLevelTooHigh": "You must be level <%= level %> to begin this quest.", diff --git a/website/common/locales/en@pirate/questscontent.json b/website/common/locales/en@pirate/questscontent.json index 00bd97f72f..ef270ed9b6 100644 --- a/website/common/locales/en@pirate/questscontent.json +++ b/website/common/locales/en@pirate/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/en@pirate/spells.json b/website/common/locales/en@pirate/spells.json index dc738411f2..7dee3a4c41 100644 --- a/website/common/locales/en@pirate/spells.json +++ b/website/common/locales/en@pirate/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Turn a friend into a sea creature!", "spellSpecialSandText": "Sand", "spellSpecialSandNotes": "Reverse the spell that made you a sea star.", - "spellNotFound": "Skill \"<%= spellId %>\" not found.", "partyNotFound": "Crew not found", "targetIdUUID": "\"targetId\" must be a valid User ID.", "challengeTasksNoCast": "Casting a skill on challenge tasks is not allowed.", diff --git a/website/common/locales/en@pirate/subscriber.json b/website/common/locales/en@pirate/subscriber.json index 6edef588fc..8d2788376c 100644 --- a/website/common/locales/en@pirate/subscriber.json +++ b/website/common/locales/en@pirate/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Invalid coupon code.", "couponUsed": "Coupon code already used.", "couponCodeRequired": "Th' coupon code be required.", - "eventRequired": "\"req.params.event\" is required.", - "countRequired": "\"req.query.count\" is required.", - "missingPaymentId": "Missing req.query.paymentId", - "missingCustomerId": "Missing req.query.customerId", - "missingPaypalBlock": "Missing req.session.paypalBlock", - "missingSubKey": "Missing req.query.sub", "paypalCanceled": "Your subscription has been canceled", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "receiveMysticHourglass": "Receive a Mystic Hourglass!", diff --git a/website/common/locales/en@pirate/tasks.json b/website/common/locales/en@pirate/tasks.json index af609a6589..6c9c58da4c 100644 --- a/website/common/locales/en@pirate/tasks.json +++ b/website/common/locales/en@pirate/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "Special equipment will appear here durin' World Events.", "rewardHelp4": "Don't be afraid t' set custom Rewards! Check out some samples here.", "clickForHelp": "Click fer help", - "taskIdRequired": "\"taskId\" must be a valid UUID.", "taskAliasAlreadyUsed": "Task alias already used on another task.", "taskNotFound": "Task not found.", "invalidTaskType": "Task type must be one of \"habit\", \"daily\", \"todo\", \"reward\".", diff --git a/website/common/locales/en_GB/challenge.json b/website/common/locales/en_GB/challenge.json index 50610d482a..f3f1138baa 100644 --- a/website/common/locales/en_GB/challenge.json +++ b/website/common/locales/en_GB/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Was the winner in the following challenges", "challenges": "Challenges", "challengesLink": "Challenges", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "No challenges yet, visit", "toCreate": "to create one.", "selectWinner": "Select a winner and close the challenge:", @@ -23,7 +25,9 @@ "filter": "Filter", "groups": "Groups", "noNone": "None", + "category": "Category", "membership": "Membership", + "ownership": "Ownership", "participating": "Participating", "notParticipating": "Not Participating", "either": "Either", diff --git a/website/common/locales/en_GB/character.json b/website/common/locales/en_GB/character.json index 952ae44d34..12a6b67c54 100644 --- a/website/common/locales/en_GB/character.json +++ b/website/common/locales/en_GB/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Show Stat Allocation", "hideQuickAllocation": "Hide Stat Allocation", "quickAllocationLevelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User Icon > Stats.", - "invalidAttribute": "\"<%= attr %>\" is not a valid Stat.", "notEnoughAttrPoints": "You don't have enough Stat Points.", "style": "Style", "facialhair": "Facial", @@ -219,6 +218,5 @@ "mainHand": "Main-Hand", "offHand": "Off-Hand", "pointsAvailable": "Points Available", - "pts": "pts", - "statsObjectRequired": "Stats update is required" + "pts": "pts" } \ No newline at end of file diff --git a/website/common/locales/en_GB/contrib.json b/website/common/locales/en_GB/contrib.json index 4d5dadf9e0..a7016b0cd6 100644 --- a/website/common/locales/en_GB/contrib.json +++ b/website/common/locales/en_GB/contrib.json @@ -49,7 +49,6 @@ "UUID": "User ID", "loadUser": "Load User", "noAdminAccess": "You don't have admin access.", - "pageMustBeNumber": "req.query.page must be a number", "userNotFound": "User not found.", "invalidUUID": "UUID must be valid", "title": "Title", diff --git a/website/common/locales/en_GB/groups.json b/website/common/locales/en_GB/groups.json index 35bb19a088..7cc32afd49 100644 --- a/website/common/locales/en_GB/groups.json +++ b/website/common/locales/en_GB/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Optional message", "yesRemove": "Yes, remove them", "foreverAlone": "Can't like your own message. Don't be that person.", - "sortDateJoinedAsc": "Earliest Date Joined", - "sortDateJoinedDesc": "Latest Date Joined", - "sortLoginAsc": "Earliest Login", - "sortLoginDesc": "Latest Login", - "sortLevelAsc": "Lowest Level", - "sortLevelDesc": "Highest Level", - "sortNameAsc": "Name (A - Z)", - "sortNameDesc": "Name (Z - A)", - "sortTierAsc": "Lowest Tier", - "sortTierDesc": "Highest Tier", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Create Guild for 4 Gems?", "leaveGroupCha": "Leave Guild challenges and...", "confirm": "Confirm", @@ -131,6 +131,10 @@ "clearAll": "Delete All Messages", "confirmDeleteAllMessages": "Are you sure you want to delete all messages in your inbox? Other users will still see messages you have sent to them.", "optOutPopover": "Don't like private messages? Click to completely opt out", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Block", "unblock": "Un-block", "pm-reply": "Send a reply", @@ -207,7 +211,6 @@ "partyOnName": "Party On", "partyUpText": "Joined a Party with another person! Have fun battling monsters and supporting each other.", "partyOnText": "Joined a Party with at least four people! Enjoy your increased accountability as you unite with your friends to vanquish your foes!", - "groupIdRequired": "\"groupId\" must be a valid UUID", "groupNotFound": "Group not found or you don't have access.", "groupTypesRequired": "You must supply a valid \"type\" query string.", "questLeaderCannotLeaveGroup": "You cannot leave your Party when you have started a quest. Abort the quest first.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "You cannot remove yourself!", "groupMemberNotFound": "User not found among group's members.", "mustBeGroupMember": "Must be member of the group.", - "keepOrRemoveAll": "req.query.keep must be either \"keep-all\" or \"remove-all\"", - "keepOrRemove": "req.query.keep must be either \"keep\" or \"remove\"", "canOnlyInviteEmailUuid": "Can only invite using UUIDs or emails.", "inviteMissingEmail": "Missing email address in invite.", "inviteMissingUuid": "Missing user ID in invite", @@ -315,7 +316,7 @@ "approvalsTitle": "Tasks Awaiting Approval", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "When your group completes tasks that need your approval, they'll appear here! Adjust approval requirement settings under task editing.", - "userIsClamingTask": "`<%= username %> has claimed \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Approval Requested", "refreshApprovals": "Refresh Approvals", "refreshGroupTasks": "Refresh Group Tasks", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Can't delete group tasks that are assigned to you.", "confirmGuildPlanCreation": "Create this group?", "onlyGroupLeaderCanInviteToGroupPlan": "Only the group leader can invite users to a group with a subscription.", - "remainOrLeaveChallenges": "req.query.keep must be either 'remain-in-challenges' or 'leave-challenges'", "paymentDetails": "Payment Details", "aboutToJoinCancelledGroupPlan": "You are about to join a group with a cancelled plan. You will NOT receive a free subscription.", "cannotChangeLeaderWithActiveGroupPlan": "You cannot change the leader while the group has an active plan.", @@ -366,9 +366,11 @@ "recentActivity": "Recent Activity", "myGuilds": "My Guilds", "guildsDiscovery": "Discover Guilds", + "role": "Role", "guildOrPartyLeader": "Leader", "guildLeader": "Guild Leader", "member": "Member", + "guildSize": "Guild Size", "goldTier": "Gold Tier", "silverTier": "Silver Tier", "bronzeTier": "Bronze Tier", diff --git a/website/common/locales/en_GB/npc.json b/website/common/locales/en_GB/npc.json index da42c3daed..3ff4aaf625 100644 --- a/website/common/locales/en_GB/npc.json +++ b/website/common/locales/en_GB/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Featured Items!", "hideLocked": "Hide locked", "hidePinned": "Hide pinned", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Experience", "amountGold": "<%= amount %> Gold", "namedHatchingPotion": "<%= type %> Hatching Potion", @@ -74,14 +75,7 @@ "ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!", "ianBrokenText": "Welcome to the Quest Shop... Here you can use Quest Scrolls to battle monsters with your friends... Be sure to check out our fine array of Quest Scrolls for purchase on the right...", "featuredQuests": "Featured Quests!", - "missingKeyParam": "\"req.params.key\" is required.", - "itemNotFound": "Item \"<%= key %>\" not found.", "cannotBuyItem": "You can't buy this item.", - "missingTypeKeyEquip": "\"key\" and \"type\" are required parameters.", - "missingPetFoodFeed": "\"pet\" and \"food\" are required parameters.", - "invalidPetName": "Invalid pet name supplied.", - "missingEggHatchingPotionHatch": "\"egg\" and \"hatchingPotion\" are required parameters.", - "invalidTypeEquip": "\"type\" must be one of 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.", "typeRequired": "Type is required", "positiveAmountRequired": "Positive amount is required", diff --git a/website/common/locales/en_GB/quests.json b/website/common/locales/en_GB/quests.json index ac5d425760..248df592ab 100644 --- a/website/common/locales/en_GB/quests.json +++ b/website/common/locales/en_GB/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "No quest invitation has been sent out yet.", "questInviteNotFound": "No quest invitation found.", "guildQuestsNotSupported": "Guilds cannot be invited on quests.", - "questNotFound": "Quest \"<%= key %>\" not found.", "questNotOwned": "You don't own that quest scroll.", "questNotGoldPurchasable": "Quest \"<%= key %>\" is not a Gold-purchasable quest.", "questLevelTooHigh": "You must be level <%= level %> to begin this quest.", diff --git a/website/common/locales/en_GB/questscontent.json b/website/common/locales/en_GB/questscontent.json index ac1d16e656..003e156cd8 100644 --- a/website/common/locales/en_GB/questscontent.json +++ b/website/common/locales/en_GB/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/en_GB/spells.json b/website/common/locales/en_GB/spells.json index e902aae587..c57e1b4334 100644 --- a/website/common/locales/en_GB/spells.json +++ b/website/common/locales/en_GB/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Turn a friend into a sea creature!", "spellSpecialSandText": "Sand", "spellSpecialSandNotes": "Reverse the spell that made you a sea star.", - "spellNotFound": "Skill \"<%= spellId %>\" not found.", "partyNotFound": "Party not found", "targetIdUUID": "\"targetId\" must be a valid User ID.", "challengeTasksNoCast": "Casting a skill on challenge tasks is not allowed.", diff --git a/website/common/locales/en_GB/subscriber.json b/website/common/locales/en_GB/subscriber.json index 00c2c153bc..2b8a6898a4 100644 --- a/website/common/locales/en_GB/subscriber.json +++ b/website/common/locales/en_GB/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Invalid coupon code.", "couponUsed": "Coupon code already used.", "couponCodeRequired": "The coupon code is required.", - "eventRequired": "\"req.params.event\" is required.", - "countRequired": "\"req.query.count\" is required.", - "missingPaymentId": "Missing req.query.paymentId", - "missingCustomerId": "Missing req.query.customerId", - "missingPaypalBlock": "Missing req.session.paypalBlock", - "missingSubKey": "Missing req.query.sub", "paypalCanceled": "Your subscription has been cancelled", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "receiveMysticHourglass": "Receive a Mystic Hourglass!", diff --git a/website/common/locales/en_GB/tasks.json b/website/common/locales/en_GB/tasks.json index ceeb6c88b0..604314f32a 100644 --- a/website/common/locales/en_GB/tasks.json +++ b/website/common/locales/en_GB/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "Special equipment will appear here during World Events.", "rewardHelp4": "Don't be afraid to set custom Rewards! Check out some samples here.", "clickForHelp": "Click for help", - "taskIdRequired": "\"taskId\" must be a valid UUID.", "taskAliasAlreadyUsed": "Task alias already used on another task.", "taskNotFound": "Task not found.", "invalidTaskType": "Task type must be one of \"habit\", \"daily\", \"todo\", \"reward\".", diff --git a/website/common/locales/es/challenge.json b/website/common/locales/es/challenge.json index b5ba3b9445..6f4292aade 100644 --- a/website/common/locales/es/challenge.json +++ b/website/common/locales/es/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Ha ganado los siguientes desafíos", "challenges": "Desafíos", "challengesLink": "Desafíos", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Ningún desafío todavía, visita", "toCreate": "para crear uno.", "selectWinner": "Seleccionar un ganador y cerrar el desafío:", @@ -23,7 +25,9 @@ "filter": "Filtro", "groups": "Grupos", "noNone": "Ninguno", + "category": "Category", "membership": "Membresía", + "ownership": "Ownership", "participating": "Participando", "notParticipating": "No participando", "either": "Ambos", diff --git a/website/common/locales/es/character.json b/website/common/locales/es/character.json index c8c00f16fb..2b307eb2d8 100644 --- a/website/common/locales/es/character.json +++ b/website/common/locales/es/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Mostrar asignación de puntos ", "hideQuickAllocation": "Esconder la asignación de puntos", "quickAllocationLevelPopover": "Cada nivel te da un Punto para asignar a la Estadística que quieras. Puedes hacerlo manualmente o dejar que el juego decida por ti, utilizando una de las opciones de Asignación Automática que encontrarás en Icono de Usuario > Estadísticas.", - "invalidAttribute": "\"<%= attr %>\" no es una Estadística válida.", "notEnoughAttrPoints": "No tienes suficientes puntos de atributo.", "style": "Estilo", "facialhair": "Facial", @@ -219,6 +218,5 @@ "mainHand": "Mano dominante", "offHand": "Mano secundaria", "pointsAvailable": "Puntos disponibles", - "pts": "puntos", - "statsObjectRequired": "Es necesario actualizar la Estadísticas" + "pts": "puntos" } \ No newline at end of file diff --git a/website/common/locales/es/contrib.json b/website/common/locales/es/contrib.json index ed2cde4ef2..b8b8285a14 100644 --- a/website/common/locales/es/contrib.json +++ b/website/common/locales/es/contrib.json @@ -49,7 +49,6 @@ "UUID": "N.º de Usuario", "loadUser": "Cargar Usuario", "noAdminAccess": "No tienes acceso de administrador.", - "pageMustBeNumber": "req.query.page debe ser un número", "userNotFound": "Usuario no encontrado.", "invalidUUID": "UUID debe ser válido", "title": "Título", diff --git a/website/common/locales/es/front.json b/website/common/locales/es/front.json index 7d6e14b7c9..a4cd9ff499 100644 --- a/website/common/locales/es/front.json +++ b/website/common/locales/es/front.json @@ -304,7 +304,7 @@ "alreadyHaveAccountLogin": "¿Ya tienes una cuenta Habitica? Inicia sesión.", "dontHaveAccountSignup": "¿No tienes una cuenta Habitica? Regístrate.", "motivateYourself": "Motívate para alcanzar tus objetivos.", - "timeToGetThingsDone": "It's time to have fun when you get things done! Join over <%= userCountInMillions %> million Habiticans and improve your life one task at a time.", + "timeToGetThingsDone": "¡Ha llegado el momento de divertirte mientras cumples con tus tareas! Únete a más de <%= userCountInMillions %> millones de Habiticanos y mejora tu vida tarea a tarea.", "singUpForFree": "Regístrate gratis", "or": "O", "gamifyYourLife": "Convierte tu vida en un juego", diff --git a/website/common/locales/es/groups.json b/website/common/locales/es/groups.json index 80320ae441..be98a17269 100644 --- a/website/common/locales/es/groups.json +++ b/website/common/locales/es/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Mensaje opcional", "yesRemove": "Sí, elimínalos", "foreverAlone": "No pueden gustarte tus propios mensajes. No seas esa persona.", - "sortDateJoinedAsc": "Fecha de Primer Ingreso", - "sortDateJoinedDesc": "Fecha de Último Ingreso", - "sortLoginAsc": "Primer Acceso", - "sortLoginDesc": "Último Acceso", - "sortLevelAsc": "Nivel más bajo", - "sortLevelDesc": "Nivel más alto", - "sortNameAsc": "Nombre (A - Z)", - "sortNameDesc": "Nombre (Z - A)", - "sortTierAsc": "Escalafón más Bajo", - "sortTierDesc": "Escalafón más Alto", + "sortBackground": "Ordenar por fondo", + "sortClass": "Ordenar por clase", + "sortDateJoined": "Ordenar por fecha de ingreso", + "sortLogin": "Ordenar por fecha de acceso", + "sortLevel": "Ordenar por nivel", + "sortName": "Ordenar por nombre", + "sortTier": "Ordenar por escalafón", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Aplicar opciones de clasificación al cabecero del equipo", "confirmGuild": "¿Crear Gremio por 4 gemas?", "leaveGroupCha": "Abandonar los desafíos del Gremio y...", "confirm": "Confirmar", @@ -131,6 +131,10 @@ "clearAll": "Eliminar todos los mensajes", "confirmDeleteAllMessages": "¿Estás seguro que quieres eliminar todos los mensajes de tu bandeja de entrada? Otros usuarios seguirán viendo los mensajes que les mandaste.", "optOutPopover": "¿No te gustan los mensajes privados? Haz click para excluirlos por completo", + "PMPlaceholderTitle": "No hay nada aquí de momento", + "PMPlaceholderDescription": "Elige una conversación de la izquierda", + "PMPlaceholderTitleRevoked": "Tus privilegios para chatear han sido revocados.", + "PMPlaceholderDescriptionRevoked": "No puedes enviar mensajes privados porque tus privilegios para chatear han sido revocados. Si tienes preguntas o inquietudes acerca de esto, envía un correo electrónico a admin@habitica.com para tratarlo con el personal.", "block": "Bloquear", "unblock": "Desbloquear", "pm-reply": "Enviar una respuesta", @@ -207,7 +211,6 @@ "partyOnName": "¡Toma grupo!", "partyUpText": "¡Se unió a un grupo con otra persona! Pasadlo bien luchando contra monstruos y ayudándoos mutuamente.", "partyOnText": "¡Se unió a un grupo de al menos cuatro personas! Disfrutad de una mayor responsabilidad al juntaros para vencer a vuestros enemigos.", - "groupIdRequired": "\"groupId\" debe ser un UUID válido", "groupNotFound": "El grupo no se encuentra o no tienes acceso a él.", "groupTypesRequired": "Debes proporcionar una cadena de consulta \"type\" válida.", "questLeaderCannotLeaveGroup": "No puedes abandonar tu Equipo cuando has empezado una misión. Aborta la misión primero.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "¡No te puedes quitar a ti mismo!", "groupMemberNotFound": "No se pudo encontrar al usuario entre los miembros del grupo.", "mustBeGroupMember": "Debe ser miembro del grupo.", - "keepOrRemoveAll": "req.query.keep solo puede ser \"keep-all\" o \"remove-all\"", - "keepOrRemove": "req.query.keep solo puede ser \"keep\" o \"remove\"", "canOnlyInviteEmailUuid": "Solo se puede invitar mediante UUID o correo electrónico.", "inviteMissingEmail": "Falta la dirección de correo electrónico en la invitación.", "inviteMissingUuid": "Falta el ID del usuario en la invitación", @@ -252,7 +253,7 @@ "userRequestsApproval": "<%= userName %>requieren aprobación", "userCountRequestsApproval": "<%= userCount %> requieren aprobación", "youAreRequestingApproval": "Estás solicitando aprobación", - "chatPrivilegesRevoked": "You cannot do that because your chat privileges have been revoked.", + "chatPrivilegesRevoked": "No puedes hacer eso porque tus privilegios para chatear han sido revocados.", "cannotCreatePublicGuildWhenMuted": "No puedes crear un gremio público porque tus privilegios para chatear han sido revocados.", "cannotInviteWhenMuted": "No puedes invitar a nadie a un gremio o equipo porque tus privilegios para chatear han sido revocados.", "newChatMessagePlainNotification": "Nuevo mensaje en <%= groupName %> de <%= authorName %>. ¡Haz click aquí para abrir la pagina de chat!", @@ -315,7 +316,7 @@ "approvalsTitle": "Tareas Pendientes de Aprobación", "upgradeTitle": "Actualizar", "blankApprovalsDescription": "Cuando el grupo completa tareas que necesitan de tu aprobación, aparecerán aquí. Ajusta los requisitos de aprobación en la edición de tareas.", - "userIsClamingTask": "`<%= username %> se encarga de \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Aprobación Solicitada", "refreshApprovals": "Actualizar las Aprobaciones", "refreshGroupTasks": "Actualizar las Tareas del Grupo", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "No puedes borrar tareas de grupo que tienes asignadas.", "confirmGuildPlanCreation": "¿Crear este grupo?", "onlyGroupLeaderCanInviteToGroupPlan": "Sólo el líder del grupo puede invitar usuarios a un grupo con una suscripción activa.", - "remainOrLeaveChallenges": "req.query.keep solo puede ser o 'remain-in-challenges' o 'leave-challenges' ", "paymentDetails": "Detalles de pago", "aboutToJoinCancelledGroupPlan": "Estás a punto de unirte a un grupo con un plan cancelado. NO recibirás una subscripción gratuita", "cannotChangeLeaderWithActiveGroupPlan": "No puedes cambiar de líder mientras el grupo tiene un plan activo.", @@ -366,9 +366,11 @@ "recentActivity": "Actividad reciente", "myGuilds": "Mis hermandades", "guildsDiscovery": "Descubre hermandades", + "role": "Role", "guildOrPartyLeader": "Líder", "guildLeader": "Líder de hermandad", "member": "Miembro", + "guildSize": "Guild Size", "goldTier": "Nivel Oro", "silverTier": "Nivel Plata", "bronzeTier": "Nivel Bronce", diff --git a/website/common/locales/es/loadingscreentips.json b/website/common/locales/es/loadingscreentips.json index cfb4cb71b8..d89293da84 100644 --- a/website/common/locales/es/loadingscreentips.json +++ b/website/common/locales/es/loadingscreentips.json @@ -25,7 +25,7 @@ "tip23": "¡Alcanza el nivel 100 para desbloquear el Orbe de Renacimiento, con el que podrás recomenzar una nueva aventura!", "tip24": "¿Tienes alguna duda? ¡Pregunta en la Hermandad \"Habitica Help\"!", "tip25": "Las cuatros Grandes Galas estacionales comienzan cercanas a los solsticios y los equinoccios.", - "tip26": "You can look for a Party or find Party members in the Party Wanted Guild!", + "tip26": "¡Puedes buscar un equipo o encontrar miembros para un equipo en el gremio \"Party Wanted Guild\"!", "tip27": "¿Hiciste una tarea Diaria ayer pero olvidaste completarla? ¡No te preocupes! Con Registrar Actividad de Ayer, tendrás la oportunidad de marcar lo que hiciste justo antes de empezar tu nuevo día.", "tip28": "Elige una hora personalizada para comenzar tu día en Icono de Usuario > Ajustes y controlar así cuándo se reinician tus tareas.", "tip29": "¡Completa todas tus Diarias para conseguir un Apoyo de Día Perfecto que aumente tus Atributos!", diff --git a/website/common/locales/es/npc.json b/website/common/locales/es/npc.json index efd6a7e9c1..bd7944c911 100644 --- a/website/common/locales/es/npc.json +++ b/website/common/locales/es/npc.json @@ -48,6 +48,7 @@ "featuredItems": "¡Objetos patrocinados!", "hideLocked": "Ocultar los bloqueados", "hidePinned": "Ocultar los fijados", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> de experiencia", "amountGold": "<%= amount %>de oro", "namedHatchingPotion": "Poción de eclosión de <%= type %>", @@ -74,20 +75,13 @@ "ianTextMobile": "¿Puedo interesarte en algunos papiros de misión? ¡Actívalos para luchar contra monstruos con tu Grupo!", "ianBrokenText": "Te damos la bienvenida a la Tienda de Misiones. Aquí podrás usar tus Pergaminos de misión para combatir monstruos con tus amigos. Asegúrate de echar un vistazo a nuestra gran colección de Pergaminos de misión a la venta.", "featuredQuests": "¡Misiones características!", - "missingKeyParam": "\"req.params.key\" es requerida.", - "itemNotFound": "Objeto \"<%= key %>\" no encontrado.", "cannotBuyItem": "No puedes comprar este objeto.", - "missingTypeKeyEquip": "\"key\" y \"type\" son parámetros requeridos.", - "missingPetFoodFeed": "\"pet\" and \"food\" son parámetros requeridos.", - "invalidPetName": "Nombre de mascota inválido sugerido.", - "missingEggHatchingPotionHatch": "\"egg\" and \"hatchingPotion\" son parámetros requeridos.", - "invalidTypeEquip": "\"type\" debe ser alguno de 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Debes comprar <%= val %> para usarlo en <%= key %>.", "typeRequired": "Tipo es requerido", "positiveAmountRequired": "Es necesaria una cantidad positiva", "notAccteptedType": "El tipo debe estar en [huevos, Pociones de eclosión, comida, misiones, equipación]", "contentKeyNotFound": "Llave no encontrada para Contenido <%= type %>", - "plusGem": "+<%= count %> Gem", + "plusGem": "+<%= count %> gemas", "typeNotSellable": "Tipo no vendible. Debe ser alguno de los siguientes <%= acceptedTypes %>", "userItemsKeyNotFound": "Llave no encontrada para user.items <%= type %>", "userItemsNotEnough": "No tienes suficiente <%= type %>", diff --git a/website/common/locales/es/quests.json b/website/common/locales/es/quests.json index 78f0d00ab4..f5ea7c9bf1 100644 --- a/website/common/locales/es/quests.json +++ b/website/common/locales/es/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "No se ha enviado invitación de misión todavía.", "questInviteNotFound": "Invitación a misión no encontrada.", "guildQuestsNotSupported": "Los gremios no pueden ser invitados a las misiones.", - "questNotFound": "Misión \"<%= key %>\" no encontrada.", "questNotOwned": "No posees ese pergamino de misión.", "questNotGoldPurchasable": "La misión \"<%= key %>\" no es una misión por oro.", "questLevelTooHigh": "Debes ser nivel <%= level %> para empezar esta misión", diff --git a/website/common/locales/es/questscontent.json b/website/common/locales/es/questscontent.json index 36cb680bc7..5a25ff0991 100644 --- a/website/common/locales/es/questscontent.json +++ b/website/common/locales/es/questscontent.json @@ -102,7 +102,7 @@ "questGoldenknight2Text": "El Caballero Dorado, Parte 2: Caballero Dorado", "questGoldenknight2Notes": "Armado con docenas de testimonios habiticanos, te enfrentas finalmente al Caballero Dorado. Empiezas a recitarle las quejas de los habiticanos una a una.\n—Y @Pfeffernusse siempre dice que alardeas constantemente.\nEl caballero eleva su mano para silenciarte y se burla.\n—Por favor, estas gentes simplemente están celosas de mi éxito. ¡En lugar de quejarse, deberían trabajar tan duro como yo! ¡Quizás debería mostrarte el poder que puedes obtener con una diligencia tan fuerte como la mía! —¡Tras ello, eleva su Lucero del Alba y se prepara para atacarte!", "questGoldenknight2Boss": "Caballero de Oro", - "questGoldenknight2Completion": "The Golden Knight lowers her Morningstar in consternation. “I apologize for my rash outburst,” she says. “The truth is, it’s painful to think that I’ve been inadvertently hurting others, and it made me lash out in defense… but perhaps I can still apologize?”", + "questGoldenknight2Completion": "El Caballero Dorado baja su Lucero del Alba, consternada.\n\n—Me disculpo por mi súbito arrebato—dice ella—. La verdad es que es doloroso pensar que he hecho daño a otros inadvertidamente, y eso me hizo arremeter en defensa... pero, ¿quizás no es demasiado tarde para disculparme?", "questGoldenknight2DropGoldenknight3Quest": "El Caballero Dorado Parte 3: El Caballero de Hierro (Pergamino)", "questGoldenknight3Text": "El Caballero Dorado, Parte 3: El Caballero de Hierro", "questGoldenknight3Notes": "@Jon Arinbjorn grita para llamar tu atención. Apenas ha acabado la batalla, y una nueva figura ha aparecido. Un caballero revestido de hierro teñido de negro se aproxima a ti lentamente con su espada en mano. La Dama de Oro vocifera hacia la figura:\n—¡Padre, no! —Pero el caballero no parece querer detenerse. Ella se vuelve hacia ti y dice\n—Lo siento. He sido una tonta, con un ego demasiado grande para ver lo cruel que he sido. Pero mi padre es aún más cruel de lo que yo jamás podría ser. Si nadie lo detiene nos destruirá a todos. ¡Toma, usa mi Lucero del Alba y termina con el Caballero de Hierro!", @@ -600,5 +600,7 @@ "questSquirrelCompletion": "Acercándote con suavidad, con ofertas de intercambio y algún hechizo tranquilizante, eres capaz de convencer a la ardilla para que se aparte de sus provisiones y vuelva a los establos, que @Shtut acaba de terminar de desbellotizar. Ha dejado algunas bellotas aparte en una mesa de trabajo.\n—¡Esto son huevos de ardilla! A lo mejor puedes criar algunas que no jueguen tanto con la comida.", "questSquirrelBoss": "Ardilla Escurridiza", "questSquirrelDropSquirrelEgg": "Ardilla (huevo)", - "questSquirrelUnlockText": "Desbloquea huevos de Ardilla que puedas comprar en el Mercado" + "questSquirrelUnlockText": "Desbloquea huevos de Ardilla que puedas comprar en el Mercado", + "cuddleBuddiesText": "Lote de Misiones Compañeros Abrazados", + "cuddleBuddiesNotes": "Contiene \"El Conejito Asesino\", \"El Hurón Malvado\", y \"La Pandilla de Cobayas\". Disponible hasta el 31 de mayo." } \ No newline at end of file diff --git a/website/common/locales/es/settings.json b/website/common/locales/es/settings.json index 23b2094365..6e9cd538ce 100644 --- a/website/common/locales/es/settings.json +++ b/website/common/locales/es/settings.json @@ -32,7 +32,7 @@ "resetAccPop": "Empezar de nuevo, eliminando todo el oro, niveles, equipo, historial, y tareas.", "deleteAccount": "Eliminar cuenta", "deleteAccPop": "Cancelar y quitar esta cuenta de Habitica.", - "feedback": "If you'd like to give us feedback, please enter it below - we'd love to know what you liked or didn't like about Habitica! Don't speak English well? No problem! Use the language you prefer.", + "feedback": "Si quieres hacernos algún comentario, por favor, introdúcelo a continuación - ¡nos encantaría saber qué es lo que te ha gustado y lo que no de Habitica! ¿No sabes mucho inglés? ¡Sin problema! Utiliza el idioma que prefieras.", "qrCode": "Código QR", "dataExport": "Exportar Datos", "saveData": "Aquí tienes varias opciones para guardar tus datos.", diff --git a/website/common/locales/es/spells.json b/website/common/locales/es/spells.json index 7f142c75e9..ea7a491021 100644 --- a/website/common/locales/es/spells.json +++ b/website/common/locales/es/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "¡Transforma a un amigo en una criatura marina!", "spellSpecialSandText": "Arena", "spellSpecialSandNotes": "Invierte el hechizo que te transformó en estrella de mar.", - "spellNotFound": "No se ha encontrado el hechizo \"<%= spellId %>\".", "partyNotFound": "Grupo no encontrado.", "targetIdUUID": "\"targetId\" debe ser un ID de Usuario válido.", "challengeTasksNoCast": "No se pueden lanzar hechizos sobre tareas de desafíos.", diff --git a/website/common/locales/es/subscriber.json b/website/common/locales/es/subscriber.json index 2c072d1ab4..774e7d2859 100644 --- a/website/common/locales/es/subscriber.json +++ b/website/common/locales/es/subscriber.json @@ -7,7 +7,7 @@ "buyGemsGoldText": "Alexander el Mercader te venderá Gemas por un precio de 20 de Oro por Gema. Sus envíos mensuales están limitados a 25 Gemas por mes, pero por cada 3 meses consecutivos que estés suscrito, este límite aumenta en 5 Gemas hasta un máximo de 50 Gemas por mes!", "mustSubscribeToPurchaseGems": "Debes estar suscrito para conseguir gemas con oro.", "reachedGoldToGemCap": "Has alcanzado el límite de <%= convCap %> conversiones Oro=>Gemas de este mes. Imponemos este límite para evitar abusos / farming. Este límite se reinicia en los tres primeros días de cada mes.", - "reachedGoldToGemCapQuantity": "Your requested amount <%= quantity %> exceeds the Gold=>Gem conversion cap <%= convCap %> for this month. We have this to prevent abuse / farming. The cap resets within the first three days of each month.", + "reachedGoldToGemCapQuantity": "La cantidad que has pedido <%= quantity %> sobrepasa el límite de conversión de Oro a Gemas <%= convCap %>en este mes. Aplicamos esta restricción para evitar que se utilice con el fin de obtener ingresos y otros usos inadecuados. El límite se reinicia durante los tres primeros días de cada mes.", "retainHistory": "Retener entradas adicionales al historial", "retainHistoryText": "Hace que las tareas completadas y el historial de tareas estén disponibles durante más tiempo.", "doubleDrops": "Duplica la probabilidad de obtener objetos.", @@ -175,12 +175,6 @@ "invalidCoupon": "El código del cupón no es válido.", "couponUsed": "El código del cupón ya ha sido usado.", "couponCodeRequired": "El código del cupón es necesario.", - "eventRequired": "\"req.params.event\" es obligatorio.", - "countRequired": "\"req.query.count\" es obligatorio.", - "missingPaymentId": "Falta req.query.paymentId", - "missingCustomerId": "Falta req.query.customerId", - "missingPaypalBlock": "Falta req.session.paypalBlock", - "missingSubKey": "Falta req.query.sub", "paypalCanceled": "Tu suscripción ha sido cancelada", "earnGemsMonthly": "Gana hasta **<%= cap %> Gemas** cada mes", "receiveMysticHourglass": "¡Recibe un Reloj de arena místico!", diff --git a/website/common/locales/es/tasks.json b/website/common/locales/es/tasks.json index b43816ecfc..e48570c7d1 100644 --- a/website/common/locales/es/tasks.json +++ b/website/common/locales/es/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "El equipamiento especial aparecerá aquí durante los Eventos Mundiales.", "rewardHelp4": "¡No tengas miedo de establecer Recompensas personalizadas! Encuentra algunos ejemplos aquí.", "clickForHelp": "Haz click para obtener ayuda", - "taskIdRequired": "\"taskId\" debe ser un UUID válido.", "taskAliasAlreadyUsed": "Este alias esta siendo usado por otra tarea.", "taskNotFound": "Tarea no encontrada.", "invalidTaskType": "El tipo de tarea debe ser \"habit\", \"daily\", \"todo\" o \"reward\".", diff --git a/website/common/locales/es_419/challenge.json b/website/common/locales/es_419/challenge.json index 3594f35afb..8789f191d4 100644 --- a/website/common/locales/es_419/challenge.json +++ b/website/common/locales/es_419/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Fue el ganador en los siguientes desafíos", "challenges": "Desafíos", "challengesLink": "Desafíos", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Ningún desafío todavía, visita", "toCreate": "para crear uno.", "selectWinner": "Seleccionar un ganador y cerrar el desafío:", @@ -23,7 +25,9 @@ "filter": "Filtrar", "groups": "Grupos", "noNone": "Ninguno", + "category": "Category", "membership": "Membresía", + "ownership": "Ownership", "participating": "Participando", "notParticipating": "No participando", "either": "Ambos", diff --git a/website/common/locales/es_419/character.json b/website/common/locales/es_419/character.json index 387d727b9a..730ed80e12 100644 --- a/website/common/locales/es_419/character.json +++ b/website/common/locales/es_419/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Mostrar asignación de Puntos de Atributo", "hideQuickAllocation": "Ocultar asignación de Puntos de Atributo", "quickAllocationLevelPopover": "Cada nivel te otorga un punto para asignarlo al atributo de tu elección. Puedes hacerlo manualmente, o puedes dejar que el juego decida por ti usando una de las opciones de Asignación Automática encontradas en Icono del Usuario > Atributos.", - "invalidAttribute": "\"<%= attr %>\" no es un atributo válido.", "notEnoughAttrPoints": "No tienes suficientes puntos de Estadistica.", "style": "Estilo", "facialhair": "Cara", @@ -219,6 +218,5 @@ "mainHand": "Mano Principal", "offHand": "Mano Secundaria", "pointsAvailable": "Puntos disponibles", - "pts": "pts", - "statsObjectRequired": "Se requiere actualizar las Estadísticas" + "pts": "pts" } \ No newline at end of file diff --git a/website/common/locales/es_419/content.json b/website/common/locales/es_419/content.json index 70b684c574..dc3beec896 100644 --- a/website/common/locales/es_419/content.json +++ b/website/common/locales/es_419/content.json @@ -167,9 +167,9 @@ "questEggBadgerText": "Tejón", "questEggBadgerMountText": "Tejón", "questEggBadgerAdjective": "bullicioso", - "questEggSquirrelText": "Squirrel", - "questEggSquirrelMountText": "Squirrel", - "questEggSquirrelAdjective": "bushy-tailed", + "questEggSquirrelText": "Ardilla", + "questEggSquirrelMountText": "Ardilla", + "questEggSquirrelAdjective": "de cola tupida", "eggNotes": "Encuentra una poción de eclosión para verter sobre este huevo y se convertirá en <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Básico", "hatchingPotionWhite": "Blanco", diff --git a/website/common/locales/es_419/contrib.json b/website/common/locales/es_419/contrib.json index 9e9ede9b63..9cb850ccd3 100644 --- a/website/common/locales/es_419/contrib.json +++ b/website/common/locales/es_419/contrib.json @@ -49,7 +49,6 @@ "UUID": "ID de usuario", "loadUser": "Cargar usuario", "noAdminAccess": "No tienes acceso de administrador.", - "pageMustBeNumber": "req.query.page debe ser un número.", "userNotFound": "Usuario no encontrado.", "invalidUUID": "UUID debe ser válido.", "title": "Título", diff --git a/website/common/locales/es_419/groups.json b/website/common/locales/es_419/groups.json index 3f1c2c90c4..9742eeb0af 100644 --- a/website/common/locales/es_419/groups.json +++ b/website/common/locales/es_419/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Mensaje opcional", "yesRemove": "Si, elimínalo", "foreverAlone": "No puedes darle me gusta a tu propio mensaje. No seas ese tipo de persona.", - "sortDateJoinedAsc": "Fecha de Ingreso más Antígua", - "sortDateJoinedDesc": "Fecha de Ingreso más Reciente", - "sortLoginAsc": "Inicio de Sesión más Antiguo", - "sortLoginDesc": "Último Inicio de Sesión", - "sortLevelAsc": "Nivel más bajo", - "sortLevelDesc": "Nivel más Alto", - "sortNameAsc": "Nombre (A-Z)", - "sortNameDesc": "Nombre (Z-A)", - "sortTierAsc": "Nivel de Colaborador más bajo", - "sortTierDesc": "Nivel de Colaborador más alto", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "¿Crear Gremio por 4 gemas?", "leaveGroupCha": "Abandonar los desafíos de gremio y...", "confirm": "Confirmar", @@ -131,6 +131,10 @@ "clearAll": "Borrar todos los mensajes", "confirmDeleteAllMessages": "¿Estás seguro de que quieres borrar todos los mensajes de tu bandeja de entrada? Otros usuarios todavía podrán ver los mensajes que les mandaste.", "optOutPopover": "¿No te gustan los mensajes privados? Haz clic para dejar de recibirlos.", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Bloquear", "unblock": "Desbloquear", "pm-reply": "Enviar una respuesta", @@ -207,7 +211,6 @@ "partyOnName": "Equipazo", "partyUpText": "¡Te uniste a un Grupo con otra persona! Diviértete luchando contra monstruos y apoyándose el uno al otro.", "partyOnText": "¡Te uniste a un Grupo con al menos 4 personas! Disfruta tu responsabilidad aumentada ¡a la vez que te unes con tus amigos para vencer sus enemigos!", - "groupIdRequired": "\"groupId\" debe ser un UUID válido", "groupNotFound": "Grupo no encontrado o no tienes acceso.", "groupTypesRequired": "Debes ingresar una cadena de caracteres \"type\" valida.", "questLeaderCannotLeaveGroup": "No puedes abandonar el Grupo cuando tienes una misión comenzada. Finaliza primero la misión.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "No te puedes sacar.", "groupMemberNotFound": "Usuario no encontrado entre los miembros del equipo.", "mustBeGroupMember": "Tiene que ser miembro del grupo.", - "keepOrRemoveAll": "req.query.keep debe ser ya sea \"keep-all\" o \"remove-all\"", - "keepOrRemove": "req.query.keep debe ser ya sea \"keep\" o \"remove\"", "canOnlyInviteEmailUuid": "Solo se puede invitar usando uuids o correos.", "inviteMissingEmail": "No se encuentra el correo electronico en la invitacíon.", "inviteMissingUuid": "Falta el ID de usuario en la invitación", @@ -315,7 +316,7 @@ "approvalsTitle": "Tareas esperando ser aprobadas", "upgradeTitle": "Actualizar", "blankApprovalsDescription": "!Cuando tu grupo complete tareas que necesitan tu aprobación, ellas aparecerán aquí! Ajusta los requisitos de aprobación en edición de tareas.", - "userIsClamingTask": "`<%= username %> ha solicitado \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Aprobación Solicitada", "refreshApprovals": "Actualizar permisos", "refreshGroupTasks": "Actualiza las tareas grupales", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "No puedes eliminar tareas grupales que te han sido asignadas.", "confirmGuildPlanCreation": "¿Crear este grupo?", "onlyGroupLeaderCanInviteToGroupPlan": "Solo el líder del grupo puede invitar a usuarios a un grupo con una suscripción.", - "remainOrLeaveChallenges": "req.query.keep debe ser o 'remain-in-challenges' o 'leave-challenges'", "paymentDetails": "Detalles de pago", "aboutToJoinCancelledGroupPlan": "Estás a punto de unirte a un grupo con un plan cancelado. NO recibirás una suscripción gratuita.", "cannotChangeLeaderWithActiveGroupPlan": "No puedes cambiar el líder mientras el grupo tiene un plan activo.", @@ -366,9 +366,11 @@ "recentActivity": "Actividad Reciente", "myGuilds": "Mis Gremios", "guildsDiscovery": "Descubrir Gremios", + "role": "Role", "guildOrPartyLeader": "Líder", "guildLeader": "Líder del Gremio", "member": "Miembro", + "guildSize": "Guild Size", "goldTier": "Nivel Oro", "silverTier": "Nivel Plata", "bronzeTier": "Nivel Bronce", diff --git a/website/common/locales/es_419/messages.json b/website/common/locales/es_419/messages.json index d0e1100b9b..1fc5eeafe2 100644 --- a/website/common/locales/es_419/messages.json +++ b/website/common/locales/es_419/messages.json @@ -55,11 +55,11 @@ "messageGroupChatAdminClearFlagCount": "¡Sólo un administrador puede borrar el número de denuncias!", "messageCannotFlagSystemMessages": "No puedes marcar un mensaje del sistema. Si necesitas informar una infracción de las Normas de la comunidad relacionadas con este mensaje, envíe un mensaje de correo electrónico con una captura de pantalla y una explicación a Lemoness <%= communityManagerEmail %>.", "messageGroupChatSpam": "Ups, ¡parece que estás publicando demasiados mensajes! Espera un minuto y vuelve a intentarlo. El chat de la Taberna solo puede con 200 mensajes a la vez, por lo que Habitica recomienda publicar mensajes más largos y meditados, así como respuestas unificadas. No podemos esperar a oir lo que tienes que decir. :)", - "messageCannotLeaveWhileQuesting": "You cannot accept this party invitation while you are in a quest. If you'd like to join this party, you must first abort your quest, which you can do from your party screen. You will be given back the quest scroll.", + "messageCannotLeaveWhileQuesting": "No puedes aceptar esta invitación de grupo mientras estas en una misión. Si te quieres unir a este grupo, tienes que abortar tu misión primero, puedes hacerlo desde la pantalla del grupo. Se te devolverá tu pergamino de misión.", "messageUserOperationProtected": "la ruta `<%= operation %>` no ha sido guardada, ya que es una ruta protegida.", "messageUserOperationNotFound": "<%= operation %> operación no encontrada", "messageNotificationNotFound": "Notificación no encontrada.", - "messageNotAbleToBuyInBulk": "This item cannot be purchased in quantities above 1.", + "messageNotAbleToBuyInBulk": "Este artículo no se puede comprar en cantidades arriba de 1.", "notificationsRequired": "Se requiere el ID de notificación.", "unallocatedStatsPoints": "Tienes <%= points %> Puntos de Atributo sin asignar ", "beginningOfConversation": "Este es el comienzo de tu conversación con <%= userName %>. ¡Recuerda ser amable, respetuoso y seguir las Normas de la Comunidad!" diff --git a/website/common/locales/es_419/npc.json b/website/common/locales/es_419/npc.json index 39e5ebb9be..40e4d3a3a4 100644 --- a/website/common/locales/es_419/npc.json +++ b/website/common/locales/es_419/npc.json @@ -48,6 +48,7 @@ "featuredItems": "¡Artículos Destacados!", "hideLocked": "Ocultar bloqueados", "hidePinned": "Ocultar fijados", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Experiencia", "amountGold": "<%= amount %> Oro", "namedHatchingPotion": "<%= type %> Poción de Nacimiento", @@ -74,20 +75,13 @@ "ianTextMobile": "¿Podré interesarte en algunos pergaminos de misión? ¡Actívalos para combatir monstruos con tu Equipo!", "ianBrokenText": "Bienvenido a la Tienda de Misiones... Aquí puedes utilizar Pergaminos de Misión para luchar contra monstruos con tus amigos... Asegúrate de echar un vistazo a nuestra fina selección de Pergaminos de Misión a la derecha...", "featuredQuests": "¡Misiones Destacadas!", - "missingKeyParam": "\"req.params.key\" es requerido.", - "itemNotFound": "No se encontro el objeto \"<%= key >\"", "cannotBuyItem": "No puedes comprar este objeto", - "missingTypeKeyEquip": "\"key\" y \"type\" son parametros requeridos. ", - "missingPetFoodFeed": "\"pet\" y \"comida\" son parametros requeridos.", - "invalidPetName": "El nombre de mascota ingresado es invalido.", - "missingEggHatchingPotionHatch": "\"egg\" y \"hatchingPotion\" son parametros requeridos.", - "invalidTypeEquip": "\"type\" debe estar etre 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Debes comprar <%= val %> para colocarlo en <%= key %>.", "typeRequired": "Un Tipo es requerido", "positiveAmountRequired": "Se requiere una cantidad positiva", "notAccteptedType": "Tipo debe ir en [eggs, hatchingPotions, premiumHatchingPotions, food, quests, gear]", "contentKeyNotFound": "No se encontró una llave para el contenido <%= type %>", - "plusGem": "+<%= count %> Gem", + "plusGem": "+<%= count %> Gemas", "typeNotSellable": "El tipo no se puede vender. Debe ser uno de los siguientes: <%= acceptedTypes %>", "userItemsKeyNotFound": "no se encontró una llave para los objetos del usuario <%= type %>", "userItemsNotEnough": "No tienes suficientes <%= type %>", @@ -95,7 +89,7 @@ "unlocked": "Se han desbloqueado objetos. ", "alreadyUnlocked": "El conjunto ya se ha desbloqueado por completo. ", "alreadyUnlockedPart": "El conjunto se ha desbloqueado parcialmente. ", - "invalidQuantity": "Quantity to purchase must be a number.", + "invalidQuantity": "La cantidad a comprar debe ser un numero.", "USD": "(USD)", "newStuff": "Cosas nuevas, por Bailey", "newBaileyUpdate": "¡Nueva Actualización de Bailey!", diff --git a/website/common/locales/es_419/overview.json b/website/common/locales/es_419/overview.json index 0eae0c4a34..8373997a9a 100644 --- a/website/common/locales/es_419/overview.json +++ b/website/common/locales/es_419/overview.json @@ -10,5 +10,5 @@ "step3": "Paso 3: Personaliza y Explora Habitica", "webStep3Text": "\nUna vez que esté familiarizado con los conceptos básicos, puede obtener aún más de Habitica con estas características ingeniosas:\n * Organiza tus tareas [tags](http://habitica.wikia.com/wiki/Tags) (edit a task to add them).\n * Personaliza tu avatar [avatar](http://habitica.wikia.com/wiki/Avatar) by clicking the user icon in the upper-right corner.\n * Buy your [Equipment](http://habitica.wikia.com/wiki/Equipment) under Rewards or from the [Shops](/shops/market), and change it under [Inventory > Equipment](/inventory/equipment).\n * Connect with other users via the [Tavern](http://habitica.wikia.com/wiki/Tavern).\n * Starting at Level 3, hatch [Pets](http://habitica.wikia.com/wiki/Pets) by collecting [eggs](http://habitica.wikia.com/wiki/Eggs) and [hatching potions](http://habitica.wikia.com/wiki/Hatching_Potions). [Feed](http://habitica.wikia.com/wiki/Food) them to create [Mounts](http://habitica.wikia.com/wiki/Mounts).\n * At level 10: Choose a particular [class](http://habitica.wikia.com/wiki/Class_System) and then use class-specific [skills](http://habitica.wikia.com/wiki/Skills) (levels 11 to 14).\n * Form a party with your friends (by clicking [Party](/party) in the navigation bar) to stay accountable and earn a Quest scroll.\n * Defeat monsters and collect objects on [quests](http://habitica.wikia.com/wiki/Quests) (you will be given a quest at level 15).\n Escriba aquí su ", - "overviewQuestions": "Have questions? Check out the [FAQ](/static/faq/)! If your question isn't mentioned there, you can ask for further help in the [Habitica Help guild](/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a).\n\nGood luck with your tasks!" + "overviewQuestions": "¿Tienes preguntas? ¡Revisa las [Preguntas Frecuentes](/static/faq/)! Si tu pregunta no esta ahi, puedes pedir ayuda en el [Gremio de ayuda de Habitica](/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a).\n\n¡Buena suerte con tus tareas!" } diff --git a/website/common/locales/es_419/quests.json b/website/common/locales/es_419/quests.json index d1bacf9f9e..11fe1c8bee 100644 --- a/website/common/locales/es_419/quests.json +++ b/website/common/locales/es_419/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Ninguna invitación a misión a sido enviada todavía.", "questInviteNotFound": "No fue encontrada una invitación a la mision.", "guildQuestsNotSupported": "Los gremios no pueden ser invitados a misiones.", - "questNotFound": "La misión \"<%= key %>\" no fue encontrada.", "questNotOwned": "No posees ese pergamino de misión.", "questNotGoldPurchasable": "La misión \"<%= key %>\" es una misión no comprable con Oro.", "questLevelTooHigh": "Debes ser de nivel <%= level %> para empezar esta misión.", @@ -122,7 +121,7 @@ "buyQuestBundle": "Comprar paquete de misiones", "noQuestToStart": "¿No puedes encontrar una misión para iniciar? ¡Intenta revisar la Tienda de Misiones en el Mercado para ver nuevas misiones!", "pendingDamage": "<%= damage %> daño pendiente", - "pendingDamageLabel": "pending damage", + "pendingDamageLabel": "Daño pendiente", "bossHealth": "<%= currentHealth %>/<%= maxHealth %> Salud", "rageAttack": "Ataque de ira", "bossRage": "<%= currentRage %>/<%= maxRage %> Ira", diff --git a/website/common/locales/es_419/questscontent.json b/website/common/locales/es_419/questscontent.json index 478a8c5de0..c48adb4c7b 100644 --- a/website/common/locales/es_419/questscontent.json +++ b/website/common/locales/es_419/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/es_419/settings.json b/website/common/locales/es_419/settings.json index b6536c428e..6ff2276b70 100644 --- a/website/common/locales/es_419/settings.json +++ b/website/common/locales/es_419/settings.json @@ -32,7 +32,7 @@ "resetAccPop": "Empezar de nuevo, eliminando todo los niveles, el oro, el equipamiento, el historial, y las tareas.", "deleteAccount": "Eliminar cuenta", "deleteAccPop": "Cancelar y quitar esta cuenta de Habitica.", - "feedback": "If you'd like to give us feedback, please enter it below - we'd love to know what you liked or didn't like about Habitica! Don't speak English well? No problem! Use the language you prefer.", + "feedback": "Si deseas enviarnos sus comentarios, ingrésalos a continuación. Nos encantaría saber qué te gustó o no de Habitica. ¿No hablas inglés? ¡No hay problema! Usa el idioma que prefieras.", "qrCode": "Código QR", "dataExport": "Exportar datos", "saveData": "Aquí hay algunas opciones para guardar tu información.", diff --git a/website/common/locales/es_419/spells.json b/website/common/locales/es_419/spells.json index 2879f14d0b..22d904740a 100644 --- a/website/common/locales/es_419/spells.json +++ b/website/common/locales/es_419/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "¡Convierte a un amigo en una criatura marina!", "spellSpecialSandText": "Arena", "spellSpecialSandNotes": "Deshaz el hechizo que te convirtió en estrella de mar.", - "spellNotFound": "Habilidad \"<%= spellId %>\" no encontrada.", "partyNotFound": "Equipo no encontrado", "targetIdUUID": "\"targetId\" debe ser un ID de usuario válido.", "challengeTasksNoCast": "Conjurar esta habilidad en tareas de desafío no está permitido.", diff --git a/website/common/locales/es_419/subscriber.json b/website/common/locales/es_419/subscriber.json index 38538c40a9..0fbac6d6ae 100644 --- a/website/common/locales/es_419/subscriber.json +++ b/website/common/locales/es_419/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Codigo de cupón invalido.", "couponUsed": "El codigo de cupón ya fue usado.", "couponCodeRequired": "El codigo de cupón es requerido.", - "eventRequired": "\"req.params.event\" es requerido.", - "countRequired": "\"req.query.count\" es requerido.", - "missingPaymentId": "Falta req.query.paymentId", - "missingCustomerId": "Falta req.query.customerId", - "missingPaypalBlock": "Falta req.session.paypalBlock", - "missingSubKey": "Falta req.query.sub", "paypalCanceled": "Tu suscripción fue cancelada.", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "receiveMysticHourglass": "¡Recibe un Reloj de arena mística!", diff --git a/website/common/locales/es_419/tasks.json b/website/common/locales/es_419/tasks.json index 479b9b2fa2..0af3f7f9e8 100644 --- a/website/common/locales/es_419/tasks.json +++ b/website/common/locales/es_419/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "Equipamiento especial aparecerá aquí durante Eventos Globales.", "rewardHelp4": "¡No tengas miedo de crear Recompensas personalizadas! Echa un vistazo a algunos ejemplos aquí.", "clickForHelp": "Clic para obtener ayuda", - "taskIdRequired": "\"taskid\" tiene que ser un UUID valido.", "taskAliasAlreadyUsed": "El alias de la tarea ya ha sido utilizado en otra.", "taskNotFound": "Tarea no encontrada.", "invalidTaskType": "El tipo de tarea debe ser:\"Habitos\",\"Diarias\",\"Pendientes\" o \"Recompensas\".", diff --git a/website/common/locales/fr/backgrounds.json b/website/common/locales/fr/backgrounds.json index 47b47d885e..33073e92b3 100644 --- a/website/common/locales/fr/backgrounds.json +++ b/website/common/locales/fr/backgrounds.json @@ -347,10 +347,10 @@ "backgroundFlyingOverAncientForestText": "Forêt ancienne", "backgroundFlyingOverAncientForestNotes": "Volez au dessus de la canopée d'une forêt ancienne.", "backgrounds052018": "Ensemble 48 : sorti en mai 2018", - "backgroundTerracedRiceFieldText": "Champs de riz en terrasses", - "backgroundTerracedRiceFieldNotes": "Appréciez un champ de riz en terrasses pendant la saison de croissance.", + "backgroundTerracedRiceFieldText": "Champ de riz en terrasses", + "backgroundTerracedRiceFieldNotes": "Appréciez la saison des pousses dans un champ de riz en terrasses.", "backgroundFantasticalShoeStoreText": "Magasin de chaussures fantastiques", - "backgroundFantasticalShoeStoreNotes": "Cherchez de nouvelles chaussures amusantes dans ce magasin de chaussures fantastiques.", + "backgroundFantasticalShoeStoreNotes": "Cherchez de nouvelles chausses amusantes dans ce magasin de chaussures fantastiques.", "backgroundChampionsColosseumText": "Colisée des champions", "backgroundChampionsColosseumNotes": "Prélassez-vous devant la gloire du Colisée des champions." } \ No newline at end of file diff --git a/website/common/locales/fr/challenge.json b/website/common/locales/fr/challenge.json index 2a0a357b4d..5d4dde2571 100644 --- a/website/common/locales/fr/challenge.json +++ b/website/common/locales/fr/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "A remporté les défis suivants", "challenges": "Défis", "challengesLink": "Défis", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Pas encore de défi, visitez", "toCreate": "pour en créer un.", "selectWinner": "Désigner un vainqueur et clore le défi :", @@ -23,7 +25,9 @@ "filter": "Filtre", "groups": "Groupes", "noNone": "Aucun", + "category": "Category", "membership": "Participation", + "ownership": "Ownership", "participating": "Je participe", "notParticipating": "Je ne participe pas", "either": "Les deux", diff --git a/website/common/locales/fr/character.json b/website/common/locales/fr/character.json index 78bb6d29b6..3838ae9ab6 100644 --- a/website/common/locales/fr/character.json +++ b/website/common/locales/fr/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Voir la répartition des attributs", "hideQuickAllocation": "Cacher la répartition des attributs", "quickAllocationLevelPopover": "Chaque niveau vous rapporte un point que vous pouvez assigner à un attribut de votre choix. Vous pouvez le faire manuellement ou laissez le jeu décider pour vous, en utilisant les options d'attribution automatique qui se trouvent dans l'icône utilisateur -> caractéristiques.", - "invalidAttribute": "\"<%= attr %>\" n'est pas un attribut valide.", "notEnoughAttrPoints": "Vous n'avez pas assez de points d'attribut.", "style": "Style", "facialhair": "Pilosité faciale", @@ -219,6 +218,5 @@ "mainHand": "Main principale", "offHand": "Main secondaire", "pointsAvailable": "Points disponibles", - "pts": "pts", - "statsObjectRequired": "Une mise à jour des caractéristiques est requise" + "pts": "pts" } \ No newline at end of file diff --git a/website/common/locales/fr/communityguidelines.json b/website/common/locales/fr/communityguidelines.json index 2cb848926f..ccbac8dddc 100644 --- a/website/common/locales/fr/communityguidelines.json +++ b/website/common/locales/fr/communityguidelines.json @@ -58,7 +58,7 @@ "commGuidePara055": "Les exemples suivants représentent des infractions modérées. Cette liste n’est pas exhaustive.", "commGuideList06A": "Ignorer, manquer de respect ou contester un modérateur. Ceci inclut : se plaindre en public d'un modérateur ou d'un autre utilisateur, ou publiquement glorifier ou défendre des utilisateurs bannis, ou débattre si l'action d'un modérateur était ou non appropriée. Si une règle ou un modérateur vous pose un souci, veuillez contacter l'équipe par courriel (admin@habitica.com).", "commGuideList06B": "Modération abusive. Pour clarifier : un rappel sympathique des règles ne pose pas de problème. La modération abusive consiste à ordonner, demander et/ou sous-entendre fortement que quelqu’un doit vous écouter afin de corriger une erreur. Vous pouvez prévenir une personne qu’elle enfreint les règles, mais ne réclamez pas d’action particulière. Par exemple, dire « Juste pour que tu saches, il est déconseillé de jurer dans la taverne donc tu devrais retirer cela » est plus adéquat que dire « Je vais devoir te demander de retirer tes propos ».", - "commGuideList06C": "Intentionnellement reporter des messages innocents.", + "commGuideList06C": "Signalement intentionnel de messages innocents.", "commGuideList06D": "Violations répétées du code de conduite dans l'espace public ", "commGuideList06E": "Commissions répétées d'infractions mineures", "commGuideHeadingMinorInfractions": "Infractions mineures", @@ -94,7 +94,7 @@ "commGuideList11E": "Modifications (la modération ou le staff peut modifier du contenu problématique)", "commGuideHeadingRestoration": "Restauration", "commGuidePara061": "Habitica est un lieu dédié au développement personnel, et nous croyons aux secondes chances. Si vous commettez une infraction qui a eu une conséquence, voyez-le comme une chance d’évaluer vos actions et de travailler à devenir un meilleur membre de la communauté.", - "commGuidePara062": "L'annonce, le message et/ou le courriel que vous recevez expliquant les conséquences de vos actions est une bonne source d’informations. Acceptez les restrictions qui vous sont imposées, et engagez-vous à faire ce qu’il faut pour voir vos sanctions levées.", + "commGuidePara062": "L'annonce, le message et/ou le courriel que vous recevez expliquant les conséquences de vos actions constitue une bonne source d’informations. Acceptez les restrictions qui vous sont imposées, et engagez-vous à faire ce qu’il faut pour voir vos sanctions levées.", "commGuidePara063": "Si vous ne comprenez pas les conséquences ou la nature de votre infraction, demandez de l’aide au staff ou à l'équipe de modération afin d'éviter de nouvelles infractions. Si vous trouvez qu'une décision spécifique était injuste, vous pouvez contacter l'équipe pour en discuter à admin@habitica.com.", "commGuideHeadingMeet": "Rencontrez l'équipe derrière Habitica et ses modérateurs !", "commGuidePara006": "Habitica compte plusieurs chevaliers-errants qui unissent leurs forces avec celles des membres de l'équipe d'administration afin de préserver le calme et le contentement de la communauté et de la protéger des trolls. Tous et toutes ont leur domaine spécifique, mais certains peuvent être parfois appelés à servir dans d'autres sphères sociales.", diff --git a/website/common/locales/fr/contrib.json b/website/common/locales/fr/contrib.json index d25fdd6f06..de92750eb0 100644 --- a/website/common/locales/fr/contrib.json +++ b/website/common/locales/fr/contrib.json @@ -49,7 +49,6 @@ "UUID": "ID d'utilisateur", "loadUser": "Charger l'Utilisateur", "noAdminAccess": "Vous n'avez pas l'accès administrateur.", - "pageMustBeNumber": "req.query.page doit être un nombre", "userNotFound": "Utilisateur introuvable.", "invalidUUID": "UUID doit être valide.", "title": "Titre", diff --git a/website/common/locales/fr/front.json b/website/common/locales/fr/front.json index f40884874e..bb504c592a 100644 --- a/website/common/locales/fr/front.json +++ b/website/common/locales/fr/front.json @@ -304,7 +304,7 @@ "alreadyHaveAccountLogin": "Vous avez déjà un compte Habitica ? Connectez-vous.", "dontHaveAccountSignup": "Vous n'avez pas de compte Habitica ? Inscrivez-vous.", "motivateYourself": "Motivez-vous pour atteindre vos objectifs.", - "timeToGetThingsDone": "It's time to have fun when you get things done! Join over <%= userCountInMillions %> million Habiticans and improve your life one task at a time.", + "timeToGetThingsDone": "C'est le moment de vous amuser quand vous accomplissez des choses ! Rejoignez les <%= userCountInMillions %> millions d'Habiticiennes et d'Habiticiens et améliorez votre vie, une tâche à la fois.", "singUpForFree": "Inscrivez-vous gratuitement", "or": "OU", "gamifyYourLife": "Faites de votre vie un jeu", diff --git a/website/common/locales/fr/gear.json b/website/common/locales/fr/gear.json index fc966487b1..61c7412b30 100644 --- a/website/common/locales/fr/gear.json +++ b/website/common/locales/fr/gear.json @@ -335,7 +335,7 @@ "weaponArmoireFlutteryArmyText": "Armée papillonnante", "weaponArmoireFlutteryArmyNotes": "Ce groupe de lépidoptères bagarreurs est prêt à battre des ailes avec acharnement pour refroidir les plus rouges de vos tâches. Augmente la Constitution, l'Intelligence et la Force de <%= attrs %> chacune. Armoire enchantée : ensemble papillonnant (objet 3 sur 3).", "weaponArmoireCobblersHammerText": "Marteau de cordonnier", - "weaponArmoireCobblersHammerNotes": "Ce marteau a été spécialement fabriqué pour traiter le cuir. Néanmoins, il peut faire un travail impressionnant sur une quotidienne rouge en un rien de temps. Augmente la constitution et la force de <%= attrs %> chacun. Armoire enchantée : Ensemble du cordonnier (Objet 2 de 3).", + "weaponArmoireCobblersHammerNotes": "Ce marteau a été spécialement fabriqué pour traiter le cuir. Néanmoins, il peut accomplir un travail impressionnant sur une quotidienne rouge en un rien de temps. Augmente la constitution et la force de <%= attrs %> chacune. Armoire enchantée : ensemble du cordonnier (objet 2 sur 3).", "armor": "armure", "armorCapitalized": "Armure", "armorBase0Text": "Habit simple", @@ -719,7 +719,7 @@ "armorArmoireFlutteryFrockText": "Robe papillonnante", "armorArmoireFlutteryFrockNotes": "Une robe légère et vaporeuse avec un large jupon que les papillons risquent de prendre pour une fleur géante. Augmente la Constitution, la Perception et la Force de <%= attrs %> chacune. Armoire enchantée : ensemble papillonnant (objet 1 sur 3).", "armorArmoireCobblersCoverallsText": "Combinaison de cordonnier", - "armorArmoireCobblersCoverallsNotes": "Cette combinaison solide a plein de poches pour les outils, les morceaux de cuir et les autres objets utiles ! Augmente la perception et la force de <%= attrs %> chacun. Armoire enchantée : Ensemble du cordonnier (Objet 1 de 3).", + "armorArmoireCobblersCoverallsNotes": "Cette combinaison solide a plein de poches pour les outils, les morceaux de cuir et les autres objets utiles ! Augmente la perception et la force de <%= attrs %> chacune. Armoire enchantée : ensemble du cordonnier (objet 1 sur 3).", "headgear": "heaume", "headgearCapitalized": "Couvre-chef", "headBase0Text": "Pas de couvre-chef", @@ -1327,7 +1327,7 @@ "shieldArmoireFlutteryFanText": "Éventail fleuri", "shieldArmoireFlutteryFanNotes": "Par une chaude journée, il n'y a rien de mieux qu'un éventail chic pour vous refroidir et avoir l'air cool . Augmente la Constitution, l'Intelligence et la Perception de <%= attrs %> chacune. Armoire enchantée : objet indépendant.", "shieldArmoireFancyShoeText": "Chaussure de luxe", - "shieldArmoireFancyShoeNotes": "Une chaussure très spéciale sur laquelle vous travaillez. Elle est bonne pour la royauté ! Augmente l'intelligence et la perception de <%= attrs %> chacun. Armoire enchantée (Objet 3 de 3).", + "shieldArmoireFancyShoeNotes": "Une chaussure très spéciale sur laquelle vous travaillez. Elle est bonne pour la royauté ! Augmente l'intelligence et la perception de <%= attrs %> chacune. Armoire enchantée : ensemble du cordonnier (objet 3 sur 3).", "back": "Accessoire dorsal", "backCapitalized": "Accessoire dorsal", "backBase0Text": "Pas d’accessoire dorsal", @@ -1361,7 +1361,7 @@ "backMystery201803Text": "Ailes de la libellule audacieuse", "backMystery201803Notes": "Ces ailes brillantes et reluisantes vous porteront avec aise à travers la douce brise de printemps, et par dessus les nénuphars. Ne confère aucun bonus. Équipement d'abonné·e de mars 2018.", "backMystery201804Text": "Queue d’écureuil", - "backMystery201804Notes": "Évidemment, ça vous aide à garder l'équilibre quand vous sautez de branche en branche, mais le plus important c'est la DOUCEUR MAXIMALE. Ne confère aucun bonus. Objet d'abonnement d'Avril 2018.", + "backMystery201804Notes": "Évidemment, elle vous aide à garder l'équilibre quand vous sautez de branche en branche, mais le plus important c'est cette DOUCEUR MAXIMALE. Ne confère aucun bonus. Équipement d’abonné•e d'avril 2018.", "backSpecialWonderconRedText": "Cape de puissance", "backSpecialWonderconRedNotes": "Bruisse avec force et élégance. N'apporte aucun bonus. Équipement de Convention en Édition Spéciale.", "backSpecialWonderconBlackText": "Cape de dissimulation", diff --git a/website/common/locales/fr/groups.json b/website/common/locales/fr/groups.json index b4c2c6de73..985c85f530 100644 --- a/website/common/locales/fr/groups.json +++ b/website/common/locales/fr/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Message optionnel", "yesRemove": "Oui, enlevez-les", "foreverAlone": "Vous ne pouvez pas aimer votre propre message. Ne soyez pas ce genre de personne.", - "sortDateJoinedAsc": "Date d'arrivée : ascendant", - "sortDateJoinedDesc": "Date d'arrivée : descendant", - "sortLoginAsc": "Première connexion", - "sortLoginDesc": "Dernière Connexion", - "sortLevelAsc": "Niveau le plus bas", - "sortLevelDesc": "Niveau le plus haut", - "sortNameAsc": "Nom (A - Z)", - "sortNameDesc": "Nom (Z - A)", - "sortTierAsc": "Échelon le plus bas", - "sortTierDesc": "Échelon le plus haut", + "sortBackground": "Classer par arrière-plan", + "sortClass": "Trier par classe", + "sortDateJoined": "Trier par date d'arrivée", + "sortLogin": "Trier par date de connexion", + "sortLevel": "Trier par niveau", + "sortName": "Trier par nom", + "sortTier": "Trier par palier", + "ascendingAbbrev": "Asc.", + "descendingAbbrev": "Desc.", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Créer une guilde pour 4 gemmes ?", "leaveGroupCha": "Quitter les défis de guilde et…", "confirm": "Confirmer", @@ -131,6 +131,10 @@ "clearAll": "Effacer tous les messages", "confirmDeleteAllMessages": "Confirmez-vous effacer tous les messages de votre boîte ? Les autres utilisateurs continueront de voir les messages que vous avez expédiés.", "optOutPopover": "Vous n'aimez pas les messages privés ? Cliquez ici pour désactiver l'option", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Sélectionnez une conversation à gauche", + "PMPlaceholderTitleRevoked": "Vos privilèges de discussion ont été révoqués.", + "PMPlaceholderDescriptionRevoked": "Vous ne pouvez pas envoyer de messages privés car vos privilèges de discussion ont été révoqués. Si vous avez des questions ou des inquiétudes concernant cette mesure, veuillez envoyer un courriel à admin@habitica.com pour en discuter avec les employés Habitica.", "block": "Bloquer", "unblock": "Ne plus bloquer", "pm-reply": "Répondre", @@ -207,7 +211,6 @@ "partyOnName": "Une équipe festive", "partyUpText": "A rejoint une équipe avec une autre personne ! Amusez-vous à affronter des monstres, unis dans la bataille.", "partyOnText": "A rejoint une équipe d'au moins quatre personnes ! Profitez de votre sens accru des responsabilités, tandis que vous et vos amis vous unissez pour vaincre vos adversaires !", - "groupIdRequired": "\"groupId\" doit être un UUID valide", "groupNotFound": "Groupe introuvable ou vous n'y avez pas accès.", "groupTypesRequired": "Vous devez fournir une requête \"type\" valide.", "questLeaderCannotLeaveGroup": "Vous ne pouvez pas quitter une équipe si vous avez démarré une quête. Abandonnez la quête d'abord.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Vous ne pouvez pas vous supprimer vous-même !", "groupMemberNotFound": "Utilisateur non trouvé parmi les membres du groupe", "mustBeGroupMember": "Doit être un membre du groupe.", - "keepOrRemoveAll": "req.query.keep doit être soit \"keep-all\" soit \"remove-all\"", - "keepOrRemove": "req.query.keep doit être soit \"keep\" soit \"remove\"", "canOnlyInviteEmailUuid": "Vous ne pouvez inviter qu'avec des UUID ou des courriels.", "inviteMissingEmail": "L'adresse courriel est manquante dans l'invitation.", "inviteMissingUuid": "L'ID d'utilisateur est manquante dans l'invitation.", @@ -252,7 +253,7 @@ "userRequestsApproval": "<%= userName %> demande une approbation", "userCountRequestsApproval": "<%= userCount %> demandent une approbation", "youAreRequestingApproval": "Vous demandez une approbation", - "chatPrivilegesRevoked": "You cannot do that because your chat privileges have been revoked.", + "chatPrivilegesRevoked": "Vous ne pouvez faire cela car vos privilèges de discussion ont été révoqués.", "cannotCreatePublicGuildWhenMuted": "Vous ne pouvez pas créer une guilde publique car vos privilèges de discussion ont été révoqués.", "cannotInviteWhenMuted": "Vous ne pouvez inviter personne à rejoindre une guilde ou une équipe, car vos privilèges de discussion ont été révoqués.", "newChatMessagePlainNotification": "Nouveau message de <%= authorName %> dans <%= groupName %>. Cliquez ici pour ouvrir la page de discussion !", @@ -315,7 +316,7 @@ "approvalsTitle": "Tâches en attente d'approbation", "upgradeTitle": "Mise à niveau", "blankApprovalsDescription": "Quand votre groupe réalise des tâches que vous devez approuver, elles apparaîtront ici ! Ajustez les paramètres d'approbation des tâches dans leur menu « Modifier ».", - "userIsClamingTask": "`<%= username %> a revendiqué \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Approbation demandée", "refreshApprovals": "Actualiser les approbations", "refreshGroupTasks": "Actualiser les tâches de groupe", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Vous ne pouvez pas supprimer les tâches de groupe qui vous ont été attribuées.", "confirmGuildPlanCreation": "Créer ce groupe ?", "onlyGroupLeaderCanInviteToGroupPlan": "Seul le chef de groupe peut inviter des utilisateurs dans un groupe avec abonnement.", - "remainOrLeaveChallenges": "req.query.keep doit être soit 'remain-in-challenges' ou 'leave-challenges'", "paymentDetails": "Détails du paiement", "aboutToJoinCancelledGroupPlan": "Vous êtes sur le point de rejoindre un groupe dont l'abonnement a été annulé. Vous ne recevrez PAS d'abonnement gratuit.", "cannotChangeLeaderWithActiveGroupPlan": "Vous ne pouvez pas changer le responsable d'un groupe avec un abonnement actif.", @@ -366,9 +366,11 @@ "recentActivity": "Activité récente", "myGuilds": "Mes guildes", "guildsDiscovery": "Découvrir des guildes", + "role": "Role", "guildOrPartyLeader": "Responsable", "guildLeader": "Responsable de la guilde", "member": "Membre", + "guildSize": "Guild Size", "goldTier": "Palier or", "silverTier": "Palier argent", "bronzeTier": "Palier bronze", @@ -444,7 +446,7 @@ "inGameBenefitsDesc": "Les membres du groupe reçoivent une monture léporilope exclusive, ainsi que tous les bénéfices d'un abonnement complet, incluant l'équipement mensuel spécial et la capacité d'acheter des gemmes pour de l'or.", "inspireYourParty": "Inspirez votre équipe, ludifiez votre vie tous ensemble.", "letsMakeAccount": "D’abord, créons-vous un compte", - "nameYourGroup": "Ensuite, nommez votre Groupe", + "nameYourGroup": "Ensuite, nommez votre groupe", "exampleGroupName": "Par exemple : Avengers Academy", "exampleGroupDesc": "Dédié aux personnes sélectionnées qui rejoignent l'université d'entraînement \"Initiative Superhéroïque des Avengers\".", "thisGroupInviteOnly": "Ce groupe n’est accessible qu’avec une invitation.", diff --git a/website/common/locales/fr/loadingscreentips.json b/website/common/locales/fr/loadingscreentips.json index 33780f379c..19b6f93294 100644 --- a/website/common/locales/fr/loadingscreentips.json +++ b/website/common/locales/fr/loadingscreentips.json @@ -25,7 +25,7 @@ "tip23": "Atteignez le niveau 100 pour débloquer l'orbe de renaissance gratuitement et commencer une nouvelle aventure !", "tip24": "Vous avez une question ? Demandez à la guilde \"Habitica Help\" !", "tip25": "Les quatre Grands Galas saisonniers commencent vers les solstices et équinoxes.", - "tip26": "You can look for a Party or find Party members in the Party Wanted Guild!", + "tip26": "Vous pouvez rechercher une équipe ou trouver des personnes cherchant une équipe dans la guilde Party Wanted !", "tip27": "Vous avez accompli une tâche hier, mais ne l'avez pas cochée ? Pas de panique ! Grâce à \"Valider les tâches de la veille\", vous pourrez passer en revue les tâches non-validées de la veille avant de commencer votre nouvelle journée.", "tip28": "Indiquez un début de journée personnalisé en cliquant sur l'icône Utilisateur > Paramètres, afin de décider de l'heure à laquelle votre journée démarre.", "tip29": "Complétez toutes vos quotidiennes pour obtenir un bonus de \"jour parfait\" qui augmentera vos attributs !", diff --git a/website/common/locales/fr/npc.json b/website/common/locales/fr/npc.json index 5323180ce9..43ff834753 100644 --- a/website/common/locales/fr/npc.json +++ b/website/common/locales/fr/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Objets du moment !", "hideLocked": "Cacher ce qui est verrouillé", "hidePinned": "Cacher ce qui est épinglé", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Expérience", "amountGold": "<%= amount %> Or", "namedHatchingPotion": "Potion d'éclosion <%= type %>", @@ -74,20 +75,13 @@ "ianTextMobile": "Puis-je vous proposer quelques parchemins de quête ? Activez-les pour combattre des monstres avec votre équipe !", "ianBrokenText": "Bienvenue à la boutique des quêtes... Ici, vous pouvez utiliser des parchemins de quêtes pour combattre des monstres avec vos amis. Assurez-vous de regarder notre ensemble de parchemins de quêtes en vente sur votre droite...", "featuredQuests": "Quêtes du moment !", - "missingKeyParam": "\"req.params.key\" est requis.", - "itemNotFound": "Objet \"<%= key %>\" non trouvé.", "cannotBuyItem": "Vous ne pouvez pas acheter cet objet.", - "missingTypeKeyEquip": "\"key\" et \"type\" sont des paramètres requis.", - "missingPetFoodFeed": "\"pet\" et \"food\" sont des paramètres requis.", - "invalidPetName": "Nom de familier invalide.", - "missingEggHatchingPotionHatch": "\"egg\" et \"hatchingPotion\" sont des paramètres requis.", - "invalidTypeEquip": "\"type\" doit faire partie de 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Il faut acheter <%= val %> pour le mettre en <%= key %>.", "typeRequired": "Type est requis", "positiveAmountRequired": "Un montant positif est requis", "notAccteptedType": "Le Type doit faire partie de [eggs, hatchingPotions, premiumHatchingPotions, food, quests, gear]", "contentKeyNotFound": "Clé non trouvée pour le contenu <%= type %>", - "plusGem": "+<%= count %> Gem", + "plusGem": "+<%= count %> gemmes", "typeNotSellable": "Type n'est pas vendable. Il doit faire partie des types suivants <%= acceptedTypes %>", "userItemsKeyNotFound": "Clé non trouvée pour user.items <%= type %>", "userItemsNotEnough": "Vous n'avez pas assez de <%= type %>.", diff --git a/website/common/locales/fr/quests.json b/website/common/locales/fr/quests.json index 8e99aa61b7..e69c7f71a2 100644 --- a/website/common/locales/fr/quests.json +++ b/website/common/locales/fr/quests.json @@ -79,7 +79,7 @@ "mustLvlQuest": "Vous devez être au niveau <%= level %> pour acheter cette quête !", "mustInviteFriend": "Pour gagner cette quête, invitez un ami dans votre équipe. Voulez-vous inviter quelqu'un maintenant ?", "unlockByQuesting": "Pour débloquer cette quête, complétez <%= title %>.", - "questConfirm": "Avez-vous bien fait votre choix ? Seuls<%= questmembers %> des <%= totalmembers %> membres de votre équipe ont rejoint cette quête ! Les quêtes démarrent automatiquement quand tous les joueurs ont accepté ou décliné l'invitation.", + "questConfirm": "Avez-vous bien fait votre choix ? Seuls <%= questmembers %> des <%= totalmembers %> membres de votre équipe ont rejoint cette quête ! Les quêtes démarrent automatiquement quand tous les joueurs ont accepté ou décliné l'invitation.", "sureCancel": "Confirmez-vous vouloir annuler cette quête ? Toutes les invitations acceptées seront perdues. Le responsable de quête reprendra possession du parchemin de quête.", "sureAbort": "Confirmez-vous vouloir abandonner cette mission ? Elle sera abandonnée pour tous les membres de votre groupe et toute la progression sera perdue. Le responsable de quête reprendra possession du parchemin de quête.", "doubleSureAbort": "Confirmez-vous absolument ? Assurez-vous qu'ils ne vont pas vous détester pour le reste de votre vie !", @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Aucune invitation à la quête n'a été envoyée pour l'instant.", "questInviteNotFound": "Aucune invitation à la quête trouvée.", "guildQuestsNotSupported": "Les guildes ne peuvent pas être invitées à joindre une quête.", - "questNotFound": "Quête \"<%= key %>\" introuvable.", "questNotOwned": "Vous ne possédez pas ce parchemin de quête.", "questNotGoldPurchasable": "La quête \"<%= key %>\" n'est pas achetable avec de l'or.", "questLevelTooHigh": "Vous devez être au moins au niveau <%= level %> pour commencer cette quête.", diff --git a/website/common/locales/fr/questscontent.json b/website/common/locales/fr/questscontent.json index 7dd46ba7e4..af3083ed40 100644 --- a/website/common/locales/fr/questscontent.json +++ b/website/common/locales/fr/questscontent.json @@ -97,12 +97,12 @@ "questGoldenknight1Text": "La chevaleresse d'or, 1re partie : une sévère remontrance", "questGoldenknight1Notes": "La chevaleresse d'or tombe sur le dos des pauvres citoyens d'Habitica. Vous n'avez pas fait toutes vos quotidiennes ? Vous avez cédé à une mauvaise habitude ? Elle s'en servira comme raison pour vous rabâcher que vous devez suivre son exemple. Elle est l'exemple brillant d'une Habiticienne parfaite, et vous n'êtes qu'un raté. Hé bien, ce n'est pas gentil du tout, ça ! Tout le monde fait des erreurs ! Et on ne devrait pas subir de telles critiques pour si peu. Il est peut-être temps de récolter quelques témoignages d'habitants blessés et d'avoir une petite discussion avec la chevaleresse d'or !", "questGoldenknight1CollectTestimony": "Témoignages", - "questGoldenknight1Completion": "Regardez tout ces témoignages ! De toute évidence, cela suffira à convaincre la chevaleresse d'or. Tout ce qu'il vous reste à faire, c'est la trouver.", + "questGoldenknight1Completion": "Regardez tous ces témoignages ! De toute évidence, cela suffira à convaincre la chevaleresse d'or. Tout ce qu'il vous reste à faire, c'est la trouver.", "questGoldenknight1DropGoldenknight2Quest": "La chevaleresse d'or, 2e partie : le chevalier au féminin (Parchemin)", "questGoldenknight2Text": "La chevaleresse d'or, 2e partie : le chevalier au féminin", "questGoldenknight2Notes": "Avec en poche des centaines de témoignages d'Habiticiennes et d'Habiticiens malmenés, vous affrontez enfin la chevaleresse d'or. Vous entamez la récitation des plaintes à son sujet, une par une : \"...et @Pfeffernusse dit que tes vantardises incessantes...\" La chevaleresse lève la main pour vous faire taire, puis ricane. \"Je t'en prie, ces gens sont simplement jaloux de mon succès. Au lieu de se plaindre, ils devraient juste travailler aussi dur que moi ! Je devrais peut-être te montrer la force qu'on peut atteindre avec une discipline comme la mienne !\" Elle lève alors son fléau et se prépare à vous attaquer !", "questGoldenknight2Boss": "Chevaleresse d'or", - "questGoldenknight2Completion": "The Golden Knight lowers her Morningstar in consternation. “I apologize for my rash outburst,” she says. “The truth is, it’s painful to think that I’ve been inadvertently hurting others, and it made me lash out in defense… but perhaps I can still apologize?”", + "questGoldenknight2Completion": "La chevaleresse d'or baisse son fléau avec consternation. \"Je m'excuse pour mon accès de colère,\" dit-elle. \"La vérité, c'est qu'il m'est pénible de penser que j'ai blessé les autres par inadvertance, et je m'énerve par réflexe défensif... mais peut être n'est-il pas trop tard pour demander pardon ?\"", "questGoldenknight2DropGoldenknight3Quest": "La chevaleresse d'or, 3e partie : le chevalier de fer (Parchemin)", "questGoldenknight3Text": "La chevaleresse d'or, 3e partie : le chevalier de fer", "questGoldenknight3Notes": "@Jon Arinbjorn vous appelle pour attirer votre attention. À la suite de votre bataille, un nouveau personnage est apparu. Un chevalier dans une armure de fer veiné de noir s'approche lentement de vous, l'épée à la main. La chevaleresse d'or lui crie \"Père, non !\" mais le chevalier ne montre aucun signe de ralentissement. Elle se tourne vers vous et dit : \"Je suis désolée. J'étais inconsciente, avec bien trop la grosse tête pour voir à quel point j'étais devenue cruelle. Mais mon père est bien plus terrible que je ne pourrais l'être. Si on ne l'arrête pas, il nous détruira tous. Tiens, prend mon fléau et arrête le chevalier de fer !\"", @@ -295,7 +295,7 @@ "questUnicornDropUnicornEgg": "Licorne (Œuf)", "questUnicornUnlockText": "Déverrouille l'achat d’œufs de licorne au marché", "questSabretoothText": "Le tigre à dents de sabre", - "questSabretoothNotes": "Un monstre rugissant terrorise Habitica ! La créature erre entre bois et forêts et tout-à-coup attaque, avant de s'évanouir dans la nature. Elle chasse les pandas sans défense et effraie tant les cochons volants qu'ils quittent leurs enclos et se perchent dans les arbres. @InspectorCaracal et @icefelis expliquent qu'ils ont malencontreusement libéré un tigre à dents de sabre zombie alors qu'ils faisaient des fouilles dans les antiques glaces vierges des steppes stoïcalmes. \"Il était tout-à-fait aimable au début. Je ne comprends pas ce qui s'est passé. Je vous en prie, vous devez nous aider à l'attraper ! Seul un champion de Habitica peut espérer maîtriser ce monstre préhistorique.\"", + "questSabretoothNotes": "Un monstre rugissant terrorise Habitica ! La créature erre entre bois et forêts et tout-à-coup attaque, avant de s'évanouir dans la nature. Elle chasse les pandas sans défense et effraie tant les cochons volants qu'ils quittent leurs enclos et se perchent dans les arbres. @InspectorCaracal et @icefelis expliquent qu'ils ont malencontreusement libéré un tigre à dents de sabre zombie alors qu'ils faisaient des fouilles dans les antiques glaces vierges des steppes stoïcalmes. \"Il était tout-à-fait aimable au début. Je ne comprends pas ce qui s'est passé. Je vous en prie, vous devez nous aider à l'attraper ! Seul un champion d'Habitica peut espérer maîtriser ce monstre préhistorique.\"", "questSabretoothCompletion": "Après un long et fatiguant combat en corps-à-corps, vous immobilisez le tigre à dents de sabre zombie au sol. Collé à lui, le maintenant solidement, vous remarquez une vilaine carie dans l'une de ses immenses canines. Comprenant enfin la raison de la rage du tigre, vous faites soigner la carie par @Fandekasp et dites gentiment au groupe que dorénavant, il vaudrait mieux éviter de donner des bonbons à leur ami tigre. Le tigre à dents de sabre grandit de manière spectaculaire, et ses dompteurs, pleins de gratitude, vous envoient une grande récompense : une couvée d’œufs au motif strié. ", "questSabretoothBoss": "Tigre à dents de sabre zombie", "questSabretoothDropSabretoothEgg": "Tigre à dents de sabre (Œuf)", @@ -388,7 +388,7 @@ "questTaskwoodsTerror2DropArmor": "Robe de pyromancienne (armure)", "questTaskwoodsTerror3Text": "Terreur dans le bois des Tâches, 3e partie : Jacko à la lanterne", "questTaskwoodsTerror3Notes": "Prêt pour la bataille, votre groupe marche jusqu'au cœur de la forêt, où l'esprit renégat tente de détruire un vénérable pommier entouré de buissons pleins de baies. Sa tête-citrouille irradie une affreuse lumière partout où son regard porte et il tient fermement dans sa main gauche un long bâton au bout duquel pend une lanterne. En lieu et place de la flamme, la lanterne contient un cristal noir dont la simple vue vous glace le sang.

La Joyeuse faucheuse porte sa main osseuse à sa bouche. \"C'est... c'est Jacko, l'esprit de la lanterne ! Mais c'est un esprit moissonneur bien utile qui guide nos fermiers. Qu'est ce qui a pu conduire cette âme respectable à se comporter de la sorte ?\"

\"Je n'en sais rien, dit @bridgetteempress, mais on dirait bien que cette 'âme respectable' est sur le point de nous attaquer !\"", - "questTaskwoodsTerror3Completion": "Après une longue bataille, vous parvenez à faire tomber le cristal contenu dans la lanterne que Jacko tient. Il revient soudainement à lui-même et se répand en larmes. \"Oh, ma forêt, ma magnifique forêt ! Qu'ai-je fait ?!\" gémit-il. Ses larmes éteignent l'incendie et sauvent les pommes et les buissons.

Après l'avoir aidé à se reprendre, Jacko s'explique : \"J'ai rencontré une charmante dame, nommée Tzina, et elle m'a donné ce cristal en cadeau. Puisqu'elle insistait, je l'ai mis dans ma lanterne... mais c'est tout ce dont je me souviens.\" Il se tourne vers vous avec un sourire rayonnant. \"Peut-être devriez-vous le garder en sécurité pendant que j'aiderai les vergers à repousser.\"", + "questTaskwoodsTerror3Completion": "Après une longue bataille, vous parvenez à faire tomber le cristal contenu dans la lanterne que Jacko tient. Il revient soudainement à lui-même et se répand en larmes. \"Oh, ma forêt, ma magnifique forêt ! Qu'ai-je fait ?!\" gémit-il. Ses larmes éteignent l'incendie et sauvent les pommes et les buissons.

Vous aidez Jacko à se reprendre, puis il s'explique : \"J'ai rencontré une charmante dame, nommée Tzina, et elle m'a donné ce cristal en cadeau. Puisqu'elle insistait, je l'ai mis dans ma lanterne... mais c'est tout ce dont je me souviens.\" Il se tourne vers vous avec un sourire rayonnant. \"Peut-être devriez-vous le garder en sécurité pendant que j'aiderai les vergers à repousser.\"", "questTaskwoodsTerror3Boss": "Jacko à la lanterne", "questTaskwoodsTerror3DropStrawberry": "Fraise (Nourriture)", "questTaskwoodsTerror3DropWeapon": "Lanterne du bois des Tâches (arme à deux mains)", @@ -600,5 +600,7 @@ "questSquirrelCompletion": "En vous approchant doucement, en formulant des offres d'échange et en lançant quelques sorts d'apaisement, vous parvenez à amadouer l'écureuil loin de son magot pour l'emmener à l'écurie, dont @Shtut a fini de nettoyer la serrure. Des glands ont été mis de côté sur une table. \"Ces glands sont en fait des œufs d'écureuil ! Peut-être pourrez-vous en élever certains qui ne joueront pas autant avec leur nourriture.\"", "questSquirrelBoss": "Écureuil sournois", "questSquirrelDropSquirrelEgg": "Écureuil (Œuf)", - "questSquirrelUnlockText": "Déverrouille l'achat d'œufs d’écureuils au marché" + "questSquirrelUnlockText": "Déverrouille l'achat d'œufs d’écureuils au marché", + "cuddleBuddiesText": "Lot de quêtes des acolytes à câlins", + "cuddleBuddiesNotes": "Contient \"Le lapin tueur\", \"L'abominable furet\", et \"Le gang des cochons d'Inde\". Disponible jusqu'au 31 mai." } \ No newline at end of file diff --git a/website/common/locales/fr/settings.json b/website/common/locales/fr/settings.json index decde8448b..98d8d8a705 100644 --- a/website/common/locales/fr/settings.json +++ b/website/common/locales/fr/settings.json @@ -32,7 +32,7 @@ "resetAccPop": "Recommencez à zéro. Cela supprimera votre niveau, votre or, votre équipement, votre historique et vos tâches.", "deleteAccount": "Supprimer le compte", "deleteAccPop": "Annule et supprime votre compte Habitica.", - "feedback": "If you'd like to give us feedback, please enter it below - we'd love to know what you liked or didn't like about Habitica! Don't speak English well? No problem! Use the language you prefer.", + "feedback": "Si vous souhaitez nous faire part de vos impressions, n'hésitez pas à les saisir ci-dessous. Nous adorerions savoir ce qui vous a plu ou déplu concernant Habitica ! Vous ne parlez pas bien anglais ? Aucun problème ! Utilisez le langage que vous préférez.", "qrCode": "QR Code", "dataExport": "Export de Données", "saveData": "Voici quelques options pour sauvegarder vos données.", diff --git a/website/common/locales/fr/spells.json b/website/common/locales/fr/spells.json index 2fb09404f6..3cef21b57b 100644 --- a/website/common/locales/fr/spells.json +++ b/website/common/locales/fr/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Transformez un ami en une créature marine !", "spellSpecialSandText": "Sable", "spellSpecialSandNotes": "Inverse le sort qui vous a transformé en étoile de mer.", - "spellNotFound": "Compétence \"<%= spellId %>\" introuvable.", "partyNotFound": "Équipe non trouvée.", "targetIdUUID": "\"targetId\" doit être un nom d'utilisateur valide.", "challengeTasksNoCast": "Utiliser une compétence sur des tâches de défi est interdit.", diff --git a/website/common/locales/fr/subscriber.json b/website/common/locales/fr/subscriber.json index d439a0dc76..b6ea1dd1e2 100644 --- a/website/common/locales/fr/subscriber.json +++ b/website/common/locales/fr/subscriber.json @@ -7,7 +7,7 @@ "buyGemsGoldText": "Alexander le marchand vous vendra les gemmes au prix de 20 pièces d'or par gemme. Ses envois mensuels sont initialement plafonnés à 25 gemmes par mois, mais cette limite augmente de 5 gemmes tous les trois mois d'abonnement consécutifs, jusqu'à un maximum de 50 gemmes par mois !", "mustSubscribeToPurchaseGems": "Vous devez être abonné pour acheter des gemmes avec de l'or.", "reachedGoldToGemCap": "Vous avez atteint la limite de conversion or → gemme de <%= convCap %> pour ce mois. Ceci permet de limiter les abus et une accumulation de trophées qui ne seraient pas dans l'esprit du jeu. Le compte est remis à zéro chaque mois, au cours des trois premiers jours.", - "reachedGoldToGemCapQuantity": "Your requested amount <%= quantity %> exceeds the Gold=>Gem conversion cap <%= convCap %> for this month. We have this to prevent abuse / farming. The cap resets within the first three days of each month.", + "reachedGoldToGemCapQuantity": "La quantité demandée de <%= quantity %> dépasse le palier de conversion Or en Gemmes <%= convCap %>de ce mois. Ce palier sert à empêcher les abus. Il est réinitialisé dans les trois premiers jours de chaque mois.", "retainHistory": "Conservation de plus d'entrées de l'historique", "retainHistoryText": "Rend les Tâches à Faire effectuées et l'historique des tâches disponibles plus longtemps.", "doubleDrops": "Limite journalière de butin doublée", @@ -142,7 +142,7 @@ "mysterySet201801": "Ensemble de la fée de givre", "mysterySet201802": "Ensemble de l'insecte de l'amour", "mysterySet201803": "Ensemble de la libellule audacieuse", - "mysterySet201804": "Ensemble d’écureuil élégant", + "mysterySet201804": "Ensemble de l’élégant écureuil", "mysterySet301404": "Ensemble steampunk de base", "mysterySet301405": "Ensemble d'accessoires steampunks", "mysterySet301703": "Ensemble du paon steampunk", @@ -175,12 +175,6 @@ "invalidCoupon": "Code du coupon invalide.", "couponUsed": "Code du coupon déjà utilisé.", "couponCodeRequired": "Le code du coupon est requis.", - "eventRequired": "\"req.params.event\" est requis.", - "countRequired": "\"req.query.count\" est requis.", - "missingPaymentId": "req.query.paymentId manquant", - "missingCustomerId": "req.query.customerId manquant", - "missingPaypalBlock": "req.session.paypalBlock manquant", - "missingSubKey": "req.query.sub manquant", "paypalCanceled": "Votre abonnement a été annulé", "earnGemsMonthly": "Gagnez jusqu'à **<%= cap %> gemmes** par mois", "receiveMysticHourglass": "Recevez un Sablier mystique !", diff --git a/website/common/locales/fr/tasks.json b/website/common/locales/fr/tasks.json index 54de5d2764..95f27afa59 100644 --- a/website/common/locales/fr/tasks.json +++ b/website/common/locales/fr/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "De l'équipement spécial apparaitra ici pendant les Évènements Mondiaux.", "rewardHelp4": "N'hésitez pas à créer des récompenses personnalisées ! Regardez quelques exemples ici.", "clickForHelp": "Cliquez pour obtenir de l'aide.", - "taskIdRequired": "\"taskId\" doit être un UUID valide.", "taskAliasAlreadyUsed": "Le nom de cette tâche est déjà utilisé pour une autre tâche", "taskNotFound": "Tâche non trouvée.", "invalidTaskType": "Le type de tâche doit être : \"habit\", \"daily\", \"todo\" ou \"reward\".", diff --git a/website/common/locales/he/challenge.json b/website/common/locales/he/challenge.json index 38c4d29456..7c9fbf612c 100644 --- a/website/common/locales/he/challenge.json +++ b/website/common/locales/he/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "ניצחו באתגרים הבאים", "challenges": "אתגרים", "challengesLink": "אתגרים", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "עדיין אין לכם אתגרים, בקרו ב", "toCreate": "כדי ליצור אחד.", "selectWinner": "בחרו מנצח כדי לסגור את האתגר:", @@ -23,7 +25,9 @@ "filter": "מסנן", "groups": "קבוצות", "noNone": "אף אחת", + "category": "Category", "membership": "חברות", + "ownership": "Ownership", "participating": "משתתפים", "notParticipating": "לא משתתפים", "either": "בחרו אחד", diff --git a/website/common/locales/he/character.json b/website/common/locales/he/character.json index cc05611d36..3a05cdb364 100644 --- a/website/common/locales/he/character.json +++ b/website/common/locales/he/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Show Stat Allocation", "hideQuickAllocation": "Hide Stat Allocation", "quickAllocationLevelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User Icon > Stats.", - "invalidAttribute": "\"<%= attr %>\" is not a valid Stat.", "notEnoughAttrPoints": "You don't have enough Stat Points.", "style": "Style", "facialhair": "Facial", @@ -219,6 +218,5 @@ "mainHand": "Main-Hand", "offHand": "Off-Hand", "pointsAvailable": "Points Available", - "pts": "pts", - "statsObjectRequired": "Stats update is required" + "pts": "pts" } \ No newline at end of file diff --git a/website/common/locales/he/contrib.json b/website/common/locales/he/contrib.json index c3e7f51fea..dacb347ff3 100644 --- a/website/common/locales/he/contrib.json +++ b/website/common/locales/he/contrib.json @@ -49,7 +49,6 @@ "UUID": "מזהה משתמש", "loadUser": "טען משתמש", "noAdminAccess": "אין לכם הרשאות מנהל.", - "pageMustBeNumber": "req.query.page חייב להיות מספר", "userNotFound": "משתמש לא נמצא.", "invalidUUID": "UUID חייב להיות בתוקף", "title": "כותרת", diff --git a/website/common/locales/he/groups.json b/website/common/locales/he/groups.json index 49098d8aff..2e88ff3cf5 100644 --- a/website/common/locales/he/groups.json +++ b/website/common/locales/he/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "הודעה אופציונלית", "yesRemove": "כן, הסר אותם", "foreverAlone": "אינכם יכולים לתמוך בהודעות של עצמכם. אל תהיו כאלו.", - "sortDateJoinedAsc": "Earliest Date Joined", - "sortDateJoinedDesc": "Latest Date Joined", - "sortLoginAsc": "Earliest Login", - "sortLoginDesc": "Latest Login", - "sortLevelAsc": "Lowest Level", - "sortLevelDesc": "Highest Level", - "sortNameAsc": "Name (A - Z)", - "sortNameDesc": "Name (Z - A)", - "sortTierAsc": "Lowest Tier", - "sortTierDesc": "Highest Tier", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "צור גילדה בתמורה ל4 אבני חן?", "leaveGroupCha": "עזבו את אתגרי הגילדה וגם...", "confirm": "אישור", @@ -131,6 +131,10 @@ "clearAll": "מחק את כל ההודעות", "confirmDeleteAllMessages": "האם אתם בטוחים שאתם רוצים למחוק את כל ההודעות בתיבת הדואר שלכם? משתמשים אחרים עדיין יראו הודעות ששלחתם אליהם.", "optOutPopover": "לא בקטע של הודעות פרטיות? לחצו כדי לוותר על זה", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "חסימה", "unblock": "ביטול חסימה", "pm-reply": "שליחת תגובה", @@ -207,7 +211,6 @@ "partyOnName": "מסיבה", "partyUpText": "Joined a Party with another person! Have fun battling monsters and supporting each other.", "partyOnText": "Joined a Party with at least four people! Enjoy your increased accountability as you unite with your friends to vanquish your foes!", - "groupIdRequired": "\"groupId\" חייב להיות UUID - זהות משתמש ייחודי - תקף", "groupNotFound": "קבוצה לא נמצאה או שאין לכם גישה.", "groupTypesRequired": "חובה לספק שורת שאילתא \"type\" תקפה.", "questLeaderCannotLeaveGroup": "You cannot leave your Party when you have started a quest. Abort the quest first.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "אינכם יכולים להסיר את עצמכם!", "groupMemberNotFound": "המשתמשים לא נמצאו מבין חברי הקבוצה", "mustBeGroupMember": "חייבים להיות חברים בקבוצה.", - "keepOrRemoveAll": "req.query.keep חייב להיות \"keep-all\" או \"remove-all\"", - "keepOrRemove": "req.query.keep חייב להיות \"keep\" או \"remove\"", "canOnlyInviteEmailUuid": "ניתן להזמין רק באמצעות זהות משתמש ייחודי או אימייל.", "inviteMissingEmail": "חסרה כתובת אימייל בהזמנה.", "inviteMissingUuid": "Missing user id in invite", @@ -315,7 +316,7 @@ "approvalsTitle": "Tasks Awaiting Approval", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "When your group completes tasks that need your approval, they'll appear here! Adjust approval requirement settings under task editing.", - "userIsClamingTask": "`<%= username %> has claimed \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Approval Requested", "refreshApprovals": "Refresh Approvals", "refreshGroupTasks": "Refresh Group Tasks", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Can't delete group tasks that are assigned to you.", "confirmGuildPlanCreation": "Create this group?", "onlyGroupLeaderCanInviteToGroupPlan": "Only the group leader can invite users to a group with a subscription.", - "remainOrLeaveChallenges": "req.query.keep must be either 'remain-in-challenges' or 'leave-challenges'", "paymentDetails": "Payment Details", "aboutToJoinCancelledGroupPlan": "You are about to join a group with a canceled plan. You will NOT receive a free subscription.", "cannotChangeLeaderWithActiveGroupPlan": "You can not change the leader while the group has an active plan.", @@ -366,9 +366,11 @@ "recentActivity": "Recent Activity", "myGuilds": "My Guilds", "guildsDiscovery": "Discover Guilds", + "role": "Role", "guildOrPartyLeader": "Leader", "guildLeader": "Guild Leader", "member": "Member", + "guildSize": "Guild Size", "goldTier": "Gold Tier", "silverTier": "Silver Tier", "bronzeTier": "Bronze Tier", diff --git a/website/common/locales/he/npc.json b/website/common/locales/he/npc.json index 31e16dd6a1..82d16c6932 100644 --- a/website/common/locales/he/npc.json +++ b/website/common/locales/he/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Featured Items!", "hideLocked": "Hide locked", "hidePinned": "Hide pinned", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Experience", "amountGold": "<%= amount %> Gold", "namedHatchingPotion": "<%= type %> Hatching Potion", @@ -74,14 +75,7 @@ "ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!", "ianBrokenText": "ברוכים הבאים לחנות ההרפתקאות... כאן תוכלו למצוא מגילות הרפתקאות כדי להלחם במפלצות עם חבריכם... שימו לב לבדוק את מבחר מגילות ההרפתקאות שיש לנו למכירה פה בצד ימין...", "featuredQuests": "Featured Quests!", - "missingKeyParam": "\"req.params.key\" הוא הכרחי.", - "itemNotFound": "החפץ \"<%= key %>\" לא נמצא.", "cannotBuyItem": "אינכם יכולים לקנות פריט זה.", - "missingTypeKeyEquip": "\"key\" ו \"type\" הם פרמטרים הכרחיים.", - "missingPetFoodFeed": "\"pet\" ו \"food\" הם פרמטרים הכרחיים.", - "invalidPetName": "שם חיית המחמד שסופק אינו תקין", - "missingEggHatchingPotionHatch": "\"egg\" ו-\"hatchingPotion\" הם פרמטרים הכרחיים.", - "invalidTypeEquip": "\"type\" חייב להיות אחת מהאפשרויות: 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "חייב לקנות <%= val %> כדי להגדיר את זה על <%= key %>.", "typeRequired": "Type הוא הכרחי", "positiveAmountRequired": "Positive amount is required", diff --git a/website/common/locales/he/quests.json b/website/common/locales/he/quests.json index 2e0f3df699..20eaff6149 100644 --- a/website/common/locales/he/quests.json +++ b/website/common/locales/he/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "לא נשלחה עדיין הזמנה להרפתקה.", "questInviteNotFound": "לא נמצאה הזמנה להרפתקה.", "guildQuestsNotSupported": "לא ניתן להזמין גילדות להרפתקה.", - "questNotFound": "ההרפתקה ״<%= key %>״ לא נמצאה.", "questNotOwned": "אין ברשותכם את המגילה הזו.", "questNotGoldPurchasable": "ההרפתקה ״<%= key %>״ אינה ניתנת לרכישה באמצעות זהב.", "questLevelTooHigh": "עליכם להיות בדרגה <%= level %> כדי להתחיל את ההרפתקה הזו.", diff --git a/website/common/locales/he/questscontent.json b/website/common/locales/he/questscontent.json index 677c2d7c2f..58c2f13a94 100644 --- a/website/common/locales/he/questscontent.json +++ b/website/common/locales/he/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/he/spells.json b/website/common/locales/he/spells.json index 045da5ce17..ea2bfc7ec1 100644 --- a/website/common/locales/he/spells.json +++ b/website/common/locales/he/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "הפוך חבר ליצור ים!", "spellSpecialSandText": "חול", "spellSpecialSandNotes": "Reverse the spell that made you a sea star.", - "spellNotFound": "היכולת המיוחדת \"<%= spellId %>\" לא נמצאה.", "partyNotFound": "חבורה לא נמצאה", "targetIdUUID": "\"targetId\" חייב להיות מזהה משתמש תקין.", "challengeTasksNoCast": "לא ניתן להשתמש ביכולות מיוחדות על משימות של אתגרים.", diff --git a/website/common/locales/he/subscriber.json b/website/common/locales/he/subscriber.json index 9ea12d3f90..49432aa2df 100644 --- a/website/common/locales/he/subscriber.json +++ b/website/common/locales/he/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "קופון לא תקין.", "couponUsed": "הקופון כבר נוצל.", "couponCodeRequired": "יש להשתמש בקופון.", - "eventRequired": "נדרש למלא \"req.params.event\".", - "countRequired": "נדרש למלא \"req.query.count\".", - "missingPaymentId": "Missing req.query.paymentId", - "missingCustomerId": "Missing req.query.customerId", - "missingPaypalBlock": "Missing req.session.paypalBlock", - "missingSubKey": "Missing req.query.sub", "paypalCanceled": "Your subscription has been canceled", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "receiveMysticHourglass": "Receive a Mystic Hourglass!", diff --git a/website/common/locales/he/tasks.json b/website/common/locales/he/tasks.json index 84167665dd..594fc9fa83 100644 --- a/website/common/locales/he/tasks.json +++ b/website/common/locales/he/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "ציוד מיוחד יופיע כאן בזמן ״אירועים עולמיים״.", "rewardHelp4": "אל תחשושו להכין פרסים מותאמים אישית! ראו כמה דוגמאות כאן.", "clickForHelp": "לחצו לעזרה", - "taskIdRequired": "\"taskId\" חייב להיות UUID - זהות משתמש ייחודי - תקף.", "taskAliasAlreadyUsed": "כינוי זה כבר בשימוש עבור משימה אחרת.", "taskNotFound": "משימה לא נמצאה.", "invalidTaskType": "סוג המטלה חייב להיות אחד מבין \"habit\", \"daily\", \"todo\", \"reward\".", diff --git a/website/common/locales/hu/backgrounds.json b/website/common/locales/hu/backgrounds.json index fb656a0e9b..c852c86abf 100644 --- a/website/common/locales/hu/backgrounds.json +++ b/website/common/locales/hu/backgrounds.json @@ -339,14 +339,14 @@ "backgroundElegantBalconyNotes": "Szemléld a tájat egy elegáns erkélyről.", "backgroundDrivingACoachText": "Hajts egy hintót", "backgroundDrivingACoachNotes": "Élvezd ahogy elhajtasz egy hintóval a virágmező mellett.", - "backgrounds042018": "SET 47: Released April 2018", - "backgroundTulipGardenText": "Tulip Garden", - "backgroundTulipGardenNotes": "Tiptoe through a Tulip Garden.", - "backgroundFlyingOverWildflowerFieldText": "Field of Wildflowers", - "backgroundFlyingOverWildflowerFieldNotes": "Soar above a Field of Wildflowers.", - "backgroundFlyingOverAncientForestText": "Ancient Forest", - "backgroundFlyingOverAncientForestNotes": "Fly over the canopy of an Ancient Forest.", - "backgrounds052018": "SET 48: Released May 2018", + "backgrounds042018": "KÉSZLET 47: Kiadva 2018 áprilisában", + "backgroundTulipGardenText": "Tulipánkert", + "backgroundTulipGardenNotes": "Lopakodj keresztül egy tulipánkerten.", + "backgroundFlyingOverWildflowerFieldText": "Vadvirágokkal borított rét", + "backgroundFlyingOverWildflowerFieldNotes": "Szárnyalj egy vadvirágokkal borított rét fölött.", + "backgroundFlyingOverAncientForestText": "Ősi erdő", + "backgroundFlyingOverAncientForestNotes": "Repülj át egy ősi erdő felett.", + "backgrounds052018": "KÉSZLET 48: Kiadva 2018 májusában", "backgroundTerracedRiceFieldText": "Terraced Rice Field", "backgroundTerracedRiceFieldNotes": "Enjoy a Terraced Rice Field in the growing season.", "backgroundFantasticalShoeStoreText": "Fantastical Shoe Store", diff --git a/website/common/locales/hu/challenge.json b/website/common/locales/hu/challenge.json index ae6124a882..b12b88bf5f 100644 --- a/website/common/locales/hu/challenge.json +++ b/website/common/locales/hu/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "A következő kihívásokat nyerte meg", "challenges": "Kihívások", "challengesLink": "Kihívások", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Még nincsenek kihívások, kattints ide", "toCreate": "hogy létrehozz egyet.", "selectWinner": "Válassz győztest és zárd le a kihívást:", @@ -23,7 +25,9 @@ "filter": "Szűrő", "groups": "Csoportok", "noNone": "Egyik sem", + "category": "Category", "membership": "Tagság", + "ownership": "Ownership", "participating": "Részt vesz", "notParticipating": "Nem vesz részt", "either": "Bármelyik", diff --git a/website/common/locales/hu/character.json b/website/common/locales/hu/character.json index 691cf5de4b..2f234cef78 100644 --- a/website/common/locales/hu/character.json +++ b/website/common/locales/hu/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Tulajdonság pont elosztás mutatása", "hideQuickAllocation": "Tulajdonság pont elosztás elrejtése", "quickAllocationLevelPopover": "Minden szintlépés ad egy pontot, amit elkölthetsz egy általad választott tulajdonságra. Ezt teheted manuálisan, vagy a játékra is bízhatod a döntést valamelyik automatikus kiosztás opciót választva a Felhasználó ikon -> Statisztika menüpontban.", - "invalidAttribute": "\"<%= attr %>\" nem valódi tulajdonság.", "notEnoughAttrPoints": "Nincs elég tulajdonság pontod.", "style": "Stílus", "facialhair": "Arc", @@ -219,6 +218,5 @@ "mainHand": "Jobbkezes fegyver", "offHand": "Balkezes fegyver", "pointsAvailable": "Kiosztható pontok", - "pts": "pont", - "statsObjectRequired": "Statisztika frissítése szükséges" + "pts": "pont" } \ No newline at end of file diff --git a/website/common/locales/hu/contrib.json b/website/common/locales/hu/contrib.json index f2ce004d3b..b3bf52472a 100644 --- a/website/common/locales/hu/contrib.json +++ b/website/common/locales/hu/contrib.json @@ -49,7 +49,6 @@ "UUID": "Felhasználói azonosító", "loadUser": "Felhasználó betöltése", "noAdminAccess": "Nincs adminisztrátori hozzáférésed.", - "pageMustBeNumber": "req.query.page számot kell tartalmaznia", "userNotFound": "Felhasználó nem található.", "invalidUUID": "Érvényes UUID szükséges", "title": "Rang", diff --git a/website/common/locales/hu/groups.json b/website/common/locales/hu/groups.json index 91e9e44a5c..e78828c962 100644 --- a/website/common/locales/hu/groups.json +++ b/website/common/locales/hu/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Opcionális üzenet", "yesRemove": "Igen, távolítsd el őket", "foreverAlone": "Nem lájkolhatod a saját üzenetedet. Ne legyél ilyen.", - "sortDateJoinedAsc": "Legkorábbi csatlakozás dátuma", - "sortDateJoinedDesc": "Legkésőbbi csatlakozás dátuma", - "sortLoginAsc": "Legújabb bejelentkezés", - "sortLoginDesc": "Legrégebbi bejelentkezés", - "sortLevelAsc": "Legalacsonyabb játékos szint", - "sortLevelDesc": "Legmagasabb játékos szint", - "sortNameAsc": "Név (A - Z)", - "sortNameDesc": "Név (Z - A)", - "sortTierAsc": "Legalacsonyabb szint", - "sortTierDesc": "Legmagasabb szint", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Létrehozol egy céhet 4 drágakőért?", "leaveGroupCha": "Csoport kihívások elhagyása és...", "confirm": "Megerősítés", @@ -131,6 +131,10 @@ "clearAll": "Összes üzenet törlése", "confirmDeleteAllMessages": "Biztos hogy ki akarod törölni az összes üzenetedet? A többi felhasználó továbbra is látni fogja az üzeneteket, amiket küldtél.", "optOutPopover": "Nem szereted a privát üzeneteket? Kattints, hogy teljesen kiszállj belőle", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Letiltás", "unblock": "Letiltás feloldása", "pm-reply": "Válasz küldése", @@ -207,7 +211,6 @@ "partyOnName": "Party On", "partyUpText": "Caatlakoztál egy csapathoz aminek már van egy tagja! Jó szórakozást a szörnyekkel való harchoz valamint egymás támogatásához.", "partyOnText": "Csatlakoztál egy csapathoz aminek már van legalább négy tagja! Élvezd a fokozott felelősséget, miközben együtt harcoltok az ellenségeitekkel szemben!", - "groupIdRequired": "\"groupId\" must be a valid UUID", "groupNotFound": "Csapat nem elérhető vagy nincs hozzáféhetőséged.", "groupTypesRequired": "Valós query string adatot kell megadnod.", "questLeaderCannotLeaveGroup": "Nem léphetsz ki a csapatodból ha már elkezdtél egy küldetést. Először szakítsd meg a küldetést. ", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Nem távolíthatod el magad a csoportból!", "groupMemberNotFound": "Felhasználó nem található a csoport tagjai között", "mustBeGroupMember": "A csoport tagjai közé kell tartoznod.", - "keepOrRemoveAll": "A req.query.keep-nek, vagy \"keep-all\" vagy \"remove-all\"-nak kell lennie.", - "keepOrRemove": "A req.query.keep-nek, vagy \"keep\" vagy \"remove\"-nak kell lennie.", "canOnlyInviteEmailUuid": "Csak felhasználó azonosítón vagy email-en keresztül tudsz meghívást küldeni.", "inviteMissingEmail": "Hiányzó email cím a meghívóban.", "inviteMissingUuid": "Hiányzó felhasználói azonosító a meghívóban.", @@ -315,7 +316,7 @@ "approvalsTitle": "Tasks Awaiting Approval", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "When your group completes tasks that need your approval, they'll appear here! Adjust approval requirement settings under task editing.", - "userIsClamingTask": "`<%= username %> has claimed \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Jóváhagyás kérése", "refreshApprovals": "Refresh Approvals", "refreshGroupTasks": "Refresh Group Tasks", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Can't delete group tasks that are assigned to you.", "confirmGuildPlanCreation": "Create this group?", "onlyGroupLeaderCanInviteToGroupPlan": "Only the group leader can invite users to a group with a subscription.", - "remainOrLeaveChallenges": "req.query.keep must be either 'remain-in-challenges' or 'leave-challenges'", "paymentDetails": "Payment Details", "aboutToJoinCancelledGroupPlan": "You are about to join a group with a canceled plan. You will NOT receive a free subscription.", "cannotChangeLeaderWithActiveGroupPlan": "You can not change the leader while the group has an active plan.", @@ -366,9 +366,11 @@ "recentActivity": "Recent Activity", "myGuilds": "My Guilds", "guildsDiscovery": "Discover Guilds", + "role": "Role", "guildOrPartyLeader": "Leader", "guildLeader": "Guild Leader", "member": "Member", + "guildSize": "Guild Size", "goldTier": "Gold Tier", "silverTier": "Silver Tier", "bronzeTier": "Bronze Tier", diff --git a/website/common/locales/hu/npc.json b/website/common/locales/hu/npc.json index 072b4558c1..4464d37638 100644 --- a/website/common/locales/hu/npc.json +++ b/website/common/locales/hu/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Featured Items!", "hideLocked": "Hide locked", "hidePinned": "Hide pinned", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Experience", "amountGold": "<%= amount %> Gold", "namedHatchingPotion": "<%= type %> Hatching Potion", @@ -74,14 +75,7 @@ "ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!", "ianBrokenText": "Üdv a Küldetés boltban... Itt használhatod a küldetés tekercseid, hogy a barátaiddal szörnyek ellen harcolhassatok... Ne felejtsd el megnézni eladó küldetés tekercseink széles választékát a jobb oldalon...", "featuredQuests": "Featured Quests!", - "missingKeyParam": "\"req.params.key\" szükséges.", - "itemNotFound": "\"<%= key %>\" nem található.", "cannotBuyItem": "Nem tudod megvenni ezt a tárgyat.", - "missingTypeKeyEquip": "\"Azonosító\" és \"típus\" kötelező paraméter.", - "missingPetFoodFeed": "\"háziállat\" és \"étel\" kötelező paraméter.", - "invalidPetName": "Hibás nevet adtál a házállatodnak.", - "missingEggHatchingPotionHatch": "\"tojás\" és \"KeltetőItal\" kötelező paraméter.", - "invalidTypeEquip": "A \"Típus\"-nak \"felszerelés\", \"háziállat\", \"hátas\" vagy \"ruha\" állítható be.", "mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.", "typeRequired": "Típus szükséges", "positiveAmountRequired": "Positive amount is required", diff --git a/website/common/locales/hu/quests.json b/website/common/locales/hu/quests.json index 4d4a8e84aa..0a38b7aa2c 100644 --- a/website/common/locales/hu/quests.json +++ b/website/common/locales/hu/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Nem lett még Küldetés meghívó kiküldve.", "questInviteNotFound": "Nincs Küldetés meghívód.", "guildQuestsNotSupported": "Céhet nem lehet meghívni küldetésre.", - "questNotFound": "A \"<%= key %>\" Küldetés nem található.", "questNotOwned": "Nem rendelkezel ezzel a Küldetés tekerccsel.", "questNotGoldPurchasable": "A \"<%= key %>\" Küldetést nem lehet megvenni aranyért.", "questLevelTooHigh": "A <%= level %> Szinten kell lenned, hogy elkezdhesd ezt a Küldetést.", diff --git a/website/common/locales/hu/questscontent.json b/website/common/locales/hu/questscontent.json index 1bc8cdaf60..beb5d4458b 100644 --- a/website/common/locales/hu/questscontent.json +++ b/website/common/locales/hu/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/hu/spells.json b/website/common/locales/hu/spells.json index 3390a2a956..dd4015f4ea 100644 --- a/website/common/locales/hu/spells.json +++ b/website/common/locales/hu/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Változtass át egy barátot tengeri lénnyé!", "spellSpecialSandText": "Homok", "spellSpecialSandNotes": "Reverse the spell that made you a sea star.", - "spellNotFound": "Varázslat \"<%= spellId %>\" nem található.", "partyNotFound": "A Csapat nem található", "targetIdUUID": "\"targetId\" érvényes felhasználói azonosító kell, hogy legyen.", "challengeTasksNoCast": "Kihívásokhoz tartozó feladatokon nem használhatsz varázslatokat.", diff --git a/website/common/locales/hu/subscriber.json b/website/common/locales/hu/subscriber.json index 0407ba110d..a32624030f 100644 --- a/website/common/locales/hu/subscriber.json +++ b/website/common/locales/hu/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Érvénytelen kuponkód", "couponUsed": "A kupon kódot már használták.", "couponCodeRequired": "A kupon kód szükséges.", - "eventRequired": "\"req.params.event\" szükséged.", - "countRequired": "\"req.query.count\" szükséges", - "missingPaymentId": "Hiányzó req.query.paymentId", - "missingCustomerId": "Hiányzó req.query.customerId", - "missingPaypalBlock": "Hiányzó req.session.paypalBlock", - "missingSubKey": "Hiányzó req.query.sub", "paypalCanceled": "Az előfizetésed visszamondták. ", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "receiveMysticHourglass": "Receive a Mystic Hourglass!", diff --git a/website/common/locales/hu/tasks.json b/website/common/locales/hu/tasks.json index a3ff07c14e..56c0e6d18d 100644 --- a/website/common/locales/hu/tasks.json +++ b/website/common/locales/hu/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "A különleges felszerelések itt jelennek meg a nagy eseményekkor.", "rewardHelp4": "Ne légy rest saját jutalmakat beállítani! Nézz meg néhány példát jutalmakra.", "clickForHelp": "Kattints ide segítségért", - "taskIdRequired": "\"taskId\" valódi UUID-nek kell lennie.", "taskAliasAlreadyUsed": "Ezt a feladatcímkét már használod egy másik feladathoz.", "taskNotFound": "A feladat nem található.", "invalidTaskType": "A feladat típusa \"Szokás\", \"Napi\" \"Cél\" vagy \"Jutalom\" lehet.", diff --git a/website/common/locales/id/challenge.json b/website/common/locales/id/challenge.json index f1d18f04c1..3175e40f6d 100644 --- a/website/common/locales/id/challenge.json +++ b/website/common/locales/id/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Adalah pemenang dari tantangan berikut", "challenges": "Tantangan", "challengesLink": "Tantangan", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Belum ada tantangan, kunjungi", "toCreate": "untuk membuat tantangan baru.", "selectWinner": "Pilih pemenang dan tutup tantangan:", @@ -23,7 +25,9 @@ "filter": "Penyaring", "groups": "Kelompok", "noNone": "Tidak satupun", + "category": "Category", "membership": "Keanggotaan", + "ownership": "Ownership", "participating": "Berpartisipasi", "notParticipating": "Tidak Berpartisipasi", "either": "Yang mana saja", diff --git a/website/common/locales/id/character.json b/website/common/locales/id/character.json index 8726cce781..8946d72c6c 100644 --- a/website/common/locales/id/character.json +++ b/website/common/locales/id/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Tampilkan Alokasi Atribut", "hideQuickAllocation": "Sembunyikan Alokasi Atribut", "quickAllocationLevelPopover": "Kamu akan mendapat satu Poin setiap level untuk dialokasikan kepada satu Atribut pilihanmu. Kamu dapat melakukan ini sendiri, atau biarkan permainan ini memutuskannya untukmu dengan menggunakan salah satu pilihan dari Alokasi Otomatis yang dapat ditemukan di Ikon Pengguna > Atribut.", - "invalidAttribute": "\"<%= attr %>\" bukan Atribut yang valid.", "notEnoughAttrPoints": "Kamu tidak memiliki cukup Poin Atribut.", "style": "Gaya", "facialhair": "Wajah", @@ -219,6 +218,5 @@ "mainHand": "Tangan Utama", "offHand": "Tangan Lain", "pointsAvailable": "Poin Tersedia", - "pts": "poin", - "statsObjectRequired": "Pembaruan Atribut diperlukan" + "pts": "poin" } \ No newline at end of file diff --git a/website/common/locales/id/contrib.json b/website/common/locales/id/contrib.json index 57211dbf84..d4d323e2ce 100644 --- a/website/common/locales/id/contrib.json +++ b/website/common/locales/id/contrib.json @@ -49,7 +49,6 @@ "UUID": "ID Pengguna", "loadUser": "Muat Pengguna", "noAdminAccess": "Anda tidak memiliki akses admin.", - "pageMustBeNumber": "req.query.page harus berupa angka", "userNotFound": "Pengguna tidak ditemukan.", "invalidUUID": "UUID harus valid", "title": "Titel", diff --git a/website/common/locales/id/groups.json b/website/common/locales/id/groups.json index 77b76cde10..05cf01702c 100644 --- a/website/common/locales/id/groups.json +++ b/website/common/locales/id/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Pesan opsional", "yesRemove": "Ya, hapus mereka", "foreverAlone": "Tidak bisa menyukai pesanmu sendiri. Jangan seperti itu.", - "sortDateJoinedAsc": "Tanggal Paling Awal Bergabung", - "sortDateJoinedDesc": "Tanggal Paling Akhir Bergabung", - "sortLoginAsc": "Login Terawal", - "sortLoginDesc": "Login Terakhir", - "sortLevelAsc": "Level Paling Terendah", - "sortLevelDesc": "Level Tertinggi", - "sortNameAsc": "Nama (A - Z)", - "sortNameDesc": "Nama (Z - A)", - "sortTierAsc": "Tingkat Terendah", - "sortTierDesc": "Tingkat Tertinggi", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Buat Guild seharga 4 Permata?", "leaveGroupCha": "Tinggalkan tantangan Guild dan...", "confirm": "Konfirmasi", @@ -131,6 +131,10 @@ "clearAll": "Hapus Semua Pesan", "confirmDeleteAllMessages": "Apakah kamu yakin mau menghapus semua pesan dalam kotak masuk? Pengguna lain masih bisa melihat pesan yang telah kamu kirim ke mereka.", "optOutPopover": "Tidak menyukai pesan pribadi? Matikan fitur ini", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Blokir", "unblock": "Hapus Blokir", "pm-reply": "Kirimkan balasan", @@ -207,7 +211,6 @@ "partyOnName": "Terus Berpesta", "partyUpText": "Telah bergabung dalam Party dengan orang lain! Bersenang-senanglah melawan monster dan saling mendukung satu sama lain.", "partyOnText": "Telah bergabung dalam Party dengan paling tidak empat anggota! Nikmati peningkatan rasa tanggung jawab seiring persatuanmu dengan teman-teman dalam membasmi musuh-musuh kalian!", - "groupIdRequired": "\"groupId\" harus merupakan UUID yang valid", "groupNotFound": "Grup tidak ditemukan atau kamu tidak memiliki akses.", "groupTypesRequired": "Anda harus menyediakan query string \"type\" yang valid.", "questLeaderCannotLeaveGroup": "Kamu tidak dapat meninggalkan Party ketika kamu telah memulai misi. Batalkan misi terlebih dahulu.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Kamu tidak dapat mengeluarkan dirimu sendiri!", "groupMemberNotFound": "Pengguna tidak ditemukan di antara anggota grup", "mustBeGroupMember": "Harus seorang anggota grup.", - "keepOrRemoveAll": "req.query.keep harus merupakan salah satu dari \"keep-all\" atau \"remove-all\"", - "keepOrRemove": "req.query.keep harus merupakan salah satu dari \"keep\" atau \"remove\"", "canOnlyInviteEmailUuid": "Hanya dapat mengundang menggunakan uuids atau email.", "inviteMissingEmail": "Alamat email belum ditulis.", "inviteMissingUuid": "User id belum ditulis", @@ -315,7 +316,7 @@ "approvalsTitle": "Tugas-Tugas yang Menunggu Persetujuan", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "Saat grupmu menyelesaikan tugas yang butuh persetujuanmu, mereka akan muncul di sini! Atur syarat persetujuan saat mengedit tugas.", - "userIsClamingTask": "`<%= username %> telah mengklaim \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Meminta Persetujuan", "refreshApprovals": "Muat ulang Persetujuan", "refreshGroupTasks": "Muat ulang Tugas Grup", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Tidak bisa menghapus tugas grup yang diberikan ke kamu.", "confirmGuildPlanCreation": "Buat grup ini?", "onlyGroupLeaderCanInviteToGroupPlan": "Hanya ketua grup yang bisa mengundang pengguna ke dalam grup yang berlangganan.", - "remainOrLeaveChallenges": "req.query.keep harus 'remain-in-challenges' atau 'leave-challenges'", "paymentDetails": "Detail Pembayaran", "aboutToJoinCancelledGroupPlan": "Kamu akan bergabung ke grup dengan rencana yang dibatalkan. Kamu TIDAK akan menerima gratis berlangganan.", "cannotChangeLeaderWithActiveGroupPlan": "Kamu tidak bisa mengganti ketua saat grup memiliki rencana yang sedang aktif.", @@ -366,9 +366,11 @@ "recentActivity": "Aktivitas Terkini", "myGuilds": "Guild-ku", "guildsDiscovery": "Temukan Guild", + "role": "Role", "guildOrPartyLeader": "Pemimpin", "guildLeader": "Pemimpin Guild", "member": "Anggota", + "guildSize": "Guild Size", "goldTier": "Pangkat Emas", "silverTier": "Pangkat Perak", "bronzeTier": "Pangkat Perunggu", diff --git a/website/common/locales/id/npc.json b/website/common/locales/id/npc.json index 8947ea378c..5e18a16667 100644 --- a/website/common/locales/id/npc.json +++ b/website/common/locales/id/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Barang Sorotan!", "hideLocked": "Sembunyikan yang terkunci", "hidePinned": "Sembunyikan yang sudah disematkan", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Pengalaman", "amountGold": "<%= amount %> Koin Emas", "namedHatchingPotion": "Ramuan Penetas <%= type %>", @@ -74,14 +75,7 @@ "ianTextMobile": "Bolehkah saya membuat anda tertarik dengan gulungan misi? Aktifkan untuk melawan monster bersama Party-mu!", "ianBrokenText": "Selamat datang di Toko Misi... Di sini kamu bisa menggunakan Gulungan Misi untuk melawan monster dengan teman-temanmu... Pasikan untuk mengecek koleksi Gulungan Misi kami yang dijual di sebelah kanan...", "featuredQuests": "Misi Sorotan!", - "missingKeyParam": "\"req.params.key\" dibutuhkan.", - "itemNotFound": "Item \"<%= key %>\" tidak ditemukan.", "cannotBuyItem": "Kamu tidak dapat membeli item ini.", - "missingTypeKeyEquip": "\"key\" dan \"type\" adalah parameter yang dibutuhkan.", - "missingPetFoodFeed": "\"pet\" dan \"food\" adalah parameter yang dibutuhkan.", - "invalidPetName": "Nama peliharaan yang diberikan tidak benar.", - "missingEggHatchingPotionHatch": "\"egg\" dan \"hatchingPotion\" adalah parameter yang dibutuhkan.", - "invalidTypeEquip": "\"type\" harus merupakan salah satu dari 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Harus membeli <%= val %> untuk memberikan kepada <%= key %>.", "typeRequired": "Tipe dibutuhkan", "positiveAmountRequired": "Jumlah positif dibutuhkan", diff --git a/website/common/locales/id/quests.json b/website/common/locales/id/quests.json index ea211d369b..c2f7dacd85 100644 --- a/website/common/locales/id/quests.json +++ b/website/common/locales/id/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Tidak ada undangan misi yang dikirimkan.", "questInviteNotFound": "Tidak ada undangan misi yang ditemukan.", "guildQuestsNotSupported": "Guild tidak dapat diundang dalam misi.", - "questNotFound": "Misi \"<%= key %>\" tidak ditemukan.", "questNotOwned": "Kamu tidak memiliki gulungan misi tersebut.", "questNotGoldPurchasable": "Misi \"<%= key %>\" tidak dapat dibeli dengan Emas.", "questLevelTooHigh": "Kamu harus berada di level <%= level %> untuk memulai misi ini.", diff --git a/website/common/locales/id/questscontent.json b/website/common/locales/id/questscontent.json index 63bab7758f..7c59713120 100644 --- a/website/common/locales/id/questscontent.json +++ b/website/common/locales/id/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/id/spells.json b/website/common/locales/id/spells.json index df0e342f10..a74fbc2e3e 100644 --- a/website/common/locales/id/spells.json +++ b/website/common/locales/id/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Ubah teman menjadi makhluk laut!", "spellSpecialSandText": "Pasir", "spellSpecialSandNotes": "Menghilangkan efek mantra yang mengubahmu menjadi bintang laut.", - "spellNotFound": "Kemampuan \"<%= spellId %>\" tidak ditemukan.", "partyNotFound": "Party tidak ditemukan", "targetIdUUID": "\"targetId\" harsu merupakan ID Pengguna valid.", "challengeTasksNoCast": "Menggunakan kemampuan pada tantangan tidak diperbolehkan.", diff --git a/website/common/locales/id/subscriber.json b/website/common/locales/id/subscriber.json index 9f3c6255e5..e6f4ee3489 100644 --- a/website/common/locales/id/subscriber.json +++ b/website/common/locales/id/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Kode kupon tidak valid.", "couponUsed": "Kode kupon telah digunakan.", "couponCodeRequired": "Kode kupon dibutuhkan.", - "eventRequired": "\"req.params.event\" dibutuhkan.", - "countRequired": "\"req.query.count\" dibutuhkan.", - "missingPaymentId": "req.query.paymentId tidak dapat ditemukan", - "missingCustomerId": "req.query.customerId tidak dapat ditemukan", - "missingPaypalBlock": "req.session.paypalBlock tidak dapat ditemukan", - "missingSubKey": "req.query.sub tidak dapat ditemukan", "paypalCanceled": "Langgananmu telah dibatalkan", "earnGemsMonthly": "Dapatkan hingga **<%= cap %> Permata** per bulan", "receiveMysticHourglass": "Dapatkan sebuah Jam Pasir Mistis!", diff --git a/website/common/locales/id/tasks.json b/website/common/locales/id/tasks.json index cc3e55b28b..9b75d83760 100644 --- a/website/common/locales/id/tasks.json +++ b/website/common/locales/id/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "Perlengkapan Khusus akan muncul di sini selama Acara Sedunia.", "rewardHelp4": "Jangan takut untuk menentukan Hadiah Pribadi! Cek beberapa contoh disini.", "clickForHelp": "Klik untuk bantuan", - "taskIdRequired": "\"taskId\" harus merupakan UUID yang valid.", "taskAliasAlreadyUsed": "Nama alias tugas telah digunakan pada tugas lain.", "taskNotFound": "Tugas tidak ditemukan.", "invalidTaskType": "Tipe tugas harus merupakan salah satu dari \"habit\", \"daily\", \"todo\", \"reward\".", diff --git a/website/common/locales/it/challenge.json b/website/common/locales/it/challenge.json index cbd061b95e..9a62a8e2d4 100644 --- a/website/common/locales/it/challenge.json +++ b/website/common/locales/it/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Ha vinto le seguenti sfide:", "challenges": "Sfide", "challengesLink": "Sfide", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Ancora nessuna sfida, visita", "toCreate": "per crearne una.", "selectWinner": "Scegli un vincitore e chiudi la sfida:", @@ -23,7 +25,9 @@ "filter": "Filtro", "groups": "Gruppi", "noNone": "Nessuno", + "category": "Category", "membership": "Partecipazione", + "ownership": "Ownership", "participating": "Sto partecipando", "notParticipating": "Non sto partecipando", "either": "Entrambi", diff --git a/website/common/locales/it/character.json b/website/common/locales/it/character.json index 1e9588fe2b..f8ffdcc85d 100644 --- a/website/common/locales/it/character.json +++ b/website/common/locales/it/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Mostra allocazione delle Statistiche", "hideQuickAllocation": "Nascondi allocazione delle Statistiche", "quickAllocationLevelPopover": "Ogni volta che sali di livello ottieni un punto da assegnare ad una Statistica a tua scelta. Puoi farlo manualmente, o lasciare che se ne occupi il gioco selezionando una delle opzioni di allocazione automatica che trovi in (icona utente) > Statistiche.", - "invalidAttribute": "\"<%= attr %>\" non è una Statistica valida.", "notEnoughAttrPoints": "Non hai abbastanza Punti Statistica.", "style": "Stile", "facialhair": "Barba e baffi", @@ -219,6 +218,5 @@ "mainHand": "Mano principale", "offHand": "Mano secondaria", "pointsAvailable": "Punti disponibili", - "pts": "punti", - "statsObjectRequired": "È necessario un aggiornamento delle statistiche" + "pts": "punti" } \ No newline at end of file diff --git a/website/common/locales/it/contrib.json b/website/common/locales/it/contrib.json index 247ddd2906..9eb5dcc94c 100644 --- a/website/common/locales/it/contrib.json +++ b/website/common/locales/it/contrib.json @@ -49,7 +49,6 @@ "UUID": "ID Utente", "loadUser": "Carica utente", "noAdminAccess": "Non puoi accedere come amministratore.", - "pageMustBeNumber": "req.query.page deve essere un numero", "userNotFound": "Utente non trovato.", "invalidUUID": "UUID deve essere valido", "title": "Titolo", diff --git a/website/common/locales/it/groups.json b/website/common/locales/it/groups.json index c9de931b86..19a2710d93 100644 --- a/website/common/locales/it/groups.json +++ b/website/common/locales/it/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Messaggio opzionale", "yesRemove": "Sì, rimuovili", "foreverAlone": "Non puoi mettere 'mi piace' ai tuoi stessi messaggi. Non essere quel tipo di persona.", - "sortDateJoinedAsc": "Iscrizione meno recente", - "sortDateJoinedDesc": "Iscrizione più recente", - "sortLoginAsc": "Accesso meno recente", - "sortLoginDesc": "Accesso più recente", - "sortLevelAsc": "Livello più basso", - "sortLevelDesc": "Livello più alto", - "sortNameAsc": "Nome (A - Z)", - "sortNameDesc": "Nome (Z - A)", - "sortTierAsc": "Grado più basso", - "sortTierDesc": "Grado più alto", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Creare una Gilda per 4 Gemme?", "leaveGroupCha": "Abbandona la sfida e...", "confirm": "Conferma", @@ -131,6 +131,10 @@ "clearAll": "Cancella tutti i messaggi", "confirmDeleteAllMessages": "Vuoi davvero cancellare tutti i messaggi ricevuti? Gli altri utenti potranno ancora vedere i messaggi che gli hai inviato.", "optOutPopover": "Non ti piacciono i messaggi privati? Clicca per disattivare questa funzione.", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Blocca", "unblock": "Sblocca", "pm-reply": "Rispondi", @@ -207,7 +211,6 @@ "partyOnName": "Party On", "partyUpText": "Ti sei unito ad una Squadra con un'altra persona! Divertitevi a combattere mostri e a sostenervi a vicenda.", "partyOnText": "Ti sei unito ad una Squadra con almeno quattro persone! Goditi la tua maggiore responsabilità mentre ti unisci ai tuoi compagni per sconfiggere i vostri nemici!", - "groupIdRequired": "\"groupId\" deve essere un UUID valido.", "groupNotFound": "Gruppo sconosciuto, oppure non hai i permessi di accesso.", "groupTypesRequired": "Devi fornire una richiesta \"type\" valida.", "questLeaderCannotLeaveGroup": "Non puoi lasciare la tua Squadra quando hai fatto partire una missione. Devi prima interrompere la missione.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Non puoi rimuovere te stesso!", "groupMemberNotFound": "Utente non trovato tra i membri del gruppo.", "mustBeGroupMember": "Deve essere membro del gruppo.", - "keepOrRemoveAll": "req.query.keep deve essere \"keep-all\" oppure \"remove-all\"", - "keepOrRemove": "req.query.keep deve essere \"keep\" oppure \"remove\"", "canOnlyInviteEmailUuid": "È possibile invitare solo con uuid o e-mail.", "inviteMissingEmail": "Indirizzo e-mail mancante nell'invito.", "inviteMissingUuid": "ID utente mancante nell'invito.", @@ -315,7 +316,7 @@ "approvalsTitle": "Attività in attesa di approvazione", "upgradeTitle": "Effettua l'upgrade", "blankApprovalsDescription": "Quando il tuo gruppo completa delle attività che richiedono la tua approvazione, appariranno qui! Puoi regolare i requisiti di approvazione durante la modifica delle attività.", - "userIsClamingTask": "`<%= username %> ha richiesto \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Approvazione richiesta", "refreshApprovals": "Aggiorna approvazioni", "refreshGroupTasks": "Ricarica attività del gruppo", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Non puoi eliminare le attività di gruppo assegnate a te.", "confirmGuildPlanCreation": "Creare questo gruppo?", "onlyGroupLeaderCanInviteToGroupPlan": "Solo il leader del gruppo può inviatare utenti in un gruppo con un abbonamento.", - "remainOrLeaveChallenges": "req.query.keep deve essere 'remain-in-challenges' oppure 'leave-challenges'", "paymentDetails": "Dettagli di pagamento", "aboutToJoinCancelledGroupPlan": "Stai per unirti ad un gruppo con un piano per gruppi disdetto. NON riceverai un abbonamento gratuito.", "cannotChangeLeaderWithActiveGroupPlan": "Non puoi cambiare il leader quando il gruppo ha un piano attivo.", @@ -366,9 +366,11 @@ "recentActivity": "Attività recenti", "myGuilds": "Le mie Gilde", "guildsDiscovery": "Esplora Gilde", + "role": "Role", "guildOrPartyLeader": "Leader", "guildLeader": "Leader della Gilda", "member": "Membro", + "guildSize": "Guild Size", "goldTier": "Rango oro", "silverTier": "Rango argento", "bronzeTier": "Rango bronzo", diff --git a/website/common/locales/it/npc.json b/website/common/locales/it/npc.json index 4e5c4eb85a..e0b18fd503 100644 --- a/website/common/locales/it/npc.json +++ b/website/common/locales/it/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Oggetti in vetrina!", "hideLocked": "Nascondi bloccati", "hidePinned": "Nascondi Preferiti", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Esperienza", "amountGold": "<%= amount %> Oro", "namedHatchingPotion": "Pozione di schiusura <%= type %>", @@ -74,14 +75,7 @@ "ianTextMobile": "Posso illustrarti qualche pergamena? Attivane una per combattere dei mostri con la tua Squadra!", "ianBrokenText": "Benvenuto nel Negozio delle Missioni... Qui puoi utilizzare le Pergamene delle missioni per combattere i mostri con i tuoi amici... Assicurati di controllare la nostra raffinata scelta di Pergamene delle missioni per l'acquisto a destra...", "featuredQuests": "Missioni in vetrina!", - "missingKeyParam": "\"req.params.key\" è richiesto.", - "itemNotFound": "Oggetto \"<%= key %>\" non trovato.", "cannotBuyItem": "Non puoi comprare questo oggetto.", - "missingTypeKeyEquip": "\"key\" e \"type\" sono parametri richiesti.", - "missingPetFoodFeed": "\"pet\" e \"food\" sono parametri richiesti.", - "invalidPetName": "Nome dell'animale non valido", - "missingEggHatchingPotionHatch": "\"egg\" e \"hatchingPotion\" sono parametri richiesti.", - "invalidTypeEquip": "\"type\" deve essere uno tra 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Devi acquistare <%= val %> per impostare <%= key %>.", "typeRequired": "È richiesto il tipo", "positiveAmountRequired": "È richiesto un ammontare positivo", diff --git a/website/common/locales/it/quests.json b/website/common/locales/it/quests.json index 7e46f71ead..aa2c48c79c 100644 --- a/website/common/locales/it/quests.json +++ b/website/common/locales/it/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Non è stato ancora mandato alcun invito ad una missione.", "questInviteNotFound": "Nessun invito ad una missione trovato.", "guildQuestsNotSupported": "Le Gilde non possono essere invitate a partecipare ad una missione.", - "questNotFound": "Missione \"<%= key %>\" non trovata.", "questNotOwned": "Non possiedi questa pergamena.", "questNotGoldPurchasable": "La Missione \"<%= key %>\" non può essere comprata con Oro.", "questLevelTooHigh": "Devi essere almeno al livello <%= level %> per iniziare questa missione.", diff --git a/website/common/locales/it/questscontent.json b/website/common/locales/it/questscontent.json index d180f3f785..8a373b7186 100644 --- a/website/common/locales/it/questscontent.json +++ b/website/common/locales/it/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/it/spells.json b/website/common/locales/it/spells.json index da4e9d6228..cb781261db 100644 --- a/website/common/locales/it/spells.json +++ b/website/common/locales/it/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Trasforma un amico in una creatura del mare!", "spellSpecialSandText": "Sabbia", "spellSpecialSandNotes": "Annulla la magia che ti ha trasformato in una stella marina.", - "spellNotFound": "Abilità \"<%= spellId %>\" non trovata.", "partyNotFound": "Squadra non trovata.", "targetIdUUID": "\"targetId\" deve essere un ID Utente valido.", "challengeTasksNoCast": "Non è possibile usare abilità sulle attività delle sfide.", diff --git a/website/common/locales/it/subscriber.json b/website/common/locales/it/subscriber.json index aed735441a..6b9343a25b 100644 --- a/website/common/locales/it/subscriber.json +++ b/website/common/locales/it/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Codice coupon non valido.", "couponUsed": "Codice coupon già utilizzato.", "couponCodeRequired": "Il codice coupon è richiesto.", - "eventRequired": "\"req.params.event\" è richiesto.", - "countRequired": "\"req.query.count\" è richiesto.", - "missingPaymentId": "Manca req.query.paymentId", - "missingCustomerId": "Manca req.query.customerId", - "missingPaypalBlock": "Manca req.session.paypalBlock", - "missingSubKey": "Manca req.query.sub", "paypalCanceled": "Il tuo abbonameno è stato disdetto", "earnGemsMonthly": "Ottieni fino a **<%= cap %>gemme** al mese", "receiveMysticHourglass": "Ricevi una Clessidra Mistica!", diff --git a/website/common/locales/it/tasks.json b/website/common/locales/it/tasks.json index 99a1383549..c20e8e36a4 100644 --- a/website/common/locales/it/tasks.json +++ b/website/common/locales/it/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "Gli equipaggiamenti speciali compariranno qui durante gli Eventi Globali.", "rewardHelp4": "Non aver paura di creare le tue ricompense! Guarda qualche esempio qui.", "clickForHelp": "Fai click per suggerimenti", - "taskIdRequired": "\"taskId\" deve essere un UUID valido.", "taskAliasAlreadyUsed": "Alias Attività già usato su un'altra attività.", "taskNotFound": "Attività non trovata.", "invalidTaskType": "Il tipo di attività può essere solo uno tra \"Abitudine\", \"Daily\", \"Cosa Da Fare\", \"Ricompensa\".", diff --git a/website/common/locales/ja/backgrounds.json b/website/common/locales/ja/backgrounds.json index 8f78db769f..07c839abfa 100644 --- a/website/common/locales/ja/backgrounds.json +++ b/website/common/locales/ja/backgrounds.json @@ -346,11 +346,11 @@ "backgroundFlyingOverWildflowerFieldNotes": "野生の花畑で舞い上がりましょう。", "backgroundFlyingOverAncientForestText": "いにしえの森", "backgroundFlyingOverAncientForestNotes": "いにしえの森の林冠を飛び越しましょう。", - "backgrounds052018": "SET 48: Released May 2018", - "backgroundTerracedRiceFieldText": "Terraced Rice Field", - "backgroundTerracedRiceFieldNotes": "Enjoy a Terraced Rice Field in the growing season.", - "backgroundFantasticalShoeStoreText": "Fantastical Shoe Store", - "backgroundFantasticalShoeStoreNotes": "Look for fun new footwear in the Fantastical Shoe Store.", - "backgroundChampionsColosseumText": "Champions' Colosseum", - "backgroundChampionsColosseumNotes": "Bask in the glory of the Champions' Colosseum." + "backgrounds052018": "セット 48 : 2018年5月リリース", + "backgroundTerracedRiceFieldText": "棚田", + "backgroundTerracedRiceFieldNotes": "田植え時期の棚田を眺めて楽しもう。", + "backgroundFantasticalShoeStoreText": "不思議な靴屋さん", + "backgroundFantasticalShoeStoreNotes": "不思議な靴屋で面白くて新しい靴を探そう。", + "backgroundChampionsColosseumText": "戦士の闘技場", + "backgroundChampionsColosseumNotes": "戦士の闘技場で勝利の栄光を味わおう。" } \ No newline at end of file diff --git a/website/common/locales/ja/challenge.json b/website/common/locales/ja/challenge.json index bf4f66b43d..6fc2323fa0 100644 --- a/website/common/locales/ja/challenge.json +++ b/website/common/locales/ja/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "以下のチャレンジで優勝しました。", "challenges": "チャレンジ", "challengesLink": "チャレンジ", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "まだチャレンジ登録はしていません。", "toCreate": "でチャレンジを作成可能", "selectWinner": "優勝者を選び、チャレンジを終了する", @@ -23,7 +25,9 @@ "filter": "フィルター", "groups": "グループ", "noNone": "なし", + "category": "Category", "membership": "会員登録状況", + "ownership": "Ownership", "participating": "参加", "notParticipating": "不参加", "either": "どちらも", diff --git a/website/common/locales/ja/character.json b/website/common/locales/ja/character.json index 684aecefbd..554b49862f 100644 --- a/website/common/locales/ja/character.json +++ b/website/common/locales/ja/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "割り当てを表示", "hideQuickAllocation": "割り当てを非表示", "quickAllocationLevelPopover": "レベルが1上がるごとに、能力値のどれかに割り当てられるポイントを1獲得します。割り当ては手動で行うほかに、ユーザーアイコン > 設定の「自動割り当て」設定でシステムに任せることもできます。", - "invalidAttribute": "\"<%= attr %>\" は有効なパラメータではありません。", "notEnoughAttrPoints": "割り当てるポイントが足りません", "style": "体型", "facialhair": "顔", @@ -219,6 +218,5 @@ "mainHand": "利き手", "offHand": "反対の手", "pointsAvailable": "利用可能なポイント", - "pts": "ポイント", - "statsObjectRequired": "ステータスの更新が必要です" + "pts": "ポイント" } \ No newline at end of file diff --git a/website/common/locales/ja/contrib.json b/website/common/locales/ja/contrib.json index 3dce20cf6a..82233ad723 100644 --- a/website/common/locales/ja/contrib.json +++ b/website/common/locales/ja/contrib.json @@ -49,7 +49,6 @@ "UUID": "ユーザー ID", "loadUser": "ユーザーをロード", "noAdminAccess": "管理者権限が必要です。", - "pageMustBeNumber": "req.query.page は数字でなくてはなりません。", "userNotFound": "ユーザーが見つかりませんでした。", "invalidUUID": "UUID が無効です。", "title": "タイトル", diff --git a/website/common/locales/ja/front.json b/website/common/locales/ja/front.json index b7b961372b..b34de4eda6 100644 --- a/website/common/locales/ja/front.json +++ b/website/common/locales/ja/front.json @@ -304,7 +304,7 @@ "alreadyHaveAccountLogin": "Habiticaのアカウントをお持ちですか?ここからログイン", "dontHaveAccountSignup": "Habiticaのアカウントはまだお持ちでないですか?ここから登録", "motivateYourself": "やる気を出して目標を達成しよう", - "timeToGetThingsDone": "It's time to have fun when you get things done! Join over <%= userCountInMillions %> million Habiticans and improve your life one task at a time.", + "timeToGetThingsDone": "楽しみながら仕事を片付けよう!<%= userCountInMillions %>00万人を超えるHabiticaの冒険者達と一緒にあなたの人生もタスクも一気に改善しましょう。", "singUpForFree": "無料で登録する", "or": "あるいは", "gamifyYourLife": "あなたの人生がゲームに", diff --git a/website/common/locales/ja/gear.json b/website/common/locales/ja/gear.json index 487efe1880..6ef88dbe37 100644 --- a/website/common/locales/ja/gear.json +++ b/website/common/locales/ja/gear.json @@ -334,8 +334,8 @@ "weaponArmoireScepterOfDiamondsNotes": "暖かな赤色の輝きを放つこの笏は、あなたの意志の力を増大させてくれます。知能が<%= str %>上がります。ラッキー宝箱: ダイヤの王様セット(3個中3個目のアイテム)", "weaponArmoireFlutteryArmyText": "ひらひらの群れ", "weaponArmoireFlutteryArmyNotes": "この小さなちょうちょの群れはいつでも激しく羽ばたいて、あなたの一番真っ赤なタスクをクールダウンさせてくれます! 体質と知能、力が<%= attrs %>ずつ上がります。ラッキー宝箱:ひらひらのドレスセット(3個中3個目のアイテム)", - "weaponArmoireCobblersHammerText": "Cobbler's Hammer", - "weaponArmoireCobblersHammerNotes": "This hammer is specially made for leatherwork. It can do a real number on a red Daily in a pinch, though. Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Cobbler Set (Item 2 of 3).", + "weaponArmoireCobblersHammerText": "靴修理職人のハンマー", + "weaponArmoireCobblersHammerNotes": "このハンマーは革細工のための特別製ですが、赤くなった日課を実際に打ち負かすこともできます。体質と力が<%= attrs %>上がります。ラッキー宝箱:靴修理職人セット(3個中2つ目のアイテム)", "armor": "よろい", "armorCapitalized": "よろい", "armorBase0Text": "無地の服", @@ -718,8 +718,8 @@ "armorArmoireRobeOfDiamondsNotes": "この高貴なローブはあなたの外見を立派に見せるだけではなく、他人の中の高潔さを見出せるようにもしてくれます。知覚が<%= per %>上がります。ラッキー宝箱: ダイヤの王様セット(3個中1個目のアイテム)", "armorArmoireFlutteryFrockText": "ひらひらのドレス", "armorArmoireFlutteryFrockNotes": "軽くて優美なガウンとふんわりしたスカートは、ちょうちょが大きな花だと間違えてしまいそうです! 体質と知覚、力が<%= attrs %> ずつ上がります。ラッキー宝箱:ひらひらのドレスセット(3個中1個目のアイテム)", - "armorArmoireCobblersCoverallsText": "Cobbler's Coveralls", - "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).", + "armorArmoireCobblersCoverallsText": "靴修理職人のカバーオール", + "armorArmoireCobblersCoverallsNotes": "この丈夫なカバーオールには工具や革の切れ端、その他お役立ちアイテムを入れるためのポケットがいっぱいついています!知覚と力が<%= attrs %>上がります。ラッキー宝箱:靴修理職人セット(3個中1つ目のアイテム)", "headgear": "帽子・兜", "headgearCapitalized": "帽子・ヘルメット", "headBase0Text": "頭装備なし", @@ -1326,8 +1326,8 @@ "shieldArmoireShieldOfDiamondsNotes": "This radiant shield not only provides protection, it empowers you with endurance! Increases Constitution by <%= con %>. Enchanted Armoire: Independent Item.", "shieldArmoireFlutteryFanText": "ひらひらの扇子", "shieldArmoireFlutteryFanNotes": "暑い日に目と心をクールにしてくれる、素敵な扇子にかなうものはありません。体質と知能、知覚が <%= attrs %> ずつ上がります。ラッキー宝箱: 個別のアイテム。", - "shieldArmoireFancyShoeText": "Fancy Shoe", - "shieldArmoireFancyShoeNotes": "A very special shoe you're working on. It's fit for royalty! Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Cobbler Set (Item 3 of 3).", + "shieldArmoireFancyShoeText": "高級な靴", + "shieldArmoireFancyShoeNotes": "あなたが修理に取り組んでいるとても特別な靴。王侯貴族にふさわしい品です! 知能と知覚が<%= attrs %>上がります。ラッキー宝箱:靴修理職人セット(3つ中3つ目のアイテム)", "back": "背中のアクセサリー", "backCapitalized": "背のアクセサリー", "backBase0Text": "背のアクセサリーなし", diff --git a/website/common/locales/ja/groups.json b/website/common/locales/ja/groups.json index f3569fbf8e..1fb7733f6d 100644 --- a/website/common/locales/ja/groups.json +++ b/website/common/locales/ja/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "必須でないメッセージ", "yesRemove": "はい、削除してください。", "foreverAlone": "自作のメッセージの「いいね」はできません。そんな人にならないで。", - "sortDateJoinedAsc": "加入日が古い", - "sortDateJoinedDesc": "加入日が新しい", - "sortLoginAsc": "最初のログイン", - "sortLoginDesc": "最近のログイン", - "sortLevelAsc": "最小レベル", - "sortLevelDesc": "最大レベル", - "sortNameAsc": "名前(A -Z順)", - "sortNameDesc": "名前(Z -A順)", - "sortTierAsc": "最小段位", - "sortTierDesc": "最大段位", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "ジェム4個でギルドを作成しますか?", "leaveGroupCha": "ギルドのチャレンジをやめて...", "confirm": "確認", @@ -131,6 +131,10 @@ "clearAll": "すべてのメッセージを削除する", "confirmDeleteAllMessages": "受信トレイの全てのメッセージを削除してよろしいですか? 既に送ったメッセージはまだ他のユーザに見られる状態です。", "optOutPopover": "プライベートメッセージはあまり好きじゃない? オプトアウト(機能を拒否)する場合はクリックしてください。", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "ブロックする", "unblock": "ブロックを解除する", "pm-reply": "返信する", @@ -207,7 +211,6 @@ "partyOnName": "パーティーは続く", "partyUpText": "別の人のパーティーに参加しました! 楽しんで、モンスターと戦ってお互いを助け合いましょう。", "partyOnText": "4人以上のパーティーに参加しました! 責任感が強くなったことを楽しんで、自分自身の敵と戦うために友達と協力しましょう!", - "groupIdRequired": "\"groupId\" の UUID が無効です。", "groupNotFound": "グループが見つからなかったか、アクセスできません。", "groupTypesRequired": "有効な \"type\" のクエリー文字列を指定してください。", "questLeaderCannotLeaveGroup": "クエストを開始した人は、パーティーを抜けられません。まず、クエストを中止してください。", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "自分自身を削除することはできません!", "groupMemberNotFound": "グループのメンバーの中にユーザーが見つかりません。", "mustBeGroupMember": "グループのメンバーでなくてはなりません。", - "keepOrRemoveAll": "req.query.keep は、\"keep-all\" か \"remove-all\" でなくてはなりません。", - "keepOrRemove": "req.query.keep は、\"keep\" か \"remove\" でなくてはなりません。", "canOnlyInviteEmailUuid": "招待のあて先は、UUID かメールアドレスのみ対応しています。", "inviteMissingEmail": "招待の送り先メールアドレスが見つかりません。", "inviteMissingUuid": "招待の送り先ユーザーIDが見つかりません", @@ -315,7 +316,7 @@ "approvalsTitle": "承認待ちのタスク", "upgradeTitle": "アップグレード", "blankApprovalsDescription": "あなたのグループが、あなたの承認を必要とするタスクを片付けた場合はここに表示されます!タスクの編集にて承認の条件について設定することができます。", - "userIsClamingTask": "`<%= username %> が \"<%= task %>\" を確保しました`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "承認が申請されました", "refreshApprovals": "承認の更新", "refreshGroupTasks": "グループタスクの更新", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "あなたへと割り当てられたタスクを削除することはできません。", "confirmGuildPlanCreation": "このグループを作りますか?", "onlyGroupLeaderCanInviteToGroupPlan": "寄付が有効化されているグループには,グループのリーダーだけがユーザーを招待できます。", - "remainOrLeaveChallenges": "req.query.keep は、'remain-in-challenges' か 'leave-challenges' でなくてはなりません。", "paymentDetails": "支払いについての詳細", "aboutToJoinCancelledGroupPlan": "あなたはプランが中止されたグループに参加しようとしています。無料の寄付者特典を得ることはできません。", "cannotChangeLeaderWithActiveGroupPlan": "グループにアクティブなプランがある間はリーダーを変更できません。", @@ -366,9 +366,11 @@ "recentActivity": "最近の活動", "myGuilds": "所属ギルド", "guildsDiscovery": "ギルドを探す", + "role": "Role", "guildOrPartyLeader": "リーダー", "guildLeader": "ギルドリーダー", "member": "メンバー", + "guildSize": "Guild Size", "goldTier": "ゴールド段位", "silverTier": "シルバー段位", "bronzeTier": "ブロンズ段位", diff --git a/website/common/locales/ja/loadingscreentips.json b/website/common/locales/ja/loadingscreentips.json index 78b15be323..4a5c8ff48d 100644 --- a/website/common/locales/ja/loadingscreentips.json +++ b/website/common/locales/ja/loadingscreentips.json @@ -25,7 +25,7 @@ "tip23": "レベル 100 に達すると、無料で「転生のオーブ」がアンロックされます。新しい冒険をはじめましょう!", "tip24": "質問がありますか? Habitica Help ギルドで聞いてみてください!", "tip25": "四季に合わせた大祭は、夏至・冬至、春分・秋分近くに開催されます。", - "tip26": "You can look for a Party or find Party members in the Party Wanted Guild!", + "tip26": "Party Wanted Guild でパーティーを探したり、パーティーメンバーを募集することができます!", "tip27": "昨日日課を済ませたのに、チェックを入れるのを忘れてしまいましたか? ご心配なく! 昨日の活動を記録する機能によって、新しい1日を始める前に、した事を記録するチャンスが得られるでしょう!", "tip28": "ユーザーアイコン > 設定 の「日付更新の時間」を設定すれば、好みの時間を 1 日の終わり・はじまりにできます。", "tip29": "すべての日課を完了すると、「パーフェクトな日」の「勢いボーナス」がついて能力値が上がります。", diff --git a/website/common/locales/ja/npc.json b/website/common/locales/ja/npc.json index 2ed94a7a36..6149a3fcc2 100644 --- a/website/common/locales/ja/npc.json +++ b/website/common/locales/ja/npc.json @@ -48,6 +48,7 @@ "featuredItems": "注目アイテム!", "hideLocked": "ロックされたアイテムを隠す", "hidePinned": "ピン留めされたアイテムを隠す", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> 経験値", "amountGold": "<%= amount %> ゴールド", "namedHatchingPotion": "<%= type %> たまごがえしの薬", @@ -74,14 +75,7 @@ "ianTextMobile": "クエストの巻物はいかがですか? 巻物を使って、パーティの仲間と共にモンスターと戦いましょう!", "ianBrokenText": "クエスト ショップへようこそ...ここでは友達といっしょにモンスターと戦うクエストの巻物を開くができる...クエストの巻物の美しい品ぞろえもよく見て、右側で買ってくれ...", "featuredQuests": "注目クエスト!", - "missingKeyParam": "\"req.params.key\" が必要です。", - "itemNotFound": "\"<%= key %>\" のアイテムは見つかりません。", "cannotBuyItem": "このアイテムは買えません。", - "missingTypeKeyEquip": "パラメーターとして \"key\" と \"type\" が必要です。", - "missingPetFoodFeed": "パラメーターとして \"pet\" と \"food\" が必要です。", - "invalidPetName": "そのペットの名前は無効です。", - "missingEggHatchingPotionHatch": "パラメーターとして \"egg\" と \"hatchingPotion\" が必要です。", - "invalidTypeEquip": "\"type\" として、'equipped'、'pet'、'mount'、'costume' のいずれか 1 つが必要です。", "mustPurchaseToSet": "<%= key %> にセットする <%= val %> を購入しなくてはなりません。", "typeRequired": "型が必要", "positiveAmountRequired": "正の値を入力してください", diff --git a/website/common/locales/ja/quests.json b/website/common/locales/ja/quests.json index 5b0575a681..b8b050756f 100644 --- a/website/common/locales/ja/quests.json +++ b/website/common/locales/ja/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "まだクエストへの招待を送っていません。", "questInviteNotFound": "クエストへの招待が見つかりませんでした。", "guildQuestsNotSupported": "ギルドはクエストに招待できません。", - "questNotFound": "\"<%= key %>\" のクエストは見つかりませんでした。", "questNotOwned": "クエストの巻物を持っていません。", "questNotGoldPurchasable": "\"<%= key %>\" のクエストは、ゴールドで買えるクエストではありません。", "questLevelTooHigh": "このクエストに挑戦するにはレベル <%= level %> が必要です。", diff --git a/website/common/locales/ja/questscontent.json b/website/common/locales/ja/questscontent.json index d8e150d2b5..d4615918c3 100644 --- a/website/common/locales/ja/questscontent.json +++ b/website/common/locales/ja/questscontent.json @@ -592,13 +592,15 @@ "questDysheartenerBossRageQuests": "`心蝕のディスハートナーは強烈なハートブレイクを使った!`\n\nああああ!! またもや私たちが日課を終わらせずに残してしまい、ディスハートナーは愛すべき店主たちに向けて放つ最後の一撃のエネルギーを溜めました。クエストマスターのIanがいる郊外は強烈なハートブレイクによってずたずたに破壊され、Ianは恐るべき光景に徹底的に打ちのめされています。怪物が倒れるときは近づいています……急ぎましょう! 止まっている暇はありません!", "questDysheartenerDropHippogriffPet": "希望に満ちたヒッポグリフ(ペット)", "questDysheartenerDropHippogriffMount": "希望に満ちたヒッポグリフ(乗騎)", - "dysheartenerArtCredit": "イラスト作成:@AnnDeLune", - "hugabugText": "「虫さんと仲良し」クエストセット", + "dysheartenerArtCredit": "イラスト:@AnnDeLune", + "hugabugText": "「虫にムチュウ」クエストセット", "hugabugNotes": "「クリティカル・バグ」「タンタン泥地のカタツムリ」「バイバイ、蝶々さん」のセット。3月31日まで購入できます。", "questSquirrelText": "コソコソリス", "questSquirrelNotes": "あなたは目を覚まし、寝過ごしたことに気づきました!なんで目覚ましが鳴らなかったんだ? ...目覚ましにドングリが詰まっているがどうしてこうなった?

あなたが朝食を作ろうとすると、トースターがドングリで一杯になっている。乗騎を取りに行くと、@Shtut がそこにいて、動物小屋の鍵を開けようとしているがうまくいかない。二人は鍵穴を覗き込む。\"ドングリが詰まってないか?\"

@randomdaisy が叫ぶ \"なんてこと!私のペットのリス達が逃げ出したのはわかっていたけど、こんなトラブルを引き起こすなんて思わなかった!あの子達がこれ以上の面倒を起こす前に捕まえるのを手伝ってくれない?\"

いたずらに置かれたドングリの跡をたどり、@Cantrasの助けも借りて手慣れた様子で一匹ずつ確保してゆき、あなたはわがままなリス達を捕まえてゆく。しかしあなたがもう少しで終わりそうだと思ったところで、ドングリがあなたのヘルメットにコツンとあたった! あなたが見上げると、そこには巨大なリスの化け物が、うず高く積まれた種を守りながら身を屈めている。

\"ああ、なんてこと\" @randomdaisy がそっとささやく \"あの子はいつも防衛本能が強いのよ。慎重に進まないと!\"あなたはパーティーの仲間と共に取り囲み、準備は整った!", "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "コソコソリス", "questSquirrelDropSquirrelEgg": "リス ( たまご )", - "questSquirrelUnlockText": "市場でリスのたまごを買えるようにする" + "questSquirrelUnlockText": "市場でリスのたまごを買えるようにする", + "cuddleBuddiesText": "「抱っこ仲間」クエストセット", + "cuddleBuddiesNotes": "「殺し屋ウサギ」「ふとどきなフェレット」「モルモットギャング団」のセット。5月31日まで購入できます。" } \ No newline at end of file diff --git a/website/common/locales/ja/spells.json b/website/common/locales/ja/spells.json index 5e87cdfc30..91f938edce 100644 --- a/website/common/locales/ja/spells.json +++ b/website/common/locales/ja/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "友達を海の生き物に変えよう!", "spellSpecialSandText": "砂", "spellSpecialSandNotes": "海の泡の効果を取り消す。", - "spellNotFound": "スキル\"<%= spellId %>\" が見つかりません。", "partyNotFound": "パーティが見つかりません。", "targetIdUUID": "\"targetId\" のUserIDが無効です。", "challengeTasksNoCast": "スキルはチャレンジのタスクには唱えられません。", diff --git a/website/common/locales/ja/subscriber.json b/website/common/locales/ja/subscriber.json index 3c8eb631a4..daaa0671ec 100644 --- a/website/common/locales/ja/subscriber.json +++ b/website/common/locales/ja/subscriber.json @@ -7,7 +7,7 @@ "buyGemsGoldText": "商人・Alexanderが、ジェム1個を20ゴールドで売ってくれます。アレクサンダーと1ヵ月の間に取り引きできるジェムの数は、最初は25個に限定されています。しかし、寄付の継続3カ月ごとにその数が5個ずつ増えていき、最大で月に50個を買うことができます!", "mustSubscribeToPurchaseGems": "ゴールドでジェムを買うには、寄付が必要です。", "reachedGoldToGemCap": "ゴールドで買えるジェムの上限が今月で <%= convCap %> に達しました。乱用や不正なジェムの増殖を止めるために上限を設けています。制限は毎月1日から3日のいずれかの時点で解除されます。", - "reachedGoldToGemCapQuantity": "Your requested amount <%= quantity %> exceeds the Gold=>Gem conversion cap <%= convCap %> for this month. We have this to prevent abuse / farming. The cap resets within the first three days of each month.", + "reachedGoldToGemCapQuantity": "あなたのゴールドからジェムへの交換リクエスト数 <%= quantity %> は、今月の交換上限数 <%= convCap %> を超えてしまっています。乱用や不正なジェムの増殖を止めるために上限を設けています。制限は毎月1日から3日のいずれかの時点で解除されます。", "retainHistory": "詳細な履歴の保存", "retainHistoryText": "完了した To-Do やタスクの履歴を、より長期間閲覧可能になります。", "doubleDrops": "落とし物上限が2倍に", @@ -175,12 +175,6 @@ "invalidCoupon": "無効なクーポン コードです。", "couponUsed": "すでに使われたクーポン コードです。", "couponCodeRequired": "クーポン コードが必要です。", - "eventRequired": "\"req.params.event\" が必要です。", - "countRequired": "\"req.query.count\" が必要です。", - "missingPaymentId": "req.query.paymentIdが見つかりません。", - "missingCustomerId": "req.query.customerIdが見つかりません。", - "missingPaypalBlock": "req.session.paypalBlockが見つかりません。", - "missingSubKey": "req.query.subが見つかりません。", "paypalCanceled": "あなたの寄付は中止されました", "earnGemsMonthly": "毎月 **<%= cap %>** 個までジェムを取得可能", "receiveMysticHourglass": "神秘の砂時計を獲得!", diff --git a/website/common/locales/ja/tasks.json b/website/common/locales/ja/tasks.json index c274ed57e6..8cfe591586 100644 --- a/website/common/locales/ja/tasks.json +++ b/website/common/locales/ja/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "世界的なイベントの期間中、スペシャルな装備が出現します。", "rewardHelp4": "自分の好みの「ごほうび」を気軽に設定しましょう! サンプルがここにあるので参考にしてください。", "clickForHelp": "クリックでヘルプを表示", - "taskIdRequired": "\"taskId\" の UUID が無効です。", "taskAliasAlreadyUsed": "タスクの別名が、ほかのタスク名で使われています。", "taskNotFound": "タスクが見つかりませんでした。", "invalidTaskType": "タスクは、\"habit\", \"daily\", \"todo\", \"reward\" のいずれかの種類でなくてはなりません。", diff --git a/website/common/locales/nl/challenge.json b/website/common/locales/nl/challenge.json index 67743cdf10..4b25163895 100644 --- a/website/common/locales/nl/challenge.json +++ b/website/common/locales/nl/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Heeft de volgende uitdagingen gewonnen", "challenges": "Uitdagingen", "challengesLink": "Uitdagingen", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Nog geen uitdagingen, ga naar", "toCreate": "om er een aan te maken.", "selectWinner": "Kies een winnaar en sluit de uitdaging af:", @@ -23,7 +25,9 @@ "filter": "Filter", "groups": "Groepen", "noNone": "Geen", + "category": "Category", "membership": "Lidmaatschap", + "ownership": "Ownership", "participating": "Deelnemend", "notParticipating": "Niet deelnemend", "either": "Beide", diff --git a/website/common/locales/nl/character.json b/website/common/locales/nl/character.json index 1a4a3a8337..fd430b5d82 100644 --- a/website/common/locales/nl/character.json +++ b/website/common/locales/nl/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Show Stat Allocation", "hideQuickAllocation": "Hide Stat Allocation", "quickAllocationLevelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User Icon > Stats.", - "invalidAttribute": "\"<%= attr %>\" is not a valid Stat.", "notEnoughAttrPoints": "You don't have enough Stat Points.", "style": "Stijl", "facialhair": "Gezicht", @@ -219,6 +218,5 @@ "mainHand": "Main-Hand", "offHand": "Off-Hand", "pointsAvailable": "Points Available", - "pts": "pts", - "statsObjectRequired": "Stats update is required" + "pts": "pts" } \ No newline at end of file diff --git a/website/common/locales/nl/contrib.json b/website/common/locales/nl/contrib.json index 811cc9c460..8f0deaae4c 100644 --- a/website/common/locales/nl/contrib.json +++ b/website/common/locales/nl/contrib.json @@ -49,7 +49,6 @@ "UUID": "Gebruikers ID", "loadUser": "Gebruiker laden", "noAdminAccess": "Je hebt geen beheerderstoegang.", - "pageMustBeNumber": "req.query.page moet een nummer zijn", "userNotFound": "Gebruiker niet gevonden.", "invalidUUID": "UUID moet geldig zijn", "title": "Titel", diff --git a/website/common/locales/nl/groups.json b/website/common/locales/nl/groups.json index 9ebd0b3c9b..491f76c699 100644 --- a/website/common/locales/nl/groups.json +++ b/website/common/locales/nl/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Optioneel bericht", "yesRemove": "Ja, verwijder ze", "foreverAlone": "Je kunt je eigen bericht geen +1 geven. Zo iemand wil je niet zijn.", - "sortDateJoinedAsc": "Earliest Date Joined", - "sortDateJoinedDesc": "Latest Date Joined", - "sortLoginAsc": "Earliest Login", - "sortLoginDesc": "Latest Login", - "sortLevelAsc": "Lowest Level", - "sortLevelDesc": "Highest Level", - "sortNameAsc": "Name (A - Z)", - "sortNameDesc": "Name (Z - A)", - "sortTierAsc": "Lowest Tier", - "sortTierDesc": "Highest Tier", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Gilde creëren voor 4 edelstenen?", "leaveGroupCha": "Uitdagingen van dit gilde verlaten en...", "confirm": "Bevestigen", @@ -131,6 +131,10 @@ "clearAll": "Alle berichten verwijderen", "confirmDeleteAllMessages": "Weet je zeker dat je alle berichten in je inbox wilt verwijderen? Andere gebruikers kunnen de berichten die je ze hebt gestuurd blijven zien.", "optOutPopover": "Vind je privéberichten maar niks? Klik hier om je helemaal af te melden.", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Blokkeren", "unblock": "Deblokkeren", "pm-reply": "Beantwoorden", @@ -207,7 +211,6 @@ "partyOnName": "Groepsfeestje", "partyUpText": "Is lid geworden van een gezelschap met een andere persoon! Veel plezier met het vechten tegen monsters en het ondersteunen van elkaar.", "partyOnText": "Is lid geworden van een gezelschap met minstens vier personen! Geniet van je verhoogde verantwoordelijkheid als je samen werkt met je vrienden om je vijanden te verslaan.", - "groupIdRequired": "\"groupId\" moet een geldige UUID zijn", "groupNotFound": "Groep niet gevonden of je hebt geen toegang.", "groupTypesRequired": "Je moet een geldig \"type\" query string geven.", "questLeaderCannotLeaveGroup": "You cannot leave your Party when you have started a quest. Abort the quest first.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Je kunt jezelf niet verwijderen!", "groupMemberNotFound": "Gebruiker is niet gevonden tussen de leden van de groep.", "mustBeGroupMember": "Je moet lid zijn van de groep.", - "keepOrRemoveAll": "req.query.keep moet \"keep-all\" of \"remove-all\" zijn", - "keepOrRemove": "req.query.keep moet \"keep\" of \"remove\" zijn", "canOnlyInviteEmailUuid": "Je kunt alleen uitnodigen via uuids of e-mails.", "inviteMissingEmail": "Ontbrekende e-mailadressen in de uitnodiging.", "inviteMissingUuid": "De gebruikers-ID ontbreekt in de uitnodiging", @@ -315,7 +316,7 @@ "approvalsTitle": "Taken wachtend op goedkeuring", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "Wanneer je groep taken voltooid die je goedkeuring vereisen, verschijnen ze hier! Pas de vereisten voor goedkeuring aan onder taakbewerking.", - "userIsClamingTask": "`<%= username %> heeft \"<%= task %>\" geclaimd.`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Goedkeuring aangevraagd", "refreshApprovals": "Vernieuw goedkeuringen", "refreshGroupTasks": "Vernieuw groepstaken", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Je kunt geen groepstaken verwijderen die aan jou toegewezen zijn.", "confirmGuildPlanCreation": "Deze groep maken?", "onlyGroupLeaderCanInviteToGroupPlan": "Alleen de groepsleider kan gebruikers uitnodigen voor een groep met een abonnement.", - "remainOrLeaveChallenges": "req.query.keep moet ofwel 'remain-in-challenges' ofwel 'leave-challenges' zijn", "paymentDetails": "Betalingsdetails", "aboutToJoinCancelledGroupPlan": "Je staat op het punt lid te worden van een groep met een geannuleerd plan. Je zult GEEN gratis abonnement ontvangen.", "cannotChangeLeaderWithActiveGroupPlan": "Je kunt de leider niet veranderen zolang de groep een actief plan heeft.", @@ -366,9 +366,11 @@ "recentActivity": "Recente activiteit", "myGuilds": "Mijn gilden", "guildsDiscovery": "Gilden ontdekken", + "role": "Role", "guildOrPartyLeader": "Leider", "guildLeader": "Gildeleider", "member": "Lid", + "guildSize": "Guild Size", "goldTier": "Gouden rang", "silverTier": "Zilveren rank", "bronzeTier": "Bronzen rang", diff --git a/website/common/locales/nl/npc.json b/website/common/locales/nl/npc.json index 6dba66ca3e..998f720a22 100644 --- a/website/common/locales/nl/npc.json +++ b/website/common/locales/nl/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Uitgelichte items!", "hideLocked": "Verberg vergrendelde", "hidePinned": "Vastgepinde verbergen", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> ervaring", "amountGold": "<%= amount %> goud", "namedHatchingPotion": "<%= type %> uitbroeddrank", @@ -74,14 +75,7 @@ "ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!", "ianBrokenText": "Welkom in de Queestenwinkel... Hier kun je queeste-perkamentrollen gebruiken om samen met je vrienden monsters te verslaan... Neem een kijkje aan de rechterkant om te bekijken welke prachtige queesten er te koop zijn...", "featuredQuests": "Uitgelichte queesten!", - "missingKeyParam": "\"req.params.key\" is vereist.", - "itemNotFound": "Voorwerp \"<%= key %>\" niet gevonden.", "cannotBuyItem": "Je kan dit voorwerp niet kopen.", - "missingTypeKeyEquip": "\"key\" en \"type\" zijn vereiste parameters.", - "missingPetFoodFeed": "\"pet\" en \"food\" zijn vereiste parameters.", - "invalidPetName": "Ongeldige huisdiernaam gegeven.", - "missingEggHatchingPotionHatch": "\"egg\" en \"hatchingPotion\" zijn vereiste parameters.", - "invalidTypeEquip": "\"type\" moet eentje zijn van 'aangekleed', 'huisdier', 'rijdier', 'kostuum'.", "mustPurchaseToSet": "Moet <%= val %> kopen om het op <%= key %> te zetten.", "typeRequired": "Type is vereist", "positiveAmountRequired": "Positive amount is required", diff --git a/website/common/locales/nl/quests.json b/website/common/locales/nl/quests.json index 17855a6e82..de747f3319 100644 --- a/website/common/locales/nl/quests.json +++ b/website/common/locales/nl/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Er is nog geen queesteuitnodiging verstuurd.", "questInviteNotFound": "Geen queesteuitnodiging gevonden.", "guildQuestsNotSupported": "Gilden kunnen niet uitgenodigd worden op queestes.", - "questNotFound": "Queeste \\\"<%= key %>\\\" niet gevonden.", "questNotOwned": "Je bezit deze queesterol niet.", "questNotGoldPurchasable": "Deze queeste \\\"<%= key %>\\\" is niet met goud verkrijgbaar.", "questLevelTooHigh": "Je moet niveau <%= level %> zijn om deze queeste te beginnen.", diff --git a/website/common/locales/nl/questscontent.json b/website/common/locales/nl/questscontent.json index e88cc453a8..43380892ae 100644 --- a/website/common/locales/nl/questscontent.json +++ b/website/common/locales/nl/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/nl/spells.json b/website/common/locales/nl/spells.json index 56ab27ccd2..382bb2d573 100644 --- a/website/common/locales/nl/spells.json +++ b/website/common/locales/nl/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Verander een vriend in een zeedier!", "spellSpecialSandText": "Zand", "spellSpecialSandNotes": "Draai de spreuk terug die je in een zeester veranderde.", - "spellNotFound": "Vaardigheid \"<%= spellId %>\" niet gevonden.", "partyNotFound": "Groep niet gevonden", "targetIdUUID": "\"targetId\" moet een geldige gebruikers-ID zijn.", "challengeTasksNoCast": "Het uitspreken van een vaardigheid op uitdagingstaken is niet toegestaan.", diff --git a/website/common/locales/nl/subscriber.json b/website/common/locales/nl/subscriber.json index 629e36f50e..7092f722d7 100644 --- a/website/common/locales/nl/subscriber.json +++ b/website/common/locales/nl/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Ongeldige couponcode.", "couponUsed": "Couponcode is al in gebruik", "couponCodeRequired": "De couponcode is vereist.", - "eventRequired": "\"req.params.event\" is vereist.", - "countRequired": "\"req.query.count\" is vereist.", - "missingPaymentId": "Ontbrekend req.query.paymentId", - "missingCustomerId": "Ontbrekend req.query.customerId", - "missingPaypalBlock": "Ontbrekend req.session.paypalBlock", - "missingSubKey": "Ontbrekend req.query.sub", "paypalCanceled": "Je abonnement is stopgezet", "earnGemsMonthly": "Verdien tot **<%= cap %> edelstenen** per maand", "receiveMysticHourglass": "Ontvang een mystieke zandloper!", diff --git a/website/common/locales/nl/tasks.json b/website/common/locales/nl/tasks.json index fdb9d17a47..dcfb607e16 100644 --- a/website/common/locales/nl/tasks.json +++ b/website/common/locales/nl/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "Speciale uitrusting verschijnt hier tijdens wereldwijde evenementen.", "rewardHelp4": "Wees niet bang om je eigen beloningen toe te voegen! Kijk ook eens naar de voorbeelden hier.", "clickForHelp": "Klik hier voor hulp", - "taskIdRequired": "\"taskId\" moet een geldige UUID zijn.", "taskAliasAlreadyUsed": "Taakalias al in gebruik bij een andere taak.", "taskNotFound": "Taak niet gevonden.", "invalidTaskType": "Taaktype moet een \"habit\", \"daily\", \"todo\" of \"reward\" zijn.", diff --git a/website/common/locales/pl/backgrounds.json b/website/common/locales/pl/backgrounds.json index b566ffe626..a4d07f51c5 100644 --- a/website/common/locales/pl/backgrounds.json +++ b/website/common/locales/pl/backgrounds.json @@ -346,11 +346,11 @@ "backgroundFlyingOverWildflowerFieldNotes": "Szybuj nad Polami Polnych Kwiatów.", "backgroundFlyingOverAncientForestText": "Starożytny Las", "backgroundFlyingOverAncientForestNotes": "Przeleć nad baldachimem Starożytnego Lasu.", - "backgrounds052018": "SET 48: Released May 2018", - "backgroundTerracedRiceFieldText": "Terraced Rice Field", - "backgroundTerracedRiceFieldNotes": "Enjoy a Terraced Rice Field in the growing season.", - "backgroundFantasticalShoeStoreText": "Fantastical Shoe Store", - "backgroundFantasticalShoeStoreNotes": "Look for fun new footwear in the Fantastical Shoe Store.", - "backgroundChampionsColosseumText": "Champions' Colosseum", - "backgroundChampionsColosseumNotes": "Bask in the glory of the Champions' Colosseum." + "backgrounds052018": "ZESTAW 48: Opublikowany w maju 2018", + "backgroundTerracedRiceFieldText": "Tarasowe Pole Ryżowe", + "backgroundTerracedRiceFieldNotes": "Raduj się Tarasowym Polem Ryżowym podczas okresu wzrostu.", + "backgroundFantasticalShoeStoreText": "Fantastyczny Sklep Obuwniczy", + "backgroundFantasticalShoeStoreNotes": "Poszukaj nowego, modnego obuwia w Fantastycznym Sklepie Obuwniczym.", + "backgroundChampionsColosseumText": "Koloseum Czempionów", + "backgroundChampionsColosseumNotes": "Pław się w chwale Koloseum Czempionów." } \ No newline at end of file diff --git a/website/common/locales/pl/challenge.json b/website/common/locales/pl/challenge.json index b91e974da4..bf5e2a6984 100644 --- a/website/common/locales/pl/challenge.json +++ b/website/common/locales/pl/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Jest zwycięzcą następujących wyzwań", "challenges": "Wyzwania", "challengesLink": "Wyzwania", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Nie ma jeszcze żadnych wyzwań, udaj się do", "toCreate": "żeby stworzyć wyzwanie.", "selectWinner": "Wybierz zwycięzcę i zakończ wyzwanie:", @@ -23,7 +25,9 @@ "filter": "Filtruj", "groups": "Grupy", "noNone": "Żadne", + "category": "Category", "membership": "Członkostwo", + "ownership": "Ownership", "participating": "Biorę udział", "notParticipating": "Nie biorę udziału", "either": "Wszystkie", diff --git a/website/common/locales/pl/character.json b/website/common/locales/pl/character.json index 2590f11fc0..7878da1f58 100644 --- a/website/common/locales/pl/character.json +++ b/website/common/locales/pl/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Pokaż przydział Statystyk", "hideQuickAllocation": "Ukryj przydział Statystyk", "quickAllocationLevelPopover": "Każdy zdobyty poziom daje Ci jeden punkt, który możesz przydzielić do wybranej przez siebie statystyki. Możesz zrobić to ręcznie lub pozwolić, by gra zdecydowała za Ciebie, używając jednej z opcji automatycznego przydzielania, którą znajdziesz klikając Ikonę Użytkownika > Statystyki", - "invalidAttribute": "\"<%= attr %>\" nie jest poprawną Statystyką.", "notEnoughAttrPoints": "Nie masz wystarczająco Punktów Statystyk.", "style": "Styl", "facialhair": "Zarost", @@ -219,6 +218,5 @@ "mainHand": "Główna ręka", "offHand": "Druga ręka", "pointsAvailable": "Dostępne punkty", - "pts": "pkt", - "statsObjectRequired": "Wymagana jest aktualizacja statystyk" + "pts": "pkt" } \ No newline at end of file diff --git a/website/common/locales/pl/contrib.json b/website/common/locales/pl/contrib.json index 2bf19948d7..cd1b283a13 100644 --- a/website/common/locales/pl/contrib.json +++ b/website/common/locales/pl/contrib.json @@ -49,7 +49,6 @@ "UUID": "ID Użytkownika", "loadUser": "Wczytaj użytkownika", "noAdminAccess": "Nie masz dostępu administratora.", - "pageMustBeNumber": "req.query.page musi być liczbą", "userNotFound": "Nie znaleziono użytkownika.", "invalidUUID": "UUID musi być prawidłowy", "title": "Tytuł", diff --git a/website/common/locales/pl/front.json b/website/common/locales/pl/front.json index 73cb97164f..2306d005db 100644 --- a/website/common/locales/pl/front.json +++ b/website/common/locales/pl/front.json @@ -304,7 +304,7 @@ "alreadyHaveAccountLogin": "Masz już konto? Zaloguj się.", "dontHaveAccountSignup": "Nie masz konta? Zarejestruj się.", "motivateYourself": "Zmotywuj się by osiągnąć swoje cele.", - "timeToGetThingsDone": "It's time to have fun when you get things done! Join over <%= userCountInMillions %> million Habiticans and improve your life one task at a time.", + "timeToGetThingsDone": "Nadszedł czas, aby dobrze się bawić podczas wykonywania swoich zadań! Dołącz do <%= userCountInMillions %> milionów Habitan i popraw swoje życie jednym zadanie naraz.", "singUpForFree": "Dołącz za darmo", "or": "LUB", "gamifyYourLife": "Zgrywalizuj swoje życie", diff --git a/website/common/locales/pl/groups.json b/website/common/locales/pl/groups.json index cec003352b..87b0b68052 100644 --- a/website/common/locales/pl/groups.json +++ b/website/common/locales/pl/groups.json @@ -34,7 +34,7 @@ "communityGuidelines": "Regulamin Społeczności", "communityGuidelinesRead1": "Prosimy, przeczytaj nasz", "communityGuidelinesRead2": "przed rozpoczęciem rozmowy.", - "bannedWordUsed": "Oops! Looks like this post contains a swearword, religious oath, or reference to an addictive substance or adult topic (<%= swearWordsUsed %>). Habitica has users from all backgrounds, so we keep our chat very clean. Feel free to edit your message so you can post it!", + "bannedWordUsed": "Ups! Wygląda na to, że ten post zawiera przekleństwo, przysięgę religijną lub odniesienie do substancji uzależniających lub tematów zarezerwowanych dla osób pełnoletnich (<%= swearWordsUsed %>). Habitika posiada użytkowników wywodzących się z różnych środowisk, więc pilnujemy by nasze czaty pozostały czyste. Oczywiście możesz zedytować swoją wiadomość by móc ją opublikować!", "bannedSlurUsed": "Twoja wiadomość zawierała nieprzyzwoite słowa i twoje uprawienia czatu zostały wycofane.", "party": "Drużyna", "createAParty": "Stwórz Drużynę", @@ -106,16 +106,16 @@ "optionalMessage": "Wiadomość opcjonalna", "yesRemove": "Tak, usuń je", "foreverAlone": "Nie możesz polubić własnej wiadomości. Nie bądź taki.", - "sortDateJoinedAsc": "Najwcześniejsza data dołaczenia", - "sortDateJoinedDesc": "Najpóźniejsza data dołączenia", - "sortLoginAsc": "Ostatnio aktywny", - "sortLoginDesc": "Najdłużej nieaktywny", - "sortLevelAsc": "Najniższy poziom", - "sortLevelDesc": "Najwyższy poziom", - "sortNameAsc": "Nazwa (A - Z)", - "sortNameDesc": "Nazwa (Z - A)", - "sortTierAsc": "Najniższa ranga", - "sortTierDesc": "Najwyższa Ranga", + "sortBackground": "Sortuj według Tła", + "sortClass": "Sortuj według Klasy", + "sortDateJoined": "Sortuj według Daty Dołączenia", + "sortLogin": "Sortuj według Daty Logowania", + "sortLevel": "Sortuj według Poziomu", + "sortName": "Sortuj według Nazwy", + "sortTier": "Sortuj według Rangi", + "ascendingAbbrev": "Rosnąco", + "descendingAbbrev": "Malejąco", + "applySortToHeader": "Użyj Opcji Sortowania do Nagłówka Drużyny", "confirmGuild": "Stworzyć Gildię za 4 Klejnoty?", "leaveGroupCha": "Opuść wyzwania Gildii i...", "confirm": "Potwierdź", @@ -131,6 +131,10 @@ "clearAll": "Usuń wszystkie wiadomości", "confirmDeleteAllMessages": "Czy na pewno chcesz usunąć wszystkie wiadomości w skrzynce odbiorczej? Inni użytkownicy nadal będą widzieli wiadomości, które im przesłałeś.", "optOutPopover": "Nie lubisz prywatnych wiadomości? Kliknij, aby całkiem z nich zrezygnować.", + "PMPlaceholderTitle": "Nic tu jeszcze nie ma", + "PMPlaceholderDescription": "Wybierz rozmowę po lewej", + "PMPlaceholderTitleRevoked": "Twoje uprawnienia do czatu zostały wycofane", + "PMPlaceholderDescriptionRevoked": "Nie możesz wysyłać prywatnych wiadomości ponieważ Twoje uprawnienia do rozmów zostały wycofane. Jeśli masz z tego powodu pytania albo wątpliwości to proszę wyślij e-maila na adres admin@habitica.com by przedyskutować to z zespołem.", "block": "Blokuj", "unblock": "Odblokuj", "pm-reply": "Wyślij odpowiedź", @@ -207,7 +211,6 @@ "partyOnName": "Jeden za wszystkich, wszyscy za jednego", "partyUpText": "Dołączyłeś do drużyny z inną osobą! Bawcie się dobrze walcząc z potworami i wspierając się wzajemnie.", "partyOnText": "Dołączyłeś do drużyny z przynajmniej czwórką osób! Ciesz się zwiększoną odpowiedzialnością, jednocząc się ze znajomymi by zwyciężyć waszych wrogów!", - "groupIdRequired": "\"groupId\" musi być prawidłowym UUID", "groupNotFound": "Nie znaleziono grupy lub nie posiadasz dostępu.", "groupTypesRequired": "Musisz podać prawidłową \"type\" wartość do napisu.", "questLeaderCannotLeaveGroup": "Nie możesz opuścić swojej Druyżyny gdy rozpocząłeś misje. Najpierw porzuć misję.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Nie możesz usunąć siebie!", "groupMemberNotFound": "Użytkownik nie znaleziony wśród członków grupy", "mustBeGroupMember": "Musi być członkiem grupy.", - "keepOrRemoveAll": "req.query.keep musi mieć wartość \"keep-all\" albo \"remove-all\"", - "keepOrRemove": "req.query.keep musi mieć wartość \"keep\" albo \"remove\"", "canOnlyInviteEmailUuid": "Można zapraszać jedynie używając UUID lub adresu e-mail.", "inviteMissingEmail": "Brakujący adres e-mail w zaproszeniu.", "inviteMissingUuid": "Brakujący identyfikator użytkownika w zaproszeniu", @@ -252,7 +253,7 @@ "userRequestsApproval": "<%= userName %> prosi o zatwierdzenie", "userCountRequestsApproval": "<%= userCount %> prosi o zatwierdzenie", "youAreRequestingApproval": "Prosisz o zatwierdzenie", - "chatPrivilegesRevoked": "You cannot do that because your chat privileges have been revoked.", + "chatPrivilegesRevoked": "Nie możesz tego zrobić, ponieważ twoje czatowe przywileje zostały wycofane.", "cannotCreatePublicGuildWhenMuted": "Nie możesz stworzyć publicznej gildii ponieważ twoje czatowe przywileje zostały wycofane.", "cannotInviteWhenMuted": "Nie możesz zaprosić nikogo do gildii lub drużyny ponieważ twoje czatowe przywileje zostały wycofane.", "newChatMessagePlainNotification": "Nowa wiadomość w <%= groupName %> od <%= authorName %>. Kliknij tu by otworzyć stronę czatu.", @@ -315,7 +316,7 @@ "approvalsTitle": "Zadania czekające na aprobatę", "upgradeTitle": "Kup abonament", "blankApprovalsDescription": "Kiedy twoja grupa ukończy zadania wymagające twojego zatwierdzenia, pojawią się one tutaj! Ustawienia zatwierdzania możesz dostosować w edycji zadań.", - "userIsClamingTask": "`<%= username %> zgłosił udział w zadaniu \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Wymagana aprobata", "refreshApprovals": "Odśwież aprobaty", "refreshGroupTasks": "Odśwież zadania grupy", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Nie możesz usunąć zadań grupy, które są przypisane do ciebie.", "confirmGuildPlanCreation": "Stworzyć tę grupę?", "onlyGroupLeaderCanInviteToGroupPlan": "Tylko przywódca grupy może zapraszać użytkowników do grupy z abonamentem.", - "remainOrLeaveChallenges": "req.query.keep musi mieć wartość 'remain-in-challenges' albo 'leave-challenges'", "paymentDetails": "Szczegóły płatności", "aboutToJoinCancelledGroupPlan": "Zamierzasz dołączyć do grupy z anulowanym planem. NIE będziesz mógł otrzymać darmowego abonamentu.", "cannotChangeLeaderWithActiveGroupPlan": "Nie możesz zmienić lidera grupy, dopóki posiada ona aktywny plan", @@ -366,9 +366,11 @@ "recentActivity": "Ostatnia aktywność", "myGuilds": "Moje GIldie", "guildsDiscovery": "Odkryj Gildie", + "role": "Role", "guildOrPartyLeader": "Przywódca", "guildLeader": "Przywódca Gildii", "member": "Członek", + "guildSize": "Guild Size", "goldTier": "Ranga Złota", "silverTier": "Ranga Srebrna", "bronzeTier": "Ranga Brązowa", @@ -434,12 +436,12 @@ "worldBossBullet4": "Sprawdzaj regularnie Karczmę by zobaczyć postępy w walce z Globalnym Bossem i ataki Szału jakie wykonał", "worldBoss": "Globalny Boss", "groupPlanTitle": "Potrzebujesz więcej dla swojej ekipy?", - "groupPlanDesc": "Managing a small team or organizing household chores? Our group plans grant you exclusive access to a private task board and chat area dedicated to you and your group members!", + "groupPlanDesc": "Zarządzasz mała grupą albo organizujesz domowe obowiązki? Nasze plany grupowe udzielają Ci ekskluzywnego dostępu do prywatnych tablic zadań i osobnego czatu dla Ciebie i członków Twojej grupy!", "billedMonthly": "*rozliczane jako miesięczny abonament", "teamBasedTasksList": "Lista zadań grupowych", - "teamBasedTasksListDesc": "Set up an easily-viewed shared task list for the group. Assign tasks to your fellow group members, or let them claim their own tasks to make it clear what everyone is working on!", + "teamBasedTasksListDesc": "Ustaw łatwo dostępną wspólną listę zadań dla Twojej grupy. Przydzielaj zadania współczłonkom albo pozwól im wybierać swoje własne zadania by było wiadomo nad czym każdy pracuje!", "groupManagementControls": "Sterowanie Zarządzaniem Grupy", - "groupManagementControlsDesc": "Use task approvals to verify that a task that was really completed, add Group Managers to share responsibilities, and enjoy a private group chat for all team members.", + "groupManagementControlsDesc": "Używaj akceptowania zadań by weryfikować czy zadanie zostało rzeczywiście wykonane, dodaj Zarządców Grupy by dzielić się obowiązkami i ciesz się prywatnym czatem dla wszystkim członków drużyny.", "inGameBenefits": "Korzyści wewnątrz gry", "inGameBenefitsDesc": "Członkowie grupy zyskają ekskluzywnego Wierzchowca Jackalope jak również wszystkie korzyści abonenta, wliczając w to specjalne comiesięczne zestawy i zdolność kupowania klejnotów przy pomocy złota.", "inspireYourParty": "Inspiruj swoją drużynę, zgrywalizuj życie razem.", @@ -451,15 +453,15 @@ "gettingStarted": "Rozpoczynanie", "congratsOnGroupPlan": "Gratulacje dla stworzenia Twojej nowej Grupy! Tutaj znajdziesz parę odpowiedzi na niektóre z częściej zadawanych pytań.", "whatsIncludedGroup": "Co jest zawarte w abonamencie", - "whatsIncludedGroupDesc": "All members of the Group receive full subscription benefits, including the monthly subscriber items, the ability to buy Gems with Gold, and the Royal Purple Jackalope mount, which is exclusive to users with a Group Plan membership.", + "whatsIncludedGroupDesc": "Każdy członek Grupy uzyskuje wszystkie przywileje abonenta, wliczając w to comiesięczny przedmiot abonenta, zdolność kupowania Klejnotów przy pomocy złota i wierzchowca Royal Purple Jackalope, który jest ekskluzywny dla członków Planu Grupowego.", "howDoesBillingWork": "Jak działa rozliczanie?", - "howDoesBillingWorkDesc": "Group Leaders are billed based on group member count on a monthly basis. This charge includes the $9 (USD) price for the Group Leader subscription, plus $3 USD for each additional group member. For example: A group of four users will cost $18 USD/month, as the group consists of 1 Group Leader + 3 group members.", + "howDoesBillingWorkDesc": "Liderzy grup rozliczają się co miesiąc na podstawie ilości członków. Opłata zawiera cenę $9 (USD) za abonament Lidera Grupy plus $3 USD za każdego dodatkowego członka. Na przykład: Grupa 4 użytkowników będzie kosztować $18 USD/miesiąc, jako że składa się z Lidera Grupy i 3 członków.", "howToAssignTask": "Jak przydzielasz Zadanie?", - "howToAssignTaskDesc": "Assign any Task to one or more Group members (including the Group Leader or Managers themselves) by entering their usernames in the \"Assign To\" field within the Create Task modal. You can also decide to assign a Task after creating it, by editing the Task and adding the user in the \"Assign To\" field!", + "howToAssignTaskDesc": "Przydziel jakiekolwiek zadanie do jednego lub więcej członków Grupy (wliczając w to Lidera lub Zarządce) przez wpisanie ich nazwy użytkownika w polu \"Przydziel\" w części poświęconej Tworzeniu Zadań. Możesz też zdecydować o przydzieleniu Zadania po jego stworzeniu poprzez jego edycje i uzupełnienie pola \"Przydziel\" nazwą użytkownika!", "howToRequireApproval": "Jak oznaczasz Zadania jako wymagające zatwierdzenia?", - "howToRequireApprovalDesc": "Toggle the \"Requires Approval\" setting to mark a specific task as requiring Group Leader or Manager confirmation. The user who checked off the task won't get their rewards for completing it until it has been approved.", - "howToRequireApprovalDesc2": "Group Leaders and Managers can approve completed Tasks directly from the Task Board or from the Notifications panel.", + "howToRequireApprovalDesc": "Zaznacz ustawienie \"Wymaga Aprobaty\" by oznaczyć specjalne zadanie potrzebujące potwierdzenia Lidera Grupy bądź Zarządcy. Użytkownik, który je wykona nie dostanie nagrody dopóki nie zostanie zaakceptowane.", + "howToRequireApprovalDesc2": "Liderzy Grupy bądź Zarządcy mogą akceptować wykonane Zadania bezpośrednio z Tablicy Zadań albo z panelu z powiadomieniami.", "whatIsGroupManager": "Kto to jest Menadżer Grupy?", - "whatIsGroupManagerDesc": "A Group Manager is a user role that do not have access to the group's billing details, but can create, assign, and approve shared Tasks for the Group's members. Promote Group Managers from the Group’s member list.", + "whatIsGroupManagerDesc": "Zarządca Grupy jest użytkownikiem, który nie ma dostępu do szczegółów płatności, ale może tworzyć, przydzielać i akceptować wspólne Zadania dla członków Grupy. Awansuj Zarządców z listy członków Grupy.", "goToTaskBoard": "Idź do Tablicy Zadań" } \ No newline at end of file diff --git a/website/common/locales/pl/loadingscreentips.json b/website/common/locales/pl/loadingscreentips.json index 72ed82d283..7140cc386a 100644 --- a/website/common/locales/pl/loadingscreentips.json +++ b/website/common/locales/pl/loadingscreentips.json @@ -25,7 +25,7 @@ "tip23": "Osiągnij 100 poziom by odblokować Kulę Odrodzenia za darmo i rozpocząć nową przygodę!", "tip24": "Masz pytanie? Zadaj je w Habiticznej Gildii Pomocy!", "tip25": "Sezonowe Wielkie Gale zaczynają się w okolicach równonocy i przesileń.", - "tip26": "You can look for a Party or find Party members in the Party Wanted Guild!", + "tip26": "Możesz szukać Drużyny lub jej członków w Party Wanted Guild!", "tip27": "Wykonałeś Codzienne poprzedniego dnia, ale zapomniałeś je odznaczyć? Nie martw się! Używając opcji sprawdzania wczorajszej aktywności masz szansę na odznaczenie tych zadań, zanim zaczniesz nowy dzień.", "tip28": "Ustaw własny początek dnia klikając na Symbol Użytkownika > Ustawienia, aby kontrolować, kiedy resetuje się Twój dzień.", "tip29": "Ukończ wszystkie Codzienne, aby otrzymać wzmocnienie za doskonały dzień, które podwyższy Twoje Atrybuty.", diff --git a/website/common/locales/pl/npc.json b/website/common/locales/pl/npc.json index c937cd1c77..027a209edf 100644 --- a/website/common/locales/pl/npc.json +++ b/website/common/locales/pl/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Wyróżnione Przedmioty!", "hideLocked": "Ukryj niedostępne", "hidePinned": "Ukryj przypięte", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Doświadzenia", "amountGold": "<%= amount %> Złota", "namedHatchingPotion": "<%= type %> eliksir wyklucia", @@ -74,20 +75,13 @@ "ianTextMobile": "Czy mogę zaciekawić cię paroma zwojami misji? Aktywuj je, aby wraz z drużyną walczyć przeciw potworom!", "ianBrokenText": "Witaj w sklepie z misjami... Możesz tutaj wykorzystać zwoje misji, by wraz z przyjaciółmi toczyć boje z potworami... Już teraz koniecznie sprawdź naszą wspaniałą tablicę ze zwojami misji możliwymi do zakupu...", "featuredQuests": "Wyróżnione misje", - "missingKeyParam": "Wymagany parametr \"req.params.key\".", - "itemNotFound": "Nie znaleziono przedmiotu \"<%= key %>\".", "cannotBuyItem": "Nie możesz tego kupić.", - "missingTypeKeyEquip": "Wymagane parametry \"key\" oraz\" type\".", - "missingPetFoodFeed": "Wymagane parametry \"pet\" oraz \"food\".", - "invalidPetName": "Podano niepoprawną nazwę chowańca.", - "missingEggHatchingPotionHatch": "Wymagane parametry \"egg\" oraz \"hatchingPotion\".", - "invalidTypeEquip": "\"type\" musi zostać wybrany spośród 'wyposażony', 'chowaniec', 'wierzchowiec', 'kostium'.", "mustPurchaseToSet": "Trzeba kupić <%= val %>, aby ustawić na <%= key %>.", "typeRequired": "Wymagany typ.", "positiveAmountRequired": "Dodatnia ilość jest wymagana", "notAccteptedType": "Typ musi zostać być jednym z: [eggs, hatchingPotions, premiumHatchingPotions, food, quests, gear]", "contentKeyNotFound": "Nie znaleziono klawisza dla <%= type %>", - "plusGem": "+<%= count %> Gem", + "plusGem": "+ <%= count %> Klejnotów", "typeNotSellable": "Gatunek nie jest na sprzedaż. Musi być jednym z <%= acceptedTypes %>", "userItemsKeyNotFound": "Klawisz nie został znaleziony dla user.items <%= type %>", "userItemsNotEnough": "Nie masz wystarczająco <%= type %>", diff --git a/website/common/locales/pl/quests.json b/website/common/locales/pl/quests.json index 93e86ed502..26591ecdb9 100644 --- a/website/common/locales/pl/quests.json +++ b/website/common/locales/pl/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Nie zostały jeszcze wysłane żadne zaproszenia na misję.", "questInviteNotFound": "Nie zostały znalezione żadne zaproszenia na misje.", "guildQuestsNotSupported": "Gildie nie mogą być zapraszane na misje.", - "questNotFound": "Misja \"<%= key %>\" nie znaleziona.", "questNotOwned": "Nie posiadasz tego zwoju misji.", "questNotGoldPurchasable": "Misja \"<%= key %>\" nie może być kupiona za złoto.", "questLevelTooHigh": "Musisz mieć co najmniej poziom <%= level %>, by rozpocząć tą misję!", diff --git a/website/common/locales/pl/questscontent.json b/website/common/locales/pl/questscontent.json index a150a22ea3..93f60b66f7 100644 --- a/website/common/locales/pl/questscontent.json +++ b/website/common/locales/pl/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Podstępna Wiewiórka", "questSquirrelDropSquirrelEgg": "Wiewiórka (jajo)", - "questSquirrelUnlockText": "Odblokowuje dostęp do kupna wiewiórczych jaj na Targu" + "questSquirrelUnlockText": "Odblokowuje dostęp do kupna wiewiórczych jaj na Targu", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/pl/settings.json b/website/common/locales/pl/settings.json index 5ab62671d5..4b16a64914 100644 --- a/website/common/locales/pl/settings.json +++ b/website/common/locales/pl/settings.json @@ -32,7 +32,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": "If you'd like to give us feedback, please enter it below - we'd love to know what you liked or didn't like about Habitica! Don't speak English well? No problem! Use the language you prefer.", + "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.", "qrCode": "Kod QR", "dataExport": "Eksport danych", "saveData": "Oto kilka opcji zapisu Twoich danych.", diff --git a/website/common/locales/pl/spells.json b/website/common/locales/pl/spells.json index 5bc8a568ee..13c9264b59 100644 --- a/website/common/locales/pl/spells.json +++ b/website/common/locales/pl/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Zamień przyjaciela w morskie stworzenie!", "spellSpecialSandText": "Piasek", "spellSpecialSandNotes": "Cofnij zaklęcie, które zamieniło Cię w rozgwiazdę.", - "spellNotFound": "Nie znaleziono umiejętności „<%= spellId %>”.", "partyNotFound": "Nie znaleziono drużyny.", "targetIdUUID": "\"targetId\" musi być prawidłowym ID użytkownika.", "challengeTasksNoCast": "Rzucanie czaru na zadania z wyzwań nie jest dozwolone.", diff --git a/website/common/locales/pl/subscriber.json b/website/common/locales/pl/subscriber.json index c30f8320f1..a278d6bc28 100644 --- a/website/common/locales/pl/subscriber.json +++ b/website/common/locales/pl/subscriber.json @@ -7,7 +7,7 @@ "buyGemsGoldText": "Kupiec Alexander sprzeda ci Klejnoty w cenie 20 punktów złota za Klejnot. Jego miesięczne dostawy są początkowo ograniczone do 25 Klejnotów na miesiąc, ale za każde 3 miesiące subskrybcji z rzędu, jego zasoby rosną o 5 Klejnotów, aż do 50 Klejnotów za miesiąc!", "mustSubscribeToPurchaseGems": "Musisz mieć abonament żeby kupić klejnoty za złoto", "reachedGoldToGemCap": "Osiągnąłeś limit <%= convCap %> zakupów klejnotów za złoto. Limit ten zapobiega nadużyciom. Limit wyzeruje się w pierwszych dniach kolejnego miesiąca.", - "reachedGoldToGemCapQuantity": "Your requested amount <%= quantity %> exceeds the Gold=>Gem conversion cap <%= convCap %> for this month. We have this to prevent abuse / farming. The cap resets within the first three days of each month.", + "reachedGoldToGemCapQuantity": "Ilość na która wyraziłeś zapotrzebowanie<%= quantity %> przekracza limit konwersji Złoto=> Klejnoty <%= convCap %> na ten miesiąc. Posiadamy go by zapobiec nadużywaniu/ gromadzeniu. Limit resetuje się w pierwszych trzech dniach każdego miesiąca.", "retainHistory": "Zachowuj dodatkowe wpisy w historii konta", "retainHistoryText": "Historia ukończonych Do-Zrobienia i zadań jest dostępna dłużej.", "doubleDrops": "Dzienny limit łupów podwojony", @@ -175,12 +175,6 @@ "invalidCoupon": "Nieprawidłowy kod kuponu", "couponUsed": "Kod promocyjny został wcześniej wykorzystany", "couponCodeRequired": "Kod promocyjny jest wymagany.", - "eventRequired": "\"req.params.event\" jest wymagane.", - "countRequired": "\"req.params.event\" jest wymagane.", - "missingPaymentId": "Brakuje req.query.paymentId", - "missingCustomerId": "Brakuje req.query.customerId", - "missingPaypalBlock": "Brakuje req.session.paypalBlock", - "missingSubKey": "Brakuje req.query.sub", "paypalCanceled": "Twoja subskrybcja została anulowana", "earnGemsMonthly": "Zarób do **<%= cap %> Klejnotów** miesięcznie", "receiveMysticHourglass": "Otrzymaj Mistyczną Klepsydrę!", diff --git a/website/common/locales/pl/tasks.json b/website/common/locales/pl/tasks.json index 22065b1c2d..121994f10d 100644 --- a/website/common/locales/pl/tasks.json +++ b/website/common/locales/pl/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "Specjalne elementy wyposażenia będą się pojawiały podczas wydarzeń o skali światowej.", "rewardHelp4": "Nie bój się ustalać własnych nagród! Sprawdź przykłady tutaj.", "clickForHelp": "Kliknij po pomoc", - "taskIdRequired": "\"taskId\" musi być prawidłowym UUID.", "taskAliasAlreadyUsed": "Alias zadania jest już używany dla innego zadania.", "taskNotFound": "Nie znaleziono zadania.", "invalidTaskType": "Zadanie musi być typu \"nawyk\", \"codzienne\", \"do zrobienia\" lub \"nagroda\".", diff --git a/website/common/locales/pt/challenge.json b/website/common/locales/pt/challenge.json index 5dc99221ec..2af6ec2e88 100644 --- a/website/common/locales/pt/challenge.json +++ b/website/common/locales/pt/challenge.json @@ -13,17 +13,21 @@ "challengeWinner": "Vencedor dos seguintes desafios", "challenges": "Desafios", "challengesLink": "Desafios", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Nenhum desafio ainda, visite", "toCreate": "para criar um.", "selectWinner": "Selecione um vencedor e termine o desafio:", - "deleteOrSelect": "Apagar ou selecionar vencedor", + "deleteOrSelect": "Eliminar ou seleccionar vencedor", "endChallenge": "Terminar Desafio", "challengeDiscription": "Estas são as tarefas do desafio que serão adicionadas ao seu painel de tarefas quando você começá-lo. As amostras de tarefas de Desafio abaixo mudarão de cor e ganharão gráficos para lhe mostrar o progresso geral do grupo.", "hows": "Como Todos Estão Indo?", "filter": "Filtro", "groups": "Grupos", "noNone": "Nenhum", + "category": "Category", "membership": "Associação", + "ownership": "Ownership", "participating": "Participando", "notParticipating": "Não Participando", "either": "Ambos", @@ -48,7 +52,7 @@ "exportChallengeCSV": "Exportar para CSV", "selectGroup": "Favor selecionar grupo", "challengeCreated": "Desafio criado", - "sureDelCha": "Tem certeza que deseja deletar esse desafio?", + "sureDelCha": "Tens a certeza de que queres eliminar este desafio?", "sureDelChaTavern": "Tem a certeza que pretende eliminar este desafio? As suas gemas não serão reembolsadas.", "removeTasks": "Remover Tarefas", "keepTasks": "Manter Tarefas", @@ -103,8 +107,8 @@ "challengeDescription": "Descrição do Desafio", "selectChallengeWinnersDescription": "Seleccione um vencedor entre os participantes do Desafio", "awardWinners": "Vencedor do Prémio", - "doYouWantedToDeleteChallenge": "Quer apagar este desafio?", - "deleteChallenge": "Apagar Desafio", + "doYouWantedToDeleteChallenge": "Queres eliminar este desafio?", + "deleteChallenge": "Eliminar Desafio", "challengeNamePlaceholder": "Qual é o nome do seu Desafio?", "challengeSummary": "Sumário", "challengeSummaryPlaceholder": "Escreva uma descrição curta para publicitar o seu Desafio a outros Habiticanos. Qual é o propósito principal do seu Desafio e porque devem as pessoas juntar-se a ele? Tente incluir palavras chave úteis na descrição para que Habiticanos possam encontra-lo facilmente durante pesquisas!", diff --git a/website/common/locales/pt/character.json b/website/common/locales/pt/character.json index 2925f726bb..db67aec905 100644 --- a/website/common/locales/pt/character.json +++ b/website/common/locales/pt/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Mostrar Alocação por Característica", "hideQuickAllocation": "Esconder Alocação por Característica", "quickAllocationLevelPopover": "Cada nível vale-te um Ponto para atribuíres a uma Característica à escolha. Podes fazê-lo manualmente ou deixar o jogo decidir por ti usando uma das opções de Alocação Automática que podes encontrar em Ícone de Utilizador > Características.", - "invalidAttribute": "\"<%= attr %>\" não é uma Característica válida.", "notEnoughAttrPoints": "Não tens Pontos de Características suficientes.", "style": "Estilo", "facialhair": "Facial", @@ -219,6 +218,5 @@ "mainHand": "Mão Principal", "offHand": "Mão Oposta", "pointsAvailable": "Pontos Disponíveis", - "pts": "pts", - "statsObjectRequired": "É necessário atualizar as características" + "pts": "pts" } \ No newline at end of file diff --git a/website/common/locales/pt/contrib.json b/website/common/locales/pt/contrib.json index c75e67f0fd..de1e307f1a 100644 --- a/website/common/locales/pt/contrib.json +++ b/website/common/locales/pt/contrib.json @@ -49,7 +49,6 @@ "UUID": "ID do Usuário", "loadUser": "Carregar Usuário", "noAdminAccess": "Você não possui acesso de administrador.", - "pageMustBeNumber": "req.query.page precisa ser um número", "userNotFound": "Usuário não encontrado.", "invalidUUID": "UUID precisa ser válido", "title": "Título", diff --git a/website/common/locales/pt/defaulttasks.json b/website/common/locales/pt/defaulttasks.json index 52e11ea324..98bd9c415c 100644 --- a/website/common/locales/pt/defaulttasks.json +++ b/website/common/locales/pt/defaulttasks.json @@ -8,7 +8,7 @@ "defaultHabit4Text": "Adicionar uma tarefa ao Habitica", "defaultHabit4Notes": "Ou um Hábito, uma Tarefa Diária ou um Afazer", "defaultHabit5Text": "Carregue aqui para editar isto de forma a criar um mau hábito que queira parar", - "defaultHabit5Notes": "Ou apagar a partir do ecrã de edição", + "defaultHabit5Notes": "Ou eliminar a partir do ecrã de edição", "defaultDaily1Text": "Use Habitica para manter registo das suas tarefas", "defaultTodo1Text": "Junte-se ao Habitica (complete-me!)", "defaultTodoNotes": "Você pode tanto como completar esse afazer, como editá-lo ou removê-lo.", diff --git a/website/common/locales/pt/front.json b/website/common/locales/pt/front.json index 8161e779a7..6636fc8f98 100644 --- a/website/common/locales/pt/front.json +++ b/website/common/locales/pt/front.json @@ -283,7 +283,7 @@ "invalidLoginCredentialsLong": "Uh-oh - your email address / login name or password is incorrect.\n- Make sure they are typed correctly. Your login name 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": "Não há uma conta que usa essas credenciais.", "accountSuspended": "This account, User ID \"<%= userId %>\", has been blocked for breaking the [Community Guidelines](https://habitica.com/static/community-guidelines) or [Terms of Service](https://habitica.com/static/terms). For details or to ask to be unblocked, please email our Community Manager at <%= communityManagerEmail %> or ask your parent or guardian to email them. Please copy your User ID into the email and include your Profile Name.", - "accountSuspendedTitle": "Account has been suspended", + "accountSuspendedTitle": "Esta conta foi suspensa", "unsupportedNetwork": "Atualmente, esta rede não é suportada.", "cantDetachSocial": "A conta não possui outra forma de autenticação; não se pode remover este método de autenticação.", "onlySocialAttachLocal": "Autenticação local só pode ser adicionada à uma conta social.", @@ -306,23 +306,23 @@ "motivateYourself": "Motiva-te para atingir os teus objetivos.", "timeToGetThingsDone": "It's time to have fun when you get things done! Join over <%= userCountInMillions %> million Habiticans and improve your life one task at a time.", "singUpForFree": "Inscreve-te Gratuitamente", - "or": "OR", + "or": "OU", "gamifyYourLife": "Gamifique a Sua Vida", "aboutHabitica": "Habitica is a free habit-building and productivity app that treats your real life like a game. With in-game rewards and punishments to motivate you and a strong social network to inspire you, Habitica can help you achieve your goals to become healthy, hard-working, and happy.", - "trackYourGoals": "Track Your Habits and Goals", + "trackYourGoals": "Acompanha os teus Hábitos e Metas", "trackYourGoalsDesc": "Stay accountable by tracking and managing your Habits, Daily goals, and To-Do list with Habitica’s easy-to-use mobile apps and web interface.", - "earnRewards": "Earn Rewards for Your Goals", + "earnRewards": "Ganha Recompensas pelas Tuas Metas", "earnRewardsDesc": "Check off tasks to level up your Avatar and unlock in-game features such as battle armor, mysterious pets, magic skills, and even quests!", - "battleMonsters": "Battle Monsters with Friends", + "battleMonsters": "Luta contra Monstros com os teus Amigos", "battleMonstersDesc": "Fight monsters with other Habiticans! Use the Gold that you earn to buy in-game or custom rewards, like watching an episode of your favorite TV show.", - "playersUseToImprove": "Players Use Habitica to Improve", - "healthAndFitness": "Health and Fitness", + "playersUseToImprove": "Os Jogadores usam o Habitica para Melhorarem", + "healthAndFitness": "Saúde e Forma", "healthAndFitnessDesc": "Never motivated to floss? Can't seem to get to the gym? Habitica finally makes it fun to get healthy.", - "schoolAndWork": "School and Work", + "schoolAndWork": "Escola e Trabalho", "schoolAndWorkDesc": "Whether you're preparing a report for your teacher or your boss, it's easy to keep track of your progress as you tackle your toughest tasks.", "muchmuchMore": "E muito, muito mais!", "muchmuchMoreDesc": "Our fully customizable task list means that you can shape Habitica to fit your personal goals. Work on creative projects, emphasize self-care, or pursue a different dream -- it's all up to you.", - "levelUpAnywhere": "Level Up Anywhere", + "levelUpAnywhere": "Passa de Nível em Qualquer Lugar", "levelUpAnywhereDesc": "Our mobile apps make it simple to keep track of your tasks on-the-go. Accomplish your goals with a single tap, no matter where you are.", "joinMany": "Join over 2,000,000 people having fun while accomplishing their goals!", "joinToday": "Junta-te ao Habitica Hoje", diff --git a/website/common/locales/pt/gear.json b/website/common/locales/pt/gear.json index d9664303c0..98dae2f0c9 100644 --- a/website/common/locales/pt/gear.json +++ b/website/common/locales/pt/gear.json @@ -334,7 +334,7 @@ "weaponArmoireScepterOfDiamondsNotes": "Este ceptro reluz em tons quentes e avermelhados enquanto intensifica a tua força de vontade. Aumenta Força em <%= str %>. Armário Encantado: Conjunto de Rei de Ouros (Item 3 de 3).", "weaponArmoireFlutteryArmyText": "Exército Tremulante", "weaponArmoireFlutteryArmyNotes": "Este grupo desconexo de lepidópteros está pronto a bater asas ferozmente para arrefecer as suas tarefas mais vermelhas! Aumenta Constituição, Inteligência e Força em <%= attrs %> cada. Armário Encantado: Conjunto do Traje Tremulante (Item 3 de 3).", - "weaponArmoireCobblersHammerText": "Cobbler's Hammer", + "weaponArmoireCobblersHammerText": "Martelo do Sapateiro", "weaponArmoireCobblersHammerNotes": "This hammer is specially made for leatherwork. It can do a real number on a red Daily in a pinch, though. Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Cobbler Set (Item 2 of 3).", "armor": "armadura", "armorCapitalized": "Armadura", @@ -1524,7 +1524,7 @@ "eyewearMystery301703Notes": "Perfeita para um baile de máscaras elegante ou para se mover de forma furtiva numa multidão particularmente bem vestida. Não confere benefícios. Item de Assinante de Março de 3017.", "eyewearArmoirePlagueDoctorMaskText": "Máscara Doutor Praga", "eyewearArmoirePlagueDoctorMaskNotes": "An authentic mask worn by the doctors who battle the Plague of Procrastination. Increases Constitution and Intelligence by <%= attrs %> each. Enchanted Armoire: Plague Doctor Set (Item 2 of 3).", - "eyewearArmoireGoofyGlassesText": "Goofy Glasses", - "eyewearArmoireGoofyGlassesNotes": "Perfect for going incognito or just making your partymates giggle. Increases Perception by <%= per %>. Enchanted Armoire: Independent Item.", - "twoHandedItem": "Two-handed item." + "eyewearArmoireGoofyGlassesText": "Óculos Tontos", + "eyewearArmoireGoofyGlassesNotes": "Perfeitos para andar incógnito ou simplesmente fazer os teus colegas de equipa rir. Aumenta a Percepção em <%= per %>. Armário Encantado: Item Solto.", + "twoHandedItem": "Item de duas mãos." } \ No newline at end of file diff --git a/website/common/locales/pt/generic.json b/website/common/locales/pt/generic.json index f50eb62c1f..b2a3cc78d0 100644 --- a/website/common/locales/pt/generic.json +++ b/website/common/locales/pt/generic.json @@ -82,7 +82,7 @@ "buyMoreGems": "Comprar Mais Gemas", "notEnoughGems": "Gemas insuficientes", "alreadyHave": "Eeepa! Você já tem esse item. Não precisa comprar de novo!", - "delete": "Deletar", + "delete": "Eliminar", "gemsPopoverTitle": "Gemas", "gems": "Gemas", "gemButton": "Você tem <%= number %> Gemas.", diff --git a/website/common/locales/pt/groups.json b/website/common/locales/pt/groups.json index f7792e65cf..08e713e851 100644 --- a/website/common/locales/pt/groups.json +++ b/website/common/locales/pt/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Mensagem Opcional", "yesRemove": "Sim, remova-os", "foreverAlone": "Não é possível curtir a própria mensagem. Não seja aquela pessoa.", - "sortDateJoinedAsc": "Data mais Antiga de Ingresso", - "sortDateJoinedDesc": "Data mais Recente de Ingresso", - "sortLoginAsc": "Início de Sessão mais Antigo", - "sortLoginDesc": "Início de Sessão mais Recente", - "sortLevelAsc": "Nível mais Baixo", - "sortLevelDesc": "Nível mais Alto", - "sortNameAsc": "Nome (A-Z)", - "sortNameDesc": "Nome (Z-A)", - "sortTierAsc": "Nível de Grupo mais Baixo", - "sortTierDesc": "Nível de Grupo mas Elevado", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Criar Guilda por 4 Gemas?", "leaveGroupCha": "Deixar os desafios da Guilda e...", "confirm": "Confirmar", @@ -128,9 +128,13 @@ "pmHeading": "Mensagem privada para <%= name %>", "pmsMarkedRead": "Suas mensagens privadas foram marcadas como lidas.", "possessiveParty": "Equipa de <%= name %>", - "clearAll": "Deletar Todas as Mensagens", + "clearAll": "Eliminar Todas as Mensagens", "confirmDeleteAllMessages": "Tem certeza que desja deletar todas as mensagens na sua caixa de entrada? Outros usuários ainda irão ver as mensagens que você enviou para eles.", "optOutPopover": "Não gosta de mensagens privadas? Clique para desativar completamente", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Bloquear", "unblock": "Desbloquear", "pm-reply": "Enviar uma resposta", @@ -207,7 +211,6 @@ "partyOnName": "Equipe online", "partyUpText": "Junte-se a uma Equipa com outra pessoa! Divirtam-se batalhando contra monstros e ajudando uns aos outros.", "partyOnText": "Juntou-se a uma equipe com pelo menos quarto pessoas! Aprecie o aumento de responsabilidade quando se juntar aos seus amigos para vencer os seus inimigos!", - "groupIdRequired": "\"groupId\" precisa ser um UUID válido.", "groupNotFound": "Grupo não encontrado ou ao qual você não tem acesso.", "groupTypesRequired": "Deve fornecer um \"tipo\" válido de pesquisa.", "questLeaderCannotLeaveGroup": "Não pode deixar a sua Equipa quando começou uma missão. Aborte a missão primeiro.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Você não pode se remover!", "groupMemberNotFound": "Usuário não encontrado entre os membros do grupo", "mustBeGroupMember": "Deve ser membro do grupo.", - "keepOrRemoveAll": "req.query.keep precisa ser ou \"keep-all\" ou \"remove-all\"", - "keepOrRemove": "req.query.keep precisa ser ou \"keep\" ou \"remove\"", "canOnlyInviteEmailUuid": "Só pode convidar usando uuids ou emails.", "inviteMissingEmail": "Endereço de e-mail em falta no convite.", "inviteMissingUuid": "A id. do utilizador está em falta no convite", @@ -315,7 +316,7 @@ "approvalsTitle": "Tarefas a Aguardar Aprovação", "upgradeTitle": "Atualizar", "blankApprovalsDescription": "Quando o seu grupo termina tarefas que necessitam a sua aprovação, elas aparecerão aqui! Ajuste os requisitos de aprovação de uma tarefa ao editar a mesma.", - "userIsClamingTask": "\\`<%= username %> reclamou \\\"<%= task %>\\\"\\`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Aprovação Solicitada", "refreshApprovals": "Atualizar Aprovações", "refreshGroupTasks": "Atualizar Tarefas de Grupo", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Não pode apagar tarefas de grupo que estão atribuídas a si.", "confirmGuildPlanCreation": "Criar este grupo?", "onlyGroupLeaderCanInviteToGroupPlan": "Só o líder do grupo pode convidar utilizadores para um grupo com uma subscrição.", - "remainOrLeaveChallenges": "req.query.keep deve ser 'remain-in-challenges' ou 'leave-challenges'", "paymentDetails": "Detalhes de Pagamento", "aboutToJoinCancelledGroupPlan": "Está prestes a juntar-se a um grupo cujo plano está cancelado. Não receberá uma subscrição gratuita.", "cannotChangeLeaderWithActiveGroupPlan": "Não pode mudar o líder do grupo enquanto este tiver um plano ativo.", @@ -366,9 +366,11 @@ "recentActivity": "Atividade Recente", "myGuilds": "As minhas Guildas", "guildsDiscovery": "Descobrir Guildas", + "role": "Role", "guildOrPartyLeader": "Líder", "guildLeader": "Líder da Guilda", "member": "Membro", + "guildSize": "Guild Size", "goldTier": "Nível Dourado", "silverTier": "Nível Prateado", "bronzeTier": "Nível Bronzeado", diff --git a/website/common/locales/pt/npc.json b/website/common/locales/pt/npc.json index 25e73e3ab9..3cda998b42 100644 --- a/website/common/locales/pt/npc.json +++ b/website/common/locales/pt/npc.json @@ -21,11 +21,11 @@ "sleepBullet2": "Tarefas não perderão combos ou perderão cor", "sleepBullet3": "Chefões não lhe causaram dano por causa de Tarefas Diárias incompletas", "sleepBullet4": "Your boss damage or collection Quest items will stay pending until check-out", - "pauseDailies": "Pause Damage", - "unpauseDailies": "Unpause Damage", - "staffAndModerators": "Staff and Moderators", + "pauseDailies": "Pausar Dano", + "unpauseDailies": "Resumir Dano", + "staffAndModerators": "Equipa e Moderadores", "communityGuidelinesIntro": "Habitica tries to create a welcoming environment for users of all ages and backgrounds, especially in public spaces like the Tavern. If you have any questions, please consult our Community Guidelines.", - "acceptCommunityGuidelines": "I agree to follow the Community Guidelines", + "acceptCommunityGuidelines": "Concordo em seguir as Diretrizes da Comunidade", "daniel": "Daniel", "danielText": "Bem vindo à Taverna! Fique um pouco e conheça os locais. Se precisares descansar (férias? problemas de saúde?), eu me encarregarei de deixá-lo à vontade na Pousada. Enquanto descansa, suas Tarefas Diárias não lhe causarão dano na virada do dia, mas você ainda pode marcá-las como realizadas.", "danielText2": "Tenha cuidado: Se estiver participando de uma missão contra um Chefão, ele ainda lhe causará danos pelas Tarefas Diárias perdidas dos seus companheiros de equipe! Além disso, o seu dano no chefão (ou itens coletados) não serão aplicados até que você saia da Pousada.", @@ -35,7 +35,7 @@ "worldBossDescription": "Descrição do Líder Global", "alexander": "Alexander, o Mercador", "welcomeMarket": "Bem-vindo ao Mercado! Compre ovos e poções difíceis de encontrar! Venda os seus extras! Encomende serviços úteis! Venha ver o que nós temos para oferecer.", - "welcomeMarketMobile": "Welcome to the Market! Buy hard-to-find eggs and potions! Come see what we have to offer.", + "welcomeMarketMobile": "Bem-vindo ao Mercado! Aqui pode comprar ovos e poções difíceis de encontrar! Venha ver o que temos para oferecer.", "displayItemForGold": "Você quer vender um <%= itemType %>?", "displayEggForGold": "Você quer vender um Ovo <%= itemType %>?", "displayPotionForGold": "Você quer vender uma Poção <%= itemType %>?", @@ -48,6 +48,7 @@ "featuredItems": "Featured Items!", "hideLocked": "Hide locked", "hidePinned": "Hide pinned", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Experiência", "amountGold": "<%= amount %> Ouro", "namedHatchingPotion": "<%= type %> Hatching Potion", @@ -74,14 +75,7 @@ "ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!", "ianBrokenText": "Bem-vindo à Loja de Missões... Aqui pode utilizar os Pergaminhos de Missões para lutar contra monstros com os seus amigos... Não se esqueça de verificar os nossos Pergaminhos de Missões refinados para comprar, à direita...", "featuredQuests": "Featured Quests!", - "missingKeyParam": "\"req.params.key\" é necessário.", - "itemNotFound": "Item \"<%= key %>\" não encontrado.", "cannotBuyItem": "Você não pode comprar esse item.", - "missingTypeKeyEquip": "\"key\" e \"type\" são parâmetros necessários.", - "missingPetFoodFeed": "\"pet\" e \"food\" são parâmetros obrigatórios.", - "invalidPetName": "Indicado nome de mascote inválido.", - "missingEggHatchingPotionHatch": "\"egg\" e \"hatchingPotion\" são parâmetros necessários.", - "invalidTypeEquip": "\"type\" precisa de ser um de 'equipped', 'pet', mount', 'costume'.", "mustPurchaseToSet": "Deve comprar <%= val %> para colocar em <%= key %>.", "typeRequired": "Tipo é necessário", "positiveAmountRequired": "Positive amount is required", diff --git a/website/common/locales/pt/quests.json b/website/common/locales/pt/quests.json index 832fe189b4..a545700411 100644 --- a/website/common/locales/pt/quests.json +++ b/website/common/locales/pt/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Nenhum convite para missão foi enviado ainda.", "questInviteNotFound": "Nenhum convite para missão encontrado.", "guildQuestsNotSupported": "Guildas não podem ser convidadas para missão.", - "questNotFound": "Missão \"<%= key %>\" não encontrada.", "questNotOwned": "Você não possui esse pergaminho de missão.", "questNotGoldPurchasable": "Missão \"<%= key %>\" não é comprável com ouro.", "questLevelTooHigh": "Você precisa ter nível <%= level %> para iniciar essa missão.", diff --git a/website/common/locales/pt/questscontent.json b/website/common/locales/pt/questscontent.json index d98dd946e0..834e4fe3c7 100644 --- a/website/common/locales/pt/questscontent.json +++ b/website/common/locales/pt/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/pt/settings.json b/website/common/locales/pt/settings.json index 521c876780..1e25bebfbf 100644 --- a/website/common/locales/pt/settings.json +++ b/website/common/locales/pt/settings.json @@ -30,7 +30,7 @@ "classTourPop": "Mostra o tour de como usar o sistema de classes.", "resetAccount": "Reiniciar Conta", "resetAccPop": "Comece de novo, removendo todos níveis, ouro, equipamentos, histórico, e tarefas.", - "deleteAccount": "Deletar Conta", + "deleteAccount": "Eliminar Conta", "deleteAccPop": "Cancela e remove sua conta do Habitica.", "feedback": "If you'd like to give us feedback, please enter it below - we'd love to know what you liked or didn't like about Habitica! Don't speak English well? No problem! Use the language you prefer.", "qrCode": "Código QR", @@ -89,7 +89,7 @@ "disabledWinterEvent": "Desativado durante o Evento do Mundo das Maravilhas de Inverno Pt.4 (já que as recompensas são adquiríveis com ouro).", "fix21Streaks": "Combos de 21 Dias", "discardChanges": "Descartar Alterações", - "deleteDo": "Faça, delete minha conta!", + "deleteDo": "Força, eliminem a minha conta!", "enterNumber": "Favor digitar um número entre 0 e 24", "fillAll": "Favor preencher todos campos", "invalidPasswordResetCode": "O código de reinicio de senha fornecido é inválido ou expirou.", diff --git a/website/common/locales/pt/spells.json b/website/common/locales/pt/spells.json index c6aad07e9a..427280579f 100644 --- a/website/common/locales/pt/spells.json +++ b/website/common/locales/pt/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Transforma um amigo em uma criatura marinha!", "spellSpecialSandText": "Areia", "spellSpecialSandNotes": "Inverta o feitiço que o tornou uma estrela do mar.", - "spellNotFound": "Habilidade \"<%= spellId %>\" não encontrada.", "partyNotFound": "Equipa não encontrada", "targetIdUUID": "\"targetId\" precisa ser um ID de usuário válido.", "challengeTasksNoCast": "O uso de habilidade em tarefas de desafio não é permitido.", diff --git a/website/common/locales/pt/subscriber.json b/website/common/locales/pt/subscriber.json index 54d034a457..c3502f5b24 100644 --- a/website/common/locales/pt/subscriber.json +++ b/website/common/locales/pt/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Código de cupom inválido.", "couponUsed": "Código de cupom já utilizado.", "couponCodeRequired": "O código do cupom é requerido.", - "eventRequired": "\"req.params.event\" é necessário.", - "countRequired": "\"req.query.count\" é necessário.", - "missingPaymentId": "req.query.paymentId em falta.", - "missingCustomerId": "req.query.customerId em falta.", - "missingPaypalBlock": "req.session.paypalBlock em falta.", - "missingSubKey": "req.query.sub em falta.", "paypalCanceled": "Your subscription has been canceled", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "receiveMysticHourglass": "Receive a Mystic Hourglass!", diff --git a/website/common/locales/pt/tasks.json b/website/common/locales/pt/tasks.json index 73c230a20f..f681ba2a44 100644 --- a/website/common/locales/pt/tasks.json +++ b/website/common/locales/pt/tasks.json @@ -120,8 +120,8 @@ "fortifyText": "A poção fortificante retornará todas as suas tarefas, exceto as tarefas de desafios, para um estado neutro (amarelo), como se você tivesse acabado de adicioná-las, e aumentará sua Saúde para a barra cheia. Isso é ótimo se suas tarefas vermelhas estão deixando o jogo muito difícil, ou se suas tarefas azuis estão deixando o jogo fácil demais. Se começar do zero te parecer mais motivador, gaste suas gemas e ganhe uma moratória!", "confirmFortify": "Tem certeza?", "fortifyComplete": "Fortificação completa!", - "deleteTask": "Apagar Tarefa", - "sureDelete": "De certeza que queres apagar esta tarefa?", + "deleteTask": "Eliminar Tarefa", + "sureDelete": "De certeza que queres eliminar esta tarefa?", "streakCoins": "Bônus de Combo!", "taskToTop": "Para o topo", "taskToBottom": "Para o fim", @@ -145,7 +145,6 @@ "rewardHelp3": "Equipamentos Especiais irão aparecer durante os Eventos Mundiais.", "rewardHelp4": "Não tenha medo de definir Recompensas Personalizadas! Confira algumas amostras aqui.", "clickForHelp": "Clique para ajuda", - "taskIdRequired": "\"taskId\" precisa ser um UUID válido.", "taskAliasAlreadyUsed": "A tarefa alíbi já está sendo utilizada em outra tarefa", "taskNotFound": "Tarefa não encontrada.", "invalidTaskType": "O tipo de tarefa precisa ser um de \"habit\", \"daily\", \"todo\", \"reward\".", diff --git a/website/common/locales/pt_BR/backgrounds.json b/website/common/locales/pt_BR/backgrounds.json index 06bf821354..712cabfd5f 100644 --- a/website/common/locales/pt_BR/backgrounds.json +++ b/website/common/locales/pt_BR/backgrounds.json @@ -346,11 +346,11 @@ "backgroundFlyingOverWildflowerFieldNotes": "Eleve-se sobre um Campo de Flores Silvestres.", "backgroundFlyingOverAncientForestText": "Floresta Anciã", "backgroundFlyingOverAncientForestNotes": "Voe sobre a copa das árvores de uma Florestal Anciã.", - "backgrounds052018": "SET 48: Released May 2018", - "backgroundTerracedRiceFieldText": "Terraced Rice Field", - "backgroundTerracedRiceFieldNotes": "Enjoy a Terraced Rice Field in the growing season.", - "backgroundFantasticalShoeStoreText": "Fantastical Shoe Store", - "backgroundFantasticalShoeStoreNotes": "Look for fun new footwear in the Fantastical Shoe Store.", - "backgroundChampionsColosseumText": "Champions' Colosseum", - "backgroundChampionsColosseumNotes": "Bask in the glory of the Champions' Colosseum." + "backgrounds052018": "Conjunto 48: Lançado em Maio de 2018", + "backgroundTerracedRiceFieldText": "Terraço Arrozal", + "backgroundTerracedRiceFieldNotes": "Aproveite o Terração Arrozal na estação de cultivo.", + "backgroundFantasticalShoeStoreText": "Fantástica Loja de Sapatos", + "backgroundFantasticalShoeStoreNotes": "Se divirta procurando um novo pisante na Fantástica Loja de Sapatos.", + "backgroundChampionsColosseumText": "O Coliseu dos Campeões ", + "backgroundChampionsColosseumNotes": "Encandeça-se na glória do Coliseu dos Campeões." } \ No newline at end of file diff --git a/website/common/locales/pt_BR/challenge.json b/website/common/locales/pt_BR/challenge.json index dd2a21c056..f5f62ec8b5 100644 --- a/website/common/locales/pt_BR/challenge.json +++ b/website/common/locales/pt_BR/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Vencedor(a) dos seguintes desafios", "challenges": "Desafios", "challengesLink": "Desafios", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Nenhum desafio ainda, visite", "toCreate": "para criar um.", "selectWinner": "Selecione um vencedor e finalize o desafio:", @@ -23,7 +25,9 @@ "filter": "Filtro", "groups": "Times", "noNone": "Nenhum", + "category": "Category", "membership": "Associação", + "ownership": "Ownership", "participating": "Participando", "notParticipating": "Não Participando", "either": "Ambos", diff --git a/website/common/locales/pt_BR/character.json b/website/common/locales/pt_BR/character.json index 6bc5d6544b..0803f71247 100644 --- a/website/common/locales/pt_BR/character.json +++ b/website/common/locales/pt_BR/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Mostrar Distribuição de Atributos", "hideQuickAllocation": "Esconder Distribuição de Atributos", "quickAllocationLevelPopover": "A cada nível que alcançar você terá um Ponto para distribuir em um atributo à sua escolha. Você pode fazer isso manualmente, ou deixar o jogo decidir por você usando uma das opções de Distribuição Automática encontradas em Usuário > Atributos.", - "invalidAttribute": "\"<%= attr %>\" não é um Atributo válido.", "notEnoughAttrPoints": "Você não possui Pontos de Atributos suficientes.", "style": "Estilo", "facialhair": "Facial", @@ -219,6 +218,5 @@ "mainHand": "Mão Primária", "offHand": "Mão Secundária", "pointsAvailable": "Pontos Disponíveis", - "pts": "pts", - "statsObjectRequired": "É necessário atualizar os atributos" + "pts": "pts" } \ No newline at end of file diff --git a/website/common/locales/pt_BR/communityguidelines.json b/website/common/locales/pt_BR/communityguidelines.json index b13f09659e..177c3e2f2e 100644 --- a/website/common/locales/pt_BR/communityguidelines.json +++ b/website/common/locales/pt_BR/communityguidelines.json @@ -11,41 +11,41 @@ "commGuidePara015": "O Habitica tem dois tipos de espaços sociais: público e privado. Espaços públicos incluem a Taverna, Guildas Públicas, GitHub, Trello e Wiki. Espaços privados são as Guildas Privadas, chat de grupo e Mensagens Privadas. Todos os nomes de exibição devem estar de acordo com as diretrizes de espaços públicos. Para mudar seu nome de exibição, navegue no website até Usuário > Perfil e clique no botão \"Editar\".", "commGuidePara016": "Ao navegar nos espaços públicos no Habitica, existem algumas regras gerais para manter todo mundo seguro e feliz. Elas devem ser fáceis para aventureiros como você!", "commGuideList02A": "Respeitem uns aos outros. Seja atencioso, gentil, amigável, e prestativo. Lembre-se: Habiticanos vem de vários contextos sociais e tem uma vasta diversidade de experiências. Isso é uma das coisa que faz o Habitica tão legal! Construir uma comunidade significa respeitar e celebrar nossas diferenças bem como nossas semelhanças. Aqui estão algumas simples maneiras de repeitar uns aos outros:", - "commGuideList02B": "Obedecer todo os Termos e Condições", - "commGuideList02C": "Não publique imagens ou texto que envolvam violência, ameaças ou que sejam sexualmente explícitas ou sugestivas. Também não promova discriminação, intolerância, racismo, sexismo, ódio, assédio ou ofensas contra um indivíduo ou grupo. Nem mesmo como uma piada. Isso inclui insultos bem como declarações. Nem todo mundo tem o mesmo senso de humor e, então, algo que você considera uma piada pode ser ofensivo para o outro. Ataque suas Diárias, não os outros.", - "commGuideList02D": "Mantenha o linguajar apropriado para todas as idades. Nós temos muitos Habiticanos jovens que acessam o site! Não vamos machucar os inocentes ou atrapalhar qualquer Habiticano a atingir seus objetivos.", - "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.", - "commGuideList02F": "Evite discussões longas de tópicos polêmicos na Taverna e assuntos que podem ser desnecessárias nesse contexto. Se você sente que alguém disse algo rude ou ofensivo, não responda essa pessoa. Se alguém mencionar algo que é permitido pelas regras, mas que é ofensivo para você, está tudo bem em avisar à pessoa de maneira educada. Se é algo que vai contra as Diretrizes ou os Termos de Serviço, você deve reportar e deixar que a moderação responda. Em caso de dúvida, reporte a publicação.", - "commGuideList02G": "Responda sempre o mais rápido possível qualquer pedido da Moderação. Isso pode in incluir, mas não se limitar a: pedir que você faça suas publicações nos locais privados, editar seu perfil para remover conteúdo impróprio, pedir para você discutir um assunto específico em um espaço mais apropriado, etc.", + "commGuideList02B": "Obedecer todos os Termos e Condições", + "commGuideList02C": "Não publique imagens ou texto que envolvam violência, ameaças ou que sejam sexualmente explícitas ou sugestivas. Também não promova discriminação, intolerância, racismo, sexismo, ódio, assédio ou ofensas contra um indivíduo ou grupo. Nem mesmo como uma piada. Isso inclui insultos, bem como declarações. Nem todo mundo tem o mesmo senso de humor e, então, algo que você considera uma piada pode ser ofensivo para o outro. Ataque suas Diárias, não os outros.", + "commGuideList02D": "Mantenha a linguagem apropriada para todas as idades. Temos muitos Habiticianos jovens que acessam o site! Não vamos machucar os inocentes ou atrapalhar qualquer Habiticiano a atingir seus objetivos.", + "commGuideList02E": "Tenha respeito pelas crenças dos outros. Não os julgue, mesmo se o que diz for algo que ache brando ou socialmente correto. Somos uma comunidade diversa, com pessoas de várias religiões e culturas e queremos que todas elas se sintam bem nos locais públicos. Atenção, se um moderador ou um membro da equipe te disser que certo termo é proibido no Habitica, a decisão é irreversível, mesmo que não o considere uma ofensa. Além disso, ofensas religiosas serão resolvidas severamente uma vez que violam os Termos de Serviço.", + "commGuideList02F": "Evite discussões longas de tópicos polêmicos na Taverna e assuntos que podem ser desnecessárias nesse contexto. Se você sente que alguém disse algo rude ou ofensivo, não responda essa pessoa. Se alguém mencionar algo que é permitido pelas regras, mas que é ofensivo para você, está tudo bem em avisar à pessoa de maneira educada. Se é algo que vai contra as Diretrizes ou os Termos de Serviço, você deve reportar e deixar que os Moderadores respondam. Em caso de dúvida, reporte a publicação.", + "commGuideList02G": "Responda sempre o mais rápido possível qualquer pedido da Moderação. Isso pode incluir, mas não se limitar a: pedir que você faça suas publicações nos locais privados, editar seu perfil para remover conteúdo impróprio, pedir para você discutir um assunto específico em um espaço mais apropriado, etc.", "commGuideList02H": "Respire e reflita antes de responder com raiva quando alguém disser que o que você disse ou fez deixou esse alguém desconfortável. É um grande sinal de força estar apto a pedir desculpas sinceras para alguém. Se você sentiu que a maneira que você foi respondido é inapropriada, fale com um moderador antes de falar com a pessoa publicamente.", - "commGuideList02I": "Divisive/contentious conversations should be reported to mods by flagging the messages involved or using the Moderator Contact Form. If you feel that a conversation is getting heated, overly emotional, or hurtful, cease to engage. Instead, report the posts to let us know about it. Moderators will respond as quickly as possible. It's our job to keep you safe. If you feel that more context is required, you can report the problem using the Moderator Contact Form.", - "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!", - "commGuideList02K": "Avoid posting large header text in the public chat spaces, particularly the Tavern. Much like ALL CAPS, it reads as if you were yelling, and interferes with the comfortable atmosphere.", - "commGuideList02L": "We highly discourage the exchange of personal information -- particularly information that can be used to identify you -- in public chat spaces. Identifying information can include but is not limited to: your address, your email address, and your API token/password. This is for your safety! Staff or moderators may remove such posts at their discretion. If you are asked for personal information in a private Guild, Party, or PM, we highly recommend that you politely refuse and alert the staff and moderators by either 1) flagging the message if it is in a Party or private Guild, or 2) filling out the Moderator Contact Form and including screenshots.", - "commGuidePara019": "In private spaces, users have more freedom to discuss whatever topics they would like, but they still may not violate the Terms and Conditions, including posting slurs or any discriminatory, violent, or threatening content. Note that, because Challenge names appear in the winner's public profile, ALL Challenge names must obey the public space guidelines, even if they appear in a private space.", - "commGuidePara020": "Mensagens Privadas (MP) possuem algumas diretrizes adicionais. Caso alguém tenha bloqueado você, não entre em contato em outros lugares para pedir que essa pessoa te desbloqueie. Adicionalmente, você não deve mandar MP para alguém pedindo por ajuda (uma vez que respostas públicas à perguntas feitas são benéficas para a comunidade). Por fim, não envie MP a ninguém implorando por presentes, gemas ou por uma assinatura, pois isso pode ser considerado spam. ", - "commGuidePara020A": "If you see a post that you believe is in violation of the public space guidelines outlined above, or if you see a post that concerns you or makes you uncomfortable, you can bring it to the attention of Moderators and Staff by clicking the flag icon to report it. A Staff member or Moderator will respond to the situation as soon as possible. Please note that intentionally reporting innocent posts is an infraction of these Guidelines (see below in “Infractions”). PMs cannot be flagged at this time, so if you need to report a PM, please contact the Mods via the form on the “Contact Us” page, which you can also access via the help menu by clicking “Contact the Moderation Team.” You may want to do this if there are multiple problematic posts by the same person in different Guilds, or if the situation requires some explanation. You may contact us in your native language if that is easier for you: we may have to use Google Translate, but we want you to feel comfortable about contacting us if you have a problem.", + "commGuideList02I": "Conversas polêmicas ou contraditórias devem ser reportadas aos moderadores por meio da opção de reportar as mensagens envolvidas ou utilizando o Formulário de contato ao Moderador. Se sentir que a conversa está se tornando acalorada, passional ou ofensiva, ao invés de continuar, saia dela e nos informe a situação. Moderadores responderão o mais rápido possível já que é nosso trabalho lhe manter seguro. Caso acredite que explicar o contexto é necessário você pode o explicar através do Formulário de contato ao Moderador.", + "commGuideList02J": " Ninguém gosta de spam Alguns exemplos do que são spam: postar o mesmo comentário ou pergunta em vários fóruns, postar links sem explicação o contexto, postar mensagens sem sentido, postar várias mensagens fazendo propaganda de uma Guilda, Grupo ou Desafio, ou simplesmente postar várias mensagens em seguida. Pedir por Gemas ou Assinaturas em QUALQUER espaço ou por mensagem privada também é considerado spam. Se clicar em seu link te gerar qualquer benefício, por favor, explique no texto da mensagem o que ele é, caso contrário também será considerado como spam.

A decisão sobre o que é ou não um spam pertence aos Moderadores, mesmo que pense o contrário. EXEMPLO PRÁTICO: anunciar a sua Guilda uma ou duas vezes é aceitável, mas múltiplas postagens sobre ela em um único dia poderá ser considerado spam, por mais útil que aquela Guilda seja. ", + "commGuideList02K": " Evite postar cabeçalhos de texto largos em chats públicos, principalmente na Tavern. ASSIM COMO USAR CAIXA ALTA, estes são lidos como se você estivesse gritando e interferem com a atmosfera agradável que queremos.", + "commGuideList02L": " A internet pode ser perigosa, por isso realmente desencorajamos que compartilhe informações pessoais em locais públicos. Exemplos de informações que o identifique pode ser : o endereço onde vive ou trabalha, seu e-mail, seu API token (lembre-se que ele é uma senha!). Esta é uma regra para sua segurança e a Equipe ou Moderadores do Habitica podem remover postagens que contenham informações pessoais quando acharem necessário (mas lembre-se que alguém pode ter copiado antes, logo o mais seguro é não compartilhar). Se lhe pedirem informações pessoais em uma Guilda ou por DM, recomendamos que recuse educadamente o pedido e alerte um moderador por meio da 1) opção de reportar a mensagem ou 2) preenchendo o Formulário de contato ao Moderador incluindo capturas de tela.", + "commGuidePara019": "Em espaços privados os usuários tem maior liberdade para discutir qualquer tema que os interessem, mas ainda não devem violar os Termos e Condições, incluindo qualquer postagem ofensiva, discriminatória, violenta ou ameaçadora. Aviso: Desafios concluídos aparecem no perfil público do vencedor, de maneira que QUALQUER nome de desafio deve respeitar as Diretrizes de Espaço Público, mesmo que sejam postadas em um local privado.", + "commGuidePara020": "Mensagens Diretas (DM) possuem algumas diretrizes adicionais. Caso alguém tenha bloqueado você, não entre em contato em outros lugares para pedir que essa pessoa te desbloqueie. Adicionalmente, você não deve mandar DM para alguém pedindo por ajuda (uma vez que respostas públicas à perguntas feitas são benéficas para a comunidade). Por fim, não envie DM a ninguém implorando por presentes, gemas ou por uma assinatura, pois isso pode ser considerado spam. ", + "commGuidePara020A": "Se você notar uma postagem a qual acredita ser uma violação das Diretrizes de Espaço Público descritas acima, ou se você vir uma postagem que o preocupa ou o incomode, você pode alertar os Moderadores e a Equipe ao clicar em Reportar. Um membro da Equipe ou Moderador irá responder-lo o quão cedo possível. Por favor note que intencionalmente marcar postagens inocentes é uma infração dessas Diretrizes (veja abaixo em \"Infrações\"). Atualmente não há o ícone de relatar uma DM, então caso for necessário reportar uma DM, por favor capture a tela e contate um dos Moderadores por meio do formulário disponível na opção \"fale conosco\" no final das paginas do Habitica ou indo no menu de Ajuda e clicando na opção \"Contate os Moderadores.\" Você pode precisar fazer isso se houver várias mensagens problemáticas da mesma pessoa em diferentes Guildas, ou se a situação necessitar de ser explicada. É possível nos contactar na sua língua nativa se assim for mais fácil: pode ser que usemos o Google Tradutor para lhe entender, mas o mais importante é que esteja confortável para nos avisar caso tenha algum problema.", "commGuidePara021": "Além disso, alguns espaços públicos no Habitica tem regras adicionais.", "commGuideHeadingTavern": "A Taverna", - "commGuidePara022": "The Tavern is the main spot for Habiticans to mingle. Daniel the Innkeeper keeps the place spic-and-span, and Lemoness will happily conjure up some lemonade while you sit and chat. Just keep in mind…", - "commGuidePara023": "Conversation tends to revolve around casual chatting and productivity or life improvement tips. Because the Tavern chat can only hold 200 messages, it isn't a good place for prolonged conversations on topics, especially sensitive ones (ex. politics, religion, depression, whether or not goblin-hunting should be banned, etc.). These conversations should be taken to an applicable Guild. A Mod may direct you to a suitable Guild, but it is ultimately your responsibility to find and post in the appropriate place.", - "commGuidePara024": "Don't discuss anything addictive in the Tavern. Many people use Habitica to try to quit their bad Habits. Hearing people talk about addictive/illegal substances may make this much harder for them! Respect your fellow Tavern-goers and take this into consideration. This includes, but is not exclusive to: smoking, alcohol, pornography, gambling, and drug use/abuse.", - "commGuidePara027": "When a moderator directs you to take a conversation elsewhere, if there is no relevant Guild, they may suggest you use the Back Corner. The Back Corner Guild is a free public space to discuss potentially sensitive subjects that should only be used when directed there by a moderator. It is carefully monitored by the moderation team. It is not a place for general discussions or conversations, and you will be directed there by a mod only when it is appropriate.", + "commGuidePara022": "A Taverna é o principal lugar para os Habiticanos socializarem. Daniel, o dono da pousada, mantém o lugar nos trinques, e Lemoness ficará feliz em te fazer uma limonada enquanto você senta e conversa. Mas tenha em mente que...", + "commGuidePara023": "Geralmente na Taverna são conversados assuntos casuais ou dicas de produtividade ou como melhorar sua vida. Como a Taverna suporta apenas 200 mensagens, este não é um lugar ideal para conversas prolongadas, sobretudo as de assunto sensíveis (tipo religião, política, depressão ou se a caça aos globins deve ser banida pelos seus aspectos econômicos e sociais). Essas conversas devem ser feitas em uma Guilda relevante ao assunto. Um moderador pode até lhe indicar uma Guilda para o teu assunto, mas esta é sua responsabilidade encontrar e postar o assunto no local apropriado.", + "commGuidePara024": "Não comente sobre coisas viciantes na Taverna. Vários usuários usam o Habitica querendo parar seus maus hábitos. Ouvir conversas sobre substâncias viciantes/ilegais pode tornar esta tarefa muito mais difícil para eles. Respeite seu camaradas Taverneiros e pense nisso antes de postar. Exemplos para esta regra: tabaco, álcool, pornografia, apostas, e uso/abuso de drogas.", + "commGuidePara027": "As vezes ainda não há uma Guilda relevante para o seu assunto. Quando isso acontecer o moderador lhe indicará a Esquina de Trás. A Guilda da Esquina de Trás é um espaço público para discutir assuntos sensíveis e só deve ser usada quando direcionada por um Moderador. Este território é deles e é cuidadosamente vigiada. Não é um espaço para discussões gerais e você somente será direcionado por um moderador quando for apropriado. ", "commGuideHeadingPublicGuilds": "Guildas Públicas", - "commGuidePara029": "Public Guilds are much like the Tavern, except that instead of being centered around general conversation, they have a focused theme. Public Guild chat should focus on this theme. For example, members of the Wordsmiths Guild might be cross if the conversation is suddenly focusing on gardening instead of writing, and a Dragon-Fanciers Guild might not have any interest in deciphering ancient runes. Some Guilds are more lax about this than others, but in general, try to stay on topic!", - "commGuidePara031": "Some public Guilds will contain sensitive topics such as depression, religion, politics, etc. This is fine as long as the conversations therein do not violate any of the Terms and Conditions or Public Space Rules, and as long as they stay on topic.", - "commGuidePara033": "Public Guilds may NOT contain 18+ content. If they plan to regularly discuss sensitive content, they should say so in the Guild description. This is to keep Habitica safe and comfortable for everyone.", - "commGuidePara035": "If the Guild in question has different kinds of sensitive issues, it is respectful to your fellow Habiticans to place your comment behind a warning (ex. \"Warning: references self-harm\"). These may be characterized as trigger warnings and/or content notes, and Guilds may have their own rules in addition to those given here. If possible, please use markdown to hide the potentially sensitive content below line breaks so that those who may wish to avoid reading it can scroll past it without seeing the content. Habitica staff and moderators may still remove this material at their discretion.", - "commGuidePara036": "Additionally, the sensitive material should be topical -- bringing up self-harm in a Guild focused on fighting depression may make sense, but is probably less appropriate in a music Guild. If you see someone who is repeatedly violating this guideline, especially after several requests, please flag the posts and notify the moderators via the Moderator Contact Form.", - "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!", - "commGuidePara038": "All Tavern Challenges and Public Guild Challenges must comply with these rules as well.", + "commGuidePara029": "Guildas públicas são parecidas com a Taverna, só que ao invés de assuntos genéricos elas focam em um tema específico.O chat dessas guildas deve focar nesse tema. Por exemplo, membros da 'Guilda Brasil' podem ficar aborrecidos se várias pessoas começarem a falar em alemão, mesmo que seja por culpa de um desafio. Uma guilda de apreciadores de dragões pode não ter nenhum interesse em decifrar runas antigas. Algumas guildas são mais tolerantes a respeito disso do que outras, mas em geral, tente não fugir do assunto!", + "commGuidePara031": "Algumas das Guildas públicas tratam de assuntos delicados como depressão, religião, politica, etc. Esteja tranquilo ao falar sobre esses assuntos nestas guildas, desde que as conversas lá não violem nenhum dos Termos e Condições ou Regras de Espaços Públicos além de manter o tópico.", + "commGuidePara033": "Guildas Públicas são proibidas de conter conteúdo adulto ( 18+). Caso os membros desejem falar regularmente sobre assuntos sensíveis, isto deverá está escrito na descrição da Guilda. Esta regra é para manter o Habitica seguro e confortável para todos.", + "commGuidePara035": "Se a Guilda em questão falar de problemas sensíveis, é respeitoso para seus companheiros Habiticianos colocar um aviso no início da mensagem ( exemplo \"Aviso: Referências a automutilação\", \"Aviso: Referências a suicídio\" ) . Estas podem ser caracterizadas como aviso de gatilho ou notas de conteúdo e as Guildas podem ter suas próprias regras em adição a estas aqui. Se possível, por favor use a quebra de texto do markdown para esconder o texto potencialmente sensível. Assim aqueles que quiserem evitar podem rolar a tela sem ver o conteúdo. Ainda, a Equipe do Habitica ou os Moderadores podem remover o material caso eles achem necessário.", + "commGuidePara036": "Adicionalmente, o conteúdo sensível deve fazer parte do tópico, isto é, falar sobre suicídio em uma Guilda que luta contra a depressão faz sentido, mas é pode ser inapropriado se o tema da Guilda for sobre música. Se ver alguém violando esta diretriz repetidamente, principalmente após avisos, por favor reporte as postagens e notifique os Moderadores atraves do Formulário de contato ao Moderador.", + "commGuidePara037": "Nenhuma Guilda, seja ela Pública ou Privada, deve ser criada com o propósito de atacar qualquer grupo ou indivíduo. O descumprimento desta regra com a criação deste tipo de Guilda é tratado com banimento imediato.Combate maus hábitos, não seus colegas! ", + "commGuidePara038": "Todos os Desafios da Taverna e das Guildas Públicas também são regulados por essas regras e deverão cumprir-las. ", "commGuideHeadingInfractionsEtc": "Infrações, Consequências e Restauração", "commGuideHeadingInfractions": "Infrações", "commGuidePara050": "Em sua imensa maioria, Habiticanos auxiliam uns aos outros, são respeitosos e trabalham para manter toda a comunidade divertida e amigável. Contudo, de vez em quando, algo que um Habiticano faz pode violar uma das diretrizes acima. Quando isso ocorre, os Moderadores tomarão as medidas que considerarem necessárias para manter Habitica segura e confortável para todos.", - "commGuidePara051": "There are a variety of infractions, and they are dealt with depending on their severity. These are not comprehensive lists, and the Mods can make decisions on topics not covered here at their own discretion. The Mods will take context into account when evaluating infractions.", + "commGuidePara051": "Há uma variedade de infrações e elas são tratadas de acordo com sua severidade. Estas listas não são conclusivas e Moderadores possuem o poder de arbítrio inclusive em tópicos aqui não cobertos. Moderadores levarão contexto em consideração ao avaliar infrações.", "commGuideHeadingSevereInfractions": "Infrações Severas", "commGuidePara052": "Infrações Severas causam grande dano à segurança da comunidade de Habitica e seus usuários e, portanto, tem consequências severas.", - "commGuidePara053": "Estes são alguns exemplos de Infrações Severas. Esta não é uma lista completa.", + "commGuidePara053": "Estes são alguns exemplos de Infrações Severas. ATENÇÃO: Esta lista não pretende ser abrangente e ações aqui não descritas podem resultar em infrações a critério da Equipe e Moderação.", "commGuideList05A": "Violação dos Termos e Condições de Uso", "commGuideList05B": "Discurso/Imagens de Ódio, Assédio/Perseguição, Cyber-Bullying, Discussões Inflamadas, e \"Trolling\"", "commGuideList05C": "Violação da Condicional", @@ -55,34 +55,34 @@ "commGuideList05G": "Enganar intencionalmente a Equipe ou Moderadores em ordem de evitar consequências ou colocar outro usuário em problemas. ", "commGuideHeadingModerateInfractions": "Infrações Moderadas", "commGuidePara054": "Infrações moderadas não tornam nossa comunidade perigosa, mas a tornam desagradável. Essas infrações terão consequências moderadas. Quando em conjunto com múltiplas infrações, as consequências podem ter sua severidade aumentada.", - "commGuidePara055": "Estes são alguns exemplos de Infrações Moderadas. Esta não é uma lista completa.", - "commGuideList06A": "Ignoring, disrespecting or arguing with a Mod. This includes publicly complaining about moderators or other users, publicly glorifying or defending banned users, or debating whether or not a moderator action was appropriate. If you are concerned about one of the rules or the behaviour of the Mods, please contact the staff via email (admin@habitica.com).", - "commGuideList06B": "Backseat Modding. To quickly clarify a relevant point: A friendly mention of the rules is fine. Backseat modding consists of telling, demanding, and/or strongly implying that someone must take an action that you describe to correct a mistake. You can alert someone to the fact that they have committed a transgression, but please do not demand an action -- for example, saying, \"Just so you know, profanity is discouraged in the Tavern, so you may want to delete that,\" would be better than saying, \"I'm going to have to ask you to delete that post.\"", - "commGuideList06C": "Intentionally flagging innocent posts.", - "commGuideList06D": "Repeatedly Violating Public Space Guidelines", - "commGuideList06E": "Repeatedly Committing Minor Infractions", + "commGuidePara055": "Eis alguns exemplos de Infrações Moderadas. ATENÇÃO: Esta lista não pretende ser abrangente e ações aqui não descritas podem resultar em infrações a critério da Equipe e Moderação.", + "commGuideList06A": "Ignorar, desrespeitar ou discutir com um Moderador. Isso inclui reclamar publicamente de moderadores ou outros usuários, glorificar ou defender usuários banidos ou debater se a ação da Moderação foi apropiada. Se você está preocupado com uma das regras ou o comportamento dos Moderadores, favor entrar em contato com a Equipe pelo e-mail (admin@habitica.com).", + "commGuideList06B": "Bancar de Justiceiro. Esta é importante clarificar : Uma menção amigável das regras é aceitável. Bancar o Justiceiro consiste em dizer, demandar ou seriamente implicar que alguém deve tomar uma providência que você considera como correção de um erro. Você pode alertar alguém para o fato dele ter cometido uma transgressão, mas por favor não exija uma providência - por exemplo, dizer \"Só para você saber, profanidades são desencorajadas na Taverna, então você pode querer deletar isso\" seria melhor que dizer, \"Eu vou ter que pedir para que delete esta mensagem\"", + "commGuideList06C": "Reportar postagens inocentes intencionalmente.", + "commGuideList06D": "Violar Repetidamente as Diretrizes de Espaço Público", + "commGuideList06E": "Cometer Pequenas Infrações Repetidamente.", "commGuideHeadingMinorInfractions": "Infrações Leves", "commGuidePara056": "Infrações Leves, apesar de desencorajadas, tem também consequências pequenas. Se elas continuarem a ocorrer, podem levar à consequências mais severas com o passar do tempo.", "commGuidePara057": "Estes são alguns exemplos de Infrações Leves. Esta não é uma lista completa.", "commGuideList07A": "Primeira violação das Diretrizes de Espaço Publico", - "commGuideList07B": "Any statements or actions that trigger a \"Please Don't\". When a Mod has to say \"Please don't do this\" to a user, it can count as a very minor infraction for that user. An example might be \"Please don't keep arguing in favor of this feature idea after we've told you several times that it isn't feasible.\" In many cases, the Please Don't will be the minor consequence as well, but if Mods have to say \"Please Don't\" to the same user enough times, the triggering Minor Infractions will start to count as Moderate Infractions.", - "commGuidePara057A": "Some posts may be hidden because they contain sensitive information or might give people the wrong idea. Typically this does not count as an infraction, particularly not the first time it happens!", + "commGuideList07B": "Qualquer pronunciamento ou ação que provoque um \"Por Favor, Não\". Quando um Moderador precisa dizer \"Por Favor, Não faça isso\" para um usuário, isso pode contar como uma infração muito pequena ao usuário. Um exemplo poderia ser um Moderador dizer: \"Por Favor, Não continue discutindo em favor da implementação desta funcionalidade, já lhe dizemos repetidamente que isto não é viável.\" Em muitos casos, o \"Por favor, Não\" será também a pequena consequência, mas se os Moderadores precisarem dizer \"Por Favor, Não\" para o mesmo usuário repetidas vezes, as infrações Infrações antes Leves passarão a ser consideradas como Moderadas.", + "commGuidePara057A": "Algumas postagem podem ser ocultadas por conter informação sensíveis ou por serem mal interpretadas. Tipicamente isto não conta como Infração, principalmente se for a primeira vez que ocorre. ", "commGuideHeadingConsequences": "Consequências", "commGuidePara058": "No Habitica -- como na vida real -- cada ação tem uma consequência, seja ficar em forma porque você tem corrido, seja ficar com cáries porque você tem comido muito açúcar, ou seja passar de ano porque você tem estudado.", "commGuidePara059": "Similarmente, todas infrações tem consequências diretas.Alguns exemplos de consequências estão listados abaixo.", - "commGuidePara060": "If your infraction has a moderate or severe consequence, there will be a post from a staff member or moderator in the forum in which the infraction occurred explaining:", + "commGuidePara060": "Caso a sua infração tiver uma consequência moderada ou severa, um membro da Equipe ou Moderador postará no fórum no qual a infração ocorreu explicando:", "commGuideList08A": "qual foi sua infração", "commGuideList08B": "qual é a consequência", "commGuideList08C": "o que fazer para corrigir a situação e restaurar seu status, se possível.", - "commGuidePara060A": "If the situation calls for it, you may receive a PM or email as well as a post in the forum in which the infraction occurred. In some cases you may not be reprimanded in public at all.", - "commGuidePara060B": "If your account is banned (a severe consequence), you will not be able to log into Habitica and will receive an error message upon attempting to log in. If you wish to apologize or make a plea for reinstatement, please email the staff at admin@habitica.com with your UUID (which will be given in the error message). It is your responsibility to reach out if you desire reconsideration or reinstatement.", + "commGuidePara060A": "Se a situação pedir por isso, você pode receber uma DM ou email além da postagem no fórum onde a infração ocorreu. Em alguns casos você não será sequer reprimido em público.", + "commGuidePara060B": "Caso sua conta seja banida ( uma consequência severa), você não poderá logar no Habitica e receberá uma mensagem de erro ao tentar. Caso deseja se desculpar ou pedir para ser reintegrado, por favor mande um email para a Equipe pelo email admin@habitica.com com seu UUID (que será mostrado na mensagem de erro). É sua a responsabilidade de se reaproximar para pedir uma reconsideração ou reintegração.", "commGuideHeadingSevereConsequences": "Exemplos de Consequências Severas", "commGuideList09A": "Contas banidas (veja acima) ", "commGuideList09C": "Permanentemente desabilitar (\"congelar\") progressão dos Níveis de Contribuidor", "commGuideHeadingModerateConsequences": "Exemplos de Consequências Moderadas", - "commGuideList10A": "Restricted public and/or private chat privileges", - "commGuideList10A1": "Se as suas ações resultaram na revogação de seus privilégios no chat, um Moderador ou membro da Equipe irá enviá-lo uma PM e/ou postar no forum no qual você foi silenciado para notificá-lo sobre a razão do seu silenciamento e a duração do tempo pelo qual você será silenciado. Ao final desse período, você receberá seus privilégios de chat de volta, dado que você possui a intenção de corrigir o comportamento pelo o qual você foi silenciado, e cumprir com as Diretrizes da Comunidade.", - "commGuideList10C": "Restricted Guild/Challenge creation privileges", + "commGuideList10A": "Privilégios de chat privado e/ou público restringidos", + "commGuideList10A1": "Se as suas ações resultaram na revogação de seus privilégios no chat, um Moderador ou membro da Equipe irá enviá-lo uma DM e/ou postar no fórum no qual você foi silenciado para notificá-lo sobre a razão do seu silenciamento e a duração do tempo pelo qual você será silenciado. Ao final desse período, você receberá seus privilégios de chat de volta, dado que você possui a intenção de corrigir o comportamento pelo o qual você foi silenciado, e cumprir com as Diretrizes da Comunidade.", + "commGuideList10C": "Privilégios de criação de Guilda/Desafios restringidos", "commGuideList10D": "Temporariamente desabilitar (\"congelar\") progressão dos Níveis de Contribuidor", "commGuideList10E": "Rebaixamento de Nível de Contribuidor", "commGuideList10F": "Colocar usuários em \"Condicional\"", @@ -93,11 +93,11 @@ "commGuideList11D": "Exclusões (Moderadores/Equipe podem deletar conteúdo problemático)", "commGuideList11E": "Edições (Moderadoress/Equipe podem editar conteúdo problemático)", "commGuideHeadingRestoration": "Restauração", - "commGuidePara061": "Habitica is a land devoted to self-improvement, and we believe in second chances. If you commit an infraction and receive a consequence, view it as a chance to evaluate your actions and strive to be a better member of the community.", - "commGuidePara062": "The announcement, message, and/or email that you receive explaining the consequences of your actions is a good source of information. Cooperate with any restrictions which have been imposed, and endeavor to meet the requirements to have any penalties lifted.", - "commGuidePara063": "If you do not understand your consequences, or the nature of your infraction, ask the Staff/Moderators for help so you can avoid committing infractions in the future. If you feel a particular decision was unfair, you can contact the staff to discuss it at admin@habitica.com.", + "commGuidePara061": "Habitica é uma terra devotada ao auto-aprimoramento e nós acreditamos em segundas chances. Se você cometeu uma infração e recebeu uma consequência, veja isso como uma chance para avaliar suas ações e empenhar-se em ser um membro melhor na comunidade.", + "commGuidePara062": "O anúncio, mensagem ou e-mail que você receber lhe explicando as consequências das suas ações é uma boa fonte de informação. Coopere com quaisquer restrições que lhe tenham sido impostas, e empenhe-se para atender os requerimentos para ter alguma penalidade removida.", + "commGuidePara063": "Se não for claro as suas consequencias ou não entender a natureza da sua infração, pergunte para a Equipe ou a Moderação como você pode evitar infrações no futuro. Caso sinta que foi uma decisão em especial foi injusta, você pode argumentar com a Equipe no email admin@habitica.com.", "commGuideHeadingMeet": "Conheça a Equipe e os Moderadores! ", - "commGuidePara006": "Habitica has some tireless knights-errant who join forces with the staff members to keep the community calm, contented, and free of trolls. Each has a specific domain, but will sometimes be called to serve in other social spheres.", + "commGuidePara006": "O Habitica possui alguns cavaleiros incansáveis que unem forças com os membros da Equipe para manter a comunidade calma, entretida e livre de trolls. Cada um possui um domínio específico mas poderão ser chamados para servir em outras esferas sociais.", "commGuidePara007": "A Equipe tem etiquetas roxas marcadas com coroas. O título deles é \"Heroico\".", "commGuidePara008": "Moderadores tem etiquetas azul escuro marcadas com estrelas. O título deles é \"Guardiã(o)\". A única exceção é Bailey, que, sendo uma NPC, tem uma etiqueta preta e verde marcada com uma estrela.", "commGuidePara009": "Os atuais Membros da Equipe são (da esquerda para a direita):", @@ -110,11 +110,11 @@ "commGuidePara011b": "no GitHub/Wikia", "commGuidePara011c": "na Wikia", "commGuidePara011d": "no GitHub", - "commGuidePara012": "If you have an issue or concern about a particular Mod, please send an email to our Staff (admin@habitica.com).", - "commGuidePara013": "In a community as big as Habitica, users come and go, and sometimes a staff member or moderator needs to lay down their noble mantle and relax. The following are Staff and Moderators Emeritus. They no longer act with the power of a Staff member or Moderator, but we would still like to honor their work!", - "commGuidePara014": "Staff and Moderators Emeritus:", + "commGuidePara012": "Se você possui um problema ou uma preocupação a respeito de um Moderador em específico, por favor envie um email para a Equipe do Habitica (admin@habitica.com).", + "commGuidePara013": "Em uma comunidade tão grande quanto a do Habitica, usuários vem e vão e algumas vezes um funcionário da Equipe ou Moderador precisa abandonar seu manto nobre e relaxar. Os seguintes são Moderadores Eméritos. Eles não mais agem com o poder de um Moderador, mas nós ainda gostaríamos de honrar seu trabalho!", + "commGuidePara014": "Equipe e Moderadores Eméritos:", "commGuideHeadingFinal": "A Seção Final", - "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.", + "commGuidePara067": "Então aqui está, bravo Habitcano -- as Diretrizes da Comunidade! Enxugue o suor da sua testa e dê a si mesmo um pouco de EXP por ler tudo isso. Se você tem qualquer pergunta ou preocupação sobre essas Diretrizes da Comunidade, por favor fale conosco por meio do Formulário de contato ao Moderador e ficaremos felizes em lhe esclarecer as alguma coisas. ", "commGuidePara068": "Agora vá em frente, bravo aventureiro, e acabe com algumas Diárias!", "commGuideHeadingLinks": "Links Úteis", "commGuideLink01": "Ajuda do Habitica: Faça uma Pergunta: uma Guilda para usuários fazerem perguntas!", diff --git a/website/common/locales/pt_BR/contrib.json b/website/common/locales/pt_BR/contrib.json index a4aef4c697..f9e2959101 100644 --- a/website/common/locales/pt_BR/contrib.json +++ b/website/common/locales/pt_BR/contrib.json @@ -49,7 +49,6 @@ "UUID": "ID do Usuário", "loadUser": "Carregar Usuário", "noAdminAccess": "Você não possui acesso de administrador.", - "pageMustBeNumber": "req.query.page precisa ser um número", "userNotFound": "Usuário não encontrado.", "invalidUUID": "UUID precisa ser válida", "title": "Título", diff --git a/website/common/locales/pt_BR/front.json b/website/common/locales/pt_BR/front.json index b9f74e3c2a..ce665f3285 100644 --- a/website/common/locales/pt_BR/front.json +++ b/website/common/locales/pt_BR/front.json @@ -304,7 +304,7 @@ "alreadyHaveAccountLogin": "Já possui uma conta no Habitica? Faça login.", "dontHaveAccountSignup": "Não possui uma conta no Habitica? Cadastre-se.", "motivateYourself": "Motive-se a alcançar seus objetivos.", - "timeToGetThingsDone": "It's time to have fun when you get things done! Join over <%= userCountInMillions %> million Habiticans and improve your life one task at a time.", + "timeToGetThingsDone": "É hora de se divertir enquanto termina seus afazeres! Junte-se a mais de<%= userCountInMillions %> milhões de Habiticanos e melhore sua vida uma tarefa por vez.", "singUpForFree": "Cadastre-se De Graça", "or": "OU", "gamifyYourLife": "Gamifique Sua Vida", diff --git a/website/common/locales/pt_BR/gear.json b/website/common/locales/pt_BR/gear.json index 4aabe9a990..a569953837 100644 --- a/website/common/locales/pt_BR/gear.json +++ b/website/common/locales/pt_BR/gear.json @@ -327,7 +327,7 @@ "weaponArmoireWeaversCombText": "Pente do Tecelão", "weaponArmoireWeaversCombNotes": "Use esse pente para juntar seus fios em um tecido bem trançado. Aumenta Percepção em <%= per %> e Força em <%= str %>. Armário Encantado: Conjunto do Tecelão ( Item 2 de 3).", "weaponArmoireLamplighterText": "Acendedor de Lampiões", - "weaponArmoireLamplighterNotes": "This long pole has a wick on one end for lighting lamps, and a hook on the other end for putting them out. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Lamplighter's Set (Item 1 of 4)", + "weaponArmoireLamplighterNotes": "Esta longa vara tem um pavio em uma extremidade para lâmpadas de iluminação e um gancho na outra extremidade para colocá-las para fora. Aumenta Constituição em <%= con %> e Percepção em <%= per %>. Armário Encantado: Conjunto do Lampião (Item 1 de 4)", "weaponArmoireCoachDriversWhipText": "Chicote do Carroceiro", "weaponArmoireCoachDriversWhipNotes": "Your steeds know what they're doing, so this whip is just for show (and the neat snapping sound!). Increases Intelligence by <%= int %> and Strength by <%= str %>. Enchanted Armoire: Coach Driver Set (Item 3 of 3).", "weaponArmoireScepterOfDiamondsText": "Cetro de Diamantes", diff --git a/website/common/locales/pt_BR/groups.json b/website/common/locales/pt_BR/groups.json index c5931fac09..819dbb4666 100644 --- a/website/common/locales/pt_BR/groups.json +++ b/website/common/locales/pt_BR/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Mensagem opcional", "yesRemove": "Sim, remova-os", "foreverAlone": "Não é possível curtir a própria mensagem. Não seja 'aquela' pessoa.", - "sortDateJoinedAsc": "Maior Tempo no Habitica", - "sortDateJoinedDesc": "Menor Tempo no Habitica", - "sortLoginAsc": "Último Login", - "sortLoginDesc": "Último Login", - "sortLevelAsc": "Nível mais baixo", - "sortLevelDesc": "Nível mais alto", - "sortNameAsc": "Nome (A - Z)", - "sortNameDesc": "Nome (Z - A)", - "sortTierAsc": "Nível Mais Baixo", - "sortTierDesc": "Nível Mais Alto", + "sortBackground": "Ordenar por Cenário", + "sortClass": "Ordenar por Classe", + "sortDateJoined": "Ordernar por Data de Entrada", + "sortLogin": "Ordenar por Data de Login ", + "sortLevel": "Ordenar por Nível", + "sortName": "Ordenar por Nome", + "sortTier": "Ordernar por Nível de Contribuidor", + "ascendingAbbrev": "Cresc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Aplicar opção de ordem para o Cabeçalho do Grupo", "confirmGuild": "Criar Guilda por 4 Gemas?", "leaveGroupCha": "Abandonar os desafios da Guilda e...", "confirm": "Confirmar", @@ -131,6 +131,10 @@ "clearAll": "Deletar Todas as Mensagens", "confirmDeleteAllMessages": "Tem certeza que deseja deletar todas as mensagens na sua caixa de entrada? Outros usuários ainda irão ver as mensagens que você enviou para eles.", "optOutPopover": "Não gosta de mensagens privadas? Clique para desativar completamente", + "PMPlaceholderTitle": "Nada aqui ainda", + "PMPlaceholderDescription": "Selecione uma conversa à esquerda", + "PMPlaceholderTitleRevoked": "Seus privilégios do chat foram revogados", + "PMPlaceholderDescriptionRevoked": "Você não pode enviar mensagens pois seus privilégios do chat foram revogados. Se tiver alguma pergunta ou preocupação quanto a isso, por favor envie um email para admin@habitica.com para argumentar com a Equipe.", "block": "Bloquear", "unblock": "Desbloquear", "pm-reply": "Enviar uma resposta", @@ -146,7 +150,7 @@ "report": "Reportar", "abuseFlag": "Reportar violação das Diretrizes da Comunidade", "abuseFlagModalHeading": "Reportar uma Violação", - "abuseFlagModalBody": "Você tem certeza de que quer denunciar esta publicação? Você pode apenas denunciar uma publicação que viola as <%= firstLinkStart %>Diretrizes da Comunidade<%= linkEnd %> ou os <%= secondLinkStart %>Termos de Serviço<%= linkEnd %>. Uma denúncia infundada também é uma violação das Diretrizes de Comunidade e pode dar acarretar à você uma infração.", + "abuseFlagModalBody": "Você tem certeza de que quer denunciar esta publicação? Você pode apenas denunciar uma publicação que viola as <%= firstLinkStart %>Diretrizes da Comunidade<%= linkEnd %> ou os <%= secondLinkStart %>Termos de Serviço<%= linkEnd %>. Uma denúncia infundada também é uma infração das Diretrizes de Comunidade e pode lhe acarretar uma punição.", "abuseFlagModalButton": "Reportar Violação", "abuseReported": "Obrigado por reportar essa violação. Os moderadores foram notificados.", "abuseAlreadyReported": "Você já reportou essa mensagem.", @@ -207,7 +211,6 @@ "partyOnName": "Agrupamento", "partyUpText": "Entrou num Grupo com outra pessoa! Divirta-se batalhando monstros e ajudando uns aos outros.", "partyOnText": "Entrou num Grupo com, pelo menos, quatro pessoas! Aproveite sua maior responsabilidade enquanto se une com seus amigos e destrói seus inimigos!", - "groupIdRequired": "\"groupId\" precisa ser um UUID válido.", "groupNotFound": "Grupo não encontrado ou ao qual você não tem acesso.", "groupTypesRequired": "Deve fornecer uma string \"type\" válida.", "questLeaderCannotLeaveGroup": "Você não pode deixar seu Grupo quando você tiver iniciado uma missão. Aborte a missão primeiro.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Você não pode se remover!", "groupMemberNotFound": "Usuário não encontrado entre os membros do grupo", "mustBeGroupMember": "Deve ser um membro do grupo.", - "keepOrRemoveAll": "req.query.keep precisa ser \"keep-all\" ou \"remove-all\"", - "keepOrRemove": "req.query.keep precisa ser \"keep\" ou \"remove\"", "canOnlyInviteEmailUuid": "Só pode convidar usando uuids ou e-mails.", "inviteMissingEmail": "Faltando o endereço de e-mail no convite.", "inviteMissingUuid": "Falta o ID do usuário no convite", @@ -252,7 +253,7 @@ "userRequestsApproval": "<%= userName %> solicita aprovação", "userCountRequestsApproval": "<%= userCount %> solicitam aprovação", "youAreRequestingApproval": "Você está solicitando a aprovação", - "chatPrivilegesRevoked": "You cannot do that because your chat privileges have been revoked.", + "chatPrivilegesRevoked": "Você não pode fazer isso pois seus privilégios de chat foram revogados.", "cannotCreatePublicGuildWhenMuted": "Você não pode criar uma Guilda pública porque seus privilégios de chat foram revogados", "cannotInviteWhenMuted": "você não pode ser convidado para uma guilda ou grupo, pois seus privilégios de chat foram revogados", "newChatMessagePlainNotification": "Nova mensagem em <%= groupName %> de <%= authorName %>. Clique aqui para abrir a página do chat!", @@ -315,7 +316,7 @@ "approvalsTitle": "Tarefas Esperando Aprovação", "upgradeTitle": "Melhora", "blankApprovalsDescription": "Quando seu grupo completa tarefas que precisam de aprovação, elas irão aparecer aqui! Ajuste os requisitos da aprovação na aba de edição da tarefa.", - "userIsClamingTask": "`<%= username %> assumiu \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Aprovação Solicitada", "refreshApprovals": "Atualizar Aprovações", "refreshGroupTasks": "Atualizar Tarefas de Grupo", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Não pode apagar tarefas de grupo que estão atribuídas a você.", "confirmGuildPlanCreation": "Criar esse grupo?", "onlyGroupLeaderCanInviteToGroupPlan": "Apenas o líder do grupo pode convidar usuários para um grupo com assinatura.", - "remainOrLeaveChallenges": "req.query.keep deve ser ou 'remain-in-challenges' ou 'leave-challenges'", "paymentDetails": "Detalhes do Pagamento", "aboutToJoinCancelledGroupPlan": "Você está preste a se juntar a um grupo com um plano cancelado. Você NÃO receberá uma assinatura gratuita.", "cannotChangeLeaderWithActiveGroupPlan": "Você não pode alterar o líder enquanto o grupo possui um plano em curso.", @@ -366,9 +366,11 @@ "recentActivity": "Atividade Recente", "myGuilds": "Minhas Guildas", "guildsDiscovery": "Encontre Guildas", + "role": "Role", "guildOrPartyLeader": "Líder", "guildLeader": "Líder da Guilda", "member": "Membro", + "guildSize": "Guild Size", "goldTier": "Nível Ouro", "silverTier": "Nível Prata", "bronzeTier": "Nível Bronze", diff --git a/website/common/locales/pt_BR/loadingscreentips.json b/website/common/locales/pt_BR/loadingscreentips.json index aa913a633f..6df2e2629c 100644 --- a/website/common/locales/pt_BR/loadingscreentips.json +++ b/website/common/locales/pt_BR/loadingscreentips.json @@ -22,10 +22,10 @@ "tip20": "Aumente seus Pontos de Percepção para ganhar mais drops e ouro.", "tip21": "Aumente sua Força para causar mais dano no chefão ou conseguir golpes críticos.", "tip22": "Aumente sua Constituição para reduzir o dano de Diárias não feitas.", - "tip23": "Atinga o nível 100 para desbloquear o Orbe do Renascimento gratuitamente e poder começar uma nova aventura!", + "tip23": "Atinja o nível 100 para desbloquear o Orbe do Renascimento gratuitamente e poder começar uma nova aventura!", "tip24": "Tem uma pergunta? Pergunte na Guilda Brasil ou na Habitica Help Guild!", "tip25": "As quatro Grande Galas sazonais começam próximo do início de cada estação do ano.", - "tip26": "You can look for a Party or find Party members in the Party Wanted Guild!", + "tip26": "Você pode procurar por um Grupo ou encontrar membros para ele na Guilda Procurando Grupo Brasil", "tip27": "Fez uma Diária ontem mas esqueceu de marcar como concluída? Não se preocupe! Você terá a chance de marcar o que fez logo antes de iniciar um novo dia.", "tip28": "Especifique um Início de Dia Personalizado clicando no Ícone de Usuário > Configurações para controlar quando teu dia reinicia.", "tip29": "Complete todas as suas Diárias para ganhar o Buff Dia Perfeito, que aumenta seus atributos!", diff --git a/website/common/locales/pt_BR/npc.json b/website/common/locales/pt_BR/npc.json index 6acf4b08b5..33501aaa8f 100644 --- a/website/common/locales/pt_BR/npc.json +++ b/website/common/locales/pt_BR/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Itens em Destaque!", "hideLocked": "Esconder bloqueados", "hidePinned": "Esconder fixados", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> de Experiência", "amountGold": "<%= amount %> de Ouro", "namedHatchingPotion": "Poção de Eclosão <%= type %>", @@ -74,20 +75,13 @@ "ianTextMobile": "Será que um pergaminho de missão te interessaria? Ative-os para lutar contra monstros com seu Grupo!", "ianBrokenText": "Boas Vindas à Loja de Missões... Aqui você pode usar Pergaminhos de Missões para enfrentar monstros com seus amigos... Não deixe de dar uma olhada na nossa refinada coleção de Pergaminhos de Missões à venda na direita...", "featuredQuests": "Missões em Destaque!", - "missingKeyParam": "\"req.params.key\" é necessário.", - "itemNotFound": "Item \"<%= key %>\" não encontrado.", "cannotBuyItem": "Você não pode comprar este item.", - "missingTypeKeyEquip": "\"key\" e \"type\" são parâmetros necessários.", - "missingPetFoodFeed": "\"pet\" e \"food\" são parâmetros necessários.", - "invalidPetName": "Nome de mascote fornecido inválido.", - "missingEggHatchingPotionHatch": "\"egg\" e \"hatchingPotion\" são parâmetros necessários.", - "invalidTypeEquip": "\"type\" precisa ser um de 'equipped', 'pet', mount', 'costume'.", "mustPurchaseToSet": "É necessário comprar <%= val %> para colocar em <%= key %>.", "typeRequired": "Tipo é necessário", "positiveAmountRequired": "Requer um número positivo", "notAccteptedType": "Tipo precisa estar em [eggs, hatchingPotions, premiumHatchingPotions, food, quests, gear]", "contentKeyNotFound": "Chave não encontrada para Conteúdo <%= type %>", - "plusGem": "+<%= count %> Gem", + "plusGem": "+<%= count %> Gema!", "typeNotSellable": "Tipo não pode ser vendido. Precisa ser um dos seguintes <%= acceptedTypes %>", "userItemsKeyNotFound": "Chave não encontrada para user.items <%= type %>", "userItemsNotEnough": "Você não tem <%= type %>suficientes.", diff --git a/website/common/locales/pt_BR/quests.json b/website/common/locales/pt_BR/quests.json index 28d44b4d5a..456edc2100 100644 --- a/website/common/locales/pt_BR/quests.json +++ b/website/common/locales/pt_BR/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Nenhum convite para missão foi enviado ainda.", "questInviteNotFound": "Nenhum convite para missão encontrado.", "guildQuestsNotSupported": "Guildas não podem ser convidadas para missões.", - "questNotFound": "Missão \"<%= key %>\" não encontrada.", "questNotOwned": "Você não possui esse pergaminho de missão.", "questNotGoldPurchasable": "Missão \"<%= key %>\" não é comprável com ouro.", "questLevelTooHigh": "Você precisa ter nível <%= level %> para iniciar essa missão.", diff --git a/website/common/locales/pt_BR/questscontent.json b/website/common/locales/pt_BR/questscontent.json index 5a552bac06..5a1351930d 100644 --- a/website/common/locales/pt_BR/questscontent.json +++ b/website/common/locales/pt_BR/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "Com uma abordagem gentil, ofertas de troca e alguns feitiços tranquilizadores, vocês conseguiram convencer o esquilo a voltar para os estábulos, que tinham acabado de ser desnozificados por @Shtut. Eles tinham separado algumas nozes numa mesa de trabalho. \"Esses aqui são ovos de esquilo! Talvez você consiga criar alguns que não brinquem tanto com a comida.\"", "questSquirrelBoss": "Esquilo Traiçoeiro", "questSquirrelDropSquirrelEgg": "Esquilo (Ovo)", - "questSquirrelUnlockText": "Desbloqueia ovos de Esquilo no Mercado." + "questSquirrelUnlockText": "Desbloqueia ovos de Esquilo no Mercado.", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/pt_BR/settings.json b/website/common/locales/pt_BR/settings.json index c451ed7b47..6a4c0b93e2 100644 --- a/website/common/locales/pt_BR/settings.json +++ b/website/common/locales/pt_BR/settings.json @@ -32,7 +32,7 @@ "resetAccPop": "Comece de novo removendo todos os níveis, ouro, equipamentos, histórico e tarefas.", "deleteAccount": "Excluir Conta", "deleteAccPop": "Cancela e remove sua conta do Habitica.", - "feedback": "If you'd like to give us feedback, please enter it below - we'd love to know what you liked or didn't like about Habitica! Don't speak English well? No problem! Use the language you prefer.", + "feedback": "Se quiser nos dar seu feedback, por favor escreva-o abaixo - adoraríamos saber o que você gosta ou desgosta no Habitica! Não fala inglês bem? Sem problemas! Pode usar o idioma que preferir.", "qrCode": "Código QR", "dataExport": "Exportação de Dados", "saveData": "Aqui estão algumas opções para salvar seus dados.", diff --git a/website/common/locales/pt_BR/spells.json b/website/common/locales/pt_BR/spells.json index 58b31a704a..817639117d 100644 --- a/website/common/locales/pt_BR/spells.json +++ b/website/common/locales/pt_BR/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Transforma um amigo em uma criatura marinha!", "spellSpecialSandText": "Areia", "spellSpecialSandNotes": "Reverte a magia de estrela do mar.", - "spellNotFound": "Habilidade \"<%= spellId %>\" não encontrada.", "partyNotFound": "Grupo não encontrado.", "targetIdUUID": "\"targetId\" precisa ser um ID de usuário válido.", "challengeTasksNoCast": "O uso de habilidades em tarefas de desafio não é permitido.", diff --git a/website/common/locales/pt_BR/subscriber.json b/website/common/locales/pt_BR/subscriber.json index 89ff238f1a..736438757a 100644 --- a/website/common/locales/pt_BR/subscriber.json +++ b/website/common/locales/pt_BR/subscriber.json @@ -7,7 +7,7 @@ "buyGemsGoldText": "Alexander, o Mercador, venderá suas Gemas por 20 de ouro cada Gema. Suas remessas mensais serão limitados a 25 Gemas por mês, mas para cada 3 meses consecutivos de assinatura, este limite aumenta em 5 Gemas até o máximo de 50 Gemas por mês!", "mustSubscribeToPurchaseGems": "É necessário ser assinante para comprar gemas com Ouro.", "reachedGoldToGemCap": "Você atingiu o limite de<%= convCap %> para conversão de Ouro=>Gemas deste mês. Isto serve para prevenir abusos. O limite irá reiniciar dentro dos três primeiros dias do próximo mês.", - "reachedGoldToGemCapQuantity": "Your requested amount <%= quantity %> exceeds the Gold=>Gem conversion cap <%= convCap %> for this month. We have this to prevent abuse / farming. The cap resets within the first three days of each month.", + "reachedGoldToGemCapQuantity": "Seu pedido de <%= quantity %> gemas ultrapassa o limite de conversão deste mês (<%= convCap %>). Queremos lhe ver sempre produtivo, e que não farme as gemas em 1 mês. O limite é reiniciado nos primeiros 3 dias de cada mês.", "retainHistory": "Guardar Itens adicionais no histórico", "retainHistoryText": "Faz com que o histórico de tarefas e Afazeres completos fiquem disponíveis por mais tempo.", "doubleDrops": "Capacidade diária de drop duplicada", @@ -142,7 +142,7 @@ "mysterySet201801": "Conjunto Duende de Neve", "mysterySet201802": "Conjunto Besouro-do-amor", "mysterySet201803": "Conjunto Libélula Ousada", - "mysterySet201804": "Spiffy Squirrel Set", + "mysterySet201804": "Conjunto do Esquilo Maneiro", "mysterySet301404": "Conjunto \"Revolução Industrial Padrão\"", "mysterySet301405": "Conjunto \"Acessórios Revolução Industrial\"", "mysterySet301703": "Conjunto \"Revolução Industrial Pavão\"", @@ -175,12 +175,6 @@ "invalidCoupon": "Código de cupom inválido.", "couponUsed": "Código de cupom já utilizado.", "couponCodeRequired": "O código do cupom é requerido.", - "eventRequired": "\"req.params.event\" é necessário.", - "countRequired": "\"req.query.count\" é necessário.", - "missingPaymentId": "Faltando req.query.paymentId", - "missingCustomerId": "Faltando req.query.customerId", - "missingPaypalBlock": "Faltando req.session.paypalBlock", - "missingSubKey": "Faltando req.query.sub", "paypalCanceled": "Sua assinatura foi cancelada", "earnGemsMonthly": "Obtenha até **<%= cap %> Gemas** por mês", "receiveMysticHourglass": "Receba uma Ampulheta Mística!", diff --git a/website/common/locales/pt_BR/tasks.json b/website/common/locales/pt_BR/tasks.json index 3890692b39..d9bae4c624 100644 --- a/website/common/locales/pt_BR/tasks.json +++ b/website/common/locales/pt_BR/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "Equipamentos Especiais irão aparecer durante os Eventos Mundiais.", "rewardHelp4": "Não tenha medo de definir Recompensas Personalizadas! Confira alguns exemplos aqui.", "clickForHelp": "Clique para ajuda", - "taskIdRequired": "\"taskId\" precisa ser um UUID válido.", "taskAliasAlreadyUsed": "Pseudônimo de Tarefa já está sendo utilizado em outra tarefa.", "taskNotFound": "Tarefa não encontrada.", "invalidTaskType": "O tipo da tarefa precisa ser \"habit\", \"daily\", \"todo\" ou \"reward\".", diff --git a/website/common/locales/ro/challenge.json b/website/common/locales/ro/challenge.json index 6a69d203a9..597e953b12 100644 --- a/website/common/locales/ro/challenge.json +++ b/website/common/locales/ro/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "A câștigat următoarele provocări:", "challenges": "Provocări", "challengesLink": "Provocări", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Nico provocare încă, vizitează", "toCreate": "pentru a crea una.", "selectWinner": "Alege un câștigător și închide provocarea:", @@ -23,7 +25,9 @@ "filter": "Filtru", "groups": "Grupuri", "noNone": "Niciunul", + "category": "Category", "membership": "Apartenență", + "ownership": "Ownership", "participating": "Participi", "notParticipating": "Nu participi", "either": "Oricare", diff --git a/website/common/locales/ro/character.json b/website/common/locales/ro/character.json index 8168c8741d..893d85f186 100644 --- a/website/common/locales/ro/character.json +++ b/website/common/locales/ro/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Show Stat Allocation", "hideQuickAllocation": "Hide Stat Allocation", "quickAllocationLevelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User Icon > Stats.", - "invalidAttribute": "\"<%= attr %>\" is not a valid Stat.", "notEnoughAttrPoints": "You don't have enough Stat Points.", "style": "Style", "facialhair": "Facial", @@ -219,6 +218,5 @@ "mainHand": "Main-Hand", "offHand": "Off-Hand", "pointsAvailable": "Points Available", - "pts": "pts", - "statsObjectRequired": "Stats update is required" + "pts": "pts" } \ No newline at end of file diff --git a/website/common/locales/ro/contrib.json b/website/common/locales/ro/contrib.json index e05f908f5c..2a29cf12ca 100644 --- a/website/common/locales/ro/contrib.json +++ b/website/common/locales/ro/contrib.json @@ -49,7 +49,6 @@ "UUID": "User ID", "loadUser": "Încarcă utilizator", "noAdminAccess": "You don't have admin access.", - "pageMustBeNumber": "req.query.page must be a number", "userNotFound": "User not found.", "invalidUUID": "UUID must be valid", "title": "Titlu", diff --git a/website/common/locales/ro/groups.json b/website/common/locales/ro/groups.json index eed528653a..3e99b3f40f 100644 --- a/website/common/locales/ro/groups.json +++ b/website/common/locales/ro/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Optional message", "yesRemove": "Yes, remove them", "foreverAlone": "Nu poți să îți apreciezi propriile mesaje. Nu fi ca ăia.", - "sortDateJoinedAsc": "Earliest Date Joined", - "sortDateJoinedDesc": "Latest Date Joined", - "sortLoginAsc": "Earliest Login", - "sortLoginDesc": "Latest Login", - "sortLevelAsc": "Lowest Level", - "sortLevelDesc": "Highest Level", - "sortNameAsc": "Name (A - Z)", - "sortNameDesc": "Name (Z - A)", - "sortTierAsc": "Lowest Tier", - "sortTierDesc": "Highest Tier", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Creează Ghildă cu prețul a 4 Nestemate?", "leaveGroupCha": "Părăsește provocările ghildei și...", "confirm": "Confirmă", @@ -131,6 +131,10 @@ "clearAll": "Delete All Messages", "confirmDeleteAllMessages": "Are you sure you want to delete all messages in your inbox? Other users will still see messages you have sent to them.", "optOutPopover": "Don't like private messages? Click to completely opt out", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Block", "unblock": "Un-block", "pm-reply": "Send a reply", @@ -207,7 +211,6 @@ "partyOnName": "Party On", "partyUpText": "Joined a Party with another person! Have fun battling monsters and supporting each other.", "partyOnText": "Joined a Party with at least four people! Enjoy your increased accountability as you unite with your friends to vanquish your foes!", - "groupIdRequired": "\"groupId\" must be a valid UUID", "groupNotFound": "Group not found or you don't have access.", "groupTypesRequired": "You must supply a valid \"type\" query string.", "questLeaderCannotLeaveGroup": "You cannot leave your Party when you have started a quest. Abort the quest first.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "You cannot remove yourself!", "groupMemberNotFound": "User not found among group's members", "mustBeGroupMember": "Must be member of the group.", - "keepOrRemoveAll": "req.query.keep must be either \"keep-all\" or \"remove-all\"", - "keepOrRemove": "req.query.keep must be either \"keep\" or \"remove\"", "canOnlyInviteEmailUuid": "Can only invite using uuids or emails.", "inviteMissingEmail": "Missing email address in invite.", "inviteMissingUuid": "Missing user id in invite", @@ -315,7 +316,7 @@ "approvalsTitle": "Tasks Awaiting Approval", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "When your group completes tasks that need your approval, they'll appear here! Adjust approval requirement settings under task editing.", - "userIsClamingTask": "`<%= username %> has claimed \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Approval Requested", "refreshApprovals": "Refresh Approvals", "refreshGroupTasks": "Refresh Group Tasks", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Can't delete group tasks that are assigned to you.", "confirmGuildPlanCreation": "Create this group?", "onlyGroupLeaderCanInviteToGroupPlan": "Only the group leader can invite users to a group with a subscription.", - "remainOrLeaveChallenges": "req.query.keep must be either 'remain-in-challenges' or 'leave-challenges'", "paymentDetails": "Payment Details", "aboutToJoinCancelledGroupPlan": "You are about to join a group with a canceled plan. You will NOT receive a free subscription.", "cannotChangeLeaderWithActiveGroupPlan": "You can not change the leader while the group has an active plan.", @@ -366,9 +366,11 @@ "recentActivity": "Recent Activity", "myGuilds": "My Guilds", "guildsDiscovery": "Discover Guilds", + "role": "Role", "guildOrPartyLeader": "Leader", "guildLeader": "Guild Leader", "member": "Member", + "guildSize": "Guild Size", "goldTier": "Gold Tier", "silverTier": "Silver Tier", "bronzeTier": "Bronze Tier", diff --git a/website/common/locales/ro/npc.json b/website/common/locales/ro/npc.json index a81e73d2af..a6b3136492 100644 --- a/website/common/locales/ro/npc.json +++ b/website/common/locales/ro/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Featured Items!", "hideLocked": "Hide locked", "hidePinned": "Hide pinned", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Experience", "amountGold": "<%= amount %> Gold", "namedHatchingPotion": "<%= type %> Hatching Potion", @@ -74,14 +75,7 @@ "ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!", "ianBrokenText": "Welcome to the Quest Shop... Here you can use Quest Scrolls to battle monsters with your friends... Be sure to check out our fine array of Quest Scrolls for purchase on the right...", "featuredQuests": "Featured Quests!", - "missingKeyParam": "\"req.params.key\" is required.", - "itemNotFound": "Item \"<%= key %>\" not found.", "cannotBuyItem": "You can't buy this item.", - "missingTypeKeyEquip": "\"key\" and \"type\" are required parameters.", - "missingPetFoodFeed": "\"pet\" and \"food\" are required parameters.", - "invalidPetName": "Invalid pet name supplied.", - "missingEggHatchingPotionHatch": "\"egg\" and \"hatchingPotion\" are required parameters.", - "invalidTypeEquip": "\"type\" must be one of 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.", "typeRequired": "Type is required", "positiveAmountRequired": "Positive amount is required", diff --git a/website/common/locales/ro/quests.json b/website/common/locales/ro/quests.json index fcbea74a20..56e3cf88ab 100644 --- a/website/common/locales/ro/quests.json +++ b/website/common/locales/ro/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "No quest invitation has been sent out yet.", "questInviteNotFound": "No quest invitation found.", "guildQuestsNotSupported": "Guilds cannot be invited on quests.", - "questNotFound": "Quest \"<%= key %>\" not found.", "questNotOwned": "You don't own that quest scroll.", "questNotGoldPurchasable": "Quest \"<%= key %>\" is not a Gold-purchasable quest.", "questLevelTooHigh": "You must be level <%= level %> to begin this quest.", diff --git a/website/common/locales/ro/questscontent.json b/website/common/locales/ro/questscontent.json index e548b510b6..82de9095fb 100644 --- a/website/common/locales/ro/questscontent.json +++ b/website/common/locales/ro/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/ro/spells.json b/website/common/locales/ro/spells.json index a480eb39b2..8f8a165102 100644 --- a/website/common/locales/ro/spells.json +++ b/website/common/locales/ro/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Turn a friend into a sea creature!", "spellSpecialSandText": "Sand", "spellSpecialSandNotes": "Reverse the spell that made you a sea star.", - "spellNotFound": "Skill \"<%= spellId %>\" not found.", "partyNotFound": "Party not found", "targetIdUUID": "\"targetId\" must be a valid User ID.", "challengeTasksNoCast": "Casting a skill on challenge tasks is not allowed.", diff --git a/website/common/locales/ro/subscriber.json b/website/common/locales/ro/subscriber.json index fcabe11037..e336b95560 100644 --- a/website/common/locales/ro/subscriber.json +++ b/website/common/locales/ro/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Invalid coupon code.", "couponUsed": "Coupon code already used.", "couponCodeRequired": "The coupon code is required.", - "eventRequired": "\"req.params.event\" is required.", - "countRequired": "\"req.query.count\" is required.", - "missingPaymentId": "Missing req.query.paymentId", - "missingCustomerId": "Missing req.query.customerId", - "missingPaypalBlock": "Missing req.session.paypalBlock", - "missingSubKey": "Missing req.query.sub", "paypalCanceled": "Your subscription has been canceled", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "receiveMysticHourglass": "Receive a Mystic Hourglass!", diff --git a/website/common/locales/ro/tasks.json b/website/common/locales/ro/tasks.json index 017944555f..41dfcd94a2 100644 --- a/website/common/locales/ro/tasks.json +++ b/website/common/locales/ro/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "Special equipment will appear here during World Events.", "rewardHelp4": "Don't be afraid to set custom Rewards! Check out some samples here.", "clickForHelp": "Click for help", - "taskIdRequired": "\"taskId\" must be a valid UUID.", "taskAliasAlreadyUsed": "Task alias already used on another task.", "taskNotFound": "Task not found.", "invalidTaskType": "Task type must be one of \"habit\", \"daily\", \"todo\", \"reward\".", diff --git a/website/common/locales/ru/backgrounds.json b/website/common/locales/ru/backgrounds.json index 831b592269..1a477cb56b 100644 --- a/website/common/locales/ru/backgrounds.json +++ b/website/common/locales/ru/backgrounds.json @@ -346,11 +346,11 @@ "backgroundFlyingOverWildflowerFieldNotes": "Парите над полем цветов.", "backgroundFlyingOverAncientForestText": "Древний лес", "backgroundFlyingOverAncientForestNotes": "Летите над куполом Древнего Леса.", - "backgrounds052018": "SET 48: Released May 2018", - "backgroundTerracedRiceFieldText": "Terraced Rice Field", - "backgroundTerracedRiceFieldNotes": "Enjoy a Terraced Rice Field in the growing season.", - "backgroundFantasticalShoeStoreText": "Fantastical Shoe Store", - "backgroundFantasticalShoeStoreNotes": "Look for fun new footwear in the Fantastical Shoe Store.", - "backgroundChampionsColosseumText": "Champions' Colosseum", - "backgroundChampionsColosseumNotes": "Bask in the glory of the Champions' Colosseum." + "backgrounds052018": "Набор 48: Выпущен в Мае 2018", + "backgroundTerracedRiceFieldText": "Рисовое поле", + "backgroundTerracedRiceFieldNotes": "Насладитесь усеянным рисовым полем в сезон созревания", + "backgroundFantasticalShoeStoreText": "Удивительный обувная лавка", + "backgroundFantasticalShoeStoreNotes": "Найдите себе новую пару обуви в Удивительной обувной лавке.", + "backgroundChampionsColosseumText": "Колизей Чемпионов", + "backgroundChampionsColosseumNotes": "Окунитесь в лучах славы на Колизеи Чемпионов." } \ No newline at end of file diff --git a/website/common/locales/ru/challenge.json b/website/common/locales/ru/challenge.json index c9ca046e27..49fc884c34 100644 --- a/website/common/locales/ru/challenge.json +++ b/website/common/locales/ru/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Победитель следующих испытаний", "challenges": "Испытания", "challengesLink": "Испытания", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Пока нет доступных испытаний, посетите", "toCreate": "для создания нового.", "selectWinner": "Выбрать победителя и закрыть испытание:", @@ -23,7 +25,9 @@ "filter": "Фильтр", "groups": "Группы", "noNone": "Очистить", + "category": "Category", "membership": "Членство", + "ownership": "Ownership", "participating": "Участвую", "notParticipating": "Не участвую", "either": "Все", diff --git a/website/common/locales/ru/character.json b/website/common/locales/ru/character.json index 7259d6d7cd..ee70dc7493 100644 --- a/website/common/locales/ru/character.json +++ b/website/common/locales/ru/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Показать распределение характеристик", "hideQuickAllocation": "Спрятать распределение характеристик", "quickAllocationLevelPopover": "Каждый уровень приносит вам одно очко для распределения на характеристики по вашему выбору. Вы можете сделать это вручную или позволить игре решать для вас, используя автоматическое распределение, находящееся в Пользователь > Характеристики.", - "invalidAttribute": "\"<%= attr %>\" - недопустимая характеристика. ", "notEnoughAttrPoints": "У вас недостаточно очков характеристик.", "style": "Стиль", "facialhair": "Лицо", @@ -219,6 +218,5 @@ "mainHand": "Оружие", "offHand": "Защита", "pointsAvailable": "Очков доступно", - "pts": "очк", - "statsObjectRequired": "Требуется обновление характеристик" + "pts": "очк" } \ No newline at end of file diff --git a/website/common/locales/ru/contrib.json b/website/common/locales/ru/contrib.json index fa1a6be2d1..3a2e9f19a6 100644 --- a/website/common/locales/ru/contrib.json +++ b/website/common/locales/ru/contrib.json @@ -49,7 +49,6 @@ "UUID": "ID пользователя", "loadUser": "Загрузить пользователя", "noAdminAccess": "У вас нет прав администратора.", - "pageMustBeNumber": "req.query.page должна быть цифрой", "userNotFound": "Пользователь не найден.", "invalidUUID": "UUID должен быть действительным.", "title": "Звание", diff --git a/website/common/locales/ru/front.json b/website/common/locales/ru/front.json index 75095a4ddc..cc9014d685 100644 --- a/website/common/locales/ru/front.json +++ b/website/common/locales/ru/front.json @@ -304,7 +304,7 @@ "alreadyHaveAccountLogin": "Уже есть учётная запись в Habitica? Войдите.", "dontHaveAccountSignup": "Нет учётной записи в Habitica? Зарегистрируйтесь.", "motivateYourself": "Мотивируйте себя на достижение ваших целей.", - "timeToGetThingsDone": "It's time to have fun when you get things done! Join over <%= userCountInMillions %> million Habiticans and improve your life one task at a time.", + "timeToGetThingsDone": "Пора повеселиться, делая дела! Присоединяйся к более чем <%= userCountInMillions %> миллионам Хабитиканцев и улучшай свою жизнь, выполняя задания одно за другим.", "singUpForFree": "Бесплатная регистрация", "or": "ИЛИ", "gamifyYourLife": "Живи играючи", diff --git a/website/common/locales/ru/gear.json b/website/common/locales/ru/gear.json index 7eda95c0b9..0b3cbd7ba3 100644 --- a/website/common/locales/ru/gear.json +++ b/website/common/locales/ru/gear.json @@ -334,7 +334,7 @@ "weaponArmoireScepterOfDiamondsNotes": "Это скипетр светит теплым красным светом и наполняет вас силой воли. Увеличивает силу на <%= str %>. Зачарованный сундук: Набор Бубнового короля (Предмет 3 из 3).", "weaponArmoireFlutteryArmyText": "Порхающая армия", "weaponArmoireFlutteryArmyNotes": "Эта группа пестрых чешуекрылых готова махать неистово и охладить ваши самые красные задачи! Увеличивает силу, интеллект и телосложение на <%= attrs %> каждое. Зачарованный сундук: Набор порхающего платья (предмет 3 из 3).", - "weaponArmoireCobblersHammerText": "Cobbler's Hammer", + "weaponArmoireCobblersHammerText": "Молоток Башмачника", "weaponArmoireCobblersHammerNotes": "This hammer is specially made for leatherwork. It can do a real number on a red Daily in a pinch, though. Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Cobbler Set (Item 2 of 3).", "armor": "Броня", "armorCapitalized": "Броня", @@ -718,7 +718,7 @@ "armorArmoireRobeOfDiamondsNotes": "Эти королевская мантия не только заставляют вас казаться благородным, она позволяет увидеть благородство в других. Увеличивает восприятие на <%= per %>. Зачарованный сундук: Набор Бубнового короля (предмет 1 из 3).", "armorArmoireFlutteryFrockText": "Порхающее платье", "armorArmoireFlutteryFrockNotes": "Легкое и воздушное платье с широкой юбкой, которую бабочки могут ошибочно принять за большое соцветие! Увеличивает телосложение, восприятие и силу на <%= attrs %> каждое. Зачарованный сундук: Набор порхающего платья (предмет 1 из 3).", - "armorArmoireCobblersCoverallsText": "Cobbler's Coveralls", + "armorArmoireCobblersCoverallsText": "Костюм Башмачника", "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).", "headgear": "Головной убор", "headgearCapitalized": "Головной убор", @@ -1326,8 +1326,8 @@ "shieldArmoireShieldOfDiamondsNotes": "Этот светящийся щит не только защищает, но и подкрепляет вашу стойкость! Повышает Телосложение на <%= con %>. Зачарованный сундук: независимый предмет", "shieldArmoireFlutteryFanText": "Витиеватый веер", "shieldArmoireFlutteryFanNotes": "В жаркий денек ничто не сравнится с узорчатым веером в способности сохранять владельца хладнокровным умом и телом. Повышает Телосложение, Интеллект и Восприятие на <%= attrs %>. Зачарованный сундук: независимый предмет. ", - "shieldArmoireFancyShoeText": "Fancy Shoe", - "shieldArmoireFancyShoeNotes": "A very special shoe you're working on. It's fit for royalty! Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Cobbler Set (Item 3 of 3).", + "shieldArmoireFancyShoeText": "Стильный башмак", + "shieldArmoireFancyShoeNotes": "Очень особенный башмак, над которым вы работаете. Он отлично смотрится с вашем величием! Увеличивает Интеллект и Восприятие на <%= attrs %>. Зачарованный сундук: Набор Сапожника (предмет 3 из 3).", "back": "Аксессуар на спину", "backCapitalized": "Аксессуар на спину", "backBase0Text": "Нет аксессуаров на спине", diff --git a/website/common/locales/ru/groups.json b/website/common/locales/ru/groups.json index d55205f94e..c8070c75d2 100644 --- a/website/common/locales/ru/groups.json +++ b/website/common/locales/ru/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Необязательное сообщение", "yesRemove": "Да, удалить", "foreverAlone": "Вы не можете лайкать свое собственное сообщение. Не будьте таким человеком.", - "sortDateJoinedAsc": "Ранние участники", - "sortDateJoinedDesc": "Недавние участники", - "sortLoginAsc": "Ранний вход", - "sortLoginDesc": "Последний вход", - "sortLevelAsc": "По возрастанию уровня", - "sortLevelDesc": "По убыванию уровня", - "sortNameAsc": "По имени", - "sortNameDesc": "По имени (обр)", - "sortTierAsc": "По убыванию ранга", - "sortTierDesc": "По возрастанию ранга", + "sortBackground": "Сортировать по фону", + "sortClass": "Сортировать по классу", + "sortDateJoined": "Сортировать по дате присоединения", + "sortLogin": "Сортировать по дате входа", + "sortLevel": "Сортировать по уровню", + "sortName": "Сортировать по имени", + "sortTier": "Сортировать по рангу", + "ascendingAbbrev": "По возрастанию", + "descendingAbbrev": "По убыванию", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Создать гильдию за 4 самоцвета?", "leaveGroupCha": "Покинуть испытания Гильдии и...", "confirm": "Подтвердить", @@ -131,6 +131,10 @@ "clearAll": "Удалить все сообщения", "confirmDeleteAllMessages": "Вы действительно хотите удалить входящие сообщения? Сообщения, отправленные вами другим пользователям, все еще будут им доступны.", "optOutPopover": "Не любите личные сообщения? Нажмите, чтобы отказаться от использования", + "PMPlaceholderTitle": "Здесь Пока Ничего Нет", + "PMPlaceholderDescription": "Выберите беседу слева", + "PMPlaceholderTitleRevoked": "Возможность отправлять сообщения на вашем аккаунте заблокирована", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Блокировать", "unblock": "Разблокировать", "pm-reply": "Ответить", @@ -207,7 +211,6 @@ "partyOnName": "Время вечеринок", "partyUpText": "Вы объединились в команду с другим человеком! Веселитесь сражаясь с монстрами и поддерживая друг друга!", "partyOnText": "Вы присоединились к команде как минимум из четырех человек! Получайте удовольствие от возросшей ответственности, объединяясь с друзьями, чтобы побеждать врагов!", - "groupIdRequired": "\"groupld\" должен быть действительным UUID.", "groupNotFound": "Группа не найдена, либо вы не имеете доступа.", "groupTypesRequired": "Необходима действительная строка запроса \"type\".", "questLeaderCannotLeaveGroup": "Нельзя покинуть команду, если вы начали квест. Сначала прервите квест.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Вы не можете удалить себя!", "groupMemberNotFound": "Пользователь не найден среди членов группы.", "mustBeGroupMember": "Должен быть членом группы.", - "keepOrRemoveAll": "req.query.keep должен быть либо \"keep-all\" или \"remove-all\"", - "keepOrRemove": "req.query.keep должен быть либо \"keep\" или \"remove\"", "canOnlyInviteEmailUuid": "Можно приглашать только с помощью UUID или адреса электронной почты.", "inviteMissingEmail": "В приглашении отсутствует адрес электронной почты.", "inviteMissingUuid": "В приглашении отсутствует ID пользователя", @@ -315,7 +316,7 @@ "approvalsTitle": "Задачи, ожидающие подтверждения", "upgradeTitle": "Перейти", "blankApprovalsDescription": "Когда ваша группа выполнит задачи, требующие вашего подтверждения, они появятся здесь! Измените настройки подтверждения в редакторе задачи.", - "userIsClamingTask": "<%= username %> взял на исполнение задачу \"<%= task %>\"", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Запрошено подтверждение", "refreshApprovals": "Обновить подтверждения", "refreshGroupTasks": "Обновить групповые задачи", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Нельзя удалить групповые задачи, назначенные вам.", "confirmGuildPlanCreation": "Создать группу?", "onlyGroupLeaderCanInviteToGroupPlan": "Только лидер группы может приглашать пользователей в группу с общей подпиской.", - "remainOrLeaveChallenges": "req.query.keep должен быть либо 'remain-in-challenges' или 'leave-challenges'", "paymentDetails": "Детали платежа", "aboutToJoinCancelledGroupPlan": "Вы собираетесь присоединиться к группе с отмененным групповым тарифом. Вы НЕ получите бесплатную подписку.", "cannotChangeLeaderWithActiveGroupPlan": "Вы не можете поменять лидера, пока ваш групповой тариф активен", @@ -366,9 +366,11 @@ "recentActivity": "Недавние действия", "myGuilds": "Мои гильдии", "guildsDiscovery": "Найти гильдии", + "role": "Role", "guildOrPartyLeader": "Предводитель", "guildLeader": "Глава гильдии", "member": "Участник", + "guildSize": "Guild Size", "goldTier": "Золотой ранг", "silverTier": "Серебряный ранг", "bronzeTier": "Бронзовый ранг", diff --git a/website/common/locales/ru/npc.json b/website/common/locales/ru/npc.json index 1918ee28c1..5f14ec5483 100644 --- a/website/common/locales/ru/npc.json +++ b/website/common/locales/ru/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Особенные предметы!", "hideLocked": "Скрыть заблокированное", "hidePinned": "Скрыть закреплённое", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> опыта", "amountGold": "<%= amount %> золота", "namedHatchingPotion": "<%= type %> инкубационный эликсир", @@ -74,14 +75,7 @@ "ianTextMobile": "Могу ли я заинтересовать вас Свитками Квестов? Активируйте их, чтобы сразиться с монстрами вместе со своей командой!", "ianBrokenText": "Добро пожаловать в Лавку квестов... Здесь вы можете использовать Свитки Квестов, чтобы сразиться с монстрами вместе с друзьями... Оцените стройные ряды Свитков Квестов на продажу справа от вас...", "featuredQuests": "Особенные квесты!", - "missingKeyParam": "\"req.params.key\" обязателен.", - "itemNotFound": "Предмет \"<%= key %>\" не найден.", "cannotBuyItem": "Вы не можете купить этот предмет.", - "missingTypeKeyEquip": "\"key\" и \"type\" являются требуемыми параметры.", - "missingPetFoodFeed": "\"pet\" и \"food\" являются требуемыми параметры.", - "invalidPetName": "Предоставлено недействительное имя питомца.", - "missingEggHatchingPotionHatch": "\"egg\" и \"HatchingPotion\" - обязательные параметры.", - "invalidTypeEquip": "\"type\" должен быть один из 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Должны купить <%= val %>, чтобы поставить на <%= key %>.", "typeRequired": "Требуется тип.", "positiveAmountRequired": "Требуется положительная сумма", diff --git a/website/common/locales/ru/quests.json b/website/common/locales/ru/quests.json index 1c4477ea5e..44509544ac 100644 --- a/website/common/locales/ru/quests.json +++ b/website/common/locales/ru/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Приглашение на квест еще не было послано.", "questInviteNotFound": "Приглашений на квест не найдено.", "guildQuestsNotSupported": "Гильдии нельзя приглашать на квесты.", - "questNotFound": "Квест \"<%= key %>\" не найден.", "questNotOwned": "У вас ещё нет этого свитка квеста.", "questNotGoldPurchasable": "Квест \"<%= key %>\" нельзя купить за золото.", "questLevelTooHigh": "Вам нужно достигнуть уровня <%= level %>, чтобы начать этот квест.", diff --git a/website/common/locales/ru/questscontent.json b/website/common/locales/ru/questscontent.json index 2c0924617b..6c2462b471 100644 --- a/website/common/locales/ru/questscontent.json +++ b/website/common/locales/ru/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "С деликатным подходом, уговаривая на сделку и несколькими успокаивающими заклинаниями вы уговариваете белку отказаться от своего клада и вернуться в свой домик, который @Shtut только что доделал. Они оставили несколько желудей на верстаке. «Это яйца с белками! Может быть, вы сможете вырастить их и научить хорошим манерам без игры с едой».", "questSquirrelBoss": "Подлая Белка", "questSquirrelDropSquirrelEgg": "Белка (Яйцо)", - "questSquirrelUnlockText": "Позволяет покупать на рынке Белку в яйце." + "questSquirrelUnlockText": "Позволяет покупать на рынке Белку в яйце.", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/ru/spells.json b/website/common/locales/ru/spells.json index 1b4a3f6a04..2850a945ee 100644 --- a/website/common/locales/ru/spells.json +++ b/website/common/locales/ru/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Превратите друга в морское создание!", "spellSpecialSandText": "Песок", "spellSpecialSandNotes": "Снять заклинание, которое превратило вас в морскую звезду", - "spellNotFound": "Навык \"<%= spellId %>\" не найден.", "partyNotFound": "Команда не найдена", "targetIdUUID": "\"targetId\" должен быть действительным ID пользователя.", "challengeTasksNoCast": "Нельзя использовать навык на задания испытания.", diff --git a/website/common/locales/ru/subscriber.json b/website/common/locales/ru/subscriber.json index cfd16de55f..5bd75e130d 100644 --- a/website/common/locales/ru/subscriber.json +++ b/website/common/locales/ru/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Неверный код купона.", "couponUsed": "Этот код купона уже использовали.", "couponCodeRequired": "Требуется код купона.", - "eventRequired": "\"req.params.event\" обязателен.", - "countRequired": "\"req.query.count\" обязателен.", - "missingPaymentId": "Отсутствует req.query.paymentId", - "missingCustomerId": "Отсутствует req.query.customerId", - "missingPaypalBlock": "Отсутствует req.session.paypalBlock", - "missingSubKey": "Отсутствует req.query.sub", "paypalCanceled": "Ваша подписка была отменена", "earnGemsMonthly": "Заработайте до **<%= cap %> Самоцветов** в месяц", "receiveMysticHourglass": "Приобретите мистические песочные часы!", diff --git a/website/common/locales/ru/tasks.json b/website/common/locales/ru/tasks.json index 880e1f445e..0dd9d2050d 100644 --- a/website/common/locales/ru/tasks.json +++ b/website/common/locales/ru/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "Здесь появится особое снаряжение во время Мировых Событий.", "rewardHelp4": "Не бойтесь назначать себе персональные награды! Посмотрите примеры наград здесь.", "clickForHelp": "Помощь", - "taskIdRequired": "\"taskId\" должен быть действительным UUID.", "taskAliasAlreadyUsed": "Псевдоним задания уже используется другим заданием", "taskNotFound": "Задача не найдена.", "invalidTaskType": "Тип задачи должен быть \"habit\", \"daily\", \"todo\", либо \"reward\".", diff --git a/website/common/locales/sk/challenge.json b/website/common/locales/sk/challenge.json index 089c4631aa..88d62e4c21 100644 --- a/website/common/locales/sk/challenge.json +++ b/website/common/locales/sk/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "sa stal víťazom nasledujúcich výziev", "challenges": "Výzvy", "challengesLink": "Výzvy", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Zatial žiadne výzvy, choď na", "toCreate": "ak chceš nejakú vytvoriť.", "selectWinner": "Vyber víťaza a uzavri výzvu:", @@ -23,7 +25,9 @@ "filter": "Filter", "groups": "Skupiny", "noNone": "Žiadne", + "category": "Category", "membership": "Členstvo", + "ownership": "Ownership", "participating": "Zúčastnený", "notParticipating": "Nezúčastnený", "either": "Oboje", diff --git a/website/common/locales/sk/character.json b/website/common/locales/sk/character.json index 5b7fc4a21a..ce914f8119 100644 --- a/website/common/locales/sk/character.json +++ b/website/common/locales/sk/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Show Stat Allocation", "hideQuickAllocation": "Hide Stat Allocation", "quickAllocationLevelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User Icon > Stats.", - "invalidAttribute": "\"<%= attr %>\" is not a valid Stat.", "notEnoughAttrPoints": "You don't have enough Stat Points.", "style": "Style", "facialhair": "Facial", @@ -219,6 +218,5 @@ "mainHand": "Main-Hand", "offHand": "Off-Hand", "pointsAvailable": "Voľné body", - "pts": "body", - "statsObjectRequired": "Stats update is required" + "pts": "body" } \ No newline at end of file diff --git a/website/common/locales/sk/contrib.json b/website/common/locales/sk/contrib.json index 2399c13988..833a9e20a7 100644 --- a/website/common/locales/sk/contrib.json +++ b/website/common/locales/sk/contrib.json @@ -49,7 +49,6 @@ "UUID": "ID používateľa", "loadUser": "Nahrať používateľa", "noAdminAccess": "Nemáš prístup administrátora.", - "pageMustBeNumber": "req.query.page musí byť číslo", "userNotFound": "Používateľ nebol nájdený.", "invalidUUID": "UUID musí byť platné", "title": "Titul", diff --git a/website/common/locales/sk/groups.json b/website/common/locales/sk/groups.json index 1055b06de5..1dffab5313 100644 --- a/website/common/locales/sk/groups.json +++ b/website/common/locales/sk/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Voliteľná správa", "yesRemove": "Áno, odstráň ho", "foreverAlone": "Nemôžeš si lajkovať vlastnú správu. Nechceš hádam byť jeden z tých ľudí.", - "sortDateJoinedAsc": "Earliest Date Joined", - "sortDateJoinedDesc": "Latest Date Joined", - "sortLoginAsc": "Earliest Login", - "sortLoginDesc": "Latest Login", - "sortLevelAsc": "Najnižší level", - "sortLevelDesc": "Najvyšší level", - "sortNameAsc": "Meno (A - Z)", - "sortNameDesc": "Meno (Z - A)", - "sortTierAsc": "Lowest Tier", - "sortTierDesc": "Highest Tier", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Vytvoriť cech za 4 drahokamy?", "leaveGroupCha": "Opustiť cechové výzvy a...", "confirm": "Potvrdiť", @@ -131,6 +131,10 @@ "clearAll": "Vymazať všetky správy", "confirmDeleteAllMessages": "Si si istý, že chceš vymazať všetky svoje správy v poštovej schránke? Ostatní užívatelia uvidia správy, ktoré si im poslal.", "optOutPopover": "Nemáš rád súkromné správy? Klikni sem aby si sa kompletne odhlásil z ich prijímania", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Zablokovať", "unblock": "Odblokovať", "pm-reply": "Odpovedať", @@ -207,7 +211,6 @@ "partyOnName": "Party On", "partyUpText": "Vytvoril Družinu s ďalšou osobou! Bavte sa v boji s príšerami a podporovaním jeden druhého.", "partyOnText": "Vytvoril Družinu aspoň s ďalšími štyrmi ľuďmi! Uži si zvýšenú zodpovednosť ako sa spájaš s tvojimi priateľmi, aby ste porazili svojich protivníkov! ", - "groupIdRequired": "\"groupId\" musí mať platné UUID", "groupNotFound": "Skupina nebola nájdená alebo nemáš povolenie.", "groupTypesRequired": "You must supply a valid \"type\" query string.", "questLeaderCannotLeaveGroup": "Nemôžeš opustiť svoju Družinu po tom, ako ste začali výpravu. Najskôr ukonči výpravu.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Nemôžeš vyhodiť sám seba!", "groupMemberNotFound": "Používateľ nebol nájdený medzi členmi skupiny", "mustBeGroupMember": "Musíš byť člen skupiny.", - "keepOrRemoveAll": "req.query.keep must be either \"keep-all\" or \"remove-all\"", - "keepOrRemove": "req.query.keep must be either \"keep\" or \"remove\"", "canOnlyInviteEmailUuid": "Can only invite using uuids or emails.", "inviteMissingEmail": "Chýba e-mailová adresa v pozvánke.", "inviteMissingUuid": "Chýbajúce id užívateľa v pozvánke", @@ -315,7 +316,7 @@ "approvalsTitle": "Tasks Awaiting Approval", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "When your group completes tasks that need your approval, they'll appear here! Adjust approval requirement settings under task editing.", - "userIsClamingTask": "`<%= username %> has claimed \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Approval Requested", "refreshApprovals": "Refresh Approvals", "refreshGroupTasks": "Refresh Group Tasks", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Can't delete group tasks that are assigned to you.", "confirmGuildPlanCreation": "Create this group?", "onlyGroupLeaderCanInviteToGroupPlan": "Only the group leader can invite users to a group with a subscription.", - "remainOrLeaveChallenges": "req.query.keep must be either 'remain-in-challenges' or 'leave-challenges'", "paymentDetails": "Payment Details", "aboutToJoinCancelledGroupPlan": "You are about to join a group with a canceled plan. You will NOT receive a free subscription.", "cannotChangeLeaderWithActiveGroupPlan": "You can not change the leader while the group has an active plan.", @@ -366,9 +366,11 @@ "recentActivity": "Recent Activity", "myGuilds": "My Guilds", "guildsDiscovery": "Discover Guilds", + "role": "Role", "guildOrPartyLeader": "Leader", "guildLeader": "Guild Leader", "member": "Member", + "guildSize": "Guild Size", "goldTier": "Gold Tier", "silverTier": "Silver Tier", "bronzeTier": "Bronze Tier", diff --git a/website/common/locales/sk/npc.json b/website/common/locales/sk/npc.json index a487b3aefd..01c5b83de7 100644 --- a/website/common/locales/sk/npc.json +++ b/website/common/locales/sk/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Špeciálne Predmety!", "hideLocked": "Ukry zamknuté", "hidePinned": "Ukry pripnuté", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %>Skúseností", "amountGold": "<%= amount %>Zlata", "namedHatchingPotion": "<%= type %>Liahoxír", @@ -74,14 +75,7 @@ "ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!", "ianBrokenText": "Vitaj v Obchode s výzvami... Tu môžeš použiť Zvitok s výzvou, aby si mohol bojovať proti príšerám s tvojimi priateľmi.... Uisti sa, že si obzrieš naše najlepšie Zvitky s výzvami na predaj po pravej strane...", "featuredQuests": "Featured Quests!", - "missingKeyParam": "\"req.params.key\" je potrebný.", - "itemNotFound": "Predmet \"<%= key %>\" nebol nájdený.", "cannotBuyItem": "Tento predmet nemôžeš kúpiť.", - "missingTypeKeyEquip": "\"key\" a \"type\" sú potrebné parametre.", - "missingPetFoodFeed": "\"pet\" a \"food\" sú potrebné parametre.", - "invalidPetName": "Invalid pet name supplied.", - "missingEggHatchingPotionHatch": "\"egg\" a \"hatchingPotion\" sú potrebné parametre.", - "invalidTypeEquip": "\"type\" musí byť jeden z 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Musíš kúpiť <%= val %>, aby si to použil na <%= key %>.", "typeRequired": "Typ je vyžadovaný", "positiveAmountRequired": "Positive amount is required", diff --git a/website/common/locales/sk/quests.json b/website/common/locales/sk/quests.json index 891bd073ba..a989820ea7 100644 --- a/website/common/locales/sk/quests.json +++ b/website/common/locales/sk/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Zatiaľ nebola poslaná žiadna pozvánka na výpravu.", "questInviteNotFound": "Žiadna pozvánka na výpravu nebola nájdená.", "guildQuestsNotSupported": "Cechy nemôžu byť pozvané na výpravu.", - "questNotFound": "Výprava \"<%= key %>\" nebola nájdená.", "questNotOwned": "Nevlastníš tento zvitok s výpravou.", "questNotGoldPurchasable": "Výprava \"<%= key %>\" sa nedá kúpiť so zlatom.", "questLevelTooHigh": "Musíš byť level <%= level %>, aby si začal túto výpravu.", diff --git a/website/common/locales/sk/questscontent.json b/website/common/locales/sk/questscontent.json index 0e8f8b1bf5..57f2683c21 100644 --- a/website/common/locales/sk/questscontent.json +++ b/website/common/locales/sk/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/sk/spells.json b/website/common/locales/sk/spells.json index 740d065727..725d73dc0e 100644 --- a/website/common/locales/sk/spells.json +++ b/website/common/locales/sk/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Premení tvojho priateľa na morského tvora!", "spellSpecialSandText": "Piesok", "spellSpecialSandNotes": "Reverse the spell that made you a sea star.", - "spellNotFound": "Kúzlo \"<%= spellId %>\" nebolo nájdené.", "partyNotFound": "Družina nebola nájdená", "targetIdUUID": "\"targetId\" musí byť platné používateľské ID.", "challengeTasksNoCast": "Zoslanie kúzla na úlohu z výzvy nie je povolené.", diff --git a/website/common/locales/sk/subscriber.json b/website/common/locales/sk/subscriber.json index a5e2e60bef..254d44e534 100644 --- a/website/common/locales/sk/subscriber.json +++ b/website/common/locales/sk/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Invalid coupon code.", "couponUsed": "Coupon code already used.", "couponCodeRequired": "The coupon code is required.", - "eventRequired": "\"req.params.event\" is required.", - "countRequired": "\"req.query.count\" is required.", - "missingPaymentId": "Missing req.query.paymentId", - "missingCustomerId": "Missing req.query.customerId", - "missingPaypalBlock": "Missing req.session.paypalBlock", - "missingSubKey": "Missing req.query.sub", "paypalCanceled": "Your subscription has been canceled", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "receiveMysticHourglass": "Receive a Mystic Hourglass!", diff --git a/website/common/locales/sk/tasks.json b/website/common/locales/sk/tasks.json index f198987ca3..767ca65877 100644 --- a/website/common/locales/sk/tasks.json +++ b/website/common/locales/sk/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "Špeciálny výstroj sa objaví tu počas Podujatí.", "rewardHelp4": "Neboj sa vlastných odmien! Pozri si zopár ich ukážok.", "clickForHelp": "Klikni pre pomoc", - "taskIdRequired": "\"taskId\" musí byť platné UUID.", "taskAliasAlreadyUsed": "Alias úloha už je použitá na inej úlohe. ", "taskNotFound": "Úloha nebola nájdená.", "invalidTaskType": "Typ úlohy musí byť jeden z \"habit\", \"daily\", \"todo\", \"reward\".", diff --git a/website/common/locales/sr/challenge.json b/website/common/locales/sr/challenge.json index 18c0f5fde6..de9a02b8cb 100644 --- a/website/common/locales/sr/challenge.json +++ b/website/common/locales/sr/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Pobednik u sledećim izazovima", "challenges": "Izazovi", "challengesLink": "Challenges", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Nema izazova, posetite", "toCreate": "da biste napravili izazov.", "selectWinner": "Odaberite pobednika i završite izazov:", @@ -23,7 +25,9 @@ "filter": "Filter", "groups": "Grupe", "noNone": "Nijedna", + "category": "Category", "membership": "Prikazati", + "ownership": "Ownership", "participating": "Gde učestvujem", "notParticipating": "Gde ne učestvujem", "either": "Oba", diff --git a/website/common/locales/sr/character.json b/website/common/locales/sr/character.json index f0dc4f57f6..dbbf0df97e 100644 --- a/website/common/locales/sr/character.json +++ b/website/common/locales/sr/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Show Stat Allocation", "hideQuickAllocation": "Hide Stat Allocation", "quickAllocationLevelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User Icon > Stats.", - "invalidAttribute": "\"<%= attr %>\" is not a valid Stat.", "notEnoughAttrPoints": "You don't have enough Stat Points.", "style": "Style", "facialhair": "Facial", @@ -219,6 +218,5 @@ "mainHand": "Main-Hand", "offHand": "Off-Hand", "pointsAvailable": "Points Available", - "pts": "pts", - "statsObjectRequired": "Stats update is required" + "pts": "pts" } \ No newline at end of file diff --git a/website/common/locales/sr/contrib.json b/website/common/locales/sr/contrib.json index d773011cf7..96608d18db 100644 --- a/website/common/locales/sr/contrib.json +++ b/website/common/locales/sr/contrib.json @@ -49,7 +49,6 @@ "UUID": "User ID", "loadUser": "Učitati korisnika", "noAdminAccess": "You don't have admin access.", - "pageMustBeNumber": "req.query.page mora biti broj", "userNotFound": "Korisnik nije pronađen.", "invalidUUID": "UUID mora biti validan.", "title": "Titula", diff --git a/website/common/locales/sr/groups.json b/website/common/locales/sr/groups.json index 053e980b89..50dd0960a7 100644 --- a/website/common/locales/sr/groups.json +++ b/website/common/locales/sr/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Poruka (nije neophodna)", "yesRemove": "Da", "foreverAlone": "Ne možete da lajkujete svoju poruku.", - "sortDateJoinedAsc": "Earliest Date Joined", - "sortDateJoinedDesc": "Latest Date Joined", - "sortLoginAsc": "Earliest Login", - "sortLoginDesc": "Latest Login", - "sortLevelAsc": "Lowest Level", - "sortLevelDesc": "Highest Level", - "sortNameAsc": "Name (A - Z)", - "sortNameDesc": "Name (Z - A)", - "sortTierAsc": "Lowest Tier", - "sortTierDesc": "Highest Tier", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Želite li da osnujete udruženje i platite 4 dragulja?", "leaveGroupCha": "Zatvori izazove iz udruženja i...", "confirm": "Potvrda", @@ -131,6 +131,10 @@ "clearAll": "Obrisati sve poruke", "confirmDeleteAllMessages": "Jeste li sigurni da želite da obrišete sve poruke u sandučetu? Drugi korisnici i dalje će moći da vide poruke koje ste im poslali.", "optOutPopover": "Ne želite da koristite privatne poruke? Kliknite ovde da ih onemogućite", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Blokirati", "unblock": "Odblokirati", "pm-reply": "Odgovor", @@ -207,7 +211,6 @@ "partyOnName": "Party On", "partyUpText": "Joined a Party with another person! Have fun battling monsters and supporting each other.", "partyOnText": "Joined a Party with at least four people! Enjoy your increased accountability as you unite with your friends to vanquish your foes!", - "groupIdRequired": "\"groupId\" must be a valid UUID", "groupNotFound": "Group not found or you don't have access.", "groupTypesRequired": "You must supply a valid \"type\" query string.", "questLeaderCannotLeaveGroup": "You cannot leave your Party when you have started a quest. Abort the quest first.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "You cannot remove yourself!", "groupMemberNotFound": "User not found among group's members", "mustBeGroupMember": "Must be member of the group.", - "keepOrRemoveAll": "req.query.keep must be either \"keep-all\" or \"remove-all\"", - "keepOrRemove": "req.query.keep must be either \"keep\" or \"remove\"", "canOnlyInviteEmailUuid": "Can only invite using uuids or emails.", "inviteMissingEmail": "Missing email address in invite.", "inviteMissingUuid": "Missing user id in invite", @@ -315,7 +316,7 @@ "approvalsTitle": "Tasks Awaiting Approval", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "When your group completes tasks that need your approval, they'll appear here! Adjust approval requirement settings under task editing.", - "userIsClamingTask": "`<%= username %> has claimed \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Approval Requested", "refreshApprovals": "Refresh Approvals", "refreshGroupTasks": "Refresh Group Tasks", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Can't delete group tasks that are assigned to you.", "confirmGuildPlanCreation": "Create this group?", "onlyGroupLeaderCanInviteToGroupPlan": "Only the group leader can invite users to a group with a subscription.", - "remainOrLeaveChallenges": "req.query.keep must be either 'remain-in-challenges' or 'leave-challenges'", "paymentDetails": "Payment Details", "aboutToJoinCancelledGroupPlan": "You are about to join a group with a canceled plan. You will NOT receive a free subscription.", "cannotChangeLeaderWithActiveGroupPlan": "You can not change the leader while the group has an active plan.", @@ -366,9 +366,11 @@ "recentActivity": "Recent Activity", "myGuilds": "My Guilds", "guildsDiscovery": "Discover Guilds", + "role": "Role", "guildOrPartyLeader": "Leader", "guildLeader": "Guild Leader", "member": "Member", + "guildSize": "Guild Size", "goldTier": "Gold Tier", "silverTier": "Silver Tier", "bronzeTier": "Bronze Tier", diff --git a/website/common/locales/sr/npc.json b/website/common/locales/sr/npc.json index f3b1997028..fbdd617d6f 100644 --- a/website/common/locales/sr/npc.json +++ b/website/common/locales/sr/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Featured Items!", "hideLocked": "Hide locked", "hidePinned": "Hide pinned", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Experience", "amountGold": "<%= amount %> Gold", "namedHatchingPotion": "<%= type %> Hatching Potion", @@ -74,14 +75,7 @@ "ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!", "ianBrokenText": "Welcome to the Quest Shop... Here you can use Quest Scrolls to battle monsters with your friends... Be sure to check out our fine array of Quest Scrolls for purchase on the right...", "featuredQuests": "Featured Quests!", - "missingKeyParam": "\"req.params.key\" is required.", - "itemNotFound": "Item \"<%= key %>\" not found.", "cannotBuyItem": "You can't buy this item.", - "missingTypeKeyEquip": "\"key\" and \"type\" are required parameters.", - "missingPetFoodFeed": "\"pet\" and \"food\" are required parameters.", - "invalidPetName": "Invalid pet name supplied.", - "missingEggHatchingPotionHatch": "\"egg\" and \"hatchingPotion\" are required parameters.", - "invalidTypeEquip": "\"type\" must be one of 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.", "typeRequired": "Type is required", "positiveAmountRequired": "Positive amount is required", diff --git a/website/common/locales/sr/quests.json b/website/common/locales/sr/quests.json index 5ed4b2ac62..973e68e397 100644 --- a/website/common/locales/sr/quests.json +++ b/website/common/locales/sr/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "No quest invitation has been sent out yet.", "questInviteNotFound": "No quest invitation found.", "guildQuestsNotSupported": "Guilds cannot be invited on quests.", - "questNotFound": "Quest \"<%= key %>\" not found.", "questNotOwned": "You don't own that quest scroll.", "questNotGoldPurchasable": "Quest \"<%= key %>\" is not a Gold-purchasable quest.", "questLevelTooHigh": "You must be level <%= level %> to begin this quest.", diff --git a/website/common/locales/sr/questscontent.json b/website/common/locales/sr/questscontent.json index 62fca788c8..98482c7791 100644 --- a/website/common/locales/sr/questscontent.json +++ b/website/common/locales/sr/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/sr/spells.json b/website/common/locales/sr/spells.json index e6c28ab35c..9ab4fa2e18 100644 --- a/website/common/locales/sr/spells.json +++ b/website/common/locales/sr/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Turn a friend into a sea creature!", "spellSpecialSandText": "Sand", "spellSpecialSandNotes": "Reverse the spell that made you a sea star.", - "spellNotFound": "Skill \"<%= spellId %>\" not found.", "partyNotFound": "Party not found", "targetIdUUID": "\"targetId\" must be a valid User ID.", "challengeTasksNoCast": "Casting a skill on challenge tasks is not allowed.", diff --git a/website/common/locales/sr/subscriber.json b/website/common/locales/sr/subscriber.json index 501182fe34..0fbd365c94 100644 --- a/website/common/locales/sr/subscriber.json +++ b/website/common/locales/sr/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Invalid coupon code.", "couponUsed": "Coupon code already used.", "couponCodeRequired": "The coupon code is required.", - "eventRequired": "\"req.params.event\" is required.", - "countRequired": "\"req.query.count\" is required.", - "missingPaymentId": "Missing req.query.paymentId", - "missingCustomerId": "Missing req.query.customerId", - "missingPaypalBlock": "Missing req.session.paypalBlock", - "missingSubKey": "Missing req.query.sub", "paypalCanceled": "Your subscription has been canceled", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "receiveMysticHourglass": "Receive a Mystic Hourglass!", diff --git a/website/common/locales/sr/tasks.json b/website/common/locales/sr/tasks.json index 7e329bb47b..3421b16ee1 100644 --- a/website/common/locales/sr/tasks.json +++ b/website/common/locales/sr/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "Special equipment will appear here during World Events.", "rewardHelp4": "Don't be afraid to set custom Rewards! Check out some samples here.", "clickForHelp": "Click for help", - "taskIdRequired": "\"taskId\" must be a valid UUID.", "taskAliasAlreadyUsed": "Task alias already used on another task.", "taskNotFound": "Task not found.", "invalidTaskType": "Task type must be one of \"habit\", \"daily\", \"todo\", \"reward\".", diff --git a/website/common/locales/sv/backgrounds.json b/website/common/locales/sv/backgrounds.json index 47f6b5eb38..73acf3e41d 100644 --- a/website/common/locales/sv/backgrounds.json +++ b/website/common/locales/sv/backgrounds.json @@ -49,7 +49,7 @@ "backgrounds122014": "SET 7: Släpptes December 2014", "backgroundIcebergText": "Isberg", "backgroundIcebergNotes": "Driv runt på ett Isberg.", - "backgroundTwinklyLightsText": "Vintens blinkande lampor", + "backgroundTwinklyLightsText": "Vinterns Blinkande Ljus", "backgroundTwinklyLightsNotes": "Promenera bland träd klädda i festlig belysning.", "backgroundSouthPoleText": "Sydpolen", "backgroundSouthPoleNotes": "Besök den isiga Sydpolen.", @@ -57,12 +57,12 @@ "backgroundIceCaveText": "Isgrotta", "backgroundIceCaveNotes": "Stig ner i en isgrotta.", "backgroundFrigidPeakText": "Kylig topp", - "backgroundFrigidPeakNotes": "Kylig topp.", + "backgroundFrigidPeakNotes": "Bestig en Kylig Topp.", "backgroundSnowyPinesText": "Snöiga tallar", "backgroundSnowyPinesNotes": "Koja bland snöiga tallar.", "backgrounds022015": "SET 9: Släpptes Februari 2015", "backgroundBlacksmithyText": "Smedja", - "backgroundBlacksmithyNotes": "Arbete i smedjan", + "backgroundBlacksmithyNotes": "Arbeta i Smedjan.", "backgroundCrystalCaveText": "Kristallgrotta", "backgroundCrystalCaveNotes": "Utforska en kristallgrotta.", "backgroundDistantCastleText": "Avlägset slott", @@ -78,7 +78,7 @@ "backgroundCherryTreesText": "Körsbärsträd", "backgroundCherryTreesNotes": "Beundra de blommande körsbärsträden.", "backgroundFloralMeadowText": "Blommande äng", - "backgroundFloralMeadowNotes": "Picknick i en blommande äng.", + "backgroundFloralMeadowNotes": "Picknick på en blommande äng.", "backgroundGumdropLandText": "Geléhallonlandet", "backgroundGumdropLandNotes": "Snaska på växtligheten i Geléhallonlandet.", "backgrounds052015": "SET 12: Släpptes maj 2015", diff --git a/website/common/locales/sv/challenge.json b/website/common/locales/sv/challenge.json index 1b3ea24dba..3ae8d5f831 100644 --- a/website/common/locales/sv/challenge.json +++ b/website/common/locales/sv/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Var vinnaren av de följande utmaningarna", "challenges": "Utmaningar", "challengesLink": "Utmaningar", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Inga utmaningar ännu, gå till", "toCreate": "för att skapa en.", "selectWinner": "Välj en vinnare och avsluta utmaningen:", @@ -23,7 +25,9 @@ "filter": "Filter", "groups": "Grupper", "noNone": "Ingen", + "category": "Category", "membership": "Medlemskap", + "ownership": "Ownership", "participating": "Deltar", "notParticipating": "Deltar inte", "either": "Vilket som", diff --git a/website/common/locales/sv/character.json b/website/common/locales/sv/character.json index 13ee4333bc..8f314312aa 100644 --- a/website/common/locales/sv/character.json +++ b/website/common/locales/sv/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Visa poängfördelning", "hideQuickAllocation": "Göm poängfördelning", "quickAllocationLevelPopover": "För varje nivå tjänar du ett poäng som du kan tilldela till en egenskap av ditt val. Du kan göra det manuellt eller så kan du låta spelet välja åt dig med hjälp av Automatisk Tilldelning som finns under Användarikon > Egenskaper.", - "invalidAttribute": "\"<%= attr %>\" är inte en godkänd egenskap.", "notEnoughAttrPoints": "Du har inte tillräckligt med egenskapspoäng.", "style": "Stil", "facialhair": "Ansikte", @@ -219,6 +218,5 @@ "mainHand": "Huvudhand", "offHand": "Off-Hand", "pointsAvailable": "Tillgängliga Poäng", - "pts": "poäng", - "statsObjectRequired": "Egenskapsuppdatering krävs" + "pts": "poäng" } \ No newline at end of file diff --git a/website/common/locales/sv/content.json b/website/common/locales/sv/content.json index bec0909471..0f75068d39 100644 --- a/website/common/locales/sv/content.json +++ b/website/common/locales/sv/content.json @@ -5,54 +5,54 @@ "armoireNotesFull": "Öppna vapenskåpet för att få en slumpmässig specialutrustning, erfarenhet eller mat! Utrustningsdelar som finns kvar:", "armoireLastItem": "Du har hittat den sista ovanliga utrustningen i det förtrollade vapenskåpet.", "armoireNotesEmpty": "Klädskåpet kommer att ha ny utrustning den första veckan varje månad. Tills dess kan du fortsätta klicka för erfarenhet och mat!", - "dropEggWolfText": "varg", + "dropEggWolfText": "Varg", "dropEggWolfMountText": "Varg", "dropEggWolfAdjective": "en lojal", - "dropEggTigerCubText": "tigerunge", + "dropEggTigerCubText": "Tigerunge", "dropEggTigerCubMountText": "tiger", - "dropEggTigerCubAdjective": "vild", - "dropEggPandaCubText": "pandaunge", - "dropEggPandaCubMountText": "panda", - "dropEggPandaCubAdjective": "lugn", - "dropEggLionCubText": "lejonunge", - "dropEggLionCubMountText": "lejon", + "dropEggTigerCubAdjective": "en vild", + "dropEggPandaCubText": "Pandaunge", + "dropEggPandaCubMountText": "Panda", + "dropEggPandaCubAdjective": "en lugn", + "dropEggLionCubText": "Lejonunge", + "dropEggLionCubMountText": "Lejon", "dropEggLionCubAdjective": "kunglig", - "dropEggFoxText": "räv", + "dropEggFoxText": "Räv", "dropEggFoxMountText": "Räv", - "dropEggFoxAdjective": "lömsk", - "dropEggFlyingPigText": "flygande gris", + "dropEggFoxAdjective": "en lömsk", + "dropEggFlyingPigText": "Flygande gris", "dropEggFlyingPigMountText": "Flygande Gris", - "dropEggFlyingPigAdjective": "nyckfull", - "dropEggDragonText": "drake", + "dropEggFlyingPigAdjective": "en nyckfull", + "dropEggDragonText": "Drake", "dropEggDragonMountText": "Drake", - "dropEggDragonAdjective": "mäktig", - "dropEggCactusText": "kaktus", + "dropEggDragonAdjective": "en mäktig", + "dropEggCactusText": "Kaktus", "dropEggCactusMountText": "Kaktus", "dropEggCactusAdjective": "retlig", - "dropEggBearCubText": "björnunge", - "dropEggBearCubMountText": "björn", + "dropEggBearCubText": "Björnunge", + "dropEggBearCubMountText": "Björn", "dropEggBearCubAdjective": "en modig", "questEggGryphonText": "Grip", "questEggGryphonMountText": "Grip", - "questEggGryphonAdjective": "stolt", - "questEggHedgehogText": "igelkott", + "questEggGryphonAdjective": "en stolt", + "questEggHedgehogText": "Igelkott", "questEggHedgehogMountText": "Igelkott", - "questEggHedgehogAdjective": "taggig", - "questEggDeerText": "hjort", + "questEggHedgehogAdjective": "en taggig", + "questEggDeerText": "Hjort", "questEggDeerMountText": "Hjort", - "questEggDeerAdjective": "elegant", - "questEggEggText": "ägg", - "questEggEggMountText": "äggkorg", - "questEggEggAdjective": "ärgglad", - "questEggRatText": "råtta", + "questEggDeerAdjective": "en elegant", + "questEggEggText": "Ägg", + "questEggEggMountText": "Äggkorg", + "questEggEggAdjective": "en färgglad", + "questEggRatText": "Råtta", "questEggRatMountText": "Råtta", "questEggRatAdjective": "en social", - "questEggOctopusText": "bläckfisk", + "questEggOctopusText": "Bläckfisk", "questEggOctopusMountText": "Bläckfisk", - "questEggOctopusAdjective": "slemmig", - "questEggSeahorseText": "sjöhäst", + "questEggOctopusAdjective": "en slemmig", + "questEggSeahorseText": "Sjöhäst", "questEggSeahorseMountText": "Sjöhäst", - "questEggSeahorseAdjective": "vinst", + "questEggSeahorseAdjective": "en vinst", "questEggParrotText": "papegoja", "questEggParrotMountText": "Papegoja", "questEggParrotAdjective": "livfull", @@ -79,10 +79,10 @@ "questEggBunnyAdjective": "gosig", "questEggSlimeText": "Marshmallowslem", "questEggSlimeMountText": "Marshmallowslem", - "questEggSlimeAdjective": "söt", + "questEggSlimeAdjective": "en söt", "questEggSheepText": "Får", "questEggSheepMountText": "Får", - "questEggSheepAdjective": "ullig", + "questEggSheepAdjective": "en ullig", "questEggCuttlefishText": "Bläckfisk", "questEggCuttlefishMountText": "Bläckfisk", "questEggCuttlefishAdjective": "kelig", @@ -115,13 +115,13 @@ "questEggSnailAdjective": "en långsam men stadig", "questEggFalconText": "Falk", "questEggFalconMountText": "Falk", - "questEggFalconAdjective": "snabbt", + "questEggFalconAdjective": "en snabb", "questEggTreelingText": "Trädling", "questEggTreelingMountText": "Trädling", "questEggTreelingAdjective": "en lövaktig", "questEggAxolotlText": "Axolotl", "questEggAxolotlMountText": "Axolotl", - "questEggAxolotlAdjective": "lite", + "questEggAxolotlAdjective": "en liten", "questEggTurtleText": "Havssköldpadda", "questEggTurtleMountText": "Gigantisk Havssköldpadda", "questEggTurtleAdjective": "en fridfull", @@ -149,7 +149,7 @@ "questEggPeacockText": "Påfågel", "questEggPeacockMountText": "Påfågel", "questEggPeacockAdjective": "en dansande", - "questEggButterflyText": "Fjärilslarv\n", + "questEggButterflyText": "Fjärilslarv", "questEggButterflyMountText": "Fjäril", "questEggButterflyAdjective": "en söt", "questEggNudibranchText": "Nakensnäcka", @@ -167,8 +167,8 @@ "questEggBadgerText": "Grävling", "questEggBadgerMountText": "Grävling", "questEggBadgerAdjective": "bustling", - "questEggSquirrelText": "Squirrel", - "questEggSquirrelMountText": "Squirrel", + "questEggSquirrelText": "Ekorre", + "questEggSquirrelMountText": "Ekorre", "questEggSquirrelAdjective": "bushy-tailed", "eggNotes": "Hitta en kläckningsdryck och häll på det här ägget så kommer det kläckas till <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Standard", @@ -180,8 +180,8 @@ "hatchingPotionZombie": "Zombie", "hatchingPotionCottonCandyPink": "Ljusrosa", "hatchingPotionCottonCandyBlue": "Ljusblå", - "hatchingPotionGolden": "Guld", - "hatchingPotionSpooky": "läskig", + "hatchingPotionGolden": "Guldig", + "hatchingPotionSpooky": "Läskig", "hatchingPotionPeppermint": "Pepparmint", "hatchingPotionFloral": "Blommig", "hatchingPotionAquatic": "Akvatisk", @@ -194,7 +194,7 @@ "hatchingPotionShimmer": "Skimmer", "hatchingPotionFairy": "Älva", "hatchingPotionStarryNight": "Stjärnklar Natt", - "hatchingPotionRainbow": "Rainbow", + "hatchingPotionRainbow": "Regnbåge", "hatchingPotionNotes": "Häll den här på ett ägg, så kläcks det som ett <%= potText(locale) %> husdjur.", "premiumPotionAddlNotes": "Kan ej användas på ägg till uppdragshusdjur", "foodMeat": "Kött", @@ -221,7 +221,7 @@ "foodCottonCandyPink": "Rosa sockervadd", "foodCottonCandyPinkThe": "Den rosa sockervadden", "foodCottonCandyPinkA": "Rosa Sockervadd", - "foodCottonCandyBlue": "Blå sockervadd", + "foodCottonCandyBlue": "Blå Sockervadd", "foodCottonCandyBlueThe": "Den blåa sockervadden", "foodCottonCandyBlueA": "Blå Sockervadd", "foodHoney": "Honung", @@ -260,7 +260,7 @@ "foodCandySkeleton": "Bengodis", "foodCandySkeletonThe": "the Bare Bones Candy", "foodCandySkeletonA": "Bare Bones Candy", - "foodCandyBase": "Standardgodis", + "foodCandyBase": "Vanligt Godis", "foodCandyBaseThe": "the Basic Candy", "foodCandyBaseA": "Vanligt Godis", "foodCandyCottonCandyBlue": "Sur Blå Godisbit", diff --git a/website/common/locales/sv/contrib.json b/website/common/locales/sv/contrib.json index a6207986f7..4b31775ad7 100644 --- a/website/common/locales/sv/contrib.json +++ b/website/common/locales/sv/contrib.json @@ -49,7 +49,6 @@ "UUID": "Användar-ID", "loadUser": "Ladda Användare", "noAdminAccess": "Du har inte administratörstillgång.", - "pageMustBeNumber": "req.query.page måste vara ett nummer", "userNotFound": "Användare hittades inte.", "invalidUUID": "UUID måste vara giltig", "title": "Titel", diff --git a/website/common/locales/sv/generic.json b/website/common/locales/sv/generic.json index 9bd74b770a..76910a0944 100644 --- a/website/common/locales/sv/generic.json +++ b/website/common/locales/sv/generic.json @@ -33,7 +33,7 @@ "showLess": "Visa Mindre", "expandToolbar": "Expandera Verktygsfält", "collapseToolbar": "Fäll ihop Verktygsfält", - "markdownHelpLink": "Markdown format-hjälp", + "markdownHelpLink": "Markdown formateringshjälp", "showFormattingHelp": "Visa formateringshjälp", "hideFormattingHelp": "Dölj formateringshjälp", "youType": "Du skriver:", @@ -88,7 +88,7 @@ "gemButton": "Du har <%= number %> juveler.", "needMoreGems": "Behöver Du Mer Diamanter?", "needMoreGemsInfo": "Köp Diamante nu eller bli en prenumerant för att köpa Diamanter med Guld, få mysteriska objekt en gång i månaden, njut av ökad fyndkapacitet och mer!", - "moreInfo": "Mer Info", + "moreInfo": "Mer Information", "moreInfoChallengesURL": "http://habitica.wikia.com/wiki/Challenges", "moreInfoTagsURL": "http://habitica.wikia.com/wiki/Tags", "showMoreMore": "(visa mer)", @@ -121,7 +121,7 @@ "seeConsole": "Om felet fortsätter, rapportera in det under Gemenskap > Rapportera bugg. Om du känner till din webläsare ordentligt, inkludera gärna felmeddelanden därifrån.", "error": "Fel", "menu": "Meny", - "notifications": "Tillkännagivanden", + "notifications": "Notiser", "noNotifications": "Du har inga notiser.", "clear": "Rensa", "endTour": "Avbryt rundtur", @@ -131,14 +131,14 @@ "audioTheme_wattsTheme": "Watts tema", "audioTheme_gokulTheme": "Gokul-tema", "audioTheme_luneFoxTheme": "LuneFoxs tema", - "audioTheme_rosstavoTheme": "Rosstavo's tema", + "audioTheme_rosstavoTheme": "Rosstavos tema", "audioTheme_dewinTheme": "Derwin's tema", "audioTheme_airuTheme": "Airu's tema", "audioTheme_beatscribeNesTheme": "Beatscribe's NES Tema", "audioTheme_arashiTheme": "Arashi's Tema", "audioTheme_triumphTheme": "Triumf Tema", "audioTheme_lunasolTheme": "Lunasol Tema", - "audioTheme_spacePenguinTheme": "SpacePenguin's Tema", + "audioTheme_spacePenguinTheme": "SpacePenguins Tema", "audioTheme_maflTheme": "MAFL Tema", "audioTheme_pizildenTheme": "Pizildens Tema", "audioTheme_farvoidTheme": "Farvoid Tema", diff --git a/website/common/locales/sv/groups.json b/website/common/locales/sv/groups.json index 6b56d578a2..d3209b0787 100644 --- a/website/common/locales/sv/groups.json +++ b/website/common/locales/sv/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Frivilligt meddelande", "yesRemove": "Ja, ta bort dem", "foreverAlone": "Du kan inte gilla ditt eget meddelande. Var inte den som är den.", - "sortDateJoinedAsc": "Earliest Date Joined", - "sortDateJoinedDesc": "Latest Date Joined", - "sortLoginAsc": "Senast Inloggad", - "sortLoginDesc": "Senast Inloggad", - "sortLevelAsc": "Lägst Nivå", - "sortLevelDesc": "Högst Nivå", - "sortNameAsc": "Namn (A - Z)", - "sortNameDesc": "Namn (Z - A)", - "sortTierAsc": "Lägst Rank", - "sortTierDesc": "Högst Rank", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Skapa Gille för 4 Juveler?", "leaveGroupCha": "Lämna gillesutmaningar och...", "confirm": "Bekräfta", @@ -131,6 +131,10 @@ "clearAll": "Radera alla meddelanden", "confirmDeleteAllMessages": "Är du säker på att du vill ta bort alla meddelanden i din inkorg? Andra användare kommer fortfarande se meddelanden som du har skickat till dem.", "optOutPopover": "Gillar du inte privatmeddelanden? Klicka för att stänga av funktionen", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Blockera", "unblock": "Avblockera", "pm-reply": "Skicka ett svar", @@ -207,7 +211,6 @@ "partyOnName": "Sällskapa vidare", "partyUpText": "Gick med i ett Sällskap med en annan person! Ha så kul med att slåss mot monster och att stötta varandra.", "partyOnText": "Gick med i ett Sällskap med minst fyra personer! Njut av din ökade ansvarhet medans du förenar med dina vänner för att utplåna era fiender!", - "groupIdRequired": "\"groupId\" måste vara en giltig UUID", "groupNotFound": "Gruppen hittades inte eller så har du inte tillträde till den.", "groupTypesRequired": "You must supply a valid \"type\" query string.", "questLeaderCannotLeaveGroup": "You cannot leave your Party when you have started a quest. Abort the quest first.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Du kan inte ta bort dig själv!", "groupMemberNotFound": "Användaren hittades inte bland gruppens medlemmar", "mustBeGroupMember": "Måste vara medlem i gruppen.", - "keepOrRemoveAll": "req.query.keep måste vara antingen \"keep-all\" eller \"remove-all\"", - "keepOrRemove": "req.query.keep måste vara antingen \"keep\" eller \"remove\"", "canOnlyInviteEmailUuid": "Kan bara bjuda in genom att använda UUID eller E-mail.", "inviteMissingEmail": "Email adress för inbjudan saknas.", "inviteMissingUuid": "Saknar användar id i inbjudan", @@ -315,7 +316,7 @@ "approvalsTitle": "Uppgifter Avvaktar Godkännande", "upgradeTitle": "Uppgradera", "blankApprovalsDescription": "When your group completes tasks that need your approval, they'll appear here! Adjust approval requirement settings under task editing.", - "userIsClamingTask": "`<%= username %> har gjort anspråk på \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Godkännande Ansökt", "refreshApprovals": "Ladda Om Godkännanden", "refreshGroupTasks": "Ladda om Gruppuppgifter", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Kan inte radera grupp-uppgifter som är tilldelade till dig.", "confirmGuildPlanCreation": "Skapa denna grupp?", "onlyGroupLeaderCanInviteToGroupPlan": "Bara gruppledaren kan bjuda in spelare till en grupp med en prenumeration.", - "remainOrLeaveChallenges": "req.query.keep måste vara antingen 'remain-in-challenges' eller 'leave-challenges'", "paymentDetails": "Betalningsdetaljer", "aboutToJoinCancelledGroupPlan": "Du är på väg att gå med i en grupp med en avslutad plan. Du kommer INTE att få en gratis prenumeration.", "cannotChangeLeaderWithActiveGroupPlan": "Du kan inte ändra gruppledaren medans gruppen har en aktiv plan.", @@ -366,9 +366,11 @@ "recentActivity": "Nylig Aktivitet", "myGuilds": "Mina gillen", "guildsDiscovery": "Upptäck Gillen", + "role": "Role", "guildOrPartyLeader": "Ledare", "guildLeader": "Gilleledare", "member": "Medlem", + "guildSize": "Guild Size", "goldTier": "Guldrank", "silverTier": "Silverrank", "bronzeTier": "Bronsrank", diff --git a/website/common/locales/sv/maintenance.json b/website/common/locales/sv/maintenance.json index 0545b16708..38643868de 100644 --- a/website/common/locales/sv/maintenance.json +++ b/website/common/locales/sv/maintenance.json @@ -2,7 +2,7 @@ "habiticaBackSoon": "Oroa dig inte, Habitica kommer snart tillbaka!", "importantMaintenance": "Vi utför viktigt underhållsarbete som vi uppskattar kommer vara klart klockan 22:00 (UTC-8).", "maintenance": "Underhåll", - "maintenanceMoreInfo": "Vill du ha mer information om underhållet?? <%= linkStart %>Spana in info-sidan<%= linkEnd %>.", + "maintenanceMoreInfo": "Vill du ha mer information om underhållet? <%= linkStart %>Spana in info-sidan<%= linkEnd %>.", "noDamageKeepStreaks": "Du kommer INTE att ta skada eller förlora inslag!", "thanksForPatience": "Tack för ditt tålamod!", "twitterMaintenanceUpdates": "För de senaste uppdateringarna, kolla in vår Twitter, där vi kommer posta information om status.", @@ -16,7 +16,7 @@ "maintenanceInfoTechDetails": "Vill du ha mer detaljer kring den tekniska sidan av processen? Besök The Forge, vår nya blogg.", "maintenanceInfoMore": "Mer information", "maintenanceInfoAccountChanges": "Vilka ändringar kan jag se på mitt konto när omskrivningen är klar?", - "maintenanceInfoAccountChangesText": "At first, there won’t be any notable changes aside from performance improvements for features such as Challenges. If you notice any changes that shouldn’t be there, email us at <%= hrefTechAssistanceEmail %> and we will investigate them for you!", + "maintenanceInfoAccountChangesText": "Till en början kommer det inte vara några tydliga förändringar, förutom ökad prestanda för funktioner så som Utmaningar. Om du märker några förändringar som inte borde vara där, maila oss på <%= hrefTechAssistanceEmail %> så kommer vi undersöka dem åt dig!", "maintenanceInfoAddFeatures": "Vilken sorts funktioner kommer det här göra möjligt för Habitica att lägga till?", "maintenanceInfoAddFeaturesText": "Completing this rewrite will allow us to start building out improved chat and Guilds, plans for organizations and families, and additional productivity features like Monthlies and the ability to record yesterday’s activity! Those are all involved features on their own, so it will take time to build them, but until we were finished with this rewrite, there was no way we could start them.", "maintenanceInfoHowLong": "Hur lång tid kommer underhållet ta?", diff --git a/website/common/locales/sv/npc.json b/website/common/locales/sv/npc.json index bbb8036cee..ae0c111f77 100644 --- a/website/common/locales/sv/npc.json +++ b/website/common/locales/sv/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Utvalda Objekt!", "hideLocked": "Göm låsta", "hidePinned": "Göm fastnålade objekt", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Erfarenhet", "amountGold": "<%= amount %> Guld", "namedHatchingPotion": "<%= type %> Kläckningsdryck", @@ -74,14 +75,7 @@ "ianTextMobile": "Kan jag intressera dig med några uppdrags skriftrullar? Aktivera dom för att slåss mot monster med ditt Sällskap!", "ianBrokenText": "Välkommen till Uppdragsshoppen... Här kan du använda Uppdragsskriftrullar för att slåss mot monster med dina vänner... Se till att kolla in vårt fina utbud av Uppdragsskriftrullar till salu på höger sida...", "featuredQuests": "Utvalda Uppdrag!", - "missingKeyParam": "\"req.params.key\" krävs.", - "itemNotFound": "Föremål \"<%= key %>\" hittades inte.", "cannotBuyItem": "Du kan inte köpa detta.", - "missingTypeKeyEquip": "\"key\" och \"type\" är obligatoriska parametrar.", - "missingPetFoodFeed": "\"pet\" och \"food\" är obligatoriska parametrar.", - "invalidPetName": "Ogiltigt husdjursnamn.", - "missingEggHatchingPotionHatch": "\"egg\" och \"hatchingPotion\" är obligatoriska parametrar.", - "invalidTypeEquip": "\"type\" måste vara en utav 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Måste köpa <%= val %> för att sätta den på <%= key %>.", "typeRequired": "Du måste ange en Typ", "positiveAmountRequired": "Positive amount is required", diff --git a/website/common/locales/sv/quests.json b/website/common/locales/sv/quests.json index e4413bb14a..962ab59f90 100644 --- a/website/common/locales/sv/quests.json +++ b/website/common/locales/sv/quests.json @@ -4,9 +4,9 @@ "whereAreMyQuests": "Uppdrag är nu tillgängliga på deras egna webbsida! Klicka Förråd -> Uppdrag för att hitta dem.", "yourQuests": "Dina Uppdrag", "questsForSale": "Uppdrag Till Salu", - "petQuests": "Husdjur och Riddjur Uppdrag", + "petQuests": "Husdjurs- och Riddjurs Uppdrag", "unlockableQuests": "Upplåsbara Uppdrag", - "goldQuests": "Mästerklasserna Uppdrags-serie", + "goldQuests": "Mästerklassernas Uppdragsserie", "questDetails": "Uppdragsdetaljer", "questDetailsTitle": "Uppdragsdetaljer", "questDescription": "Uppdrag tillåter spelare att fokusera på långsiktiga mål i spelet tillsammans med medlemmar av sällskapet.", @@ -14,23 +14,23 @@ "completed": "Fullbordad!", "rewardsAllParticipants": "Belöningar för alla deltagare i uppdraget", "rewardsQuestOwner": "Ytterligare belöningar till ägaren av uppdraget", - "questOwnerReceived": "Uppdragsägaren Har Också Blivit Belönad", + "questOwnerReceived": "Uppdragsägaren har också blivit belönad", "youWillReceive": "Du får", - "questOwnerWillReceive": "Uppdragsägaren Kommer Också Att Belönas", + "questOwnerWillReceive": "Uppdragsägaren kommer också att belönas", "youReceived": "Du har erhållit", "dropQuestCongrats": "Grattis till att ha hittat den här uppdragsskriftrullen! Du kan bjuda in ditt sällskap för att påbörja uppdraget nu, eller hitta den närsomhelst i Förråd > Uppdrag.", "questSend": "Genom att klicka \"Bjud in\" skickas en inbjudan till medlemmarna i ditt sällskap. När alla medlemmar har accepterat eller nekat börjar uppdraget. Se status under Socialt > Sällskap.", "questSendBroken": "När du klickar på \"Bjud in\" kommer en inbjudan skickas till dina sällskapsmedlemmar... När alla medlemmar har accepterat eller avböjt, börjar uppdraget... Se statusen under Socialt > Sällskap...", "inviteParty": "Bjud in Sällskapet till Uppdraget", "questInvitation": "Uppdragsinbjudan:", - "questInvitationTitle": "Uppdragsinbjudnader", + "questInvitationTitle": "Uppdragsinbjudan", "questInvitationInfo": "Inbjudan till Uppdraget <%= quest %>", - "invitedToQuest": "You were invited to the Quest <%= quest %>", + "invitedToQuest": "Du har blivit inbjuden till Uppdraget <%= quest %>", "askLater": "Fråga senare", "questLater": "Gå ut på Uppdrag Senare", "buyQuest": "Köp Uppdrag", "accepted": "Accepterade", - "declined": "Tackade nej", + "declined": "Avböjde", "rejected": "Avslog", "pending": "Inte svarat än", "questStart": "Så fort alla medlemmar har antingen accepterat eller nekat, börjar uppdraget. Endast de som klickat \"acceptera\" kommer kunna delta i uppdraget och få belöningarna. Om medlemmar inte svarar på länge (de kanske är inaktiva?), så kan uppdragsägaren vlja att börja uppdraget utan dem genom att klicka \"Starta\". Uppdragsägaren kan också avbryta uppdraget och återfå uppdragsskriftsrullen genom att klicka \"Avbryt\".", @@ -86,7 +86,7 @@ "questWarning": "Nya spelare som går med i sällskapet innan uppdraget påbörjas får också en inbjudan. Däremot kan inga nya sällskapsmedlemmar ansluta sig till uppdraget när det väl har påbörjats.", "questWarningBroken": "Om nya spelare går med i sällskapet innan uppdraget börjat kommer de också få en inbjudan... Men så fort uppdraget har startat så kan inga nya medlemmar gå med i uppdraget...", "bossRageTitle": "Vrede", - "bossRageDescription": "När denna mätare fylls kommer bossen släppa lös en specialattack.", + "bossRageDescription": "När denna mätare fylls kommer bossen släppa lös en specialattack!", "startAQuest": "STARTA ETT UPPDRAG", "startQuest": "Starta uppdrag", "whichQuestStart": "Vilket uppdrag vill du påbörja?", @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Ingen gästinbjudan har blivit utskickad än.", "questInviteNotFound": "Ingen uppdragsinbjudan hittad.", "guildQuestsNotSupported": "Gillen kan inte bli inbjudna till uppdrag.", - "questNotFound": "Uppdrag \"<%= key %>\" hittas inte.", "questNotOwned": "Du äger inte den där uppdragsskriftrullen.", "questNotGoldPurchasable": "Uppdrag \"<%= key %>\" går inte att köpa med Guld.", "questLevelTooHigh": "Du måste vara nivå <%= level %> för att påbörja det här uppdraget.", @@ -105,7 +104,7 @@ "noActiveQuestToLeave": "Inget aktivt uppdrag att lämna", "questLeaderCannotLeaveQuest": "Uppdragsledare kan inte lämna uppdraget", "notPartOfQuest": "Du är inte del av uppdraget", - "youAreNotOnQuest": "Du är inte på ett uppdrag", + "youAreNotOnQuest": "Du är inte ute på ett uppdrag", "noActiveQuestToAbort": "Det finns inget aktivt uppdrag att avbryta.", "onlyLeaderAbortQuest": "Bara gruppledaren eller uppdragsägaren kan avbryta ett uppdrag.", "questAlreadyRejected": "Du har redan avvisat uppdragsinbjudan.", @@ -121,10 +120,10 @@ "questBundles": "Rabatt på Uppdragsbuntar", "buyQuestBundle": "Köp Uppdragsbunt", "noQuestToStart": "Kan du inte hitta ett uppdrag att starta? Kolla in Uppdragsaffären i Marknaden för nya utgåvor!", - "pendingDamage": "<%= damage %> pending damage", - "pendingDamageLabel": "pending damage", - "bossHealth": "<%= currentHealth %> / <%= maxHealth %> Health", + "pendingDamage": "<%= damage %> avvaktande skada", + "pendingDamageLabel": "avvaktande skada", + "bossHealth": "<%= currentHealth %> / <%= maxHealth %> Hälsa", "rageAttack": "Rage Attack:", - "bossRage": "<%= currentRage %> / <%= maxRage %> Rage", + "bossRage": "<%= currentRage %> / <%= maxRage %> Vrede", "rageStrikes": "Rage Strikes" } \ No newline at end of file diff --git a/website/common/locales/sv/questscontent.json b/website/common/locales/sv/questscontent.json index fdd302953b..7da803255e 100644 --- a/website/common/locales/sv/questscontent.json +++ b/website/common/locales/sv/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/sv/rebirth.json b/website/common/locales/sv/rebirth.json index 3374eafab6..83a03beace 100644 --- a/website/common/locales/sv/rebirth.json +++ b/website/common/locales/sv/rebirth.json @@ -21,7 +21,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": "Instantly restart your character as a Level 1 Warrior while retaining achievements, collectibles, and equipment. Your tasks and their history will remain but they will be reset to yellow. Your streaks will be removed except from challenge tasks. Your Gold, Experience, Mana, and the effects of all Skills will be removed. All of this will take effect immediately. For more information, see the wiki's Orb of Rebirth page.", + "rebirthPop": "Starta om din karaktär omedelbart vid nivå 1 och behåll dina prestationer, samlarobjekt 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örmågor kommer att bli borttaget. Detta kommer att träda i kraft omedelbart. För mer information, se wikins Återfödelsens sfär sida.", "rebirthName": "Pånyttfödelsesfär", "reborn": "Pånyttfödd, max nivå <%= reLevel %>", "confirmReborn": "Är du säker?", diff --git a/website/common/locales/sv/spells.json b/website/common/locales/sv/spells.json index 5b03998771..8c517f8ca8 100644 --- a/website/common/locales/sv/spells.json +++ b/website/common/locales/sv/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Förvandla en vän till ett sjödjur!", "spellSpecialSandText": "Sand", "spellSpecialSandNotes": "Omvänd trollformeln som gjorde dig till en sjöstjärna.", - "spellNotFound": "Färdighet \"<%= spellId %>\" inte hittad.", "partyNotFound": "Sällskap inte hittat", "targetIdUUID": "\"targetId\" måste vara ett giltigt Användar-ID.", "challengeTasksNoCast": "Att kasta en färdighet på Utmaningsuppgifter är inte tillåtet.", diff --git a/website/common/locales/sv/subscriber.json b/website/common/locales/sv/subscriber.json index ea5ca022a5..00d826732c 100644 --- a/website/common/locales/sv/subscriber.json +++ b/website/common/locales/sv/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Ogiltig kupong kod.", "couponUsed": "Kupongkoden är redan använd.", "couponCodeRequired": "Kupongkoden krävs.", - "eventRequired": "\"req.params.event\" krävs.", - "countRequired": "\"req.query.count\" krävs.", - "missingPaymentId": "Saknar req.query.paymentId", - "missingCustomerId": "Saknar req.query.customerId", - "missingPaypalBlock": "Saknar req.session.paypalBlock", - "missingSubKey": "Saknar req.query.sub", "paypalCanceled": "Din prenumeration har blivit avslutad", "earnGemsMonthly": "Tjäna upp till **<%= cap %> Diamanter** per månad", "receiveMysticHourglass": "Få ett Mystiskt Timglas!", diff --git a/website/common/locales/sv/tasks.json b/website/common/locales/sv/tasks.json index bde8df039d..4736bd58e2 100644 --- a/website/common/locales/sv/tasks.json +++ b/website/common/locales/sv/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "Speciell utrustning kommer finnas här under globala evenemang.", "rewardHelp4": "Var inte rädd för att sätta personliga belöningar! Spana in några exempel här.", "clickForHelp": "Klicka För Hjälp", - "taskIdRequired": "\"taskId\" måste vara en giltig UUID", "taskAliasAlreadyUsed": "Uppgifts-alias har redan blivit använd på en anna uppgift.", "taskNotFound": "Uppgift hittades inte.", "invalidTaskType": "Uppgiftstyp måste vara en av \"vana\", \"daglig uppgift\", \"att-göra\", \"belöning\".", diff --git a/website/common/locales/tr/challenge.json b/website/common/locales/tr/challenge.json index 0910951d0a..54c6065418 100644 --- a/website/common/locales/tr/challenge.json +++ b/website/common/locales/tr/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Takip eden mücadelelerin kazanı", "challenges": "Mücadeleler", "challengesLink": "Mücadeleler", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Henüz mücadele yok, yeni bir tane oluşturmak için", "toCreate": "sekmesini ziyaret et.", "selectWinner": "Kazananı seç ve mücadeleyi bitir:", @@ -23,7 +25,9 @@ "filter": "Filtrele", "groups": "Gruplar", "noNone": "Hiçbiri", + "category": "Category", "membership": "Üyelik", + "ownership": "Ownership", "participating": "Üye Oldukların", "notParticipating": "Üye Olmadıkların", "either": "Tümü", diff --git a/website/common/locales/tr/character.json b/website/common/locales/tr/character.json index bb9b806f18..47a3205139 100644 --- a/website/common/locales/tr/character.json +++ b/website/common/locales/tr/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Show Stat Allocation", "hideQuickAllocation": "Hide Stat Allocation", "quickAllocationLevelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User Icon > Stats.", - "invalidAttribute": "\"<%= attr %>\" is not a valid Stat.", "notEnoughAttrPoints": "You don't have enough Stat Points.", "style": "Style", "facialhair": "Facial", @@ -219,6 +218,5 @@ "mainHand": "Main-Hand", "offHand": "Off-Hand", "pointsAvailable": "Points Available", - "pts": "pts", - "statsObjectRequired": "Stats update is required" + "pts": "pts" } \ No newline at end of file diff --git a/website/common/locales/tr/contrib.json b/website/common/locales/tr/contrib.json index 0eeae371ad..330aa19313 100644 --- a/website/common/locales/tr/contrib.json +++ b/website/common/locales/tr/contrib.json @@ -49,7 +49,6 @@ "UUID": "Kullanıcı ID'si", "loadUser": "Kullanıcı Yükle", "noAdminAccess": "Yönetici erişimin bulunmuyor.", - "pageMustBeNumber": "req.query.page bir sayı olmak zorundadır", "userNotFound": "Kullanıcı bulunamadı.", "invalidUUID": "UUID geçerli olmalıdır", "title": "Başlık", diff --git a/website/common/locales/tr/gear.json b/website/common/locales/tr/gear.json index d7638c639a..295d4a8900 100644 --- a/website/common/locales/tr/gear.json +++ b/website/common/locales/tr/gear.json @@ -554,7 +554,7 @@ "armorSpecialFall2017MageNotes": "What masquerade ensemble would be complete without dramatic and sweeping robes? Increases Intelligence by <%= int %>. Limited Edition 2017 Autumn Gear.", "armorSpecialFall2017HealerText": "Haunted House Armor", "armorSpecialFall2017HealerNotes": "Your heart is an open door. And your shoulders are roofing tiles! Increases Constitution by <%= con %>. Limited Edition 2017 Autumn Gear.", - "armorSpecialWinter2018RogueText": "Reindeer Costume", + "armorSpecialWinter2018RogueText": "Geyik Kostümü", "armorSpecialWinter2018RogueNotes": "You look so cute and fuzzy, who could suspect you are after holiday loot? Increases Perception by <%= per %>. Limited Edition 2017-2018 Winter Gear.", "armorSpecialWinter2018WarriorText": "Wrapping Paper Armor", "armorSpecialWinter2018WarriorNotes": "Don't let the papery feel of this armor fool you. It's nearly impossible to rip! Increases Constitution by <%= con %>. Limited Edition 2017-2018 Winter Gear.", diff --git a/website/common/locales/tr/groups.json b/website/common/locales/tr/groups.json index 9761d8b8d8..df52387ea4 100644 --- a/website/common/locales/tr/groups.json +++ b/website/common/locales/tr/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "Tercihe bağlı mesaj", "yesRemove": "Evet, çıkar", "foreverAlone": "Kendi mesajını beğenemezsin. O tür bir insan olma.", - "sortDateJoinedAsc": "Katılınan En Erken Tarih", - "sortDateJoinedDesc": "Katılınan En Geç Tarih", - "sortLoginAsc": "Earliest Login", - "sortLoginDesc": "Latest Login", - "sortLevelAsc": "En Düşük Seviye", - "sortLevelDesc": "En Yüksek Seviye", - "sortNameAsc": "Name (A - Z)", - "sortNameDesc": "Name (Z - A)", - "sortTierAsc": "Lowest Tier", - "sortTierDesc": "Highest Tier", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "4 Elmas karşılığı Lonca oluşturulsun mu?", "leaveGroupCha": "Lonca mücadelelerinden ayrıl ve...", "confirm": "Onayla", @@ -131,6 +131,10 @@ "clearAll": "Tüm Mesajları Sil", "confirmDeleteAllMessages": "Mesaj kutundaki tüm mesajları silmek istediğine emin misin? Diğer kullanıcılar, onlara gönderdiğin mesajları hala görebiliyor olacaktır.", "optOutPopover": "Özel mesajlarla aran yok mu? Buraya tıklayarak tamamen devre dışı bırak", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Engelle", "unblock": "Engeli Kaldır", "pm-reply": "Cevap yaz", @@ -207,7 +211,6 @@ "partyOnName": "Takım Çalışması", "partyUpText": "Bir başka kişi ile birlikte bir takıma katıldın! Birbirinize destek olurken ve canavarlarla savaşırken eğlenin.", "partyOnText": "En az dört kişiden oluşan bir takıma katıldın! Düşmanlarınızı yok etmek için arkadaşlarınla birleşirken artan sorumluluğunun tadını çıkar!", - "groupIdRequired": "\"groupID\" geçerli bir UUID olmalıdır", "groupNotFound": "Grup bulunamadı veya erişimin bulunmuyor.", "groupTypesRequired": "Geçerli \"type\" içerisinde bir sorgu dizisi sağlamalısın.", "questLeaderCannotLeaveGroup": "You cannot leave your Party when you have started a quest. Abort the quest first.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "Kendini kovamazsın!", "groupMemberNotFound": "Kullanıcı, grup üyeleri arasında bulunmuyor", "mustBeGroupMember": "Grubun üyesi olmalısın.", - "keepOrRemoveAll": "req.query.keep \"keep-all\" veya \"remove-all\" seçeneklerinden biri olmalıdır", - "keepOrRemove": "req.query.keep \"keep\" veya \"remove\" seçeneklerinden biri olmalıdır", "canOnlyInviteEmailUuid": "Yalnızca uuid veya e-mail kullanarak davet edebilirsin.", "inviteMissingEmail": "Davet etmek için eksik e-mail adresi.", "inviteMissingUuid": "Davet etmek için eksik kullanıcı ID'si", @@ -315,7 +316,7 @@ "approvalsTitle": "Onay Bekleyen İşler", "upgradeTitle": "Yükselt", "blankApprovalsDescription": "Grubun senin onayını bekleyen bir işi bitirdiğinde, iş burada belirir! İş düzenleme kısmından onay gereksinimini ayarlayabilirsin.", - "userIsClamingTask": "`<%= username %>, \"<%= task %>\" üzerinde çalışmaya başladı", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Onay Talebi Gönderildi", "refreshApprovals": "Onayları Yenile", "refreshGroupTasks": "Grup İşlerini Yenile", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Sana atanmış grup işlerini silemezsin.", "confirmGuildPlanCreation": "Bu grubu oluşturmak istiyor musun?", "onlyGroupLeaderCanInviteToGroupPlan": "Yalnızca grup lideri, kullanıcıları bir aboneliğe sahip olan bir gruba davet edebilir.", - "remainOrLeaveChallenges": "req.query.keep 'remain-in-challenges' veya 'leave-challenges' seçeneklerinden biri olmalıdır", "paymentDetails": "Ödeme Detayları", "aboutToJoinCancelledGroupPlan": "İptal edilmiş bir pakete sahip olan bir gruba katılmak üzeresin. Bedava aboneliğe sahip OLMAYACAKSIN. ", "cannotChangeLeaderWithActiveGroupPlan": "Grubun aktif paketi varken lideri değiştiremezsin. ", @@ -366,9 +366,11 @@ "recentActivity": "Recent Activity", "myGuilds": "My Guilds", "guildsDiscovery": "Discover Guilds", + "role": "Role", "guildOrPartyLeader": "Leader", "guildLeader": "Guild Leader", "member": "Üye", + "guildSize": "Guild Size", "goldTier": "Gold Tier", "silverTier": "Silver Tier", "bronzeTier": "Bronze Tier", diff --git a/website/common/locales/tr/npc.json b/website/common/locales/tr/npc.json index a99a3e5992..13dce55866 100644 --- a/website/common/locales/tr/npc.json +++ b/website/common/locales/tr/npc.json @@ -32,7 +32,7 @@ "danielTextBroken": "Tavernaya hoş geldin... yani... Eğer biraz dinlenmeye ihtiyacın varsa sana Handa bir oda ayarlayayım... Handa kaldığın sürece Günlük İşlerin gün sonunda sana hasar vermeyecektir ama onları yine de tamamlayabilirsin... enerjin kaldıysa tabii...", "danielText2Broken": "Bu arada... Eğer bir canavar görevindeysen, diğer takım üyelerinin kaçırdığı Günlük işler hala sana hasar verebilir... Bir de, Canavara vereceğin hasar (ya da toplayacağın eşyalar) Handan ayrılana kadar geçerli olmayacaktır...", "worldBossEvent": "Dünya Canavarı Etkinliği", - "worldBossDescription": "World Boss Description", + "worldBossDescription": "Dünya Canavarı Detayları", "alexander": "Tüccar Alexander", "welcomeMarket": "Pazara hoş geldin! Zor bulunan yumurtalardan ve iksirlerden al! Fazla mallarını sat! Hizmetlerden faydalan! Tekliflerimizi görmek için içeri buyur.", "welcomeMarketMobile": "Dükkanıma hoş geldin. Burada bulunması zor olan yumurta ve kuluçka iksirlerini satın alabilirsin.buyur ve fiyatlara bir bak.", @@ -48,6 +48,7 @@ "featuredItems": "Öne Çıkan Eşyalar!", "hideLocked": "Kilidi açılmamış olanları gizle", "hidePinned": "Hide pinned", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %>tecrübe", "amountGold": "<%= amount %>Altın", "namedHatchingPotion": "<%= type %>Kuluçka İksiri", @@ -74,14 +75,7 @@ "ianTextMobile": "Bir kaç görev parşömeni ilgini çeker miydi? Takımınla canavarlara karşı savaşmak için onları etkinleştir!", "ianBrokenText": "Görev Dükkanına hoş geldiniz... Burada bulacağınız Görev Parşömenleri sayesinde arkadaşlarınızla birlikte canavarlarla savaşabilirsiniz... Satıştaki Görev Parşömenlerimiz sağ tarafta...", "featuredQuests": "Öne Çıkan Görevler!", - "missingKeyParam": "\"req.params.key\" gerekli.", - "itemNotFound": "\"<%= key %>\" bulunamadı.", "cannotBuyItem": "Bu eşyayı satın alamazsın.", - "missingTypeKeyEquip": "\"key\" ve \"type\" gerekli değişkenlerdir.", - "missingPetFoodFeed": "\"pet\" ve \"food\" gerekli değişkenlerdir.", - "invalidPetName": "Geçersiz bir hayvan ismi sağlandı.", - "missingEggHatchingPotionHatch": "\"egg\" ve \"hatchingPotion\" gerekli değişkenlerdir.", - "invalidTypeEquip": "\"type\" bunlardan biri olmalıdır: 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "<%= key %> üzerine uygulanması için <%= val %> satın alınmalı.", "typeRequired": "Tür gerekli", "positiveAmountRequired": "Positive amount is required", diff --git a/website/common/locales/tr/pets.json b/website/common/locales/tr/pets.json index e62f6e31d0..6ee9029070 100644 --- a/website/common/locales/tr/pets.json +++ b/website/common/locales/tr/pets.json @@ -27,8 +27,8 @@ "royalPurpleGryphon": "Kraliyet Moru Griffon", "phoenix": "Anka", "magicalBee": "Büyülü Arı", - "hopefulHippogriffPet": "Hopeful Hippogriff", - "hopefulHippogriffMount": "Hopeful Hippogriff", + "hopefulHippogriffPet": "Umutlu Hippogriff", + "hopefulHippogriffMount": "Umutlu Hippogriff", "royalPurpleJackalope": "Kraliyet Moru Boynuzlu Tavşan", "invisibleAether": "Invisible Aether", "rarePetPop1": "Habitica'ya katkıda bulunarak bu ender hayvanı nasıl elde edebileceğini öğrenmek için altın patiye tıkla!", diff --git a/website/common/locales/tr/quests.json b/website/common/locales/tr/quests.json index 075f523416..7f0d325f5d 100644 --- a/website/common/locales/tr/quests.json +++ b/website/common/locales/tr/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "Henüz hiçbir görev daveti gönderilmedi.", "questInviteNotFound": "Herhangi bir görev daveti bulunamadı.", "guildQuestsNotSupported": "Loncalar göreve davet edilemezler.", - "questNotFound": "\"<%= key %>\" görevi bulunamadı.", "questNotOwned": "Bu görev parşömenine sahip değilsin.", "questNotGoldPurchasable": "\"<%= key %>\" görevi Altın ile satın alınabilen bir görev değildir.", "questLevelTooHigh": "Bu göreve başlamak için <%= level %>. seviye olmalısın.", diff --git a/website/common/locales/tr/questscontent.json b/website/common/locales/tr/questscontent.json index 0840d65e06..8b2a96e33d 100644 --- a/website/common/locales/tr/questscontent.json +++ b/website/common/locales/tr/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/tr/spells.json b/website/common/locales/tr/spells.json index 0144b087a6..c11ecbfa4b 100644 --- a/website/common/locales/tr/spells.json +++ b/website/common/locales/tr/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Arkadaşını bir deniz canlısına çevir!", "spellSpecialSandText": "Kum", "spellSpecialSandNotes": "Seni deniz yıldızına çeviren büyüyü geri al. ", - "spellNotFound": "\"<%= spellId %>\" adlı yetenek bulunamadı.", "partyNotFound": "Takım bulunamadı.", "targetIdUUID": "\"targetId\" geçerli bir Kullanıcı ID'si olmalıdır.", "challengeTasksNoCast": "Mücadele işlerine büyü yapamazsın.", diff --git a/website/common/locales/tr/subscriber.json b/website/common/locales/tr/subscriber.json index 5de7f704ac..41698e451e 100644 --- a/website/common/locales/tr/subscriber.json +++ b/website/common/locales/tr/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Geçersiz kupon kodu.", "couponUsed": "Kupon kodu önceden kullanılmış.", "couponCodeRequired": "Kupon kodu gerekli.", - "eventRequired": "\"req.params.event\" gerekli.", - "countRequired": "\"req.query.count\" gerekli.", - "missingPaymentId": "Eksik req.query.paymentId", - "missingCustomerId": "Eksik req.query.customerId", - "missingPaypalBlock": "Eksik req.session.paypalBlock", - "missingSubKey": "Eksik req.query.sub", "paypalCanceled": "Aboneliğin iptal edildi", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "receiveMysticHourglass": "Mistik kum saati kazan. ", diff --git a/website/common/locales/tr/tasks.json b/website/common/locales/tr/tasks.json index a38f282a7a..b1e2abcdd4 100644 --- a/website/common/locales/tr/tasks.json +++ b/website/common/locales/tr/tasks.json @@ -46,7 +46,7 @@ "medium": "Orta", "hard": "Zor", "attributes": "Stats", - "attributeAllocation": "Stat Allocation", + "attributeAllocation": "Nitelik Dağılımını", "attributeAllocationHelp": "Stat allocation is an option that provides methods for Habitica to automatically assign an earned Stat Point to a Stat immediately upon level-up.

You can set your Automatic Allocation method to Task Based in the Stats section of your profile.", "progress": "İlerleme Durumu", "daily": "Günlük İş", @@ -145,7 +145,6 @@ "rewardHelp3": "Özel ekipman, Dünya Etkinlikleri süresince burada belirir.", "rewardHelp4": "Özel Ödüller eklemekten çekinme! Bazı örnekleri buradan görebilirsin.", "clickForHelp": "Yardım için tıkla", - "taskIdRequired": "\"taskID\" geçerli bir UUID olmalıdır.", "taskAliasAlreadyUsed": "İşin takma adı başka bir işte kullanılmakta.", "taskNotFound": "Görev bulunamadı.", "invalidTaskType": "İş türü bunlardan biri olmalıdır: \"habit\", \"daily\", \"todo\", \"reward\".", diff --git a/website/common/locales/uk/challenge.json b/website/common/locales/uk/challenge.json index 6457f2495f..e91a2f20e9 100644 --- a/website/common/locales/uk/challenge.json +++ b/website/common/locales/uk/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "Подолав такі випробування", "challenges": "Випробування", "challengesLink": "Випробування", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "Ще немає випробувань, відвідайте", "toCreate": "аби створити одне.", "selectWinner": "Обрати переможця та закрити випробування:", @@ -23,7 +25,9 @@ "filter": "Вибірка", "groups": "Ватагами", "noNone": "Жодного", + "category": "Category", "membership": "Членство", + "ownership": "Ownership", "participating": "Бере участь", "notParticipating": "Не бере участь", "either": "Будь-хто", diff --git a/website/common/locales/uk/character.json b/website/common/locales/uk/character.json index fc288731f2..6be5a3c85a 100644 --- a/website/common/locales/uk/character.json +++ b/website/common/locales/uk/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Show Stat Allocation", "hideQuickAllocation": "Hide Stat Allocation", "quickAllocationLevelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User Icon > Stats.", - "invalidAttribute": "\"<%= attr %>\" is not a valid Stat.", "notEnoughAttrPoints": "You don't have enough Stat Points.", "style": "Стиль", "facialhair": "Facial", @@ -219,6 +218,5 @@ "mainHand": "Main-Hand", "offHand": "Off-Hand", "pointsAvailable": "Points Available", - "pts": "pts", - "statsObjectRequired": "Stats update is required" + "pts": "pts" } \ No newline at end of file diff --git a/website/common/locales/uk/contrib.json b/website/common/locales/uk/contrib.json index d9f587eecd..e93dbc89ec 100644 --- a/website/common/locales/uk/contrib.json +++ b/website/common/locales/uk/contrib.json @@ -49,7 +49,6 @@ "UUID": "User ID", "loadUser": "Завантажити користувача", "noAdminAccess": "You don't have admin access.", - "pageMustBeNumber": "req.query.page must be a number", "userNotFound": "User not found.", "invalidUUID": "UUID must be valid", "title": "Титул", diff --git a/website/common/locales/uk/faq.json b/website/common/locales/uk/faq.json index 9e0b6c6133..bc12efcc3c 100644 --- a/website/common/locales/uk/faq.json +++ b/website/common/locales/uk/faq.json @@ -2,40 +2,40 @@ "frequentlyAskedQuestions": "Поширені запитання", "faqQuestion0": "Я в розгубленості. Що робити?", "iosFaqAnswer0": "Спочатку Ви ставите перед собою завдання, котрі Вам необхідно виконати в своєму повсякденному житті. По мірі виконання цих завдань в реальному житті, Ви відмічаєте їх галочками та заробляєте досвід і золото. Золото використовується для придбання спорядження та інших речей, а також нагород, що створюєте Ви самі. Завдяки досвіду, Ваш персонаж набирає рівні і відкриває новий контент, наприклад улюбленців, навички і квести! Ви можете налаштувати свій аватар в Меню->Налаштування аватару.\n\nДеякі основні способи взаємодії: натисніть (+) у верхньому правому куті, щоб додати нове завдання. Натисніть на на вже існуюче завдання, щоб його змінити; потягніть завдання вліво для видалення. Ви можете сортувати завдання, використовуючи Теги в лівому верхньому куті, розгортати та згортати списки підзавдань, натиснувши на позначку списку.", - "androidFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > [Inventory >] Avatar.\n\n Some basic ways to interact: click the (+) in the lower-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-right-hand corner, and expand and contract checklists by clicking on the checklist count box.", + "androidFaqAnswer0": "Спочатку ви встановлюєте задачі які ви хочете виконувати у повсякденному житті. Потім, коли ви виконали ці задачі у реальному житті, ви отримуєте досвід та золото. Золото використовується для придбання спорядження та деяких предметів, а також для вигаданих вами винагород. Завдяки отриманню досвіду ваш персонаж піднімає свій рівень та розблоковує контент, наприклад улюбленців, вміння та квести! Ви можете налаштувати свій аватар в Меню>[Налаштування>]Аватар.\n\nДеякі основні способи взаємодії: натисніть (+) у верхньому правому куті, щоб додати нове завдання. Натисніть на існуюче завдання для того щоб відредагувати його, та потягніть завдання вліво для видалення. Ви можете сортувати завдання використовуючи Теги у лівому верхньому куті, розгортати та згортати списки підзавдань, натиснувши на позначки списку.", "webFaqAnswer0": "Спочатку Ви ставите перед собою завдання, котрі Вам необхідно виконати в своєму повсякденному житті. По мірі виконання цих завдань в реальному житті, Ви відмічаєте їх галочками та заробляєте Досвід і Золото. Золото використовується для придбання спорядження та інших речей, а також нагород, що створюєте Ви самі. Завдяки Досвіду, Ваш персонаж набирає рівні і відкриває новий контент, наприклад улюбленців, навички і квести! Подробиці можна дізнатися в нашому покроковому гіді на сторінці [Допомога -> Інформація для новачків] (https://habitica.com/static/overview).", "faqQuestion1": "Як я можу створити завдання?", "iosFaqAnswer1": "Корисні звички (ті, що позначені знаком +) - це завдання, які Ви можете виконувати багато разів за день: наприклад, вживати овочі. Шкідиві звички (зі знаком -) - це ті дії, від яких Вам варто відмовитися: наприклад, гризти нігті. Звички, навпроти яких стоять і +, і -, припускають двоїстий вибір - або в хороший, або в поганий бік: наприклад підйом по сходах пішки проти користування ліфтом. Корисні звички винагороджуються досвідом та золотом. Погані звички віднімають здоров'я.\n\nЩоденні завдання - це завдання, котрі ви маєте виконувати кожен день, наприклад чистити зуби чи перевіряти електронну пошту. Ви можете вказати дні, в які щоденне завдання обов'язкове або необов'язкове до виконання; для цього варто лише натиснути на нього для редагування. Якщо ви пропустите обов'язкове завдання, ваш персонаж втратить здоров'я наступної ночі. Будьте уважні і не додавайте забагато щоденних завдань відразу!\n\nЗадачі - це список одноразових справ, котрі Вам необхідно виконати. Виконання задач приносить Вам золото та досвід. Ви не втрачатимете здоров'я, якщо не виконаєте задачу. Ви можете вказати обов'язковий термін виконання задачі, натиснувши на неї для редагування.", - "androidFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your character will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", - "webFaqAnswer1": "* Good Habits (the ones with a :heavy_plus_sign:) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a :heavy_minus_sign:) are tasks that you should avoid, like biting nails. Habits with a :heavy_plus_sign: and a :heavy_minus_sign: have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n* Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n* To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", + "androidFaqAnswer1": "Корисні звички (ті, що позначені знаком +) - це завдання, які Ви можете виконувати багато разів за день: наприклад, вживати овочі. Шкідиві звички (зі знаком -) - це ті дії, від яких Вам варто відмовитися: наприклад, гризти нігті. Звички, навпроти яких стоять і +, і -, припускають двоїстий вибір - або в хороший, або в поганий бік: наприклад підйом по сходах пішки або користування ліфтом. Корисні звички винагороджуються досвідом та золотом. Погані звички віднімають здоров'я.\n\n Щоденні завдання - це завдання, котрі ви маєте виконувати кожен день, наприклад чистити зуби чи перевіряти електронну пошту. Ви можете вказати дні, в які щоденне завдання обов'язкове або необов'язкове до виконання; для цього варто лише натиснути на нього для редагування. Якщо ви пропустите обов'язкове завдання, ваш персонаж втратить здоров'я наступної ночі. Будьте уважні і не додавайте забагато щоденних завдань відразу! \n\nЗадачі - це список одноразових справ, котрі Вам необхідно виконати. Виконання задач приносить Вам золото та досвід. Ви не втрачатимете здоров'я, якщо не виконаєте задачу. Ви можете вказати обов'язковий термін виконання задачі, натиснувши на неї для редагування.", + "webFaqAnswer1": "*Корисні звички (ті, що позначені знаком +) - це завдання, які Ви можете виконувати багато разів за день: наприклад, вживати овочі. Шкідиві звички (зі знаком -) - це ті дії, від яких Вам варто відмовитися: наприклад, гризти нігті. Звички, навпроти яких стоять і +, і -, припускають двоїстий вибір - або в хороший, або в поганий бік: наприклад підйом по сходах пішки проти користування ліфтом. Корисні звички винагороджуються досвідом та золотом. Погані звички віднімають здоров'я.\n\nЩоденні завдання - це завдання, котрі ви маєте виконувати кожен день, наприклад чистити зуби чи перевіряти електронну пошту. Ви можете вказати дні, в які щоденне завдання обов'язкове або необов'язкове до виконання; для цього варто лише натиснути на нього для редагування. Якщо ви пропустите обов'язкове завдання, ваш персонаж втратить здоров'я наступної ночі. Будьте уважні і не додавайте забагато щоденних завдань відразу!\n\nЗадачі - це список одноразових справ, котрі Вам необхідно виконати. Виконання задач приносить Вам золото та досвід. Ви не втрачатимете здоров'я, якщо не виконаєте задачу. Ви можете вказати обов'язковий термін виконання задачі, натиснувши на неї для редагування.", "faqQuestion2": "Де можна подивитися приклади завдань?", "iosFaqAnswer2": "На Вікі є чотири списки з прикладами завдань, які можна використати для натхнення:\n

\n* [Приклади звичок](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Приклади щоденних завдань](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Приклади задач](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Приклади нагород](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", - "androidFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n

\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", + "androidFaqAnswer2": "На Вікі є чотири списки з прикладами завдань, які можна використати для натхнення:\n

\n* [Приклади звичок](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Приклади щоденних завдань](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Приклади задач](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Приклади нагород](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "webFaqAnswer2": "На Вікі є чотири списки з прикладами завдань, які можна використати для натхнення:\n\n* [Приклади звичок](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Приклади щоденних завдань](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Приклади задач](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Приклади нагород](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "faqQuestion3": "Чому завдання змінюють колір?", "iosFaqAnswer3": "Ваші завдання змінюють колір в залежності від того, наскільки добре Ви в даний момент справляєтесь з їх виконаням! Кожне нове завдання забарвлене в нейтральний жовтий колір. Виконуйте щоденні завдання або корисні звички, і тоді вони почнуть змінювати колір у бік синього. Якщо Ви будете пропускати щоденні завдання або піддастеся шкідливим звичкам, завдання почнуть потроху червоніти. Чим більш червоне завдання, тим більшу винагороду Ви отримаєте за його виконання, та тим часом, червоні щоденні завдання і шкідливі звички нанесуть вам більше ушкодження за пропуск, ніж зазвичай! Це послужить для Вас мотивацією справлятися із завданнями, які доставляють Вам найбільше клопоту.", - "androidFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", + "androidFaqAnswer3": "Ваші завдання змінюють колір в залежності від того, наскільки добре Ви в даний момент справляєтесь з їх виконаням! Кожне нове завдання забарвлене в нейтральний жовтий колір. Виконуйте щоденні завдання або корисні звички, і тоді вони почнуть змінювати колір у бік синього. Якщо Ви будете пропускати щоденні завдання або піддастеся шкідливим звичкам, завдання почнуть потроху червоніти. Чим більш червоне завдання, тим більшу винагороду Ви отримаєте за його виконання, проте якщо це щоденне завдання або шкідлива звичка, то вони нанесуть вам більше ушкодження за пропуск, ніж зазвичай! Це послужить для Вас мотивацією справлятися із завданнями, які доставляють Вам найбільше клопоту.", "webFaqAnswer3": "Ваші завдання змінюють колір в залежності від того, наскільки добре Ви в даний момент справляєтесь з їх виконаням! Кожне нове завдання забарвлене в нейтральний жовтий колір. Виконуйте щоденні завдання або корисні звички, і тоді вони почнуть змінювати колір у бік синього. Якщо Ви будете пропускати щоденні завдання або піддастеся шкідливим звичкам, завдання почнуть потроху червоніти. Чим більш червоне завдання, тим більшу винагороду Ви отримаєте за його виконання, та тим часом, червоні щоденні завдання і шкідливі звички нанесуть вам більше ушкодження за пропуск, ніж зазвичай! Це послужить для Вас мотивацією справлятися із завданнями, які доставляють Вам найбільше клопоту.", "faqQuestion4": "Чому мій персонаж втратив здоров'я і як його відновити?", - "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight and didn't check them off in the screen that popped up the next morning, those unfinished Dailies will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", - "androidFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight and didn't check them off in the screen that popped up the next morning, those unfinished Dailies will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards tab on the Tasks page. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", - "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight and didn't check them off in the screen that popped up the next morning, those unfinished Dailies will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you. The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. Other Healers can heal you as well if you are in a Party with them. Learn more by clicking \"Party\" in the navigation bar.", + "iosFaqAnswer4": "Існує декілька причин, церез які Ви можете втратити здоров'я. По-перше, зранку вам наносять ушкодження пропущені щоденні завдання. По-друге, якщо Ви натискаєте на погану звичку, вона наносить Вам ушкодження. І, нарешті, якщо Ви б'єтеся з Босом в команді і один з Ваших товаришів по команді не виконав всі свої щоденні завдання, Бос Вас атакує.\n\nОсновним способом вилікуватись є отримання рівня, що спричиняє відновлення всієї шкали здоров'я. Також Ви можете купити за золото Цілюще зілля, яке знаходиться в колонці нагород. Крім того, починаючи з 10 рівня, ви можете вибрати професію Цілителя, і тоді Ви отримаєте доступ до навичок, що відновлюють здоров'я. Якщо у Вас в команді є Цілитель, він також може Вас вилікувати.", + "androidFaqAnswer4": "Існує декілька причин, церез які Ви можете втратити здоров'я. По-перше, зранку вам наносять ушкодження пропущені щоденні завдання. По-друге, якщо Ви натискаєте на погану звичку, вона наносить Вам ушкодження. І, нарешті, якщо Ви б'єтеся з Босом в команді і один з Ваших товаришів по команді не виконав всі свої щоденні завдання, Бос Вас атакує.\n\nОсновним способом вилікуватись є отримання рівня, що спричиняє відновлення всієї шкали здоров'я. Також Ви можете купити за золото Цілюще зілля, яке знаходиться в колонці нагород. Крім того, починаючи з 10 рівня, ви можете вибрати професію Цілителя, і тоді Ви отримаєте доступ до навичок, що відновлюють здоров'я. Якщо у Вас в команді є Цілитель, він також може Вас вилікувати.", + "webFaqAnswer4": "Існує декілька причин, церез які Ви можете втратити здоров'я. По-перше, зранку вам наносять ушкодження пропущені щоденні завдання. По-друге, якщо Ви натискаєте на погану звичку, вона наносить Вам ушкодження. І, нарешті, якщо Ви б'єтеся з Босом в команді і один з Ваших товаришів по команді не виконав всі свої щоденні завдання, Бос Вас атакує.Основним способом вилікуватись є отримання рівня, що спричиняє відновлення всієї шкали здоров'я. Також Ви можете купити за золото Цілюще зілля, яке знаходиться в колонці нагород. Крім того, починаючи з 10 рівня, ви можете вибрати професію Цілителя, і тоді Ви отримаєте доступ до навичок, що відновлюють здоров'я. Якщо у Вас в команді є Цілитель, він також може Вас вилікувати. Дізнайтесь більше натиснувши на \"Гурт\" на панелі навігації.", "faqQuestion5": "Як грати разом з друзями?", "iosFaqAnswer5": "Кращий спосіб - запросити їх в Ваш гурт! Гурти можуть приймати участь в квестах, битися з монстрами та чаклувати для підтримки один одного. Натисніть Меню > Гурт, а потім \"Створити новий гурт\", якщо Ви ще не маєте Гурту. Після цього натисніть на Список учасників і клацніть Запросити у верхньому правому кутку, щоб запросити друзів шляхом введення їх ID гравця (рядок цифр і букв, який можна знайти в меню Налаштування > Деталі акаунту в додатку, або Налаштування > API на вебсайті). На вебсайті Ви також можете запросити друзів за допомогою електронної адреси, в додатку це можна буде зробити після його оновлення.\n\nНа сайті Ви та Ваші друзі також можуть долучатися до Гільдій, які є публічними чатами. Гільдії будуть доступні в додатку в майбутньому оновленні!", - "androidFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to the [website](https://habitica.com/) to create one if you don't already have a Party. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n\n For more detailed info, check out the wiki pages on [Parties](http://habitica.wikia.com/wiki/Party) and [Guilds](http://habitica.wikia.com/wiki/Guilds).", - "webFaqAnswer5": "The best way is to invite them to a Party with you by clicking \"Party\" in the navigation bar! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join Guilds together (click on \"Guilds\" in the navigation bar). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many Guilds as you'd like, but only one Party. For more detailed info, check out the wiki pages on [Parties](http://habitica.wikia.com/wiki/Party) and [Guilds](http://habitica.wikia.com/wiki/Guilds).", + "androidFaqAnswer5": "Найкращий варіант запросити їх у гурт до себе! Гурти можуть виконувати квести, боротися з монтрами та чаклувати закляття для підтримки один одного. Натисніть [website](https://habitica.com/) для того щоб створити гурт якщо ви ще не знаходитись у гурті. Ви також можете приєднатися до гільдії (Спільнота > Гільдії). Гільдії - це окремі чат-кімнати, створені за інтересами або для досягнення загальної мети., та можуть бути як публічними, так і приватними. Ви можете приєднатися до будь-яких гільдій що вам сподобалися, але тільки до одного гурту. \n\nДля більш детальної інформації заходьте на вікі-сторінки [Parties](http://habitica.wikia.com/wiki/Party) та [Guilds](http://habitica.wikia.com/wiki/Guilds).", + "webFaqAnswer5": "Найкращий варіант як запросити їх у группу до Вас це натиснути \"Гурт\" на навігаційній панелі! Гурти можуть разом виконувати квести, битися з монстрами і чаклувати закляття для підтримки один одного. Ви також можете приєднатися до гільдії (натисніть \"Гільдії\" на навігаційній панелі). Гільдії - це чат-кімнати за інтересами або за досягненням загальної мети, і можуть бути як публічними, так і приватними. Ви можете приєднатися до усіх гільдій, що вам сподобалися, але тільки до одного гурту.Для більш детальної інформації заходьте на вікі-сторінки [Parties](http://habitica.wikia.com/wiki/Party) та [Guilds](http://habitica.wikia.com/wiki/Guilds).", "faqQuestion6": "Як я можу отримати домашнього улюбленця або їздову тварину?", "iosFaqAnswer6": "На 3 рівні Ви розблоковуєте систему нагород. Кожного разу коли Ви виконали Завдання, Ви маєте випадковий шанс отримати яйце, зілля чи їжу. Все отримане зберігається у Меню>Предмети. ", - "androidFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch with potion.\" Then choose a hatching potion to determine its color! To equip your new Pet, go to Menu > Stable > Pets, select a species, click on the desired Pet, and select \"Use\"(Your avatar doesn't update to reflect the change). \n\n You can also grow your Pets into Mounts by feeding them under Menu > Stable [ > Pets ]. Tap on a Pet, and then select \"Feed\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). To equip your Mount, go to Menu > Stable > Mounts, select a species, click on the desired Mount, and select \"Use\"(Your avatar doesn't update to reflect the change).\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", - "webFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored under Inventory > Items. To hatch a Pet, you'll need an egg and a hatching potion. Once you have both an egg and a potion, go to Inventory > Stable to hatch your pet by clicking on its image. Once you've hatched a pet, you can equip it by clicking on it. You can also grow your Pets into Mounts by feeding them under Inventory > Stable. Drag a piece of food from the action bar at the bottom of the screen and drop it on a pet to feed it! You'll have to feed a Pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, click on it to equip it to your avatar. You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", + "androidFaqAnswer6": "На рівні 3 ви разблокуєте систему випадань. Кожен раз коли ви виконали завдання, ви маєте шанс отримати яйце, інкубаційне зілля або їжу. Ці предмети будуть збережені у Меню>Предмети\n\nВам потрібне яйце та інкубаційне зілля для того щоб вилупився улюбленець. Натисніть на яйце для того щоб визначити якого вида улюбленця ви хочете вилупити, та виберіть \"Вилупити використовуючи зілля.\" Тоді виберіть зілля з потрібним кольором. Для того щоб обрати улюбленця, натисніть Меню > Конюшня > Улюбленці, виберіть вид, потрібного улюбленця та натисніть на \"Вибрати\" (Ваш аватар не оновиться для відображення зміни)\n\nТакож ви можете виростити з улюбленців скакунів, годуючи їх у Меню > Конюшня[ > Улюбленці]. Натисніть на улюбленця та виберіть \"Годувати\"! Вам потрібно буде годувати улюбленця багато раз доки він не стане скакуном, проте якщо ви зможете знайти його улюблену їжу, він виросте набагато швидше. Користуйтеся методом проб та помилок або [подивіться спойлери тут](http://habitica.wikia.com/wiki/Food#Food_Preferences). Для того щоб вибрати Вашого скакуна, перейдіть у Меню > Конюшня > Скакуни, виберіть вид, натисніть на потрібного скакуна та натисніть \"Вибрати\" (Ваш аватар не оновиться для відображення зміни)\n\nВи також можете завжди отримати яйця квестових улюбленців виконуючи певні Квести. ( Дивіться нижче щоб дізнатись більше про Квести.)", + "webFaqAnswer6": "На рівні 3 ви разблокуєте систему випадань. Кожен раз коли ви виконали завдання, ви маєте шанс отримати яйце, інкубаційне зілля або їжу. Ці предмети будуть збережені у Інвентар > Предмети. Вам потрібне яйце та інкубаційне зілля для того щоб вилупився улюбленець. Коли у вас є яйце і інкубаційне зілля, перейдіть до Інвентар >  Конюшня для того щоб вилупити улюбленця натиснувши на його портрет. Я тільки Ви вилупили улюбленця, Ви можете вибрати його натиснувши на ньому. Ви можете виростити улюбленця у скакуна погодувавши його у Інвентар > Конюшня. Перетягніть їжу з панелі знизу екрану на улюбленця для того щоб погодувати його. Вам потрібно буде годувати улюбленця багато раз для того щоб він став скакуном, проте якщо ви зможете вгадати його улюблену їжу то він виросте набагато скоріше. Використовуйте метод проб та помилок або [подивіться спойлери тут](http://habitica.wikia.com/wiki/Food#Food_Preferences). Як тільки у вас є скакун, натисніть на нього щоб вибрати його для свого аватару. Ви також можете отримати яйця квестових улюбленців виконуючи певні квести. (Дивіться нижче щоб дізнатися більше про Квести.)", "faqQuestion7": "Як стати воїном, магом, розбійником чи цілителем?", - "iosFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their Party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most gold and find the most item drops, and they can help their Party do the same. Finally, Healers can heal themselves and their Party members.\n\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click “Decide Later” and choose later under Menu > Choose Class.", - "androidFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their Party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most gold and find the most item drops, and they can help their Party do the same. Finally, Healers can heal themselves and their Party members.\n\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click “Opt Out” and choose later under Menu > Choose Class.", - "webFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most Gold and find the most item drops, and they can help their party do the same. Finally, Healers can heal themselves and their party members. If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click \"Opt Out\" and re-enable it later under Settings.", + "iosFaqAnswer7": "На рівні 10 ви можете вибрати себе воїном, магом, розбійником або цілителем. (Усі гравці починають як воїни за замовчуванням.) Кожен клас має різні варіанти обладнання, різні навички, які вони можуть чаклувати після рівня 11, і різні переваги. Воїни можуть легко пошкодити босів, витримувати більше пошкоджень від своїх завдань і допомогти зробити свій гурт прочнішим. Маги можуть також легко пошкодити босів, а також швидко отримувати новий рівень і відновлювати Ману для свого гурту. Розбійники заробляють найбільше золота і отримують найбільшу кількість випадань, і вони можуть допомогти своїй партії зробити те ж саме. Нарешті, Цілителі можуть зцілити себе та членів свого гурту.\n\n Якщо ви не бажаєте негайно вибирати клас - наприклад, якщо ви все ще працюєте, щоб придбати все спорядження вашого поточного класу, ви можете натиснути кнопку \"Вирішити Пізніше \"та вибрати пізніше в Меню > Вибрати клас.", + "androidFaqAnswer7": "На рівні 10 ви можете стати воїном, магом, розбійником або цілителем. (Усі гравці починають як воїни за замовчуванням.) Кожен клас має різні варіанти обладнання, різні навички, які вони можуть чаклувати після рівня 11, та різні переваги. Воїни можуть легко пошкодити босів, витримувати більше пошкоджень від своїх завдань і допомогти зробити свій гурт прочнішим. Маги можуть також легко пошкодити босів, а також швидко отримувати новий рівень і відновлювати Ману для свого гурту. Розбійники заробляють найбільше золота і отримують найбільшу кількість випадань, і вони можуть допомогти своїй партії зробити те ж саме. Нарешті, Цілителі можуть зцілити себе та членів свого гурту. Якщо ви не бажаєте негайно вибирати клас - наприклад, якщо ви все ще працюєте, щоб придбати все спорядження вашого поточного класу, ви можете натиснути кнопку \"Вирішити Пізніше\" та вибрати пізніше в Меню > Вибрати клас.", + "webFaqAnswer7": "На рівні 10 ви можете стати воїном, магом, розбійником або цілителем. (Усі гравці починають як воїни за замовчуванням.) Кожен клас має різні варіанти обладнання, різні навички, які вони можуть чаклувати після рівня 11, та різні переваги. Воїни можуть легко пошкодити босів, витримувати більше пошкоджень від своїх завдань і допомогти зробити свій гурт прочнішим. Маги можуть також легко пошкодити босів, а також швидко отримувати новий рівень і відновлювати Ману для свого гурту. Розбійники заробляють найбільше золота і отримують найбільшу кількість випадань, і вони можуть допомогти своїй партії зробити те ж саме. Нарешті, Цілителі можуть зцілити себе та членів свого гурту. Якщо ви не бажаєте негайно вибирати клас - наприклад, якщо ви все ще працюєте, щоб придбати все спорядження вашого поточного класу, ви можете натиснути кнопку \"Вирішити Пізніше\" та повторно активувати класи у Налаштуваннях.", "faqQuestion8": "Що це за голубий показник, котрий з'являється в заголовках після 10 рівня?", - "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", - "androidFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", - "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in the action bar at the bottom of the screen. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", + "iosFaqAnswer8": "Синя смужка, яка з'явиться, коли ви отримаєте рівень 10 і виберете клас, - це ваша смужка Мани. Коли ви продовжуєте отримувати нові рівні, ви розблокуєте спеціальні навички, для використання яких потрібна Мана. Кожен клас має різні навички, які з'являються після рівня 11 в Меню > Навички. На відміну від смужки здоров'я, смужка Мани не скидається, коли ви отримуєте рівень. Замість цього, Мана отримується, коли ви виконуєте Добрі звички, Щоденні Завдання та Задачі, і втрачаєте, коли зловживаєте поганими звичками. Ви також отримаєте Ману за ніч - чим більше Щоденних Завдань ви завершите, тим більше ви отримаєте.", + "androidFaqAnswer8": "Синя смужка, яка з'явиться, коли ви отримаєте рівень 10 і виберете клас, - це ваша смужка Мани. Коли ви продовжуєте отримувати нові рівні, ви розблокуєте спеціальні навички, для використання яких потрібна Мана. Кожен клас має різні навички, які з'являються після рівня 11 в Меню > Навички. На відміну від смужки здоров'я, смужка Мани не скидається, коли ви отримуєте рівень. Замість цього, Мана отримується, коли ви виконуєте Добрі звички, Щоденні Завдання та Задачі, і втрачаєте, коли зловживаєте поганими звичками. Ви також отримаєте Ману за ніч - чим більше Щоденних Завдань ви завершите, тим більше ви отримаєте.", + "webFaqAnswer8": "Синя смужка, яка з'явиться, коли ви отримаєте рівень 10 і виберете клас, - це ваша смужка Мани. Коли ви продовжуєте отримувати нові рівні, ви розблокуєте спеціальні навички, для використання яких потрібна Мана. Кожен клас має різні навички, які з'являються після рівня 11 у активній панель знизу екрану. На відміну від смужки здоров'я, смужка Мани не скидається, коли ви отримуєте рівень. Замість цього, Мана отримується, коли ви виконуєте Добрі звички, Щоденні Завдання та Задачі, і втрачаєте, коли зловживаєте поганими звичками. Ви також отримаєте Ману за ніч - чим більше Щоденних Завдань ви завершите, тим більше ви отримаєте.", "faqQuestion9": "Як боротися з монстрами та приймати участь в квестах?", "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Shop for Gold and Gems.\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "androidFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Shop for Gold and Gems.\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", @@ -45,7 +45,7 @@ "androidFaqAnswer10": "Gems are purchased with real money by tapping on the Gem icon in the header. When people buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying Gems directly, there are three other ways players can gain Gems:\n\n * Win a Challenge that has been set up by another player. Go to Social > Challenges to join some.\n * Subscribe and unlock the ability to buy a certain number of Gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are purchased with real money, although [subscribers](https://habitica.com/user/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support! In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n* Win a Challenge that has been set up by another player. Go to Challenges > Discover Challenges to join some.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica). Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", "faqQuestion11": "Як повідомити про помилку чи запропонувати нову функцію?", - "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > About > Report a Bug and Menu > About > Send Feedback! We'll do everything we can to assist you.", + "iosFaqAnswer11": "Ви можете повідомити про помилку,запросити нову функцію або надіслати відгук у Меню\"> Про проект> \"Повідомити про помилку\" та Меню > Про проект> Надіслати відгук! Ми зробимо все можливе, щоб допомогти вам.", "androidFaqAnswer11": "You can report a bug, request a feature, or send feedback under About > Report a Bug and About > Send us Feedback! We'll do everything we can to assist you.", "webFaqAnswer11": "To report a bug, go to [Help > Report a Bug](https://habitica.com/groups/guild/a29da26b-37de-4a71-b0c6-48e72a900dac) and read the points above the chat box. If you're unable to log in to Habitica, send your login details (not your password!) to [<%= techAssistanceEmail %>](<%= wikiTechAssistanceEmail %>). Don't worry, we'll get you fixed up soon! Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", "faqQuestion12": "Як боротися зі світовими босами?", diff --git a/website/common/locales/uk/groups.json b/website/common/locales/uk/groups.json index 5e67893622..7b27a019b7 100644 --- a/website/common/locales/uk/groups.json +++ b/website/common/locales/uk/groups.json @@ -1,19 +1,19 @@ { "tavern": "Чат Таверни", - "tavernChat": "Tavern Chat", + "tavernChat": "Чат Таверни", "innCheckOut": "Зайти до господи", "innCheckIn": "Відпочити у господі", "innText": "You're resting in the Inn! While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day. Be warned: If you are participating in a Boss Quest, the Boss will still damage you for your Party mates' missed Dailies unless they are also in the Inn! Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn.", "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your Party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...", "innCheckOutBanner": "You are currently checked into the Inn. Your Dailies won't damage you and you won't make progress towards Quests.", "resumeDamage": "Resume Damage", - "helpfulLinks": "Helpful Links", + "helpfulLinks": "Корисні посилання", "communityGuidelinesLink": "Community Guidelines", "lookingForGroup": "Looking for Group (Party Wanted) Posts", "dataDisplayTool": "Data Display Tool", - "reportProblem": "Report a Bug", + "reportProblem": "Повідомити про помилку", "requestFeature": "Request a Feature", - "askAQuestion": "Ask a Question", + "askAQuestion": "Задати запитання", "askQuestionGuild": "Ask a Question (Habitica Help guild)", "contributing": "Contributing", "faq": "FAQ", @@ -45,7 +45,7 @@ "wantExistingParty": "Want to join an existing Party? Go to the <%= linkStart %>Party Wanted Guild<%= linkEnd %> and post this User ID:", "joinExistingParty": "Join Someone Else's Party", "needPartyToStartQuest": "Whoops! You need to create or join a Party before you can start a quest!", - "createGroupPlan": "Create", + "createGroupPlan": "Створити", "create": "Створити", "userId": "ID гравця", "invite": "Запросити", @@ -106,16 +106,16 @@ "optionalMessage": "Optional message", "yesRemove": "Yes, remove them", "foreverAlone": "Збіса неприємне повідомлення. Не будьте паскудником.", - "sortDateJoinedAsc": "Earliest Date Joined", - "sortDateJoinedDesc": "Latest Date Joined", - "sortLoginAsc": "Earliest Login", - "sortLoginDesc": "Latest Login", - "sortLevelAsc": "Lowest Level", - "sortLevelDesc": "Highest Level", - "sortNameAsc": "Name (A - Z)", - "sortNameDesc": "Name (Z - A)", - "sortTierAsc": "Lowest Tier", - "sortTierDesc": "Highest Tier", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "Створити ґільдію за 4 самоцвіти?", "leaveGroupCha": "Покинути ґільдійскі випробування і...", "confirm": "Підтвердити", @@ -131,6 +131,10 @@ "clearAll": "Delete All Messages", "confirmDeleteAllMessages": "Are you sure you want to delete all messages in your inbox? Other users will still see messages you have sent to them.", "optOutPopover": "Не подобається приватні повідомлення? Натисніть, щоб повністю відмовитися від них", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "Заблокувати", "unblock": "Розблокувати", "pm-reply": "Надіслати відповідь", @@ -207,7 +211,6 @@ "partyOnName": "Party On", "partyUpText": "Joined a Party with another person! Have fun battling monsters and supporting each other.", "partyOnText": "Joined a Party with at least four people! Enjoy your increased accountability as you unite with your friends to vanquish your foes!", - "groupIdRequired": "\"groupId\" must be a valid UUID", "groupNotFound": "Group not found or you don't have access.", "groupTypesRequired": "You must supply a valid \"type\" query string.", "questLeaderCannotLeaveGroup": "You cannot leave your Party when you have started a quest. Abort the quest first.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "You cannot remove yourself!", "groupMemberNotFound": "User not found among group's members", "mustBeGroupMember": "Must be member of the group.", - "keepOrRemoveAll": "req.query.keep must be either \"keep-all\" or \"remove-all\"", - "keepOrRemove": "req.query.keep must be either \"keep\" or \"remove\"", "canOnlyInviteEmailUuid": "Can only invite using uuids or emails.", "inviteMissingEmail": "Missing email address in invite.", "inviteMissingUuid": "Missing user id in invite", @@ -315,7 +316,7 @@ "approvalsTitle": "Tasks Awaiting Approval", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "When your group completes tasks that need your approval, they'll appear here! Adjust approval requirement settings under task editing.", - "userIsClamingTask": "`<%= username %> has claimed \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Approval Requested", "refreshApprovals": "Refresh Approvals", "refreshGroupTasks": "Refresh Group Tasks", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Can't delete group tasks that are assigned to you.", "confirmGuildPlanCreation": "Create this group?", "onlyGroupLeaderCanInviteToGroupPlan": "Only the group leader can invite users to a group with a subscription.", - "remainOrLeaveChallenges": "req.query.keep must be either 'remain-in-challenges' or 'leave-challenges'", "paymentDetails": "Payment Details", "aboutToJoinCancelledGroupPlan": "You are about to join a group with a canceled plan. You will NOT receive a free subscription.", "cannotChangeLeaderWithActiveGroupPlan": "You can not change the leader while the group has an active plan.", @@ -366,9 +366,11 @@ "recentActivity": "Recent Activity", "myGuilds": "Мої ґільдії", "guildsDiscovery": "Discover Guilds", + "role": "Role", "guildOrPartyLeader": "Leader", "guildLeader": "Guild Leader", "member": "Member", + "guildSize": "Guild Size", "goldTier": "Gold Tier", "silverTier": "Silver Tier", "bronzeTier": "Bronze Tier", diff --git a/website/common/locales/uk/npc.json b/website/common/locales/uk/npc.json index a4fd068c47..cd0fb8b57f 100644 --- a/website/common/locales/uk/npc.json +++ b/website/common/locales/uk/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Featured Items!", "hideLocked": "Hide locked", "hidePinned": "Hide pinned", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Experience", "amountGold": "<%= amount %> Gold", "namedHatchingPotion": "<%= type %> Hatching Potion", @@ -74,14 +75,7 @@ "ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!", "ianBrokenText": "Welcome to the Quest Shop... Here you can use Quest Scrolls to battle monsters with your friends... Be sure to check out our fine array of Quest Scrolls for purchase on the right...", "featuredQuests": "Featured Quests!", - "missingKeyParam": "\"req.params.key\" is required.", - "itemNotFound": "Item \"<%= key %>\" not found.", "cannotBuyItem": "You can't buy this item.", - "missingTypeKeyEquip": "\"key\" and \"type\" are required parameters.", - "missingPetFoodFeed": "\"pet\" and \"food\" are required parameters.", - "invalidPetName": "Invalid pet name supplied.", - "missingEggHatchingPotionHatch": "\"egg\" and \"hatchingPotion\" are required parameters.", - "invalidTypeEquip": "\"type\" must be one of 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.", "typeRequired": "Type is required", "positiveAmountRequired": "Positive amount is required", diff --git a/website/common/locales/uk/quests.json b/website/common/locales/uk/quests.json index 389cc5ffa5..f5cd67c1ac 100644 --- a/website/common/locales/uk/quests.json +++ b/website/common/locales/uk/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "No quest invitation has been sent out yet.", "questInviteNotFound": "No quest invitation found.", "guildQuestsNotSupported": "Guilds cannot be invited on quests.", - "questNotFound": "Quest \"<%= key %>\" not found.", "questNotOwned": "You don't own that quest scroll.", "questNotGoldPurchasable": "Quest \"<%= key %>\" is not a Gold-purchasable quest.", "questLevelTooHigh": "You must be level <%= level %> to begin this quest.", diff --git a/website/common/locales/uk/questscontent.json b/website/common/locales/uk/questscontent.json index 98b4da817f..22e89f18fa 100644 --- a/website/common/locales/uk/questscontent.json +++ b/website/common/locales/uk/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/uk/spells.json b/website/common/locales/uk/spells.json index fa9e58942c..340d1a27dc 100644 --- a/website/common/locales/uk/spells.json +++ b/website/common/locales/uk/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "Перетворіть друга на морське створіння! ", "spellSpecialSandText": "Пісок", "spellSpecialSandNotes": "Reverse the spell that made you a sea star.", - "spellNotFound": "Skill \"<%= spellId %>\" not found.", "partyNotFound": "Party not found", "targetIdUUID": "\"targetId\" must be a valid User ID.", "challengeTasksNoCast": "Casting a skill on challenge tasks is not allowed.", diff --git a/website/common/locales/uk/subscriber.json b/website/common/locales/uk/subscriber.json index 011fd2c131..e0fd6eb012 100644 --- a/website/common/locales/uk/subscriber.json +++ b/website/common/locales/uk/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Invalid coupon code.", "couponUsed": "Coupon code already used.", "couponCodeRequired": "The coupon code is required.", - "eventRequired": "\"req.params.event\" is required.", - "countRequired": "\"req.query.count\" is required.", - "missingPaymentId": "Missing req.query.paymentId", - "missingCustomerId": "Missing req.query.customerId", - "missingPaypalBlock": "Missing req.session.paypalBlock", - "missingSubKey": "Missing req.query.sub", "paypalCanceled": "Your subscription has been canceled", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "receiveMysticHourglass": "Receive a Mystic Hourglass!", diff --git a/website/common/locales/uk/tasks.json b/website/common/locales/uk/tasks.json index 05539415b3..c5c739d1c4 100644 --- a/website/common/locales/uk/tasks.json +++ b/website/common/locales/uk/tasks.json @@ -18,8 +18,8 @@ "newHabit": "Додати звичку", "newHabitBulk": "Нові звички (одна на рядок)", "habitsDesc": "Habits don't have a rigid schedule. You can check them off multiple times per day.", - "positive": "Positive", - "negative": "Negative", + "positive": "Позитивний", + "negative": "Негативний ", "yellowred": "Слабкі", "greenblue": "Сильні", "edit": "Редагувати", @@ -27,7 +27,7 @@ "addChecklist": "Додати перелік", "checklist": "Перелік", "checklistText": "Розбивайте великі завдання на частини! Таким чином ви збільшите отримувані за його виконання досвід та золото, а також зменшите шкоду від невиконання щоденних завдань.", - "newChecklistItem": "New checklist item", + "newChecklistItem": "Новий контрольний перелік", "expandChecklist": "Expand Checklist", "collapseChecklist": "Collapse Checklist", "text": "Назва", @@ -120,11 +120,11 @@ "fortifyText": "Підсилення поверне усі ваші завдання, окрім змагальних, до нейтрального (жовтого кольору) стану, наче ви щойно додали їх, а також відновить здоров’я до максимуму. Це чудова нагода, якщо ваші червоні завдання ускладнюють гру, або ваші сині роблять її занадто легкою. Якщо ви замотивовані почати все заново, використайте самоцвіти і отримайте відстрочку!", "confirmFortify": "Ви впевнені?", "fortifyComplete": "Підсилення виконано!", - "deleteTask": "Delete this Task", - "sureDelete": "Are you sure you want to delete this task?", + "deleteTask": "Видалити цю задачу", + "sureDelete": "Ви впевнені, що хочете видалити це завдання?", "streakCoins": "Бонус за серію!", - "taskToTop": "To top", - "taskToBottom": "To bottom", + "taskToTop": "До вершини", + "taskToBottom": "донизу", "emptyTask": "Спочатку введіть назву завдання.", "dailiesRestingInInn": "Ви відпочиваєте у готелі! Ваші щоденні задачі НЕ завдадуть вам сьогодні шкоди, але вони БУДУТЬ оновлюватися кожної доби. Якщо ви у квесті, ви не будете завдавати шкоди чи отримувати предмети, поки не залишите готель, але бос все одно може завдати шкоди вам, якщо хтось з вашої команди не виконає щоденне завдання.", "habitHelp1": "Корисні звички — це те, що ви часто робите. Вони приносять золото та досвід щоразу, як ви натискаєте <%= plusIcon %>.", @@ -145,7 +145,6 @@ "rewardHelp3": "Особливе спорядження з’являтиметься тут під час світових подій", "rewardHelp4": "Не бійтеся створювати власні нагороди! Огляньте кілька прикладів тут.", "clickForHelp": "Натисніть для довідки", - "taskIdRequired": "«taskId» має містити дійсний UUID.", "taskAliasAlreadyUsed": "Такий псевдонім завдання вже використовується в іншому завданні.", "taskNotFound": "Завдання не знайдено.", "invalidTaskType": "Завдання має бути одним із наступних: «звичка», «щоденка», «задача», «нагорода».", @@ -165,38 +164,38 @@ "intelligenceExample": "Стосуються навчання або психічно складних занять", "perceptionExample": "Стосуються роботи або фінансових задач", "constitutionExample": "Стосуються здоров’я, благополуччя або соціальної взаємодії", - "counterPeriod": "Counter Resets Every", - "counterPeriodDay": "Day", - "counterPeriodWeek": "Week", - "counterPeriodMonth": "Month", + "counterPeriod": "Лічильник скидає кожен", + "counterPeriodDay": "День", + "counterPeriodWeek": "Тиждень", + "counterPeriodMonth": "Місяць", "habitCounter": "Counter (Resets <%= frequency %>)", "habitCounterUp": "Positive Counter (Resets <%= frequency %>)", "habitCounterDown": "Negative Counter (Resets <%= frequency %>)", "taskRequiresApproval": "Для виконання цього завдання необхідне підтвердження. На нього вже створено запит", "taskApprovalHasBeenRequested": "Надіслано запит на ухвалення", - "taskApprovalWasNotRequested": "Only a task waiting for approval can be marked as needing more work", + "taskApprovalWasNotRequested": "Тільки завдання, що очікує схвалення, може бути позначено як потреба в роботі", "approvals": "Ухвалень", - "approvalRequired": "Needs Approval", + "approvalRequired": "Потребує Схвалення ", "repeatZero": "Daily is never due", "repeatType": "Repeat Type", "repeatTypeHelpTitle": "What kind of repeat is this?", "repeatTypeHelp": "Select \"Daily\" if you want this task to repeat every day or every third day, etc. Select \"Weekly\"if you want it to repeat on certain days of the week. If you select \"Monthly\" or \"Yearly\", adjust the Start Date to control which day of the month or year the task will be due on.", - "weekly": "Weekly", - "monthly": "Monthly", - "yearly": "Yearly", + "weekly": "Щотижня", + "monthly": "Щомісяця ", + "yearly": "Щорічно ", "onDays": "On Days", "summary": "Summary", - "repeatsOn": "Repeats On", - "dayOfWeek": "Day of the Week", - "dayOfMonth": "Day of the Month", - "month": "Month", - "months": "Months", - "week": "Week", - "weeks": "Weeks", - "year": "Year", - "years": "Years", + "repeatsOn": "Повторно вмикається", + "dayOfWeek": "День тижня", + "dayOfMonth": "День місяця ", + "month": "Місяць", + "months": "Місяці ", + "week": "тиждень", + "weeks": "Тижні", + "year": "Рік", + "years": "Роки", "confirmScoreNotes": "Confirm task scoring with notes", - "taskScoreNotesTooLong": "Task score notes must be less than 256 characters", + "taskScoreNotesTooLong": "Запити на завдання за розміром мають бути не більше 256 символів", "groupTasksByChallenge": "Group tasks by challenge title", "taskNotes": "Task Notes", "monthlyRepeatHelpContent": "This task will be due every X months", @@ -206,11 +205,11 @@ "nextDue": "Next Due Dates", "checkOffYesterDailies": "Check off any Dailies you did yesterday:", "yesterDailiesTitle": "You left these Dailies unchecked yesterday! Do you want to check off any of them now?", - "yesterDailiesCallToAction": "Start My New Day!", + "yesterDailiesCallToAction": "Почніть свій новий день!", "yesterDailiesOptionTitle": "Confirm that this Daily wasn't done before applying damage", - "yesterDailiesDescription": "If this setting is applied, Habitica will ask you if you meant to leave the Daily undone before calculating and applying damage to your avatar. This can protect you against unintentional damage.", - "repeatDayError": "Please ensure that you have at least one day of the week selected.", - "searchTasks": "Search titles and descriptions...", - "sessionOutdated": "Your session is outdated. Please refresh or sync.", - "errorTemporaryItem": "This item is temporary and cannot be pinned." + "yesterDailiesDescription": "Якщо цей параметр буде застосовано, Habitica запитає вас, чи маєте ви намір залишити щоденне скасування, перш ніж обчислити та нанести збиток вашим аватарам. Це може захистити вас від ненавмисного пошкодження.", + "repeatDayError": "Будь ласка,переконайтеся, що ви вибрали щонайменше як один день тижня", + "searchTasks": "Шукати назви та описи ...", + "sessionOutdated": "Ваш сеанс призупинено. Будь ласка, для продовження оновіть його,або синхронізуйте.", + "errorTemporaryItem": "Цей елемент тимчасовий і не може бути прикріплений." } \ No newline at end of file diff --git a/website/common/locales/zh/backgrounds.json b/website/common/locales/zh/backgrounds.json index 7566296515..cae9c53611 100644 --- a/website/common/locales/zh/backgrounds.json +++ b/website/common/locales/zh/backgrounds.json @@ -346,11 +346,11 @@ "backgroundFlyingOverWildflowerFieldNotes": "在一片野花上飛", "backgroundFlyingOverAncientForestText": "古老的森林", "backgroundFlyingOverAncientForestNotes": "飛過古老的樹林傘衣上", - "backgrounds052018": "SET 48: Released May 2018", - "backgroundTerracedRiceFieldText": "Terraced Rice Field", - "backgroundTerracedRiceFieldNotes": "Enjoy a Terraced Rice Field in the growing season.", - "backgroundFantasticalShoeStoreText": "Fantastical Shoe Store", - "backgroundFantasticalShoeStoreNotes": "Look for fun new footwear in the Fantastical Shoe Store.", - "backgroundChampionsColosseumText": "Champions' Colosseum", - "backgroundChampionsColosseumNotes": "Bask in the glory of the Champions' Colosseum." + "backgrounds052018": "第48组:2018年5月推出", + "backgroundTerracedRiceFieldText": "水稻梯田", + "backgroundTerracedRiceFieldNotes": "在生长的季节享受水稻梯田吧。", + "backgroundFantasticalShoeStoreText": "梦幻鞋店", + "backgroundFantasticalShoeStoreNotes": "在梦幻鞋店寻找有趣的新鞋。", + "backgroundChampionsColosseumText": "冠军斗兽场", + "backgroundChampionsColosseumNotes": "沉浸在冠军斗兽场的荣耀之中。" } \ No newline at end of file diff --git a/website/common/locales/zh/challenge.json b/website/common/locales/zh/challenge.json index 4953bb2d5a..a69a79abea 100644 --- a/website/common/locales/zh/challenge.json +++ b/website/common/locales/zh/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "赢得了以下挑战", "challenges": "挑战", "challengesLink": "挑戰", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "还没有挑战,在", "toCreate": "这里建立一个。", "selectWinner": "选择一位赢家然后结束挑战:", @@ -23,7 +25,9 @@ "filter": "过滤器", "groups": "小组", "noNone": "全不选", + "category": "Category", "membership": "参与状态", + "ownership": "Ownership", "participating": "正在参与", "notParticipating": "未参与", "either": "都显示", diff --git a/website/common/locales/zh/character.json b/website/common/locales/zh/character.json index f864ef8278..1f5294f615 100644 --- a/website/common/locales/zh/character.json +++ b/website/common/locales/zh/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "显示属性分配的状态", "hideQuickAllocation": "隐藏属性分配的状态", "quickAllocationLevelPopover": "每一级您都可以获得一个可自由分配的属性点。你可以手动分配,也可以在用户图标 -> 状态界面中选择让系统为你自动分配。", - "invalidAttribute": "\"<%= attr %>\" 不是一个有效的属性点分配数字。", "notEnoughAttrPoints": "您没有足够的属性点数。", "style": "风格", "facialhair": "面部", @@ -219,6 +218,5 @@ "mainHand": "主要", "offHand": "副手", "pointsAvailable": "可用的属性点", - "pts": "pts", - "statsObjectRequired": "需要统计更新" + "pts": "pts" } \ No newline at end of file diff --git a/website/common/locales/zh/communityguidelines.json b/website/common/locales/zh/communityguidelines.json index a710346433..15d4c5f6e6 100644 --- a/website/common/locales/zh/communityguidelines.json +++ b/website/common/locales/zh/communityguidelines.json @@ -7,42 +7,42 @@ "commGuidePara002": "为了保证每个人在社区中都安全,快乐,高产,我们确实有一些准则。我们谨慎地制定规则,使其尽可能友好和易读。请在开始聊天之前花一点时间阅读它们。", "commGuidePara003": "这些规定适用于我们使用到的所有社区空间,包括(但不限于)Trello、Github、Transifex还有Wikia(也就是我们的维基)。偶尔,会有一些意想不到的事情发生,例如一个新的冲突事端的出现或者是一个恶意捣乱的人.当这些发生的时候,管理员们可能会适当的修改这些准则以确保社区的安全。别担心,假如指导准则有所更动,Bailey 会发布公告来通知你。", "commGuidePara004": "现在准备你的羽毛笔和卷轴做好笔记,让我们开始吧!", - "commGuideHeadingInteractions": "Interactions in Habitica", + "commGuideHeadingInteractions": "Habitica中的互动", "commGuidePara015": "Habitica有两种社交空间:公共的和私人的。公共空间包括Tavern,公共公会,GitHub,Trello,还有Wiki。私人空间包括私人公会,队伍聊天,以及私人信息。所有显示名字必须符合公共空间准则。要修改显示名字,在网页上去用户>个人资料并点击“编辑”按钮。", "commGuidePara016": "当参与Habitica的公共区域时,为了保证所有人的安全和愉快,有一些事项需要遵守。这些对于你这样的冒险者来说简直太容易了!", - "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:", - "commGuideList02B": "Obey all of the Terms and Conditions.", - "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.", - "commGuideList02F": "Avoid extended discussions of divisive topics in the Tavern and where it would be off-topic. If you feel that someone has said something rude or hurtful, do not engage them. If someone mentions something that is allowed by the guidelines but which is hurtful to you, it’s okay to politely let someone know that. If it is against the guidelines or the Terms of Service, you should flag it and let a mod respond. When in doubt, flag the post.", - "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.", - "commGuideList02H": "Take time to reflect instead of responding in anger if someone tells you that something you said or did made them uncomfortable. There is great strength in being able to sincerely apologize to someone. If you feel that the way they responded to you was inappropriate, contact a mod rather than calling them out on it publicly.", - "commGuideList02I": "Divisive/contentious conversations should be reported to mods by flagging the messages involved or using the Moderator Contact Form. If you feel that a conversation is getting heated, overly emotional, or hurtful, cease to engage. Instead, report the posts to let us know about it. Moderators will respond as quickly as possible. It's our job to keep you safe. If you feel that more context is required, you can report the problem using the Moderator Contact Form.", - "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!", - "commGuideList02K": "Avoid posting large header text in the public chat spaces, particularly the Tavern. Much like ALL CAPS, it reads as if you were yelling, and interferes with the comfortable atmosphere.", - "commGuideList02L": "We highly discourage the exchange of personal information -- particularly information that can be used to identify you -- in public chat spaces. Identifying information can include but is not limited to: your address, your email address, and your API token/password. This is for your safety! Staff or moderators may remove such posts at their discretion. If you are asked for personal information in a private Guild, Party, or PM, we highly recommend that you politely refuse and alert the staff and moderators by either 1) flagging the message if it is in a Party or private Guild, or 2) filling out the Moderator Contact Form and including screenshots.", - "commGuidePara019": "In private spaces, users have more freedom to discuss whatever topics they would like, but they still may not violate the Terms and Conditions, including posting slurs or any discriminatory, violent, or threatening content. Note that, because Challenge names appear in the winner's public profile, ALL Challenge names must obey the public space guidelines, even if they appear in a private space.", + "commGuideList02A": " 彼此尊重 成为一位彬彬有礼、善良且乐于助人的人。请记得 Habiticans 来自五湖四海,拥有各种各样的经历和背景。Habitica正因如此才如此多姿多彩!建立社区意味着我们要尊重与赞赏我们之间的相似与不同。以下是一些简单的尊重彼此的方式:", + "commGuideList02B": "遵守所有的 条款和条件", + "commGuideList02C": "不要发布任何包有暴力、恐吓,或明显/隐晦的有关性的内容;禁止发布任何提倡歧视、偏见、种族歧视的信息,或者任何恶意的、骚扰性的、或伤害某人或某队伍的文字或者图片。 这包括辱骂及类似的言语表达。这些内容即使是玩笑也不合适。不是每一个人都有同样的幽默感,所以某些您认为是玩笑的话可能对他人会造成伤害。请攻击您的每日任务, 而不是攻击别人。", + "commGuideList02D": "注意!讨论对全年龄开放。 有很多年轻的Habiticans在使用这个网站。让我们不要玷污任何天真无邪的孩子以及不要阻碍任何Habiticans完成他们的目标。", + "commGuideList02E": "避免亵渎言论。这包括可能在别的网站能够接受的,轻微的,对宗教的秽语。这里的人们有着各种各样的宗教和文化背景,我们希望保证他们能在公共空间感觉到自在。如果一位版主或工作人员告知你某个词语不被Habitica接受,那么就算你不理解为什么,也要遵守这个规则。 另外,侮辱别人将会受到严重的处罚,因为这种行为也同时违反了服务条款。", + "commGuideList02F": "请避免在酒馆中对有争议的话题进行扩展讨论,并且这在酒馆属于无关言论。 如果你觉得有人说了粗鲁或有害的事情,不要接触他们。 如果有人提到了准则允许但对你有害的事情,可以礼貌地让别人知道这一点。 如果该帖子违反准则或服务条款,您应该将其标记并让版主回应。 如有疑问,请举报该帖子。", + "commGuideList02G": "立即遵守任何版主的要求。 这可能包括但不限于,要求您将帖子限制在特定地方,编辑您的个人资料以删除不合适的内容,要求您将讨论移至更合适的地方等等。", + "commGuideList02H": "花一些时间思考,而不是立刻就怒斥对方如果有人告诉你你说的话使别人很不舒服。那么能够向别人郑重的道歉就是一种美德。如果你觉得他们的反应有不当的地方,请联系一个管理员,而不是将他们轰出公共区域。", + "commGuideList02I": "引战言论应当举报通过点击相关言论的举报帖子或者使用版主联系方式。如果你觉得对话变得激烈,甚至情绪过度或伤害到别人,停止对话。作为替代,点击帖子下方的小旗帜让我们知道。 版主会尽快回复。 保证安全是我们的工作。 如果您觉得需要更多的详细内容,则可以使用 版主联系方式 报告问题。", + "commGuideList02J": "请勿发送垃圾消息。垃圾消息包括但不限于:在多个地方发布相同的评论或询问,发布没有说明和上下文的链接,发布无意义的消息,在工会,队伍或挑战中发布垃圾广告,或一次发送多条消息。在任何聊天空间或者通过私人消息中索要宝石或者捐助都被视为垃圾消息。如果用户点击某个链接会给您带来任何好处,您需要在消息中告知该信息,否则这些消息也将被视为垃圾消息。

由版主决定是否构成垃圾消息或可能导致垃圾消息,即使你不觉得是。例如,推广公会一次两次可以接受,但在一天内发布多条消息可能会构成垃圾消息,无论该公会是多么有用!", + "commGuideList02K": "请不要在公共聊天场合张贴大标题文本,尤其是在酒馆。比如说,全部大写的英文字母会让你看起来像是在叫喊,这会干扰舒适的气氛。", + "commGuideList02L": "我们非常不鼓励在公共场合交换个人信息——尤其是那些能够证明自己身份的信息。那些信息包括但不限于:你的地址、电子邮箱、API令牌和密码。这是为了你的安全!工作人员或管理员会根据自己的判断移除那些信息。如果有人在私人公会、队伍或者私聊里问到你的这些私人信息,我们强烈建议你礼貌地拒绝他,并告知工作人员或者管理员中的任意一个。方法1,如果是在队伍或者私人公会里,点击帖子下方的举报。方法2,填写 管理员联系表格 ,包括截图。", + "commGuidePara019": "在私人空间中,用户有更多自由讨论他们喜欢的话题,但是仍然不能违反条款和条件,包括发布任何歧视、暴力或恐吓内容。注意,由于挑战名称会出现在胜利者的公共角色信息中,所有的挑战名称必须遵守公共空间指南,即使它们是在私人空间中。", "commGuidePara020": "私人信息(私信) 有一些附加要求。如果某人屏蔽了你,请不要在任何别的地方联系对方来解除屏蔽。而且你不应该用私信来寻求帮助(因为对问题的公开回答会帮助整个社区)。最后,不要给任何人发私信要求赠送宝石或订阅者来作为礼物,因为这样的行为会被认为是在发送垃圾信息。", - "commGuidePara020A": "If you see a post that you believe is in violation of the public space guidelines outlined above, or if you see a post that concerns you or makes you uncomfortable, you can bring it to the attention of Moderators and Staff by clicking the flag icon to report it. A Staff member or Moderator will respond to the situation as soon as possible. Please note that intentionally reporting innocent posts is an infraction of these Guidelines (see below in “Infractions”). PMs cannot be flagged at this time, so if you need to report a PM, please contact the Mods via the form on the “Contact Us” page, which you can also access via the help menu by clicking “Contact the Moderation Team.” You may want to do this if there are multiple problematic posts by the same person in different Guilds, or if the situation requires some explanation. You may contact us in your native language if that is easier for you: we may have to use Google Translate, but we want you to feel comfortable about contacting us if you have a problem.", + "commGuidePara020A": "如果您看到一条您认为是违反公共空间指南的消息,或者您看到一条困扰您或让您不舒服的消息,您可以通过点击举报标志将其报告给管理员和工作人员。工作人员或者管理员会尽快对情况作出回应。请注意,故意举报无辜的消息也是对社区准则的一种违反哦(具体见下方的“违规”)!私信暂时还不能被举报,所以如果您需要举报一条私信,请通过“联系我们”页面上的表格与我们的管理员联系,您也可以点击“联系管理团队”,可以通过帮助菜单访问该页面。当您遇到如下情况,您也可以这样举报,比如同一人在不同公会中有多个有问题的帖子,或者需要一些情况说明。您可以用您的母语与我们联系如果这对您很方便:我们可能需要使用Google翻译,但如果您遇到问题,我们希望您能够轻松的与我们交流。", "commGuidePara021": "此外,Habitica中的一些公共区域还有另外的准则.", "commGuideHeadingTavern": "酒馆", - "commGuidePara022": "The Tavern is the main spot for Habiticans to mingle. Daniel the Innkeeper keeps the place spic-and-span, and Lemoness will happily conjure up some lemonade while you sit and chat. Just keep in mind…", - "commGuidePara023": "Conversation tends to revolve around casual chatting and productivity or life improvement tips. Because the Tavern chat can only hold 200 messages, it isn't a good place for prolonged conversations on topics, especially sensitive ones (ex. politics, religion, depression, whether or not goblin-hunting should be banned, etc.). These conversations should be taken to an applicable Guild. A Mod may direct you to a suitable Guild, but it is ultimately your responsibility to find and post in the appropriate place.", - "commGuidePara024": "Don't discuss anything addictive in the Tavern. Many people use Habitica to try to quit their bad Habits. Hearing people talk about addictive/illegal substances may make this much harder for them! Respect your fellow Tavern-goers and take this into consideration. This includes, but is not exclusive to: smoking, alcohol, pornography, gambling, and drug use/abuse.", - "commGuidePara027": "When a moderator directs you to take a conversation elsewhere, if there is no relevant Guild, they may suggest you use the Back Corner. The Back Corner Guild is a free public space to discuss potentially sensitive subjects that should only be used when directed there by a moderator. It is carefully monitored by the moderation team. It is not a place for general discussions or conversations, and you will be directed there by a mod only when it is appropriate.", + "commGuidePara022": "酒馆是Habiticans主要的交流地点。酒馆主人丹尼尔将店里打理的一尘不染,Lemoness乐意在你坐下聊天时变出几杯柠檬水。只是要记住...", + "commGuidePara023": "谈话倾向于围绕闲聊和生产力或生活改善提示 。因为酒馆只能保留200条信息,所以它不是个适合长话题的地方,尤其是敏感话题 (例如政治、宗教、抑郁,哥布林猎杀是否该被禁止等)。这些讨论必需发布在合适的公会。管理员可以指导你找到一个合适的公会,但最终你有责任找到一个适当的地方来发布信息。", + "commGuidePara024": "不要在酒馆内讨论任何让人成瘾的东西。很多人用Habitica戒掉坏习惯,听到别人谈论这些让人上瘾/非法的东西,会让他们更难戒除!来到酒馆的人,请尊重你的小伙伴,替他们着想。这包括但不限于:抽烟、喝酒、赌博、色情、滥用药物。", + "commGuidePara027": "当管理员示意您在其他地方进行对话时,如果没有相关的公会,他们可能会建议您使用Back Corner 。 Back Corner公会是一个免费的公共空间,用于讨论潜在的敏感话题,只有在管理员的邀请你才能进入公会并使用它。这个公会由管理员小组严密监控。 它不是进行正常的讨论或对话的地方,只有在适当的时候,你才会通过管理员进入公会。", "commGuideHeadingPublicGuilds": "公共公会", - "commGuidePara029": "Public Guilds are much like the Tavern, except that instead of being centered around general conversation, they have a focused theme. Public Guild chat should focus on this theme. For example, members of the Wordsmiths Guild might be cross if the conversation is suddenly focusing on gardening instead of writing, and a Dragon-Fanciers Guild might not have any interest in deciphering ancient runes. Some Guilds are more lax about this than others, but in general, try to stay on topic!", - "commGuidePara031": "Some public Guilds will contain sensitive topics such as depression, religion, politics, etc. This is fine as long as the conversations therein do not violate any of the Terms and Conditions or Public Space Rules, and as long as they stay on topic.", - "commGuidePara033": "Public Guilds may NOT contain 18+ content. If they plan to regularly discuss sensitive content, they should say so in the Guild description. This is to keep Habitica safe and comfortable for everyone.", - "commGuidePara035": "If the Guild in question has different kinds of sensitive issues, it is respectful to your fellow Habiticans to place your comment behind a warning (ex. \"Warning: references self-harm\"). These may be characterized as trigger warnings and/or content notes, and Guilds may have their own rules in addition to those given here. If possible, please use markdown to hide the potentially sensitive content below line breaks so that those who may wish to avoid reading it can scroll past it without seeing the content. Habitica staff and moderators may still remove this material at their discretion.", - "commGuidePara036": "Additionally, the sensitive material should be topical -- bringing up self-harm in a Guild focused on fighting depression may make sense, but is probably less appropriate in a music Guild. If you see someone who is repeatedly violating this guideline, especially after several requests, please flag the posts and notify the moderators via the Moderator Contact Form.", - "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!", - "commGuidePara038": "All Tavern Challenges and Public Guild Challenges must comply with these rules as well.", + "commGuidePara029": "公开的公会就像酒馆,只是除了一般讨论外,他们有一个关注的主题 。公会聊天应该聚焦在这个主题上。例如 语言大师公会 如果突然专注起园艺而不是写作,这个公会就会被取消;或者 龙的发烧友公会 对解密古老卢恩文字就不会有兴趣。一些公会对这样要求比较宽松,但整体而言,尽量不要跑题 !", + "commGuidePara031": "一些公开的公会可能包含敏感话题,比如关于抑郁、宗教或政治的话题。只要不违反条款与条件,以及公共空间准则,并将讨论限制在话题范围内,这些讨论是不被限制的。", + "commGuidePara033": " 公开公会不能含有18禁内容。如果打算在里面定期地讨论这些敏感内容,应该在公会名称上标明。 这条规定是为了让所有玩家安全舒适的进行游戏。", + "commGuidePara035": " 如果一个可疑的公会里包含了不同种类的敏感议题,请尊重你的小伙伴,在警告后面加以注明(例如\"警告:里面含有自残内容\")。这些将会被定性为触发警告或是有备注的内容,除了既定的规则之外管理者可以定制自己的规则。如果可以的话,请使用 Markdown语法 来隐藏换行符下的潜在敏感内容,以便那些希望避免阅读该内容的人不会在滚动阅读时看见该内容。Habitica工作人员和管理员可以自行决定保留或移除这些内容。", + "commGuidePara036": "另外,敏感成份必须和主题有关——在对抗抑郁症的公会里谈到自残是可理解的,但在音乐公会里谈就不适当了。如果你看到有人一直违反社区准则,屡劝不听的话,请举报该帖子并且通过 管理员联系表格 通知管理员。", + "commGuidePara037": " 不应该建立任何用于攻击任何团体或个人的公会,不论是公开或是私人。建立这样的公会将会被立刻封禁。对抗坏习惯,而不是你的冒险者小伙伴!", + "commGuidePara038": " 所有的酒馆挑战和公共公会的挑战也必须遵守这些规则 。", "commGuideHeadingInfractionsEtc": "违规,后果和恢复", "commGuideHeadingInfractions": "违规", "commGuidePara050": "Habiticans 互相帮助互相尊重,并努力让整个社区更有趣更友好。然而在极少数情况下,Habiticans 的所作所为可能违反以上的准则。当这种情况发生时,管理员将采取一切必要行动来保持 Habitica 的可靠和舒适。", - "commGuidePara051": "There are a variety of infractions, and they are dealt with depending on their severity. These are not comprehensive lists, and the Mods can make decisions on topics not covered here at their own discretion. The Mods will take context into account when evaluating infractions.", + "commGuidePara051": "违规形式各种各样,我们将根据其严重性进行处理。这些并不是全面的列表,管理员们可以根据自己的判断对这里未涉及的主题做出决定。 他们在评估违规时会考虑到上下文。", "commGuideHeadingSevereInfractions": "严重违规", "commGuidePara052": "严重违规极大的伤害Habitica社区和用户的安全,因此会导致严重后果。", "commGuidePara053": "下面是一些严重违规的例子。这并非一个全面的列表。", @@ -56,16 +56,16 @@ "commGuideHeadingModerateInfractions": "中度违规", "commGuidePara054": "中度违规不会威胁社区的安全,但是会让人感到不愉快。这些违规将产生中等影响。当多次违规行为加一起,后果会愈发严重。", "commGuidePara055": "以下是一些中度违规的例子。这并非一个完整列表。", - "commGuideList06A": "Ignoring, disrespecting or arguing with a Mod. This includes publicly complaining about moderators or other users, publicly glorifying or defending banned users, or debating whether or not a moderator action was appropriate. If you are concerned about one of the rules or the behaviour of the Mods, please contact the staff via email (admin@habitica.com).", - "commGuideList06B": "Backseat Modding. To quickly clarify a relevant point: A friendly mention of the rules is fine. Backseat modding consists of telling, demanding, and/or strongly implying that someone must take an action that you describe to correct a mistake. You can alert someone to the fact that they have committed a transgression, but please do not demand an action -- for example, saying, \"Just so you know, profanity is discouraged in the Tavern, so you may want to delete that,\" would be better than saying, \"I'm going to have to ask you to delete that post.\"", - "commGuideList06C": "Intentionally flagging innocent posts.", - "commGuideList06D": "Repeatedly Violating Public Space Guidelines", - "commGuideList06E": "Repeatedly Committing Minor Infractions", + "commGuideList06A": "忽视,不尊重或与管理员争吵。包括公开抱怨管理员或者其他用户、公开美化被禁用户或为其辩护,或者争论一位管理员的行为是否合适。如果你对某条规则或者管理员的行为感到顾虑,请通过邮件联系工作人员 ( admin@habitica.com )。", + "commGuideList06B": "不要越俎代庖。为了快速澄清有关问题:友情地提示规则是很好的做法。越俎代庖的行为包括告知,要求和/或强烈暗示某人必须采取您描述的措施来纠正错误。你可以警告某人TA已经违规,但是请勿要求TA做什么——例如,对违规的人说:“正如你所知道的,脏话在酒馆很令人泄气,所以请你删掉它。”会比说:“我要求你必须删掉那个帖子。”好得多。", + "commGuideList06C": "恶意举报非违规帖子", + "commGuideList06D": "多次违反公共空间准则", + "commGuideList06E": "多次轻度违规", "commGuideHeadingMinorInfractions": "轻微违规", "commGuidePara056": "一旦轻度违规,违规者会受到警告,而且会受到轻微的惩罚。屡教不改,继续违规则会导致更加严重的后果。", "commGuidePara057": "以下是一些轻度违规的例子。这并非一个完整的列表。", "commGuideList07A": "初次违反公共空间准则", - "commGuideList07B": "Any statements or actions that trigger a \"Please Don't\". When a Mod has to say \"Please don't do this\" to a user, it can count as a very minor infraction for that user. An example might be \"Please don't keep arguing in favor of this feature idea after we've told you several times that it isn't feasible.\" In many cases, the Please Don't will be the minor consequence as well, but if Mods have to say \"Please Don't\" to the same user enough times, the triggering Minor Infractions will start to count as Moderate Infractions.", + "commGuideList07B": "任何触发了“请不要”的声明和行动。当管理员不得不对玩家说“请不要这样做”时,这就算作玩家一次非常小的违规。一个例子可能是“在我们多次告诉你这个功能不可行之后,请不要继续争论这个功能。”在许多例子中,“请不要”也会带来轻微的影响,但是如果管理员不得不对同一个玩家多次说\"请不要\"时,引发的轻度违规将算作中度违规。", "commGuidePara057A": "Some posts may be hidden because they contain sensitive information or might give people the wrong idea. Typically this does not count as an infraction, particularly not the first time it happens!", "commGuideHeadingConsequences": "后果", "commGuidePara058": "在Habitica——与现实生活一样——每一个行为都有一个结果,无论是一直跑步的你会变得健康,还是吃太多糖的你会蛀牙,还是一直学习的你会通过考试。", diff --git a/website/common/locales/zh/content.json b/website/common/locales/zh/content.json index 0a46eff6b2..a3e0bf12c4 100644 --- a/website/common/locales/zh/content.json +++ b/website/common/locales/zh/content.json @@ -167,9 +167,9 @@ "questEggBadgerText": "獾", "questEggBadgerMountText": "獾", "questEggBadgerAdjective": "活跃", - "questEggSquirrelText": "Squirrel", - "questEggSquirrelMountText": "Squirrel", - "questEggSquirrelAdjective": "bushy-tailed", + "questEggSquirrelText": "松鼠", + "questEggSquirrelMountText": "松鼠", + "questEggSquirrelAdjective": "毛茸茸的尾巴", "eggNotes": "将一瓶孵化药水倒在这个宠物蛋上,你就能孵化出一只<%= eggAdjective(locale) %><%= eggText(locale) %>。", "hatchingPotionBase": "普通", "hatchingPotionWhite": "白色", diff --git a/website/common/locales/zh/contrib.json b/website/common/locales/zh/contrib.json index e33344a122..f441368c28 100644 --- a/website/common/locales/zh/contrib.json +++ b/website/common/locales/zh/contrib.json @@ -49,7 +49,6 @@ "UUID": "用户ID", "loadUser": "载入玩家", "noAdminAccess": "你没有管理员权限。", - "pageMustBeNumber": "req.query.page必须是一个数字", "userNotFound": "找不到用户", "invalidUUID": "UUID 必须有效", "title": "头衔", diff --git a/website/common/locales/zh/front.json b/website/common/locales/zh/front.json index 65916ccc34..4764b8e088 100644 --- a/website/common/locales/zh/front.json +++ b/website/common/locales/zh/front.json @@ -139,7 +139,7 @@ "playButtonFull": "进入 Habitica", "presskit": "资料包", "presskitDownload": "下载图片", - "presskitText": "Thanks for your interest in Habitica! The following images can be used for articles or videos about Habitica. For more information, please contact us at <%= pressEnquiryEmail %>.", + "presskitText": "感谢您对 Habitica 的关注,以下图片可以为关于 Habitica 的文章或视频所使用。更多信息请咨询我们<%= pressEnquiryEmail %>。", "pkQuestion1": "是甚麼啟發了Habitica呢? 它是怎麼開始的呢?", "pkAnswer1": "如果你曾经投入很多时间来给你的游戏虚拟化身升级,这就让人很难不去联想如若你把那些努力用于改进真实生活中的你自身,而不是你的虚拟形象,那么你的生活该会变得多么美好啊。为了处理这样的问题,我们开始建设Habitica。
Habitica于2013年通过Kickstarter众筹网站正式启动,我们的灵光一现从此开始腾飞。自从那时起,它成长为了一个巨大的项目,被我们了不起的开源志愿者们和慷慨的用户们支持着。", "pkQuestion2": "為甚麼Habitica能運作呢?", @@ -153,10 +153,10 @@ "pkQuestion6": "哪些人是Habitica的典型用户?", "pkAnswer6": "Lots of different people use Habitica! More than half of our users are ages 18 to 34, but we have grandparents using the site with their young grandkids and every age in-between. Often families will join a party and battle monsters together.
Many of our users have a background in games, but surprisingly, when we ran a survey a while back, 40% of our users identified as non-gamers! So it looks like our method can be effective for anyone who wants productivity and wellness to feel more fun.", "pkQuestion7": "為甚麼Habitica用像素画?", - "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!", + "pkAnswer7": "Habitica使用像素艺术有以下几个原因。除了有趣的怀旧因素之外,像素艺术对于我们希望融入其中的志愿艺术家来说非常平易近人。即使有许多不同的美术家贡献了自己的像素艺术,也更容易保持一致,并且它可以让我们快速生成大量新的内容!", "pkQuestion8": "Habitica能怎樣影響別人的真實生活呢?", "pkAnswer8": "你可以在这里找到很多Habitica帮助人们的记录:https://habitversary.tumblr.com", - "pkMoreQuestions": "Do you have a question that’s not on this list? Send an email to admin@habitica.com!", + "pkMoreQuestions": "你想问的问题不在这个清单上吗?请向 admin@habitica.com 发送一封电子邮件!", "pkVideo": "视频", "pkPromo": "促销", "pkLogo": "标志", @@ -220,7 +220,7 @@ "reportCommunityIssues": "报告社区问题", "subscriptionPaymentIssues": "捐助和支付问题", "generalQuestionsSite": "关于本站的常见问题", - "businessInquiries": "Business/Marketing Inquiries", + "businessInquiries": "业务/市场咨询", "merchandiseInquiries": "实体商品(T恤,贴纸)询问", "marketingInquiries": "市场营销/媒体咨询", "tweet": "发布推特", @@ -282,8 +282,8 @@ "passwordResetEmailHtml": "如果你在Habitica的用户 <%= username %> 希望重置密码,\">点击这里 去设置一个新的密码。这个链接会在24小时后到期。

如果你没有请求重置密码,请忽略这封邮件。", "invalidLoginCredentialsLong": "噢,糟了 - 你的用户名或密码错误。\n- 确保你的用户名或电子邮箱输入正确。\n- 你可能使用Facebook登记,而不是电子邮箱。再次检查尝试用Facebook登陆。\n- 如果你忘记了密码,点击 \"忘记密码\"。", "invalidCredentials": "没有运用那些授权证书的账号。", - "accountSuspended": "This account, User ID \"<%= userId %>\", has been blocked for breaking the [Community Guidelines](https://habitica.com/static/community-guidelines) or [Terms of Service](https://habitica.com/static/terms). For details or to ask to be unblocked, please email our Community Manager at <%= communityManagerEmail %> or ask your parent or guardian to email them. Please copy your User ID into the email and include your Profile Name.", - "accountSuspendedTitle": "Account has been suspended", + "accountSuspended": "该帐户,用户ID为“<%= userId %>”因违反[社区准则](https://habitica.com/static/community-guidelines)或[服务条款](https://habitica.com/static/terms)已被冻结。有关详细信息或要求解除封禁,请发送电子邮件给我们的社区管理员<%= communityManagerEmail %> 或要求您的家长或监护人通过电子邮件发送。 请将您的用户ID复制到电子邮件中并包含您的角色信息。", + "accountSuspendedTitle": "账户已被暂停使用", "unsupportedNetwork": "当前网络不支持。", "cantDetachSocial": "帐户缺少另一个认证方式;无法分离此认证方式。", "onlySocialAttachLocal": "本地认证仅能被添加到一个社交账号。", @@ -304,7 +304,7 @@ "alreadyHaveAccountLogin": "已经是Habitica大陆的勇者了?从这里进入吧!", "dontHaveAccountSignup": "还不是我们的一份子?在这里登记。", "motivateYourself": "鼓励自己去完成你的目标。", - "timeToGetThingsDone": "It's time to have fun when you get things done! Join over <%= userCountInMillions %> million Habiticans and improve your life one task at a time.", + "timeToGetThingsDone": "当你完成所有的事情后该娱乐一下了!成为超过<%= userCountInMillions %>万的Habiticans的一份子吧,一次一个任务来改善你的生活。", "singUpForFree": "免费注册", "or": "或者", "gamifyYourLife": "游戏化你的生活", diff --git a/website/common/locales/zh/generic.json b/website/common/locales/zh/generic.json index 61a43cb934..1f5d762a5d 100644 --- a/website/common/locales/zh/generic.json +++ b/website/common/locales/zh/generic.json @@ -33,7 +33,7 @@ "showLess": "收起", "expandToolbar": "展开列表", "collapseToolbar": "隐藏列表", - "markdownHelpLink": "Markdown formatting help", + "markdownHelpLink": "Markdown格式帮助", "showFormattingHelp": "查看格式相关帮助", "hideFormattingHelp": "隐藏格式相关帮助", "youType": "你输入了:", @@ -60,7 +60,7 @@ "groupPlansTitle": "团队套餐", "newGroupTitle": "新的团队", "subscriberItem": "神秘物品", - "newSubscriberItem": "You have new Mystery Items", + "newSubscriberItem": "你有新的神秘物品", "subscriberItemText": "每月,定期捐款者会收到一个神秘物品。这件物品一般是在月底前一周时推出。查看Wiki里的“神秘物品”页面以获得更多信息。", "all": "全部", "none": "无", @@ -136,12 +136,12 @@ "audioTheme_airuTheme": "Airu 的主题", "audioTheme_beatscribeNesTheme": "Beatscribe的新主题", "audioTheme_arashiTheme": "岚 主题", - "audioTheme_triumphTheme": "Triumph Theme", - "audioTheme_lunasolTheme": "Lunasol Theme", - "audioTheme_spacePenguinTheme": "SpacePenguin's Theme", + "audioTheme_triumphTheme": "胜利的主题", + "audioTheme_lunasolTheme": "卢娜索的主题", + "audioTheme_spacePenguinTheme": "电子琴的主题", "audioTheme_maflTheme": "MAFL主题", "audioTheme_pizildenTheme": "Pizilden的主题", - "audioTheme_farvoidTheme": "Farvoid Theme", + "audioTheme_farvoidTheme": "Farvoid的主题", "askQuestion": "问个问题", "reportBug": "报告一个问题", "HabiticaWiki": "Habitica 维基", @@ -167,13 +167,13 @@ "achievementBurnoutText": "在2015秋季节事件中打败了疲惫魔,复原了锻炼精魂!", "achievementBewilder": "Mistiflying城的拯救者", "achievementBewilderText": "在2016年春季嘉年华事件中协助战胜迷失怪!", - "achievementDysheartener": "Savior of the Shattered", + "achievementDysheartener": "破碎的心的拯救者", "achievementDysheartenerText": "Helped defeat the Dysheartener during the 2018 Valentine's Event!", "checkOutProgress": "看一下我在Habitica的进步!", "cards": "卡片", - "sentCardToUser": "You sent a card to <%= profileName %>", - "cardReceivedFrom": "<%= cardType %> from <%= userName %>", - "cardReceived": "You received a <%= card %>", + "sentCardToUser": "你寄给<%= profileName %>一张卡片", + "cardReceivedFrom": "来自<%= userName %>的<%= cardType %>", + "cardReceived": "你收到一张<%= card %>", "greetingCard": "祝贺卡", "greetingCardExplanation": "你们两个人都获得了“欢乐伙伴”成就!", "greetingCardNotes": "给一个队友发一张祝贺卡。", @@ -278,14 +278,14 @@ "spirituality": "灵性", "time_management": "时间管理和责任感", "recovery_support_groups": "恢复+支持小组", - "dismissAll": "Dismiss All", + "dismissAll": "关闭全部", "messages": "私信", "emptyMessagesLine1": "你没有任何私信", "emptyMessagesLine2": "发送一条私信来展开一次讨论吧!", - "userSentMessage": "<%= user %> sent you a message", + "userSentMessage": "<%= user %>给你发送了一条私信", "letsgo": "我们出发吧!", "selected": "已选择", "howManyToBuy": "你想买多少呢?", "habiticaHasUpdated": "有一個新的Habitica更新。刷新以獲取最新版本!", - "contactForm": "Contact the Moderation Team" + "contactForm": "联系管理员小组" } \ No newline at end of file diff --git a/website/common/locales/zh/groups.json b/website/common/locales/zh/groups.json index b37ca25417..55c1d288d1 100644 --- a/website/common/locales/zh/groups.json +++ b/website/common/locales/zh/groups.json @@ -34,7 +34,7 @@ "communityGuidelines": "社区准则", "communityGuidelinesRead1": "请阅读我们的", "communityGuidelinesRead2": "在聊天之前", - "bannedWordUsed": "Oops! Looks like this post contains a swearword, religious oath, or reference to an addictive substance or adult topic (<%= swearWordsUsed %>). Habitica has users from all backgrounds, so we keep our chat very clean. Feel free to edit your message so you can post it!", + "bannedWordUsed": "哦呀!似乎这篇的文章包含脏话,宗教的诅咒,或者涉及到成瘾物质或成人话题(<%= swearWordsUsed %>)。habitica的用户拥有各种不同的背景,所以我们得保持我们的聊天环境很干净。请修改您的消息以发送它!", "bannedSlurUsed": "您的帖子包含不合适的语言,您的聊天权限已被取消。", "party": "队伍", "createAParty": "创建一个队伍", @@ -42,30 +42,30 @@ "errorNotInParty": "你没有参加队伍", "noPartyText": "你也许不在一个队伍中,或者你的队伍还需要一段时间来加载。你也可以创建一个新队伍来邀请朋友。或者如果你想加入一个队伍,你可以把下方你的用户 ID 给他们,然后返回这里查看邀请信息。", "LFG": "招募队友,宣传你的队伍,或加入一个已有队伍,请到<%= linkStart %>集结队伍 (寻找小组) <%= linkEnd %>公会。", - "wantExistingParty": "Want to join an existing Party? Go to the <%= linkStart %>Party Wanted Guild<%= linkEnd %> and post this User ID:", + "wantExistingParty": "想加入一个队伍吗? 点击 <%= linkStart %>Party Wanted Guild<%= linkEnd %> 把这个用户ID填上:", "joinExistingParty": "加入别人的队伍", - "needPartyToStartQuest": "Whoops! You need to create or join a Party before you can start a quest!", + "needPartyToStartQuest": "哇哦!在你开始一个任务之前,你需要创建或加入一个队伍!", "createGroupPlan": "建立", "create": "建立", "userId": "用户ID", "invite": "邀请", "leave": "离开", - "invitedToParty": "You were invited to join the Party <%= party %>", - "invitedToPrivateGuild": "You were invited to join the private Guild <%= guild %>", - "invitedToPublicGuild": "You were invited to join the Guild <%= guild %>", - "partyInvitationsText": "You have <%= numberInvites %> Party invitations! Choose wisely, because you can only be in one Party at a time.", - "joinPartyConfirmationText": "Are you sure you want to join the Party \"<%= partyName %>\"? You can only be in one Party at a time. If you join, all other Party invitations will be rejected.", + "invitedToParty": "你被邀请加入队伍<%= party %>", + "invitedToPrivateGuild": "你被邀请加入一个私人工会<%= guild %>", + "invitedToPublicGuild": "你被邀请加入一个工会<%= guild %>", + "partyInvitationsText": "您有<%= numberInvites %>个队伍邀请!您一次只能加入一个队伍,因此请谨慎选择。", + "joinPartyConfirmationText": "您确定要加入队伍“<%= partyName %>”吗?您同时只能加入一个队伍。如果您加入这个队伍,其他邀请将被拒绝。", "invitationAcceptedHeader": "你的邀请已经被接受", "invitationAcceptedBody": "<%= username %>接受了你的邀请加入<%= groupName %>!", "joinNewParty": "加入新队伍", "declineInvitation": "拒绝邀请", - "partyLoading1": "Your Party is being summoned. Please wait...", - "partyLoading2": "Your Party is coming in from battle. Please wait...", - "partyLoading3": "Your Party is gathering. Please wait...", - "partyLoading4": "Your Party is materializing. Please wait...", + "partyLoading1": "你的队伍正在被召唤中。请等待...", + "partyLoading2": "你的队伍正在战斗中。请稍等...", + "partyLoading3": "你的队伍正在聚集中。请稍等...", + "partyLoading4": "你的队伍正在成形中。请稍等...", "systemMessage": "系统消息", - "newMsgGuild": "<%= name %> has new posts", - "newMsgParty": "Your Party, <%= name %>, has new posts", + "newMsgGuild": "<%= name %> 有新消息", + "newMsgParty": "您的队伍 <%= name %> 有新消息", "chat": "聊天", "sendChat": "发送", "toolTipMsg": "查看最近的消息", @@ -85,7 +85,7 @@ "assignLeader": "任命队长", "members": "成员", "memberList": "成员列表", - "partyList": "Order for Party members in header", + "partyList": "给队伍成员的置顶消息", "banTip": "引导成员", "moreMembers": "更多成员", "invited": "已邀请", @@ -106,16 +106,16 @@ "optionalMessage": "可选消息", "yesRemove": "是的,移除", "foreverAlone": "你不可以赞你自己的信息。不要成为那样的人。", - "sortDateJoinedAsc": "最早的加入日期", - "sortDateJoinedDesc": "最近的加入日期", - "sortLoginAsc": "最早的登入日期", - "sortLoginDesc": "最近的登入日期", - "sortLevelAsc": "最低的等級", - "sortLevelDesc": "最高的等級", - "sortNameAsc": "名称 (A - Z)", - "sortNameDesc": "名称 (A - Z)", - "sortTierAsc": "最低的等級", - "sortTierDesc": "最高的等級", + "sortBackground": "以背景排序", + "sortClass": "以职业类型排序", + "sortDateJoined": "以加入队伍日期排序", + "sortLogin": "以登陆日期排序", + "sortLevel": "以等级排序", + "sortName": "以角色名称排序", + "sortTier": "以贡献等级排序", + "ascendingAbbrev": "升序", + "descendingAbbrev": "降序", + "applySortToHeader": "在主页队伍成员展示处应用排序选项", "confirmGuild": "用4个宝石来创建公会?", "leaveGroupCha": "退出公会挑战并…", "confirm": "确定", @@ -131,6 +131,10 @@ "clearAll": "删除所有消息", "confirmDeleteAllMessages": "确定要删除收件箱里的所有消息吗?其他用户依然会看到你已发送给他们的消息。", "optOutPopover": "不喜欢私信?点击不再接收", + "PMPlaceholderTitle": "这里没有对话", + "PMPlaceholderDescription": "在左侧选择对话", + "PMPlaceholderTitleRevoked": "您的聊天权利已被取消", + "PMPlaceholderDescriptionRevoked": "您无法发送私信,因为您的聊天权限已被撤销。 如果您对此有任何疑问或疑虑,请发送电子邮件至 admin@habitica.com 与工作人员讨论。", "block": "阻止", "unblock": "解锁", "pm-reply": "发送回复", @@ -146,13 +150,13 @@ "report": "举报", "abuseFlag": "举报违反社区准则的用户", "abuseFlagModalHeading": "举报违规行为", - "abuseFlagModalBody": "Are you sure you want to report this post? You should only report a post that violates the <%= firstLinkStart %>Community Guidelines<%= linkEnd %> and/or <%= secondLinkStart %>Terms of Service<%= linkEnd %>. Inappropriately reporting a post is a violation of the Community Guidelines and may give you an infraction.", + "abuseFlagModalBody": "你确定要举报这个帖子?你 只能 举报违反了<%= firstLinkStart %>社会准则<%= linkEnd %>和/或者<%= secondLinkStart %>服务条款<%= linkEnd %> 的消息。不当的举报是违反社区准则的,并且你会因此违规。", "abuseFlagModalButton": "举报违规", "abuseReported": "感谢您报告此违反服务条款的行为。版主已经接到通知。", "abuseAlreadyReported": "你已经举报过此信息。", - "whyReportingPost": "Why are you reporting this post?", - "whyReportingPostPlaceholder": "Please help our moderators by letting us know why you are reporting this post for a violation, e.g., spam, swearing, religious oaths, bigotry, slurs, adult topics, violence.", - "optional": "Optional", + "whyReportingPost": "你为什么要举报该消息?", + "whyReportingPostPlaceholder": "请通过让我们知道您为什么举报这个帖子违规来帮助我们的版主,例如垃圾邮件,脏话,宗教宣誓,偏见,诽谤,成人话题,暴力等。", + "optional": "非必填", "needsText": "请输入一个信息", "needsTextPlaceholder": "请在这里输入信息", "copyMessageAsToDo": "将消息复制为代办事项", @@ -163,9 +167,9 @@ "leaderOnlyChallenges": "只有会长能创建挑战", "sendGift": "赠送礼物", "inviteFriends": "邀请朋友", - "partyMembersInfo": "Your Party currently has <%= memberCount %> members and <%= invitationCount %> pending invitations. The limit of members in a Party is <%= limitMembers %>. Invitations above this limit cannot be sent.", + "partyMembersInfo": "你的队伍目前有 <%= memberCount %> 位小伙伴和 <%= invitationCount %>封待定的邀请函。队伍的剩余成员数是<%= limitMembers %>。超过此限制邀请将不能发送。", "inviteByEmail": "通过邮件邀请", - "inviteByEmailExplanation": "If a friend joins Habitica via your email, they'll automatically be invited to your Party!", + "inviteByEmailExplanation": "如果你的朋友通过你的邮件加入Habitica,他们将自动被邀请加入你的队伍!", "inviteMembersHowTo": "通过有效的电子邮件或36位用户ID邀请他人。 如果电子邮件尚未注册,我们将邀请他们加入Habitica。", "inviteFriendsNow": "现在邀请你的朋友", "inviteFriendsLater": "稍后邀请", @@ -191,45 +195,42 @@ "battleWithFriends": "与朋友一起大战怪兽", "startPartyWithFriends": "和你的朋友们组建新队伍", "startAParty": "创建一个队伍", - "addToParty": "Add someone to your Party", + "addToParty": "加入队伍成员", "likePost": "如果你喜欢这个公告请点击!", "partyExplanation1": "和朋友们一起玩Habitica ,互相监督!", "partyExplanation2": "与怪兽作战或者创建挑战!", "partyExplanation3": "现在,邀请朋友来获取探索任务卷轴!", "wantToStartParty": "你想创建一支队伍吗?", - "exclusiveQuestScroll": "Inviting a friend to your Party will grant you an exclusive Quest Scroll to battle the Basi-List together!", + "exclusiveQuestScroll": "邀请朋友加入队伍,你将获得独家探索任务卷轴,与他们一起挑战Basi-List!", "nameYourParty": "为你的队伍命名!", - "partyEmpty": "You're the only one in your Party. Invite your friends!", - "partyChatEmpty": "Your Party chat is empty! Type a message in the box above to start chatting.", + "partyEmpty": "你孤身一人,快邀请你的朋友们!", + "partyChatEmpty": "队伍聊天框里空空如也!在上面的聊天框里打字来开始聊天。", "guildChatEmpty": "公会聊天框里空空如也!在上面的聊天框打字来开始聊天。", - "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any Party or Guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them.", + "requestAcceptGuidelines": "如果你想在酒馆里,或是队伍和公会里发布信息,请先阅读<%= linkStart %>社区指南<%= linkEnd %>并点击下面按钮,表示您接受其中的条款。 ", "partyUpName": "举行派对", "partyOnName": "欢乐派对", "partyUpText": "和另一个人一起加入队伍!愉快的打怪并互相支持吧!玩的愉快嗷~!", "partyOnText": "加入了一个至少有四人的队伍!享受你增强的责任感,和伙伴们并肩作战,打倒敌人吧!", - "groupIdRequired": "\"groupId\"必须是一个有效的UUID", "groupNotFound": "没有找到这个小组,或者你没有权限。", "groupTypesRequired": "你必须提供一个有效的\"type\"查询字符串。", "questLeaderCannotLeaveGroup": "需要放弃已开始的探索任务才能退出团队。", - "cannotLeaveWhileActiveQuest": "You cannot leave Party during an active quest. Please leave the quest first.", + "cannotLeaveWhileActiveQuest": "你不能在进行探索任务期间离开队伍。请先退出探索任务。", "onlyLeaderCanRemoveMember": "只有小组长能移除一个成员!", "cannotRemoveCurrentLeader": "你不能移除小组的组长。请先选出一个新组长。", "memberCannotRemoveYourself": "你不能移除自己!", "groupMemberNotFound": "小组成员中找不到用户", "mustBeGroupMember": "必须是小组的成员。", - "keepOrRemoveAll": "req.query.keep 必须是 \"keep-all\" 或者 \"remove-all\"", - "keepOrRemove": "req.query.keep必须是\"keep\"或\"remove\"", "canOnlyInviteEmailUuid": "仅能用UUID或者电子邮件邀请。", "inviteMissingEmail": "邀请中缺失电子邮箱地址。", "inviteMissingUuid": "邀请中缺失用户ID", "inviteMustNotBeEmpty": "邀请不能是空的。", "partyMustbePrivate": "队伍必须是私有的", - "userAlreadyInGroup": "UserID: <%= userId %>, User \"<%= username %>\" already in that group.", - "youAreAlreadyInGroup": "You are already a member of this group.", + "userAlreadyInGroup": "用户ID:<%= userId %> ,用户 “<%= username %>”已经在这个队伍中。", + "youAreAlreadyInGroup": "你已经是这个队伍的成员。", "cannotInviteSelfToGroup": "你不能邀请自己到一个小组", - "userAlreadyInvitedToGroup": "UserID: <%= userId %>, User \"<%= username %>\" already invited to that group.", - "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" already pending invitation.", - "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party.", + "userAlreadyInvitedToGroup": "用户ID:<%= userId %>,用户“<%= username %>”已经被邀请进入这个小组。", + "userAlreadyPendingInvitation": "用户ID:<%= userId %>,用户“<%= username %>”等待接受邀请。", + "userAlreadyInAParty": "用户ID:<%= userId %> ,用户 “<%= username %>”已经在一个队伍中。", "userWithIDNotFound": "这个ID \"<%= userId %>\"的用户没有找到。", "userHasNoLocalRegistration": "用户不能有一个本地注册(用户名,电子邮件,密码)。", "uuidsMustBeAnArray": "用户ID邀请必须是一个数组。", @@ -248,13 +249,13 @@ "confirmClaim": "你肯定你要接受這個任务?", "confirmUnClaim": "你肯定你要放棄這個任务?", "confirmApproval": "你肯定你要批准這個任务?", - "confirmNeedsWork": "Are you sure you want to mark this task as needing work?", + "confirmNeedsWork": "您确定要将此任务标记为需要处理吗?", "userRequestsApproval": "<%= userName %>的请求被肯定了", "userCountRequestsApproval": "<%= userCount %>個请求被肯定了", "youAreRequestingApproval": "你在等待请求被肯定", - "chatPrivilegesRevoked": "You cannot do that because your chat privileges have been revoked.", - "cannotCreatePublicGuildWhenMuted": "You cannot create a public guild because your chat privileges have been revoked.", - "cannotInviteWhenMuted": "You cannot invite anyone to a guild or party because your chat privileges have been revoked.", + "chatPrivilegesRevoked": "您不能发送消息因为您的聊天权利已被撤销。", + "cannotCreatePublicGuildWhenMuted": "您不能创建一个公共的工会因为您的聊天权利已被撤销。", + "cannotInviteWhenMuted": "您不能邀请任何人加入一个工会或者队伍因为您的聊天权利已被撤销。", "newChatMessagePlainNotification": "<%= groupName %>中有来自<%= authorName %>的消息. 点击这里进行聊天!", "newChatMessageTitle": "<%= groupName %> 中有新的消息", "exportInbox": "输出消息", @@ -270,12 +271,12 @@ "claim": "索赔", "removeClaim": "移除公告", "onlyGroupLeaderCanManageSubscription": "只有组长可以修改小组的订购方式", - "yourTaskHasBeenApproved": "Your task <%= taskText %> has been approved.", - "taskNeedsWork": "<%= managerName %> marked <%= taskText %> as needing additional work.", - "userHasRequestedTaskApproval": "<%= user %> requests approval for <%= taskName %>", + "yourTaskHasBeenApproved": "您的任务<%= taskText %> 已经被批准。", + "taskNeedsWork": "<%= managerName %> 标记 <%= taskText %> 为需要额外工作。", + "userHasRequestedTaskApproval": "<%= user %> 请求 <%= taskName %> 的批准", "approve": "许可", "approveTask": "许可任务", - "needsWork": "Needs Work", + "needsWork": "需要处理", "viewRequests": "查看申请", "approvalTitle": "<%= userName %>已经完成了<%= type %>:“<%= text %>”", "confirmTaskApproval": "你要把击败任务的奖励,给予这位勇士——<%= username %>吗?", @@ -315,7 +316,7 @@ "approvalsTitle": "等待被审批的任务", "upgradeTitle": "升级", "blankApprovalsDescription": "当你的小组完成了需要你审批的任务时,它们会出现在这里!在任务编辑中调整审批要求设置。", - "userIsClamingTask": "`<%= username %> 发布了 \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "同意请求", "refreshApprovals": "更新审批请求", "refreshGroupTasks": "更新组内任务", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "不能删除被分配的小组任务。", "confirmGuildPlanCreation": "创建这个团队?", "onlyGroupLeaderCanInviteToGroupPlan": "只有组长可以邀请用户加入有订购计划的小组", - "remainOrLeaveChallenges": "req.query.keep 只能为“remain-in-challenges”或“'leave-challenges”", "paymentDetails": "付款细节", "aboutToJoinCancelledGroupPlan": "你将要加入的小组即将取消当前的订购方式。您将无法享受免费的订购。", "cannotChangeLeaderWithActiveGroupPlan": "该小组当前正在完成任务,你无法更改它的队长。", @@ -366,9 +366,11 @@ "recentActivity": "近期活动", "myGuilds": "我的公会", "guildsDiscovery": "发现公会", + "role": "Role", "guildOrPartyLeader": "会长", "guildLeader": "公会会长", "member": "成员", + "guildSize": "Guild Size", "goldTier": "金奖", "silverTier": "银奖", "bronzeTier": "铜奖", @@ -381,7 +383,7 @@ "groupDescription": "详细描述", "guildDescriptionPlaceholder": "在这里输入公会会员应该了解公会的所有内容。 有用的提示,有帮助的链接和激励人心的标语都在这里!", "markdownFormattingHelp": "[Markdown 语法帮助](http://habitica.wikia.com/wiki/Markdown_Cheat_Sheet)", - "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.", + "partyDescriptionPlaceholder": "这是我们队伍的描述。 它描述了我们在这个队伍里做什么。 如果你想了解更多关于我们在这个队伍所做的事,请阅读说明。 派对继续。", "guildGemCostInfo": "花费宝石促进高质量的公会,宝石会转移到您的公会的银行。", "noGuildsTitle": "你不是任何公会的成员。", "noGuildsParagraph1": "公会是由其他玩家创建的社会团体,可以为您提供支持,加强自身的责任和激励人心的聊天。", @@ -424,42 +426,42 @@ "managerAdded": "成功添加管理员", "managerRemoved": "成功移除管理员", "leaderChanged": "首領被改變了", - "groupNoNotifications": "This Guild does not have notifications due to member size. Be sure to check back often for replies to your messages!", - "whatIsWorldBoss": "What is a World Boss?", - "worldBossDesc": "A World Boss is a special event that brings the Habitica community together to take down a powerful monster with their tasks! All Habitica users are rewarded upon its defeat, even those who have been resting in the Inn or have not used Habitica for the entirety of the quest.", - "worldBossLink": "Read more about the previous World Bosses of Habitica on the Wiki.", - "worldBossBullet1": "Complete tasks to damage the World Boss", - "worldBossBullet2": "The World Boss won’t damage you for missed tasks, but its Rage meter will go up. If the bar fills up, the Boss will attack one of Habitica’s shopkeepers!", - "worldBossBullet3": "You can continue with normal Quest Bosses, damage will apply to both", + "groupNoNotifications": "这个工会因为成员太多不能收到通知!确保经常进入该工会来查看回复您的消息!", + "whatIsWorldBoss": "什么是世界级怪物?", + "worldBossDesc": "世界怪物是一个特殊的事件,把Habitica社区聚集在一起并使用他们的任务来击败强大的怪物! 所有的Habitica用户在击败怪物后都会得到奖励,即使是那些一直在旅馆休息或者没有使用Habitica完成任务的人。", + "worldBossLink": "在Wiki上阅读更多关于以前的世界怪物的内容。", + "worldBossBullet1": "完成任务来攻击世界怪物", + "worldBossBullet2": "世界怪物不会因为你未完成的任务而伤害你,但它的怒气值会上升。 如果怒气值满了,怪物会攻击Habitica的店主之一!", + "worldBossBullet3": "你可以继续正常的怪物任务,你发出的伤害会攻击双方。", "worldBossBullet4": "Check the Tavern regularly to see World Boss progress and Rage attacks", - "worldBoss": "World Boss", - "groupPlanTitle": "Need more for your crew?", - "groupPlanDesc": "Managing a small team or organizing household chores? Our group plans grant you exclusive access to a private task board and chat area dedicated to you and your group members!", - "billedMonthly": "*billed as a monthly subscription", - "teamBasedTasksList": "Team-Based Task List", - "teamBasedTasksListDesc": "Set up an easily-viewed shared task list for the group. Assign tasks to your fellow group members, or let them claim their own tasks to make it clear what everyone is working on!", - "groupManagementControls": "Group Management Controls", - "groupManagementControlsDesc": "Use task approvals to verify that a task that was really completed, add Group Managers to share responsibilities, and enjoy a private group chat for all team members.", - "inGameBenefits": "In-Game Benefits", - "inGameBenefitsDesc": "Group members get an exclusive Jackalope Mount, as well as full subscription benefits, including special monthly equipment sets and the ability to buy gems with gold.", - "inspireYourParty": "Inspire your party, gamify life together.", - "letsMakeAccount": "First, let’s make you an account", - "nameYourGroup": "Next, Name Your Group", - "exampleGroupName": "Example: Avengers Academy", - "exampleGroupDesc": "For those selected to join the training academy for The Avengers Superhero Initiative", - "thisGroupInviteOnly": "This group is invitation only.", - "gettingStarted": "Getting Started", - "congratsOnGroupPlan": "Congratulations on creating your new Group! Here are a few answers to some of the more commonly asked questions.", - "whatsIncludedGroup": "What's included in the subscription", - "whatsIncludedGroupDesc": "All members of the Group receive full subscription benefits, including the monthly subscriber items, the ability to buy Gems with Gold, and the Royal Purple Jackalope mount, which is exclusive to users with a Group Plan membership.", - "howDoesBillingWork": "How does billing work?", - "howDoesBillingWorkDesc": "Group Leaders are billed based on group member count on a monthly basis. This charge includes the $9 (USD) price for the Group Leader subscription, plus $3 USD for each additional group member. For example: A group of four users will cost $18 USD/month, as the group consists of 1 Group Leader + 3 group members.", - "howToAssignTask": "How do you assign a Task?", - "howToAssignTaskDesc": "Assign any Task to one or more Group members (including the Group Leader or Managers themselves) by entering their usernames in the \"Assign To\" field within the Create Task modal. You can also decide to assign a Task after creating it, by editing the Task and adding the user in the \"Assign To\" field!", - "howToRequireApproval": "How do you mark a Task as requiring approval?", - "howToRequireApprovalDesc": "Toggle the \"Requires Approval\" setting to mark a specific task as requiring Group Leader or Manager confirmation. The user who checked off the task won't get their rewards for completing it until it has been approved.", - "howToRequireApprovalDesc2": "Group Leaders and Managers can approve completed Tasks directly from the Task Board or from the Notifications panel.", - "whatIsGroupManager": "What is a Group Manager?", - "whatIsGroupManagerDesc": "A Group Manager is a user role that do not have access to the group's billing details, but can create, assign, and approve shared Tasks for the Group's members. Promote Group Managers from the Group’s member list.", - "goToTaskBoard": "Go to Task Board" + "worldBoss": "世界级怪物", + "groupPlanTitle": "需要更多的成员?", + "groupPlanDesc": "管理着一个小团队或准备组织家务? 我们的团队计划为您和您的小组成员授予专有的私人任务板块和聊天区!", + "billedMonthly": "*按月捐助收费", + "teamBasedTasksList": "基于团队的任务清单", + "teamBasedTasksListDesc": "为团队设置一个易于查看的共享任务列表。将任务分配给您的同事小组成员,或让他们提出自己的任务以明确每个人的工作!", + "groupManagementControls": "团队管理员的权限", + "groupManagementControlsDesc": "使用任务审批来验证任务是否完成,添加团队管理员以分担责任,并享受为所有小组成员建立的一个私人团队聊天区域。", + "inGameBenefits": "游戏福利", + "inGameBenefitsDesc": "小组成员可获得独家的鹿角兔坐骑以及全套捐助优惠,包括特殊的月度捐助装备套装和使用金币购买宝石的权利。", + "inspireYourParty": "激励你的队伍,一起游戏化生活。", + "letsMakeAccount": "首先,来注册一个账号", + "nameYourGroup": "然后,给你的队伍命名", + "exampleGroupName": "例如:复仇者联盟", + "exampleGroupDesc": "对于那些被选中加入复仇者联盟的超级英雄行动培训学院的人", + "thisGroupInviteOnly": "这个队伍仅限邀请加入。", + "gettingStarted": "现在加入我们", + "congratsOnGroupPlan": "恭喜您创建您的新队伍! 以下是一些常见问题的答案。", + "whatsIncludedGroup": "捐助中包括了什么", + "whatsIncludedGroupDesc": "本团队所有成员均可获得完整的捐助福利,包括每月捐助者赠品,使用金币购买钻石的能力以及皇家紫鹿角兔坐骑,这些是拥有团队计划会员资格的用户所专有的。", + "howDoesBillingWork": "我要如何付费?", + "howDoesBillingWorkDesc": "团队队长每月按小组成员人数付费。 该费用包括团体队长捐助的9美元(美元)价格,以及每个额外团体成员3美元的费用。 例如:一个团队的四位用户将花费18美元/月,因为该团队由1名队长+ 3名队员组成。", + "howToAssignTask": "这个团队计划如何分配任务?", + "howToAssignTaskDesc": "通过在创建任务模式中的“分配给”区域中输入队员的用户名,将任何任务分配给一个或多个组成员(包括团队队长或管理员他们自己)。 您也可以决定在创建任务后分配任务,方法是编辑任务并在“分配给”区域中添加用户!", + "howToRequireApproval": "如何将任务标记为需要审批?", + "howToRequireApprovalDesc": "改变“需要批准”的设置,将特定任务标记为需要队长或管理员确认。等待审批任务的用户在获得批准之前不会获得完成任务的奖励。", + "howToRequireApprovalDesc2": "团队队长和管理员可以直接从任务板或通知面板批准完成的任务。", + "whatIsGroupManager": "什么是团队管理员?", + "whatIsGroupManagerDesc": "团队管理员无权访问小组的帐单详细信息,但可以为小组成员创建,分配和批准共享任务。 从团队成员名单中设置团队管理员。", + "goToTaskBoard": "前往任务板" } \ No newline at end of file diff --git a/website/common/locales/zh/limited.json b/website/common/locales/zh/limited.json index 8ab67e5515..1db2bc9500 100644 --- a/website/common/locales/zh/limited.json +++ b/website/common/locales/zh/limited.json @@ -32,9 +32,9 @@ "seasonalShopSummerText": "快乐夏天嘉年华!你想买些稀罕东西吗?7月31日前购买!", "seasonalShopFallText": "快乐秋天嘉年华!你想买些稀罕东西吗?10月31日前购买!", "seasonalShopWinterText": "快乐冬天嘉年华!你想买些稀罕东西吗?1月31日前购买!", - "seasonalShopSpringText": "Happy Spring Fling!! Would you like to buy some rare items? They’ll only be available until April 30th!", + "seasonalShopSpringText": "快乐春天嘉年华!你想买些稀罕东西吗?4月30日前购买!", "seasonalShopFallTextBroken": "啊……欢迎来到季节商店……我们正在准备秋季特供产品,还有其他一些什么的…… 这里所有的东西都会在每年秋季节庆期间开放购买,但我们只开门到10月31日……你可能现在可以开始囤货了,或者只能继续等,等,等…… *叹气*", - "seasonalShopBrokenText": "My pavilion!!!!!!! My decorations!!!! Oh, the Dysheartener's destroyed everything :( Please help defeat it in the Tavern so I can rebuild!", + "seasonalShopBrokenText": "我的亭子!!!我的装饰品!!! 哦,Dysheartener毁了一切 : ( 请在酒馆中帮助我击败它,所以我可以重建!", "seasonalShopRebirth": "如果你曾经购买过这件装备,但是现在失去了它,那么你可以从奖励栏中重新购买它。最初,你只能购买你当前职业的装备(默认职业是战士),但是不用担心,当你转换职业时,其他职业的装备你就可以购买了。", "candycaneSet": "拐杖糖 (法师)", "skiSet": "雪橇刺客 (盗贼)", @@ -118,11 +118,11 @@ "winter2018MistletoeSet": "槲寄生医师 (医师)", "winter2018ReindeerSet": "驯鹿盗贼 (盗贼)", "spring2018SunriseWarriorSet": "Sunrise Warrior (Warrior)", - "spring2018TulipMageSet": "Tulip Mage (Mage)", + "spring2018TulipMageSet": "郁金香法师(法师)", "spring2018GarnetHealerSet": "Garnet Healer (Healer)", "spring2018DucklingRogueSet": "Duckling Rogue (Rogue)", "eventAvailability": "在<%= date(locale) %>前可购买。", - "dateEndMarch": "April 30", + "dateEndMarch": "4月30日", "dateEndApril": "4月19日", "dateEndMay": "5月17日", "dateEndJune": "6月14日", diff --git a/website/common/locales/zh/loadingscreentips.json b/website/common/locales/zh/loadingscreentips.json index fd054c2128..a0cb1ffcd5 100644 --- a/website/common/locales/zh/loadingscreentips.json +++ b/website/common/locales/zh/loadingscreentips.json @@ -25,7 +25,7 @@ "tip23": "升到100级吧!这样你就可以免费解锁重生球,并且开始全新的冒险!", "tip24": "有问题?在“Habitica帮助公会”提问吧!", "tip25": "四季盛会会在接近二至日和二分点的时候开始", - "tip26": "You can look for a Party or find Party members in the Party Wanted Guild!", + "tip26": "你可以在Party Wanted Guild寻找一个队伍或者队伍成员!", "tip27": "昨天完成了每日任务,但是忘记点了?别担心!你可以在开始新的一天之前,把它补点上!", "tip28": "在\"用户\"图标下,设置“自定义起始日期”>设置是用来控制你这一天什么时候会重置。", "tip29": "完成所有每日任务来获得完美日的增益来提升属性!", diff --git a/website/common/locales/zh/messages.json b/website/common/locales/zh/messages.json index 3ab7cec5c2..858a7ff142 100644 --- a/website/common/locales/zh/messages.json +++ b/website/common/locales/zh/messages.json @@ -59,7 +59,7 @@ "messageUserOperationProtected": "路径 `<%= operation %>`因受到保护未保存。", "messageUserOperationNotFound": "<%= operation %> 无法找到此操作。", "messageNotificationNotFound": "找不到消息", - "messageNotAbleToBuyInBulk": "This item cannot be purchased in quantities above 1.", + "messageNotAbleToBuyInBulk": "这件物品不能以大于1的数量购买。", "notificationsRequired": "需要Notification ids", "unallocatedStatsPoints": "你有<%= points %>没分配的属性点", "beginningOfConversation": "现在开始和<%= userName %>愉快的聊天吧!记住要善待和尊重他人并遵守社区准则!" diff --git a/website/common/locales/zh/npc.json b/website/common/locales/zh/npc.json index 410d53895f..6a8c3d03ca 100644 --- a/website/common/locales/zh/npc.json +++ b/website/common/locales/zh/npc.json @@ -23,7 +23,7 @@ "sleepBullet4": "结算前这里会预测你对boss造成的伤害以及收集到的物品数量", "pauseDailies": "进入酒馆", "unpauseDailies": "离开酒馆", - "staffAndModerators": "工作人员和版主", + "staffAndModerators": "工作人员和管理员", "communityGuidelinesIntro": "Habitica尝试为所有年龄和背景的用户创造一个温馨的环境,特别是像在酒馆这样的公共场所。 如果您有任何问题,请咨询我们的“社区准则”", "acceptCommunityGuidelines": "我同意遵守社区指南", "daniel": "Daniel", @@ -31,8 +31,8 @@ "danielText2": "警告:如果你正在参与一个Boss战任务,你仍然会因为队友未完成的每日任务受到boss的伤害!同样,你对Boss的伤害(或者道具的收集)在你离开客栈之前不会结算。", "danielTextBroken": "欢迎来到酒馆……我想……如果你需要休息,我会把你安置在客栈里……入住之后,你的每日任务就不会在一天结束时给你造成伤害,不过你仍然可以签到……只要你还有精力就行……", "danielText2Broken": "哦……如果你正在一场BOSS战当中,你仍然会因为队友未完成的每日任务受到BOSS的伤害……同样,你对Boss的伤害(或者道具的收集)在你离开客栈之前不会结算……", - "worldBossEvent": "World Boss Event", - "worldBossDescription": "World Boss Description", + "worldBossEvent": "世界怪物事件", + "worldBossDescription": "世界怪物的介绍", "alexander": "商人Alexander", "welcomeMarket": "欢迎来到市场!在这里购买稀有的蛋和药水!卖掉你多余的物品!委托服务!来瞧瞧我们能为你提供什么。", "welcomeMarketMobile": "欢迎来到市场!在这里购买稀有的蛋和药水!来瞧瞧我们能为你提供什么。", @@ -48,6 +48,7 @@ "featuredItems": "特色商品!", "hideLocked": "隐藏未解锁的物品", "hidePinned": "隐藏固定的物品", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %>经验值", "amountGold": "<%= amount %>金币", "namedHatchingPotion": "<%= type %>瓶孵化药水", @@ -74,20 +75,13 @@ "ianTextMobile": "我可以向你推荐一些任务卷轴吗?和你的队伍一起,激活他们与怪物战斗吧!", "ianBrokenText": "欢迎来到任务商店……这里你可以使用任务卷轴来同你的朋友一起与怪物战斗……请一定要到右边栏来看看我们为您精心准备的任务卷轴……", "featuredQuests": "特色任务!", - "missingKeyParam": "需要\"req.params.key\" 。", - "itemNotFound": "找不到物品\"<%= key %>\" 。", "cannotBuyItem": "你不能购买这个物品。", - "missingTypeKeyEquip": "\"key\"和\"type\"是必须的参数。", - "missingPetFoodFeed": "\"pet\"和\"food\"是必须的参数。", - "invalidPetName": "无效的宠物名提供。", - "missingEggHatchingPotionHatch": "\"egg\"和\"hatchingPotion\"是必须的参数。", - "invalidTypeEquip": "\"type\"必须是'equipped',,'pet', 'mount', 'costume'中的一个。", "mustPurchaseToSet": "必须购买 <%= val %>来把它使用在<%= key %>上。", "typeRequired": "需要Type", "positiveAmountRequired": "Positive amount is required", "notAccteptedType": "种类必须在 [蛋, 孵化药水, 食物, 任务, 装备] 中", "contentKeyNotFound": "内容<%= type %>找不到Key", - "plusGem": "+<%= count %> Gem", + "plusGem": "+<%= count %>颗宝石", "typeNotSellable": "Type不出售。必须是<%= acceptedTypes %>其中之一。", "userItemsKeyNotFound": "user.items <%= type %>找不到Key ", "userItemsNotEnough": "你没有足够的<%= type %>。", @@ -95,11 +89,11 @@ "unlocked": "物品已经解锁", "alreadyUnlocked": "全套已经解锁", "alreadyUnlockedPart": "全套已经部分解锁", - "invalidQuantity": "Quantity to purchase must be a number.", + "invalidQuantity": "购买数量必须是数字。", "USD": "(美元)", - "newStuff": "New Stuff by Bailey", + "newStuff": "Bailey的新品", "newBaileyUpdate": "New Bailey Update!", - "tellMeLater": "Tell Me Later", + "tellMeLater": "稍后通知我", "dismissAlert": "不再显示", "donateText1": "在你的账号里增加20个宝石。宝石可以用来购买特殊的虚拟物品,例如衣服和发型。", "donateText2": "帮助与支持Habitica", @@ -112,9 +106,9 @@ "paymentMethods": "支付通过", "classGear": "职业装备", "classGearText": "祝贺你选了一个职业!我已经将你的的基本武器放到物品栏了。看看下面来装备它吧!", - "classStats": "These are your class's Stats; they affect the game-play. Each time you level up, you get one Point to allocate to a particular Stat. Hover over each Stat for more information.", + "classStats": "这是你职业的属性点:它们会影响游戏的操作和过程。每次升级时,你将获得一点自由分配点,用来给某一特定属性加成。将鼠标悬停在每个属性上来查看更多信息。", "autoAllocate": "自动分配", - "autoAllocateText": "If 'Automatic Allocation' is selected, your avatar gains Stats automatically based on your tasks' Stats, which you can find in TASK > Edit > Advanced Settings > Stat Allocation. Eg, if you hit the gym often, and your 'Gym' Daily is set to 'Strength', you'll gain Strength automatically.", + "autoAllocateText": "如果“自动分配”被选中,你的人物会自动根据你的任务的属性获得属性点,你可以在任务>编辑>高级设置>属性分配中找到它。例如,如果你经常点健身房任务,并且你的“健身房”每日任务设置为“力量”,你就会自动获得力量点数。", "spells": "技能", "spellsText": "你现在可以解锁职业技能了。你会在11级时得到第一个技能。你的法力每天都会回复10点,每完成一个待办事项你就会回复1点法力。", "skillsTitle": "技能", @@ -140,7 +134,7 @@ "tourHallPage": "这里是英雄的殿堂,纪念在开源项目中对Habitica做出贡献的人们。无论是代码、图画、音乐、剧本,甚至只是一些帮助,他们得到了 宝石,独有装备 以及尊贵头衔。你也可以向Habitica捐助!", "tourPetsPage": "这里是马厩!!3级后,你可以在打倒任务怪的同时随机搜集到宠物蛋和孵化药水。孵化出宠物后,它会被传送到这里~!点击一只宠物,它就会出现在你身边,和你一起战斗、成长。给它们喂你3级后能找到的食物,它们就会成长为更有力量的坐骑~~!", "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.\"", + "tourEquipmentPage": "这里是你的装备库!你的战斗工具影响你的属性点。如果你想要在不影响属性点的情况下在你的角色形象上展示不同的装备,点击“使用服装”。", "equipmentAlreadyOwned": "你已经拥有那件装备", "tourOkay": "好的!", "tourAwesome": "太好了!", diff --git a/website/common/locales/zh/pets.json b/website/common/locales/zh/pets.json index d766064e67..f09c5d9e0f 100644 --- a/website/common/locales/zh/pets.json +++ b/website/common/locales/zh/pets.json @@ -27,8 +27,8 @@ "royalPurpleGryphon": "紫御狮鹫", "phoenix": "凤凰", "magicalBee": "魔法蜜蜂", - "hopefulHippogriffPet": "Hopeful Hippogriff", - "hopefulHippogriffMount": "Hopeful Hippogriff", + "hopefulHippogriffPet": "充满希望的鹰头马", + "hopefulHippogriffMount": "充满希望的鹰头马", "royalPurpleJackalope": "紫御鹿角兔", "invisibleAether": "隐形以太", "rarePetPop1": "按按金色的爪印查看怎么通过为Habitica贡献来获得这只稀有宠物!", @@ -83,7 +83,7 @@ "petNotOwned": "你没有拥有这个宠物。", "mountNotOwned": "您还未拥有这一坐骑", "earnedCompanion": "因为你的不懈努力,你又获得了一个新的伙伴,好好喂养它,让它成长!", - "feedPet": "Feed <%= text %> to your <%= name %>?", + "feedPet": "喂你的<%= text %> 一个 <%= name %> ?", "useSaddle": "把鞍用在<%= pet %>上?", "raisedPet": "你让你的<%= pet %>长大了!", "earnedSteed": "通过完成你的任务,你获得了一匹忠诚的坐骑!", @@ -91,18 +91,18 @@ "rideLater": "稍后骑上", "petName": "<%= potion(locale) %> <%= egg(locale) %>", "mountName": "<%= potion(locale) %> <%= mount(locale) %>", - "keyToPets": "Key to the Pet Kennels", - "keyToPetsDesc": "Release all standard Pets so you can collect them again. (Quest Pets and rare Pets are not affected.)", - "keyToMounts": "Key to the Mount Kennels", - "keyToMountsDesc": "Release all standard Mounts so you can collect them again. (Quest Mounts and rare Mounts are not affected.)", - "keyToBoth": "Master Keys to the Kennels", - "keyToBothDesc": "Release all standard Pets and Mounts so you can collect them again. (Quest Pets/Mounts and rare Pets/Mounts are not affected.)", - "releasePetsConfirm": "Are you sure you want to release your standard Pets?", - "releasePetsSuccess": "Your standard Pets have been released!", - "releaseMountsConfirm": "Are you sure you want to release your standard Mounts?", - "releaseMountsSuccess": "Your standard Mounts have been released!", - "releaseBothConfirm": "Are you sure you want to release your standard Pets and Mounts?", - "releaseBothSuccess": "Your standard Pets and Mounts have been released!", + "keyToPets": "宠物马厩的钥匙", + "keyToPetsDesc": "释放所有基础宠物,以便您可以再次收集它们。 (任务宠物和稀有宠物不受影响。)", + "keyToMounts": "坐骑马厩的钥匙", + "keyToMountsDesc": "释放所有基础坐骑,以便您可以再次收集它们。 (任务坐骑和稀有坐骑不受影响。)", + "keyToBoth": "马厩的主钥匙", + "keyToBothDesc": "释放所有基础宠物和坐骑,以便您可以再次收集它们。 (任务宠物/坐骑和稀有宠物/坐骑不受影响。)", + "releasePetsConfirm": "您确定要释放您的基础宠物吗?", + "releasePetsSuccess": "您的基础宠物已经被释放!", + "releaseMountsConfirm": "您确定要释放您的基础坐骑吗?", + "releaseMountsSuccess": "您的基础坐骑已经被释放!", + "releaseBothConfirm": "您确定要释放您的基础宠物和坐骑吗?", + "releaseBothSuccess": "您的基础宠物和坐骑已经被释放!", "petKeyName": "狗舍的钥匙", "petKeyPop": "让你拥有的宠物自由,释放并让它们自己进行冒险,使自己再一次燃起驯兽师的热情!", "petKeyBegin": "狗舍的钥匙:再一次经历 <%= title %> !", @@ -138,8 +138,8 @@ "dragThisPotion": "把<%= potionName %>拖到到一个宠物蛋上来孵化一个新宠物!", "clickOnEggToHatch": "点击一个宠物蛋,使用你的<%= potionName %>孵化药水来孵化一个新的宠物!", "hatchDialogText": "将您的<%= potionName %>孵化药水倒在您的<%= eggName %>蛋上,它将孵化成一个<%= petName %>。", - "clickOnPotionToHatch": "Click on a hatching potion to use it on your <%= eggName %> and hatch a new pet!", - "notEnoughPets": "You have not collected enough pets", - "notEnoughMounts": "You have not collected enough mounts", - "notEnoughPetsMounts": "You have not collected enough pets and mounts" + "clickOnPotionToHatch": "点击一个孵化药水,倒在您的<%= eggName %>蛋上,并孵化一个新宠物!", + "notEnoughPets": "您还没有收集足够的宠物", + "notEnoughMounts": "您还没有收集足够的坐骑", + "notEnoughPetsMounts": "您还没有收集足够的宠物和坐骑" } \ No newline at end of file diff --git a/website/common/locales/zh/quests.json b/website/common/locales/zh/quests.json index 98860a7076..a15d5a4e29 100644 --- a/website/common/locales/zh/quests.json +++ b/website/common/locales/zh/quests.json @@ -25,7 +25,7 @@ "questInvitation": "任务邀请:", "questInvitationTitle": "任务邀请", "questInvitationInfo": "探索任务邀请<%= quest %>", - "invitedToQuest": "You were invited to the Quest <%= quest %>", + "invitedToQuest": "你被邀请加入任务<%= quest %>", "askLater": "稍后再问", "questLater": "后续任务", "buyQuest": "购买任务", @@ -79,7 +79,7 @@ "mustLvlQuest": "你需要达到第<%= level %>级才能买这个任务!", "mustInviteFriend": "要完成这个任务,你需要邀请一个朋友加入你的队伍。现在就发出邀请吗?", "unlockByQuesting": "为了解锁这个任务,请先完成<%= title %>。", - "questConfirm": "你肯定吗?<%= questmembers %>个队伍成员中只有<%= totalmembers %>个参加了这个探索任务!当所有的成员都参加或拒绝了探索任务,探索任务将会自动开启。", + "questConfirm": "你肯定吗?你的 <%= totalmembers %> 个队伍成员中只有<%= questmembers %>个参加了这个探索任务!当所有的成员都参加或拒绝了探索任务,探索任务将会自动开启。", "sureCancel": "你是否确定要放弃这个探索任务?这将会失去所有已接受的邀请。探索任务拥有者将拿回探索任务卷轴。", "sureAbort": "你是否确定要放弃这个任务?这样做会让你的所有队员都退出这个任务,并且消除所有进度。任务卷轴将会回到任务拥有者手上。", "doubleSureAbort": "你真的真的要这样做吗?要确保他们不会讨厌你一辈子哟!", @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "还没有发出任何探索任务邀请。", "questInviteNotFound": "找不到探索任务邀请。", "guildQuestsNotSupported": "公会不能被邀请参加探索任务。", - "questNotFound": "找不到探索任务\"<%= key %>\"。", "questNotOwned": "你还没拥有那个探索任务卷轴。", "questNotGoldPurchasable": "探索任务\"<%= key %>\"不能用金币购买。", "questLevelTooHigh": "你必须达到等级<%= level %>来开始这个探索任务。", @@ -121,10 +120,10 @@ "questBundles": "打折的任务包", "buyQuestBundle": "购买任务包", "noQuestToStart": "找不到一个可以开始的任务? 尝试查看市场上新版本的任务商店!", - "pendingDamage": "<%= damage %> pending damage", - "pendingDamageLabel": "pending damage", - "bossHealth": "<%= currentHealth %> / <%= maxHealth %> Health", - "rageAttack": "Rage Attack:", - "bossRage": "<%= currentRage %> / <%= maxRage %> Rage", - "rageStrikes": "Rage Strikes" + "pendingDamage": "即将对Boss造成<%= damage %>点伤害", + "pendingDamageLabel": "即将造成的伤害", + "bossHealth": "<%= currentHealth %>/ <%= maxHealth %> 生命值", + "rageAttack": "狂暴攻击:", + "bossRage": "<%= currentRage %> / <%= maxRage %> 愤怒值", + "rageStrikes": "狂暴打击" } \ No newline at end of file diff --git a/website/common/locales/zh/questscontent.json b/website/common/locales/zh/questscontent.json index 30012eb4fd..6a51782923 100644 --- a/website/common/locales/zh/questscontent.json +++ b/website/common/locales/zh/questscontent.json @@ -17,13 +17,13 @@ "questGryphonDropGryphonEgg": "狮鹫 (宠物蛋)", "questGryphonUnlockText": "解锁狮鹫蛋购买功能", "questHedgehogText": "巨型刺猬", - "questHedgehogNotes": "Hedgehogs are a funny group of animals. They are some of the most affectionate pets a Habiteer could own. But rumor has it, if you feed them milk after midnight, they grow quite irritable. And fifty times their size. And InspectorCaracal did just that. Oops.", + "questHedgehogNotes": "刺猬是一种有趣的生物。他们是Habit世界居民可以拥有的最可爱的宠物之一。但是有谣言称,如果你在午夜零点后喂它们牛奶,他们就会变得越来越暴躁,并且变大50倍。啊哦,j检查员Caracal刚刚就这么做了。", "questHedgehogCompletion": "你的队伍成功地让巨型刺猬平静了下来!缩回她原来的大小后,她蹒跚着爬向她的蛋。她边吱吱叫边把她的一些蛋推向你的队伍。但愿这些刺猬更喜欢牛奶!", "questHedgehogBoss": "巨型刺猬", "questHedgehogDropHedgehogEgg": "刺猬 (宠物蛋)", "questHedgehogUnlockText": "解锁刺猬购买功能", "questGhostStagText": "春之幽灵", - "questGhostStagNotes": "Ahh, Spring. The time of year when color once again begins to fill the landscape. Gone are the cold, snowy mounds of winter. Where frost once stood, vibrant plant life takes its place. Luscious green leaves fill in the trees, grass returns to its former vivid hue, a rainbow of flowers rise along the plains, and a white mystical fog covers the land! ... Wait. Mystical fog? \"Oh no,\" InspectorCaracal says apprehensively, \"It would appear that some kind of spirit is the cause of this fog. Oh, and it is charging right at you.\"", + "questGhostStagNotes": "啊,春天!春色又一次铺满大地。冬季的积雪早已融化,青翠的植物取代了寒冷的冰霜。树木舒展着嫩绿的树叶,草地恢复了往日的色彩。平原之上,艳丽的花儿竞相开放,神秘的白雾覆盖着这片大地。。。等等,为什么会有雾?“糟了,”检查员Caracal 担忧地说,“看来是什么幽灵带来了这场大雾。天啊,它朝这里冲过来了!”", "questGhostStagCompletion": "几乎毫发无伤的幽灵低下了头颅,用鼻子亲吻地面。平静的声音笼罩着你的队伍:“请接受我的道歉。我刚刚从沉睡中苏醒,我的意识显然还没有完全恢复。请收下这份礼物作为补偿。” 几颗蛋出现在幽灵的脚下。它即刻消失在了森林深处,在身后留下了点点飘落的花瓣。", "questGhostStagBoss": "雄鹿鬼魂", "questGhostStagDropDeerEgg": "鹿 (宠物蛋)", @@ -62,12 +62,12 @@ "questVice1Text": "恶习之龙,第1部分:逃出恶习之龙的控制", "questVice1Notes": "

传言说,有一个可怕的恶魔藏身于Habitica山的洞穴中。它会扭转接近这片土地的英雄坚强的意志,让他们染上恶习并变得懒惰!这个野兽由巨大的力量和阴影组成,并化身为一条奸诈的阴影巨龙——恶习之龙。勇敢的Habitica居民,一起站出来,击败这个邪恶的怪物。但是,你一定要相信自己能抵抗他巨大的邪恶之力。

恶习第1部:

小心不要让他控制你的意志,不然你怎么和他战斗?不要成为懒惰和恶习的牺牲品!努力与巨龙的力量对抗吧,逃出他邪恶之力的影响!

", "questVice1Boss": "恶习之龙的阴影", - "questVice1Completion": "With Vice's influence over you dispelled, you feel a surge of strength you didn't know you had return to you. Congratulations! But a more frightening foe awaits...", + "questVice1Completion": "随着坏习惯对你的影响力被驱散,你感到一股你不知道的力量回到了你身上。恭喜! 但一个更可怕的敌人在等待着......", "questVice1DropVice2Quest": "恶习之龙第2部 (卷轴)", "questVice2Text": "恶习之龙,第2部分:寻找巨龙的巢穴", - "questVice2Notes": "Confident in yourselves and your ability to withstand the influence of Vice the Shadow Wyrm, your Party makes its way to Mt. Habitica. You approach the entrance to the mountain's caverns and pause. Swells of shadows, almost like fog, wisp out from the opening. It is near impossible to see anything in front of you. The light from your lanterns seem to end abruptly where the shadows begin. It is said that only magical light can pierce the dragon's infernal haze. If you can find enough light crystals, you could make your way to the dragon.", + "questVice2Notes": "带着必胜的信念,你的队伍又一次充满自信的踏上了前往Habitica山的路。你们在山洞的入口停了下来。从洞里不断涌出漆黑的暗影,像雾一样笼罩着洞口。洞里漆黑一片,伸手不见五指。从灯笼里发出的光根本无法触及暗影笼罩的区域。据说只有用魔力点亮的光可以渗入巨龙的阴霾中。如果能找到足够多的神光水晶,你就可以找到去巨龙那里的路了。", "questVice2CollectLightCrystal": "神光水晶", - "questVice2Completion": "As you lift the final crystal aloft, the shadows are dispelled, and your path forward is clear. With a quickening heart, you step forward into the cavern.", + "questVice2Completion": "当你把最后的水晶提升到高处时,阴影就会被驱散,你的前进道路就会清晰起来。 随着心跳的加速,你向前走进洞穴。", "questVice2DropVice3Quest": "恶习之龙第3部 (卷轴)", "questVice3Text": "恶习之龙,第3部分:恶习缓醒", "questVice3Notes": "在不断的努力之下,你的队伍终于发现了恶习之龙的巢穴.这个庞大的怪物用厌恶的眼神盯着你的队伍.黑暗的漩涡围绕着你们,一个声音在你们的脑海中耳语.“又有更多愚蠢的Habitica居民来阻止我了吗?有意思.你们会后悔来到这里的.”这只长满鳞片的巨物抬起了头,回过身来准备攻击.你们的机会来了!尽你们所能,最后一次击败恶习吧!", @@ -80,15 +80,15 @@ "questMoonstone1Text": "故态复萌,第1部:月长石链", "questMoonstone1Notes": "一个可怕的麻烦困扰着Habitica居民。已经消失很久的坏习惯回来复仇了。盘子没有清洗,课本很长时间没有看,拖延症开始猖獗!

你跟踪着你自己的一些归来的坏习惯,来到了淤塞之沼,并发现了这一切的元凶:可怕的死灵巫师,雷茜德维特。你冲了进去,挥舞着你的武器,但是它们都穿过了她幽灵一般的身体,没有造成任何伤害。

“别费劲儿了,”她用粗糙刺耳的声音嘶嘶得说。“没有月长石项链的话,没有什么可以伤害我--而且宝石大师@aurakami很久以前就将月长石分散到了Habitica的各处!”虽然你气喘吁吁的撤退了... 但是你知道你需要做什么。", "questMoonstone1CollectMoonstone": "月长石", - "questMoonstone1Completion": "At last, you manage to pull the final moonstone from the swampy sludge. It’s time to go fashion your collection into a weapon that can finally defeat Recidivate!", + "questMoonstone1Completion": "终于,你设法从沼泽污泥中捞出最后的月石。 现在是时候把你的收集物品变成一件武器来击败雷茜德维特!", "questMoonstone1DropMoonstone2Quest": "故态复萌,第2部:亡灵法师——雷茜德维特(卷轴)", "questMoonstone2Text": "故态复萌,第2部:亡灵法师——雷茜德维特", - "questMoonstone2Notes": "The brave weaponsmith @InspectorCaracal helps you fashion the enchanted moonstones into a chain. You’re ready to confront Recidivate at last, but as you enter the Swamps of Stagnation, a terrible chill sweeps over you.

Rotting breath whispers in your ear. \"Back again? How delightful...\" You spin and lunge, and under the light of the moonstone chain, your weapon strikes solid flesh. \"You may have bound me to the world once more,\" Recidivate snarls, \"but now it is time for you to leave it!\"", + "questMoonstone2Notes": "勇敢的武器铸造师 @检查员Caracal 帮你将附魔的月长石铸造成了一条项链。你现在已经准备好面对雷茜德维特了,但是当你进入淤塞之沼的时候,感觉寒气逼人。

腐朽的气息在你的耳边低语。“又回来了?真令人高兴啊...”你冲向前去,猛地刺出,在月长石项链的光芒下,你的武器击中了她的肉体。“你再次将我与这个世界束缚在了一起,”雷茜德维特咆哮着,“但是这次该是你离开这个世界了!”", "questMoonstone2Boss": "死灵法师", - "questMoonstone2Completion": "Recidivate staggers backwards under your final blow, and for a moment, your heart brightens – but then she throws back her head and lets out a horrible laugh. What’s happening?", + "questMoonstone2Completion": "在你的最后一击下,雷茜德维特向后蹒跚几步,过了一会儿,你的心变得明亮起来 - 但是随后她回头,发出了可怕的笑声。 发生了什么?", "questMoonstone2DropMoonstone3Quest": "故态复萌,第3部:雷茜德维特变形!(卷轴)", "questMoonstone3Text": "故态复萌,第3部:雷茜德维特变形!", - "questMoonstone3Notes": "Laughing wickedly, Recidivate crumples to the ground, and you strike at her again with the moonstone chain. To your horror, Recidivate seizes the gems, eyes burning with triumph.

\"Foolish creature of flesh!\" she shouts. \"These moonstones will restore me to a physical form, true, but not as you imagined. As the full moon waxes from the dark, so too does my power flourish, and from the shadows I summon the specter of your most feared foe!\"

A sickly green fog rises from the swamp, and Recidivate’s body writhes and contorts into a shape that fills you with dread – the undead body of Vice, horribly reborn.", + "questMoonstone3Notes": "雷茜德维特蜷缩在地上邪恶的笑着,你用月长石项链给她致命一击。可怕的事情发生了,她抓住了宝石,眼中闪耀着胜利的火焰。

“愚蠢的生物!”她喊道。“这些月长石的确能够让我回复成物质形态,但是并不像你想象的那样。当满月在黑暗中变圆的时候,我的力量也会变得强大,我从阴影之中召唤了你们最为恐惧的家伙!”

一股浓烈的雾从沼泽中升起,雷茜德维特的身体扭曲变形成了让人恐惧的形状--恶习之龙的不死之身,恐怖的再生了。", "questMoonstone3Completion": "当这不死的巨龙崩溃的时候,你的呼吸变得困难,汗水刺激着你的眼睛。雷茜德维特的残留物消散成了一片稀薄的灰雾,在微风的吹拂下很快散去了,你听到Habitica居民为永远打败了他们的坏习惯而呐喊的声音从四处传来。

驯兽师@Baconsaur骑着狮鹫从天上俯冲而下。“我在天上看到了你最后的战斗,我被深深的感动了。请务必收下这个附魔的束腰上衣--你的勇敢展现了你高贵的心灵,我相信命中注定你要收下它。”", "questMoonstone3Boss": "死者-恶习", "questMoonstone3DropRottenMeat": "腐肉 (食物)", @@ -97,12 +97,12 @@ "questGoldenknight1Text": "黄金骑士,第1部分:一场严肃的谈话", "questGoldenknight1Notes": "黄金骑士得知了可怜的Habitica居民们的情况。你们没有将每日任务全部完成?点击了一个不好的习惯?她会以此为理由来不断的骚扰你,教你怎样追寻她的脚步。她是完美的Habitica居民光辉的榜样,而你只不过是一个失败者。好吧,这一点也不好!所有人都会犯错。那些犯了错的人也不应因此就受到这样的否定。也许现在对你来说正是时候,从受到伤害的Habitica居民们那里收集一些证据,然后和黄金骑士来一场严肃的谈话", "questGoldenknight1CollectTestimony": "证据", - "questGoldenknight1Completion": "Look at all these testimonies! Surely this will be enough to convince the Golden Knight. Now all you need to do is find her.", + "questGoldenknight1Completion": "看看这些全部的证词! 这当然足以说服黄金骑士。 现在你需要做的就是找到她。", "questGoldenknight1DropGoldenknight2Quest": "黄金骑士第2部:黄金骑士 (卷轴)", "questGoldenknight2Text": "黄金骑士,第2部:黄金骑士", "questGoldenknight2Notes": "从无数Habitica居民们那里收集到证据后,你终于站在黄金骑士的面前。你引用Habitica居民们对她的抱怨。“同时@Pfeffernusse 说你不断地炫耀……”骑士举手打断你并嘲笑说:“拜托,这些人只是嫉妒我的成功。他们应该像我这样努力而不是抱怨。或许我该向你展示我靠勤奋获得的力量!”她举起了她的流星锤准备攻击你!", "questGoldenknight2Boss": "黄金骑士", - "questGoldenknight2Completion": "The Golden Knight lowers her Morningstar in consternation. “I apologize for my rash outburst,” she says. “The truth is, it’s painful to think that I’ve been inadvertently hurting others, and it made me lash out in defense… but perhaps I can still apologize?”", + "questGoldenknight2Completion": "黄金骑士惊恐地放低了她的流星锤。 “我为我的鲁莽道歉,”她说。 “事实是,想到我无意中伤害了其他人,这令我感到痛苦,并且使我在防守中大打出手.....但或许我仍然可以道歉?”", "questGoldenknight2DropGoldenknight3Quest": "黄金骑士第3部:钢铁骑士 (卷轴)", "questGoldenknight3Text": "黄金骑士第3部:钢铁骑士", "questGoldenknight3Notes": "@Jon Arinbjorn的向你大喊试图引起你的注意。战斗之余,一个新的人物出现了。一个手中握着剑身上穿着染上黑色血污的铁铠的骑士慢慢地走近了你。黄金骑士对这个人大喊道:“爸爸,不!”但是骑士丝毫没有停止的迹象。她转身对你说:“我很抱歉。我一直是个大傻瓜,我太傲慢了,都不到自己曾有多残忍。但我父亲比过去的我还要残忍得多。如果他不停下来,他就会毁了我们所有人。来吧,拿着我的流星锤去阻止钢铁骑士吧!”", @@ -143,14 +143,14 @@ "questAtom1Notes": "你到了一个洗手池旁好好休息一下……但是洗手池被一堆没洗的盘子污染了!这怎么可以?你当然不能允许它在这种状态。你唯一能做的事情就是:洗掉这些盘子,拯救你的休息区!最好找些肥皂来清洗这团糟。要好多肥皂……", "questAtom1CollectSoapBars": "块肥皂", "questAtom1Drop": "好吃懒做怪(卷轴)", - "questAtom1Completion": "After some thorough scrubbing, all the dishes are stacked safely on the shore! You stand back and proudly survey your hard work.", + "questAtom1Completion": "经过彻底的擦洗后,所有的盘子都安全地堆放在岸边! 你站起来,骄傲地看着你的辛勤工作的成果。", "questAtom2Text": "平凡世界的攻势:卷2:不吃零食的怪兽", "questAtom2Notes": "呼呼,盘子洗掉之后这个地方看起来舒服多了。也许,你终于可以找点乐子休息一下了。喔——那看起来有个披萨饼盒子浮在池子里。好吧,下一个清理一个是什么东西?哎呀,不是一个披萨盒那么简单!那个盒子突然从水里升高,原来是一个怪物的脑袋。不会吧!传说中的好吃懒做怪?据说它自从史前就一直隐藏在池子里:一个从废弃食品和垃圾中召唤出的古老Habit生物。呕!", "questAtom2Boss": "好吃懒做怪", "questAtom2Drop": "洗衣终结者(卷轴)", - "questAtom2Completion": "With a deafening cry, and five delicious types of cheese bursting from its mouth, the Snackless Monster falls to pieces. Well done, brave adventurer! But wait... is there something else wrong with the lake?", + "questAtom2Completion": "随着一声震耳欲聋的呐喊,以及五种美味的奶酪从它的口中喷涌而出,好吃懒做怪摔成碎片。做得好,勇敢的冒险家! 但是等等...湖里还有什么不对吗?", "questAtom3Text": "平凡世界的攻势:,卷3:洗衣终结者", - "questAtom3Notes": "Just when you thought that your trials had ended, Washed-Up Lake begins to froth violently. “HOW DARE YOU!” booms a voice from beneath the water's surface. A robed, blue figure emerges from the water, wielding a magic toilet brush. Filthy laundry begins to bubble up to the surface of the lake. \"I am the Laundromancer!\" he angrily announces. \"You have some nerve - washing my delightfully dirty dishes, destroying my pet, and entering my domain with such clean clothes. Prepare to feel the soggy wrath of my anti-laundry magic!\"", + "questAtom3Notes": "就在你认为你的试验已经结束的时候,洗脑湖开始猛烈地起泡。 “是谁这么大的胆子!”从水面下方传出一个声音。一个穿着蓝色长袍的身影从水中浮现出来,挥舞着一把神奇的马桶刷。 湖的表面开始冒泡,肮脏的衣服漂浮到水面。 “我是洗衣终结者!” 他愤怒地宣告。 “你有点胆量 - 洗了我那可爱的脏盘子,摧毁了我的宠物,然后穿着这么干净的衣服进入我的地盘,准备好感受我反洗衣魔法的潮湿的愤怒吧!”", "questAtom3Completion": "邪恶的洗衣终结者被打败了!干净的衣服从空中飘下,堆在了你们身边。这一切看起来好极了。当你准备穿过这些新熨好的衣服时,一道金属的闪光吸引了你的注意——一个闪闪发光的头盔。已经无法知道这个闪亮的物品的原主人是谁了,但是当你把它带上时,你感觉到他的慷慨带给你的温暖。真可惜,他们忘了把自己的名字缝在边上。", "questAtom3Boss": "洗衣终结者", "questAtom3DropPotion": "普通孵化药水", @@ -295,7 +295,7 @@ "questUnicornDropUnicornEgg": "独角兽(宠物蛋)", "questUnicornUnlockText": "解锁独角兽蛋购买功能", "questSabretoothText": "剑齿猫", - "questSabretoothNotes": "A roaring monster is terrorizing Habitica! The creature stalks through the wilds and woods, then bursts forth to attack before vanishing again. It's been hunting innocent pandas and frightening the flying pigs into fleeing their pens to roost in the trees. @InspectorCaracal and @icefelis explain that the Zombie Sabre Cat was set free while they were excavating in the ancient, untouched ice-fields of the Stoïkalm Steppes. \"It was perfectly friendly at first – I don't know what happened. Please, you have to help us recapture it! Only a champion of Habitica can subdue this prehistoric beast!\"", + "questSabretoothNotes": "咆哮的怪兽让Habitica颤抖!怪兽昂首阔步地走过荒野和森林,在再次消失前爆发出攻击。它在狩猎无辜的熊猫,吓得飞猪逃离它们树上的栖息围栏。 @InspectorCaracal 和 @icefelis 交待他们在古代的Stoikalm草原的冰原挖掘的时候释放了僵尸剑齿猫。“最初,它非常友好 – 我不知道发生了什么。请你一定要帮帮我们再次抓到它!只有Habitica赢家能征服这个史前野兽!”", "questSabretoothCompletion": "长时间艰苦的战斗后,你和僵尸剑齿猫扭打到了地上。在你最终接近的时候,你发现它的剑齿上有一个讨厌的洞。突然你意识到什么导致了猫的愤怒,你能够用 @Fandekasp 补上洞,然后建议每一个人不要在以后给他们的朋友甜食了。剑齿猫猫好起来,出于感激,它的 Cat flourishes送给你一份厚报 – 一组剑齿虎蛋!", "questSabretoothBoss": "僵尸剑齿猫", "questSabretoothDropSabretoothEgg": "剑齿虎(蛋)", @@ -357,7 +357,7 @@ "questArmadilloDropArmadilloEgg": "犰狳(蛋)", "questArmadilloUnlockText": "解锁犰狳蛋购买功能", "questCowText": "变异奶牛", - "questCowNotes": "It’s been a long, hot day at Sparring Farms, and there is nothing more you want than a long sip of water and some sleep. You're standing there daydreaming when @Soloana suddenly screams, \"Everyone run! The prize cow has mootated!\"

@eevachu gulps. \"It must be our bad habits that infected it.\"

\"Quick!\" @Feralem Tau says. \"Let’s do something before the udder cows mootate, too.\"

You’ve herd enough. No more daydreaming -- it's time to get those bad habits under control!", + "questCowNotes": "那是在斯巴英农场中又热又长的一天,除了痛快地喝口水后去睡觉,你再也不想做什么别的了。正当你呆在那里做白日梦的时候,@Soloana突然尖叫起来,“所有人快跑!被捕获的奶牛开始暴动了!”

@eevachu 吞了一口唾沫,“它一定是被我们的坏习惯感染了。”

“快点!”Feralem Tau喊道,“在变异奶牛来临前行动起来!”

你对自己的放羊时间已经够长了,不要再做白日梦了,是时候获取那些坏习惯的控制权了!", "questCowCompletion": "当你的好习惯奶牛一直保持有价值的时候,你从中挤出牛奶, 直到好习惯奶牛回复成它原来的样子。奶牛用它的棕色漂亮的眼睛看着你,并产出三个蛋。

@fuzzytrees 一边笑着将这些蛋交给你,”如果蛋里面有牛宝宝,也许它仍然是变异的。但是我相信你抚养它们的时候,会坚持你的好习惯!”", "questCowBoss": "变异奶牛", "questCowDropCowEgg": "奶牛 (宠物蛋)", @@ -399,7 +399,7 @@ "questFerretDropFerretEgg": "雪貂(宠物蛋)", "questFerretUnlockText": "解锁雪貂蛋购买功能", "questDustBunniesText": "野生的灰尘兔子", - "questDustBunniesNotes": "It's been a while since you've done any dusting in here, but you're not too worried—a little dust never hurt anyone, right? It's not until you stick your hand into one of the dustiest corners and feel something bite that you remember @InspectorCaracal's warning: leaving harmless dust sit too long causes it to turn into vicious dust bunnies! You'd better defeat them before they cover all of Habitica in fine particles of dirt!", + "questDustBunniesNotes": "距离你上次打扫这里已经有一会儿了,但你不是很担心——一点灰尘不会怎么样的,对吧?等你把手伸进其中一个灰尘最多的角落,感受到被什么东西咬了之后,你才想起@InspectorCaracal的警告:在你家寄养的小灰尘兔子感受不到你的关爱,就会变成野生灰尘兔到处乱窜。你最好在所有灰尘兔子野化之前温柔地再次驯养它们!", "questDustBunniesCompletion": "灰尘兔子们消失在……唔,灰尘中。这里干净了,你环顾四周。你一度遗忘这里在干净的时候是多么美好。你在之前灰尘所处的角落找到了一小堆金子。好吧,你都忘了这里之前是放金子的地方!", "questDustBunniesBoss": "野生的灰尘兔子", "questGroupMoon": "月亮之战", @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/zh/settings.json b/website/common/locales/zh/settings.json index 13668701f5..117a786ce0 100644 --- a/website/common/locales/zh/settings.json +++ b/website/common/locales/zh/settings.json @@ -32,7 +32,7 @@ "resetAccPop": "从头再来,移除所有等级,金币,装备,历史和任务。", "deleteAccount": "删除帐户", "deleteAccPop": "取消并移除你的Habitica帐户。", - "feedback": "If you'd like to give us feedback, please enter it below - we'd love to know what you liked or didn't like about Habitica! Don't speak English well? No problem! Use the language you prefer.", + "feedback": "如果您愿意给我们反馈,点击进入下面的链接——我们想要知道关于habitica你喜欢什么又不喜欢什么!英语不好?没关系!用你喜欢的语言就好了。", "qrCode": "QR码", "dataExport": "导出数据", "saveData": "以下是用于保存数据的几个选项。", diff --git a/website/common/locales/zh/spells.json b/website/common/locales/zh/spells.json index 373bccdf79..4614ebcc05 100644 --- a/website/common/locales/zh/spells.json +++ b/website/common/locales/zh/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "把一位好友变成海洋生物", "spellSpecialSandText": "沙子", "spellSpecialSandNotes": "取消海泡石的效果", - "spellNotFound": "找不到技能\"<%= spellId %>\"。", "partyNotFound": "找不到队伍", "targetIdUUID": "\"targetId\" 必须是有效ID。", "challengeTasksNoCast": "不允许在挑战任务上使用技能。", diff --git a/website/common/locales/zh/subscriber.json b/website/common/locales/zh/subscriber.json index 294c4852f0..65f060ea3b 100644 --- a/website/common/locales/zh/subscriber.json +++ b/website/common/locales/zh/subscriber.json @@ -7,7 +7,7 @@ "buyGemsGoldText": "商人亚历山大将以每个20金币的价格卖给你宝石。他的每月发货量最初为每月25个宝石,但你每订阅3个月,这个上限将增加5个,最多每月50宝石!", "mustSubscribeToPurchaseGems": "必须捐赠来用GP购买宝石", "reachedGoldToGemCap": "来自财富女神的提醒,你本月的兑换额度已达到你当前信仰级别的上限 <%= convCap %> ,刚刚的兑换交易已经撤销。该上限用于防止土豪破环游戏平衡,该上限每月的前三个自然日会重置。财富女神与你同在,阿门!", - "reachedGoldToGemCapQuantity": "Your requested amount <%= quantity %> exceeds the Gold=>Gem conversion cap <%= convCap %> for this month. We have this to prevent abuse / farming. The cap resets within the first three days of each month.", + "reachedGoldToGemCapQuantity": "来自财富女神的提醒,您本月要求的兑换数量<%= quantity %>已达到你当前信仰级别的上限 <%= convCap %> 。该上限用于防止土豪破环游戏平衡,该上限每月的前三个自然日会重置。财富女神与你同在!", "retainHistory": "保留额外的历史条目", "retainHistoryText": "使完成的待办事项和任务的历史纪录更长时间保留。", "doubleDrops": "每日任务掉率翻倍!", @@ -142,7 +142,7 @@ "mysterySet201801": "冰霜精灵套装", "mysterySet201802": "爱虫套装", "mysterySet201803": "勇敢蜻蜓套装", - "mysterySet201804": "Spiffy Squirrel Set", + "mysterySet201804": "漂亮的松鼠套装", "mysterySet301404": "蒸汽朋克标准套装", "mysterySet301405": "蒸汽朋克配饰套装", "mysterySet301703": "孔雀蒸汽朋克套装", @@ -175,12 +175,6 @@ "invalidCoupon": "无效的优惠劵代码", "couponUsed": "优惠劵已被使用", "couponCodeRequired": "请填写优惠劵代码", - "eventRequired": "需要 \"req.params.event\"", - "countRequired": "需要 \"req.query.count\"", - "missingPaymentId": "缺少req.query.paymentId", - "missingCustomerId": "缺少Missing req.query.customerId", - "missingPaypalBlock": "缺少req.session.paypalBlock", - "missingSubKey": "缺少req.query.sub", "paypalCanceled": "您的捐赠已取消", "earnGemsMonthly": "每月获得<%= cap %>宝石", "receiveMysticHourglass": "获得一个神秘沙漏!", diff --git a/website/common/locales/zh/tasks.json b/website/common/locales/zh/tasks.json index 5ac5c9c563..2c6d010d89 100644 --- a/website/common/locales/zh/tasks.json +++ b/website/common/locales/zh/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "特殊装备会在世界性事件中出现。", "rewardHelp4": "别害怕,大胆地为自己设置自定义奖励!来这里看看 一些简单例子。", "clickForHelp": "点击获取帮助", - "taskIdRequired": "\"taskId\"必须是一个有效的UUID。", "taskAliasAlreadyUsed": "任务别名已经被用于另一个任务。", "taskNotFound": "找不到任务。", "invalidTaskType": "任务类型必须是\"习惯\",\"每日任务\",\"待办事项\",\"奖励\"中的一个。", @@ -212,5 +211,5 @@ "repeatDayError": "请在一周中至少选择一天", "searchTasks": "搜索标题和描述说明...", "sessionOutdated": "你的会期已过期。请刷新或同步。", - "errorTemporaryItem": "This item is temporary and cannot be pinned." + "errorTemporaryItem": "这件物品是限定的不能被固定。" } \ No newline at end of file diff --git a/website/common/locales/zh_TW/challenge.json b/website/common/locales/zh_TW/challenge.json index 289f45795f..5991dd96a4 100644 --- a/website/common/locales/zh_TW/challenge.json +++ b/website/common/locales/zh_TW/challenge.json @@ -13,6 +13,8 @@ "challengeWinner": "贏得了以下挑戰", "challenges": "挑戰", "challengesLink": "挑戰", + "challengePrize": "Challenge Prize", + "endDate": "Ends", "noChallenges": "還沒有挑戰,探訪", "toCreate": "去建立一個。", "selectWinner": "選一位贏家然後結束挑戰:", @@ -23,7 +25,9 @@ "filter": "篩選", "groups": "群組", "noNone": "全不選", + "category": "Category", "membership": "參與狀態", + "ownership": "Ownership", "participating": "參與中", "notParticipating": "未參與", "either": "都顯示", diff --git a/website/common/locales/zh_TW/character.json b/website/common/locales/zh_TW/character.json index 5bd1544602..d351131c3a 100644 --- a/website/common/locales/zh_TW/character.json +++ b/website/common/locales/zh_TW/character.json @@ -201,7 +201,6 @@ "showQuickAllocation": "Show Stat Allocation", "hideQuickAllocation": "Hide Stat Allocation", "quickAllocationLevelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User Icon > Stats.", - "invalidAttribute": "\"<%= attr %>\" is not a valid Stat.", "notEnoughAttrPoints": "You don't have enough Stat Points.", "style": "樣式", "facialhair": "臉部", @@ -219,6 +218,5 @@ "mainHand": "主手", "offHand": "副手", "pointsAvailable": "可用點數", - "pts": "點", - "statsObjectRequired": "Stats update is required" + "pts": "點" } \ No newline at end of file diff --git a/website/common/locales/zh_TW/contrib.json b/website/common/locales/zh_TW/contrib.json index f494646dd9..277dc1eaaa 100644 --- a/website/common/locales/zh_TW/contrib.json +++ b/website/common/locales/zh_TW/contrib.json @@ -49,7 +49,6 @@ "UUID": "帳戶ID", "loadUser": "載入玩家", "noAdminAccess": "您沒有管理員權限。", - "pageMustBeNumber": "req.query.page 必須是一個數字", "userNotFound": "找不到帳戶。", "invalidUUID": "必須用有效的UUID", "title": "頭銜", diff --git a/website/common/locales/zh_TW/groups.json b/website/common/locales/zh_TW/groups.json index 768ad60e53..50a3c213a8 100644 --- a/website/common/locales/zh_TW/groups.json +++ b/website/common/locales/zh_TW/groups.json @@ -106,16 +106,16 @@ "optionalMessage": "郵件選項", "yesRemove": "是的,移除他", "foreverAlone": "您不能喜歡自己的留言。請別當這種人。", - "sortDateJoinedAsc": "Earliest Date Joined", - "sortDateJoinedDesc": "Latest Date Joined", - "sortLoginAsc": "Earliest Login", - "sortLoginDesc": "Latest Login", - "sortLevelAsc": "Lowest Level", - "sortLevelDesc": "Highest Level", - "sortNameAsc": "Name (A - Z)", - "sortNameDesc": "Name (Z - A)", - "sortTierAsc": "Lowest Tier", - "sortTierDesc": "Highest Tier", + "sortBackground": "Sort by Background", + "sortClass": "Sort by Class", + "sortDateJoined": "Sort by Join Date", + "sortLogin": "Sort by Login Date", + "sortLevel": "Sort by Level", + "sortName": "Sort by Name", + "sortTier": "Sort by Tier", + "ascendingAbbrev": "Asc", + "descendingAbbrev": "Desc", + "applySortToHeader": "Apply Sort Options to Party Header", "confirmGuild": "以4個寶石建立公會?", "leaveGroupCha": "退出公會挑戰並且...", "confirm": "確認", @@ -131,6 +131,10 @@ "clearAll": "刪除所有郵件", "confirmDeleteAllMessages": "你確定要刪除收件箱中的所有郵件?其他用戶仍然會看到你發給他們的郵件。", "optOutPopover": "不喜歡私密留言嗎?點選以更改設定。", + "PMPlaceholderTitle": "Nothing Here Yet", + "PMPlaceholderDescription": "Select a conversation on the left", + "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", + "PMPlaceholderDescriptionRevoked": "You are not able to send private messages because your chat privileges have been revoked. If you have questions or concerns about this, please email admin@habitica.com to discuss it with the staff.", "block": "塊", "unblock": "解除鎖定", "pm-reply": "寄出回覆", @@ -207,7 +211,6 @@ "partyOnName": "龐大隊伍參與", "partyUpText": "Joined a Party with another person! Have fun battling monsters and supporting each other.", "partyOnText": "Joined a Party with at least four people! Enjoy your increased accountability as you unite with your friends to vanquish your foes!", - "groupIdRequired": "\"groupId\" must be a valid UUID", "groupNotFound": "Group not found or you don't have access.", "groupTypesRequired": "You must supply a valid \"type\" query string.", "questLeaderCannotLeaveGroup": "You cannot leave your Party when you have started a quest. Abort the quest first.", @@ -217,8 +220,6 @@ "memberCannotRemoveYourself": "想把你自己移除掉嗎?不可能的!", "groupMemberNotFound": "User not found among group's members", "mustBeGroupMember": "Must be member of the group.", - "keepOrRemoveAll": "req.query.keep must be either \"keep-all\" or \"remove-all\"", - "keepOrRemove": "req.query.keep must be either \"keep\" or \"remove\"", "canOnlyInviteEmailUuid": "只能使用uuid或是email邀請。", "inviteMissingEmail": "Missing email address in invite.", "inviteMissingUuid": "Missing user id in invite", @@ -315,7 +316,7 @@ "approvalsTitle": "Tasks Awaiting Approval", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "When your group completes tasks that need your approval, they'll appear here! Adjust approval requirement settings under task editing.", - "userIsClamingTask": "`<%= username %> has claimed \"<%= task %>\"`", + "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", "approvalRequested": "Approval Requested", "refreshApprovals": "Refresh Approvals", "refreshGroupTasks": "Refresh Group Tasks", @@ -323,7 +324,6 @@ "cantDeleteAssignedGroupTasks": "Can't delete group tasks that are assigned to you.", "confirmGuildPlanCreation": "Create this group?", "onlyGroupLeaderCanInviteToGroupPlan": "Only the group leader can invite users to a group with a subscription.", - "remainOrLeaveChallenges": "req.query.keep must be either 'remain-in-challenges' or 'leave-challenges'", "paymentDetails": "Payment Details", "aboutToJoinCancelledGroupPlan": "You are about to join a group with a canceled plan. You will NOT receive a free subscription.", "cannotChangeLeaderWithActiveGroupPlan": "You can not change the leader while the group has an active plan.", @@ -366,9 +366,11 @@ "recentActivity": "Recent Activity", "myGuilds": "My Guilds", "guildsDiscovery": "Discover Guilds", + "role": "Role", "guildOrPartyLeader": "Leader", "guildLeader": "Guild Leader", "member": "Member", + "guildSize": "Guild Size", "goldTier": "Gold Tier", "silverTier": "Silver Tier", "bronzeTier": "Bronze Tier", diff --git a/website/common/locales/zh_TW/npc.json b/website/common/locales/zh_TW/npc.json index 4f76060cb3..3ebe138d55 100644 --- a/website/common/locales/zh_TW/npc.json +++ b/website/common/locales/zh_TW/npc.json @@ -48,6 +48,7 @@ "featuredItems": "Featured Items!", "hideLocked": "Hide locked", "hidePinned": "Hide pinned", + "hideMissing": "Hide Missing", "amountExperience": "<%= amount %> Experience", "amountGold": "<%= amount %> Gold", "namedHatchingPotion": "<%= type %> Hatching Potion", @@ -74,14 +75,7 @@ "ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!", "ianBrokenText": "歡迎來到任務商店...你可以跟你朋友們在這裡使用任務卷軸打怪...一定要來看看我們右邊販售的精美任務卷軸哦...", "featuredQuests": "Featured Quests!", - "missingKeyParam": "\"req.params.key\" is required.", - "itemNotFound": "找不到物品 \"<%= key %>\"。", "cannotBuyItem": "你不能買這項物品。", - "missingTypeKeyEquip": "\"key\" and \"type\" are required parameters.", - "missingPetFoodFeed": "\"pet\" and \"food\" are required parameters.", - "invalidPetName": "Invalid pet name supplied.", - "missingEggHatchingPotionHatch": "你需要蛋和孵化藥水。", - "invalidTypeEquip": "\"type\" must be one of 'equipped', 'pet', 'mount', 'costume'.", "mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.", "typeRequired": "需要種類", "positiveAmountRequired": "Positive amount is required", diff --git a/website/common/locales/zh_TW/quests.json b/website/common/locales/zh_TW/quests.json index f8dcdeb632..ed924ac3a3 100644 --- a/website/common/locales/zh_TW/quests.json +++ b/website/common/locales/zh_TW/quests.json @@ -96,7 +96,6 @@ "questInvitationDoesNotExist": "尚未發送任何任務邀請。", "questInviteNotFound": "找不到任務邀請。", "guildQuestsNotSupported": "公會不能邀請任務。", - "questNotFound": "找不到任務 \"<%= key %>\"。", "questNotOwned": "你不擁有這件任務卷軸。", "questNotGoldPurchasable": "任務 \"<%= key %>\" 不是可用金幣購買的任務。", "questLevelTooHigh": "你必須達到等級 <%= level %> 才能開始這個任務。", diff --git a/website/common/locales/zh_TW/questscontent.json b/website/common/locales/zh_TW/questscontent.json index 85ea1fafda..094e7dafa8 100644 --- a/website/common/locales/zh_TW/questscontent.json +++ b/website/common/locales/zh_TW/questscontent.json @@ -600,5 +600,7 @@ "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market" + "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", + "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31." } \ No newline at end of file diff --git a/website/common/locales/zh_TW/spells.json b/website/common/locales/zh_TW/spells.json index 7a40ab07f4..cc246b84fe 100644 --- a/website/common/locales/zh_TW/spells.json +++ b/website/common/locales/zh_TW/spells.json @@ -51,7 +51,6 @@ "spellSpecialSeafoamNotes": "把朋友變成海洋生物!", "spellSpecialSandText": "沙子", "spellSpecialSandNotes": "Reverse the spell that made you a sea star.", - "spellNotFound": "找不到技能 \"<%= spellId %>\"。", "partyNotFound": "找不到隊伍。", "targetIdUUID": "\"targetId\"必須是有效的UUID。", "challengeTasksNoCast": "你無法在挑戰任務上使用技能。", diff --git a/website/common/locales/zh_TW/subscriber.json b/website/common/locales/zh_TW/subscriber.json index 23579af420..3b2a4cf75f 100644 --- a/website/common/locales/zh_TW/subscriber.json +++ b/website/common/locales/zh_TW/subscriber.json @@ -175,12 +175,6 @@ "invalidCoupon": "Invalid coupon code.", "couponUsed": "Coupon code already used.", "couponCodeRequired": "The coupon code is required.", - "eventRequired": "需要\"req.params.event\"", - "countRequired": "\"req.query.count\" is required.", - "missingPaymentId": "Missing req.query.paymentId", - "missingCustomerId": "Missing req.query.customerId", - "missingPaypalBlock": "Missing req.session.paypalBlock", - "missingSubKey": "Missing req.query.sub", "paypalCanceled": "Your subscription has been canceled", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "receiveMysticHourglass": "Receive a Mystic Hourglass!", diff --git a/website/common/locales/zh_TW/tasks.json b/website/common/locales/zh_TW/tasks.json index b0290e949f..b5dddebc9e 100644 --- a/website/common/locales/zh_TW/tasks.json +++ b/website/common/locales/zh_TW/tasks.json @@ -145,7 +145,6 @@ "rewardHelp3": "在世界事件發生時,特殊的裝備會出現。", "rewardHelp4": "不知道要怎麼自訂獎勵嗎? 點擊這裡有一些參考範例。", "clickForHelp": "點選獲得協助", - "taskIdRequired": "\"taskld\" 必須是有效的UUID", "taskAliasAlreadyUsed": "這個任務的別名已經被其他任務使用了。", "taskNotFound": "找不到任務。", "invalidTaskType": "任務的類型必須屬於「習慣」、「每日任務」、「代辦事項」或是「獎勵」的其中一種。", diff --git a/website/common/script/content/hatching-potions.js b/website/common/script/content/hatching-potions.js index a35ebde7f3..6403ccdfce 100644 --- a/website/common/script/content/hatching-potions.js +++ b/website/common/script/content/hatching-potions.js @@ -3,7 +3,7 @@ import defaults from 'lodash/defaults'; import each from 'lodash/each'; import t from './translation'; -const CURRENT_SEASON = 'March'; +const CURRENT_SEASON = 'May'; let drops = { Base: { diff --git a/website/common/script/content/index.js b/website/common/script/content/index.js index caea8c8914..505b4996d4 100644 --- a/website/common/script/content/index.js +++ b/website/common/script/content/index.js @@ -152,6 +152,21 @@ api.bundles = { type: 'quests', value: 7, }, + cuddleBuddies: { + key: 'cuddleBuddies', + text: t('cuddleBuddiesText'), + notes: t('cuddleBuddiesNotes'), + bundleKeys: [ + 'bunny', + 'ferret', + 'guineapig', + ], + canBuy () { + return moment().isBetween('2018-05-08', '2018-06-02'); + }, + type: 'quests', + value: 7, + }, }; /* diff --git a/website/common/script/content/shop-featuredItems.js b/website/common/script/content/shop-featuredItems.js index 2cab7818a1..7d6017a9b3 100644 --- a/website/common/script/content/shop-featuredItems.js +++ b/website/common/script/content/shop-featuredItems.js @@ -12,8 +12,8 @@ const featuredItems = { path: 'hatchingPotions.Red', }, { - type: 'hatchingPotions', - path: 'hatchingPotions.Golden', + type: 'premiumHatchingPotion', + path: 'premiumHatchingPotions.Fairy', }, { type: 'card', @@ -31,7 +31,11 @@ const featuredItems = { }, { type: 'quests', - path: 'quests.bunny', + path: 'quests.butterfly', + }, + { + type: 'bundles', + path: 'bundles.cuddleBuddies', }, ], seasonal: '', diff --git a/website/common/script/fns/updateStats.js b/website/common/script/fns/updateStats.js index 0538ec3805..65d466f1b0 100644 --- a/website/common/script/fns/updateStats.js +++ b/website/common/script/fns/updateStats.js @@ -51,8 +51,8 @@ module.exports = function updateStats (user, stats, req = {}, analytics) { } const newLvl = user.stats.lvl; - - if (user.addNotification) user.addNotification('LEVELED_UP', { + if (!user._tmp.leveledUp) user._tmp.leveledUp = []; + user._tmp.leveledUp.push({ initialLvl, newLvl, }); diff --git a/website/common/script/ops/buy/buy.js b/website/common/script/ops/buy/buy.js index e3cb62bdca..9bcee0706e 100644 --- a/website/common/script/ops/buy/buy.js +++ b/website/common/script/ops/buy/buy.js @@ -7,7 +7,7 @@ import {BuyHealthPotionOperation} from './buyHealthPotion'; import {BuyMarketGearOperation} from './buyMarketGear'; import buyMysterySet from './buyMysterySet'; import {BuyQuestWithGoldOperation} from './buyQuest'; -import buySpecialSpell from './buySpecialSpell'; +import {BuySpellOperation} from './buySpell'; import purchaseOp from './purchase'; import hourglassPurchase from './hourglassPurchase'; import errorMessage from '../../libs/errorMessage'; @@ -70,9 +70,12 @@ module.exports = function buy (user, req = {}, analytics) { buyRes = buyOp.purchase(); break; } - case 'special': - buyRes = buySpecialSpell(user, req, analytics); + case 'special': { + const buyOp = new BuySpellOperation(user, req, analytics); + + buyRes = buyOp.purchase(); break; + } default: { const buyOp = new BuyMarketGearOperation(user, req, analytics); diff --git a/website/common/script/ops/buy/buyGem.js b/website/common/script/ops/buy/buyGem.js index 806b0cbc5c..9655537d42 100644 --- a/website/common/script/ops/buy/buyGem.js +++ b/website/common/script/ops/buy/buyGem.js @@ -49,7 +49,7 @@ export class BuyGemOperation extends AbstractGoldItemOperation { throw new NotAuthorized(this.i18n('reachedGoldToGemCap', {convCap: this.convCap})); } - if (user.purchased.plan.gemsBought + this.quantity >= this.convCap) { + if (user.purchased.plan.gemsBought + this.quantity > this.convCap) { throw new NotAuthorized(this.i18n('reachedGoldToGemCapQuantity', { convCap: this.convCap, quantity: this.quantity, diff --git a/website/common/script/ops/buy/buyQuest.js b/website/common/script/ops/buy/buyQuest.js index b7e9f783b9..1fd60949fd 100644 --- a/website/common/script/ops/buy/buyQuest.js +++ b/website/common/script/ops/buy/buyQuest.js @@ -25,6 +25,10 @@ export class BuyQuestWithGoldOperation extends AbstractGoldItemOperation { user.achievements.quests.taskwoodsTerror3; } + getItemKey () { + return this.key; + } + getItemValue (item) { return item.goldValue; } @@ -61,13 +65,4 @@ export class BuyQuestWithGoldOperation extends AbstractGoldItemOperation { }), ]; } - - analyticsData () { - return { - itemKey: this.key, - itemType: 'Market', - acquireMethod: 'Gold', - goldCost: this.getItemValue(this.item.goldValue), - }; - } } diff --git a/website/common/script/ops/buy/buySpecialSpell.js b/website/common/script/ops/buy/buySpecialSpell.js deleted file mode 100644 index d63638acfd..0000000000 --- a/website/common/script/ops/buy/buySpecialSpell.js +++ /dev/null @@ -1,48 +0,0 @@ -import i18n from '../../i18n'; -import content from '../../content/index'; -import get from 'lodash/get'; -import pick from 'lodash/pick'; -import splitWhitespace from '../../libs/splitWhitespace'; -import { - BadRequest, - NotAuthorized, - NotFound, -} from '../../libs/errors'; -import errorMessage from '../../libs/errorMessage'; - -module.exports = function buySpecialSpell (user, req = {}, analytics) { - let key = get(req, 'params.key'); - let quantity = req.quantity || 1; - - if (!key) throw new BadRequest(errorMessage('missingKeyParam')); - - let item = content.special[key]; - if (!item) throw new NotFound(errorMessage('spellNotFound', {spellId: key})); - - if (user.stats.gp < item.value * quantity) { - throw new NotAuthorized(i18n.t('messageNotEnoughGold', req.language)); - } - user.stats.gp -= item.value * quantity; - - user.items.special[key] += quantity; - - if (analytics) { - analytics.track('acquire item', { - uuid: user._id, - itemKey: item.key, - itemType: 'Market', - goldCost: item.goldValue, - quantityPurchased: quantity, - acquireMethod: 'Gold', - category: 'behavior', - headers: req.headers, - }); - } - - return [ - pick(user, splitWhitespace('items stats')), - i18n.t('messageBought', { - itemText: item.text(req.language), - }, req.language), - ]; -}; diff --git a/website/common/script/ops/buy/buySpell.js b/website/common/script/ops/buy/buySpell.js new file mode 100644 index 0000000000..2a26d0defb --- /dev/null +++ b/website/common/script/ops/buy/buySpell.js @@ -0,0 +1,47 @@ +import content from '../../content/index'; +import get from 'lodash/get'; +import pick from 'lodash/pick'; +import splitWhitespace from '../../libs/splitWhitespace'; +import { + BadRequest, + NotFound, +} from '../../libs/errors'; +import {AbstractGoldItemOperation} from './abstractBuyOperation'; +import errorMessage from '../../libs/errorMessage'; + +export class BuySpellOperation extends AbstractGoldItemOperation { + constructor (user, req, analytics) { + super(user, req, analytics); + } + + getItemKey () { + return this.key; + } + + multiplePurchaseAllowed () { + return true; + } + + extractAndValidateParams (user, req) { + let key = this.key = get(req, 'params.key'); + if (!key) throw new BadRequest(errorMessage('missingKeyParam')); + + let item = content.special[key]; + if (!item) throw new NotFound(errorMessage('spellNotFound', {spellId: key})); + + this.canUserPurchase(user, item); + } + + executeChanges (user, item, req) { + user.items.special[item.key] += this.quantity; + + this.subtractCurrency(user, item, this.quantity); + + return [ + pick(user, splitWhitespace('items stats')), + this.i18n('messageBought', { + itemText: item.text(req.language), + }), + ]; + } +} diff --git a/website/common/script/ops/buy/purchaseWithSpell.js b/website/common/script/ops/buy/purchaseWithSpell.js deleted file mode 100644 index 7f0a087190..0000000000 --- a/website/common/script/ops/buy/purchaseWithSpell.js +++ /dev/null @@ -1,12 +0,0 @@ -import buy from './buy'; -import get from 'lodash/get'; - -module.exports = function purchaseWithSpell (user, req = {}, analytics) { - const type = get(req.params, 'type'); - - if (type === 'spells') { - req.type = 'special'; - } - - return buy(user, req, analytics); -}; diff --git a/website/raw_sprites/spritesmith/quests/scrolls/quest_bundle_cuddleBuddies.png b/website/raw_sprites/spritesmith/quests/scrolls/quest_bundle_cuddleBuddies.png new file mode 100644 index 0000000000..6deac3fe46 Binary files /dev/null and b/website/raw_sprites/spritesmith/quests/scrolls/quest_bundle_cuddleBuddies.png differ diff --git a/website/raw_sprites/spritesmith_large/promo_bundle_cuddleBuddies.png b/website/raw_sprites/spritesmith_large/promo_bundle_cuddleBuddies.png new file mode 100644 index 0000000000..022d29a12c Binary files /dev/null and b/website/raw_sprites/spritesmith_large/promo_bundle_cuddleBuddies.png differ diff --git a/website/raw_sprites/spritesmith_large/promo_fairy_potions.png b/website/raw_sprites/spritesmith_large/promo_fairy_potions.png new file mode 100644 index 0000000000..233c65b781 Binary files /dev/null and b/website/raw_sprites/spritesmith_large/promo_fairy_potions.png differ diff --git a/website/raw_sprites/spritesmith_large/promo_rainbow_potions.png b/website/raw_sprites/spritesmith_large/promo_rainbow_potions.png deleted file mode 100644 index 608376927e..0000000000 Binary files a/website/raw_sprites/spritesmith_large/promo_rainbow_potions.png and /dev/null differ diff --git a/website/raw_sprites/spritesmith_large/promo_seasonalshop_spring.png b/website/raw_sprites/spritesmith_large/promo_seasonalshop_spring.png deleted file mode 100644 index e1f811893e..0000000000 Binary files a/website/raw_sprites/spritesmith_large/promo_seasonalshop_spring.png and /dev/null differ diff --git a/website/raw_sprites/spritesmith_large/promo_shimmer_pastel.png b/website/raw_sprites/spritesmith_large/promo_shimmer_pastel.png deleted file mode 100644 index a3065aa061..0000000000 Binary files a/website/raw_sprites/spritesmith_large/promo_shimmer_pastel.png and /dev/null differ diff --git a/website/raw_sprites/spritesmith_large/promo_shiny_seeds.png b/website/raw_sprites/spritesmith_large/promo_shiny_seeds.png deleted file mode 100644 index aa813dbe51..0000000000 Binary files a/website/raw_sprites/spritesmith_large/promo_shiny_seeds.png and /dev/null differ diff --git a/website/raw_sprites/spritesmith_large/promo_spring_fling_2018.png b/website/raw_sprites/spritesmith_large/promo_spring_fling_2018.png deleted file mode 100644 index 6a172abe39..0000000000 Binary files a/website/raw_sprites/spritesmith_large/promo_spring_fling_2018.png and /dev/null differ diff --git a/website/raw_sprites/spritesmith_large/scene_casting_spells.png b/website/raw_sprites/spritesmith_large/scene_casting_spells.png new file mode 100644 index 0000000000..d94cf31d51 Binary files /dev/null and b/website/raw_sprites/spritesmith_large/scene_casting_spells.png differ diff --git a/website/raw_sprites/spritesmith_large/scene_meditation.png b/website/raw_sprites/spritesmith_large/scene_meditation.png new file mode 100644 index 0000000000..f204f232ab Binary files /dev/null and b/website/raw_sprites/spritesmith_large/scene_meditation.png differ diff --git a/website/raw_sprites/spritesmith_large/scene_positivity.png b/website/raw_sprites/spritesmith_large/scene_positivity.png deleted file mode 100644 index e5268b8fb3..0000000000 Binary files a/website/raw_sprites/spritesmith_large/scene_positivity.png and /dev/null differ diff --git a/website/raw_sprites/spritesmith_large/scene_todos.png b/website/raw_sprites/spritesmith_large/scene_todos.png deleted file mode 100644 index b8c52d399d..0000000000 Binary files a/website/raw_sprites/spritesmith_large/scene_todos.png and /dev/null differ diff --git a/website/raw_sprites/spritesmith_large/scene_video_games.png b/website/raw_sprites/spritesmith_large/scene_video_games.png deleted file mode 100644 index e3157bc950..0000000000 Binary files a/website/raw_sprites/spritesmith_large/scene_video_games.png and /dev/null differ diff --git a/website/server/controllers/api-v3/news.js b/website/server/controllers/api-v3/news.js index ede8ad7ace..dfe71e4aa7 100644 --- a/website/server/controllers/api-v3/news.js +++ b/website/server/controllers/api-v3/news.js @@ -3,7 +3,7 @@ import { authWithHeaders } from '../../middlewares/auth'; let api = {}; // @TODO export this const, cannot export it from here because only routes are exported from controllers -const LAST_ANNOUNCEMENT_TITLE = 'NEW BACKGROUNDS, ARMOIRE ITEMS, AND OFFICIAL HABITICA CHALLENGES FOR MAY'; +const LAST_ANNOUNCEMENT_TITLE = 'FAIRY HATCHING POTIONS RETURN!'; const worldDmg = { // @TODO bailey: false, }; @@ -32,34 +32,12 @@ api.getNews = {

${res.t('newStuff')}

-

5/1/2018 - ${LAST_ANNOUNCEMENT_TITLE}

+

5/15/2018 - ${LAST_ANNOUNCEMENT_TITLE}


-
-
-

New Backgrounds and Armoire Items

-

We’ve added three new backgrounds to the Background Shop! Now your avatar can tiptoe through a Terraced Rice Field, bask in the glory of the Champions' Colosseum, and look for fun new footwear in the Fantastical Shoe Store. Check them out under User Icon > Backgrounds!

-

Plus, there’s new gold-purchasable equipment in the Enchanted Armoire, including the Cobbler Set. Better work hard on your real-life tasks to earn all the pieces! Enjoy :)

-
by Katy133, confusus, TheMushroomKing, khdarkwolf, RandomGryffindor, ChimeraLiani, and Mewrose
-
-
-
-

May 2018 Resolution Success Challenge and Take This Challenge

-

The Habitica team has launched a special official Challenge series hosted in the Official New Year's Resolution Guild. These Challenges are designed to help you build and maintain goals that are destined for success and then stick with them as the year progresses. For this month's Challenge, Review your Combat Tactics, we're focusing on refining your strategy to help you stay motivated and keep moving forward as we're almost halfway through the year! It has a 15 gem prize, which will be awarded to five lucky winners on June 1st.

-
-
-
-
-
-

Congratulations to the winners of the April Challenge: V-Starr, Carlos Víquez, lilliburlero, NowyChris, and PizzaMyHeart!

-
-
-

The next Take This Challenge has also launched, "Keep Calm and Carry On!", with a focus on deep breathing to settle stressful emotions. Be sure to check it out to earn additional pieces of the Take This armor set!

-

Take This is a nonprofit that seeks to inform the gamer community about mental health issues, to provide education about mental disorders and mental illness prevention, and to reduce the stigma of mental illness.

-
-
-
-

Congratulations to the winners of the last Take This Challenge, "Test Thy Courage!": grand prize winner Nietos, and runners-up Teslectrik, Mflute, Kolthar, lilyandrosemary, and thewandererrae! Plus, all participants in that Challenge have received a piece of the Take This item set if they didn't have all the pieces already. It is located in your Rewards column. Enjoy!

-
by Doctor B, the Take This team, Lemoness, Beffymaroo, and SabreCat
+

They're back! Between now and May 31, you can buy Fairy Hatching Potions from the Market and use them to hatch any standard pet egg. (Magic Hatching Potions do not work on Quest Pet eggs.) Fairy Potion Pets aren't picky, so they'll happily eat any kind of food that you feed them!

+

After they're gone, it will be at least a year before the Fairy Hatching Potions are available again, so be sure to get them now!

+
by Edge, Willow the Witty, and SabreCat
+
`, }); diff --git a/website/server/controllers/api-v3/user.js b/website/server/controllers/api-v3/user.js index a51da7602d..e987721c11 100644 --- a/website/server/controllers/api-v3/user.js +++ b/website/server/controllers/api-v3/user.js @@ -948,12 +948,12 @@ api.hatch = { }; /** - * @api {post} /api/v3/user/equip/:type/:key Equip an item + * @api {post} /api/v3/user/equip/:type/:key Equip or unequip an item * @apiName UserEquip * @apiGroup User * - * @apiParam (Path) {String="mount","pet","costume","equipped"} type The type of item to equip - * @apiParam (Path) {String} key The item to equip + * @apiParam (Path) {String="mount","pet","costume","equipped"} type The type of item to equip or unequip + * @apiParam (Path) {String} key The item to equip or unequip * * @apiParamExample {URL} Example-URL * https://habitica.com/api/v3/user/equip/equipped/weapon_warrior_2 diff --git a/website/server/libs/payments/gems.js b/website/server/libs/payments/gems.js new file mode 100644 index 0000000000..7e0bfa6c51 --- /dev/null +++ b/website/server/libs/payments/gems.js @@ -0,0 +1,97 @@ +import analytics from '../analyticsService'; +import { + getUserInfo, + sendTxn as txnEmail, +} from '../email'; +import { sendNotification as sendPushNotification } from '../pushNotifications'; +import shared from '../../../common'; + +function getGiftMessage (data, byUsername, gemAmount, language) { + const senderMsg = shared.i18n.t('giftedGemsFull', { + username: data.gift.member.profile.name, + sender: byUsername, + gemAmount, + }, language); + + const quotedMessage = `\`${senderMsg}\``; + + if (data.gift.message) return `${quotedMessage} ${data.gift.message}`; + + return quotedMessage; +} + +async function buyGemGift (data) { + const byUsername = getUserInfo(data.user, ['name']).name; + const gemAmount = data.gift.gems.amount || 20; + + const languages = [data.user.preferences.language, data.gift.member.preferences.language]; + + const senderMsg = getGiftMessage(data, byUsername, gemAmount, languages[0]); + const receiverMsg = getGiftMessage(data, byUsername, gemAmount, languages[1]); + data.user.sendMessage(data.gift.member, { receiverMsg, senderMsg }); + + if (data.gift.member.preferences.emailNotifications.giftedGems !== false) { + txnEmail(data.gift.member, 'gifted-gems', [ + {name: 'GIFTER', content: byUsername}, + {name: 'X_GEMS_GIFTED', content: gemAmount}, + ]); + } + + // Only send push notifications if sending to a user other than yourself + if (data.gift.member._id !== data.user._id && data.gift.member.preferences.pushNotifications.giftedGems !== false) { + sendPushNotification( + data.gift.member, + { + title: shared.i18n.t('giftedGems', languages[1]), + message: shared.i18n.t('giftedGemsInfo', {amount: gemAmount, name: byUsername}, languages[1]), + identifier: 'giftedGems', + } + ); + } + + await data.gift.member.save(); +} + +function getAmountForGems (data) { + const amount = data.amount || 5; + + if (data.gift) return data.gift.gems.amount / 4; + + return amount; +} + +function updateUserBalance (data, amount) { + if (data.gift) { + data.gift.member.balance += amount; + return; + } + + data.user.balance += amount; +} + +async function buyGems (data) { + const amt = getAmountForGems(data); + + updateUserBalance(data, amt); + data.user.purchased.txnCount++; + + if (!data.gift) txnEmail(data.user, 'donation'); + + analytics.trackPurchase({ + uuid: data.user._id, + itemPurchased: 'Gems', + sku: `${data.paymentMethod.toLowerCase()}-checkout`, + purchaseType: 'checkout', + paymentMethod: data.paymentMethod, + quantity: 1, + gift: Boolean(data.gift), + purchaseValue: amt, + headers: data.headers, + }); + + if (data.gift) await buyGemGift(data); + + await data.user.save(); +} + +module.exports = { buyGems }; diff --git a/website/server/libs/payments/groupPayments.js b/website/server/libs/payments/groupPayments.js new file mode 100644 index 0000000000..539200fe55 --- /dev/null +++ b/website/server/libs/payments/groupPayments.js @@ -0,0 +1,242 @@ +import nconf from 'nconf'; +import _ from 'lodash'; +import moment from 'moment'; + +import { model as User } from '../../models/user'; +import { + model as Group, + basicFields as basicGroupFields, +} from '../../models/group'; +import { + getUserInfo, + sendTxn as txnEmail, +} from '../email'; + +const TECH_ASSISTANCE_EMAIL = nconf.get('EMAILS:TECH_ASSISTANCE_EMAIL'); +const JOINED_GROUP_PLAN = 'joined group plan'; + +function _dateDiff (earlyDate, lateDate) { + if (!earlyDate || !lateDate || moment(lateDate).isBefore(earlyDate)) return 0; + + return moment(lateDate).diff(earlyDate, 'months', true); +} + +/** + * Add a subscription to members of a group + * + * @param group The Group Model that is subscribed to a group plan + * + * @return undefined + */ +async function addSubscriptionToGroupUsers (group) { + let members; + if (group.type === 'guild') { + members = await User.find({guilds: group._id}).select('_id purchased items auth profile.name notifications').exec(); + } else { + members = await User.find({'party._id': group._id}).select('_id purchased items auth profile.name notifications').exec(); + } + + let promises = members.map((member) => { + return this.addSubToGroupUser(member, group); + }); + + await Promise.all(promises); +} + +/** + * Add a subscription to a new member of a group + * + * @param member The new member of the group + * + * @return undefined + */ +async function addSubToGroupUser (member, group) { + // These EMAIL_TEMPLATE constants are used to pass strings into templates that are + // stored externally and so their values must not be changed. + const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_GOOGLE = 'Google_subscription'; + const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_IOS = 'iOS_subscription'; + const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_GROUP_PLAN = 'group_plan_free_subscription'; + const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_LIFETIME_FREE = 'lifetime_free_subscription'; + const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NORMAL = 'normal_subscription'; + const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_UNKNOWN = 'unknown_type_of_subscription'; + const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NONE = 'no_subscription'; + + // When changing customerIdsToIgnore or paymentMethodsToIgnore, the code blocks below for + // the `group-member-join` email template will probably need to be changed. + let customerIdsToIgnore = [this.constants.GROUP_PLAN_CUSTOMER_ID, this.constants.UNLIMITED_CUSTOMER_ID]; + let paymentMethodsToIgnore = [this.constants.GOOGLE_PAYMENT_METHOD, this.constants.IOS_PAYMENT_METHOD]; + let previousSubscriptionType = EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NONE; + let leader = await User.findById(group.leader).exec(); + + let data = { + user: {}, + sub: { + key: 'group_plan_auto', + }, + customerId: 'group-plan', + paymentMethod: 'Group Plan', + headers: {}, + }; + + let plan = { + planId: 'group_plan_auto', + customerId: 'group-plan', + dateUpdated: new Date(), + gemsBought: 0, + paymentMethod: 'groupPlan', + extraMonths: 0, + dateTerminated: null, + lastBillingDate: null, + dateCreated: new Date(), + mysteryItems: [], + consecutive: { + trinkets: 0, + offset: 0, + gemCapExtra: 0, + }, + }; + + let memberPlan = member.purchased.plan; + if (member.isSubscribed()) { + let customerHasCancelledGroupPlan = memberPlan.customerId === this.constants.GROUP_PLAN_CUSTOMER_ID && !member.hasNotCancelled(); + let ignorePaymentPlan = paymentMethodsToIgnore.indexOf(memberPlan.paymentMethod) !== -1; + let ignoreCustomerId = customerIdsToIgnore.indexOf(memberPlan.customerId) !== -1; + + if (ignorePaymentPlan) { + txnEmail({email: TECH_ASSISTANCE_EMAIL}, 'admin-user-subscription-details', [ + {name: 'PROFILE_NAME', content: member.profile.name}, + {name: 'UUID', content: member._id}, + {name: 'EMAIL', content: getUserInfo(member, ['email']).email}, + {name: 'PAYMENT_METHOD', content: memberPlan.paymentMethod}, + {name: 'PURCHASED_PLAN', content: JSON.stringify(memberPlan)}, + {name: 'ACTION_NEEDED', content: 'User has joined group plan and has been told to cancel their subscription then email us. Ensure they do that then give them free sub.'}, + // TODO User won't get email instructions if they've opted out of all emails. See if we can make this email an exception and if not, report here whether they've opted out. + ]); + } + + if ((ignorePaymentPlan || ignoreCustomerId) && !customerHasCancelledGroupPlan) { + // member has been added to group plan but their subscription will not be changed + // automatically so they need a special message in the email + if (memberPlan.paymentMethod === this.constants.GOOGLE_PAYMENT_METHOD) { + previousSubscriptionType = EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_GOOGLE; + } else if (memberPlan.paymentMethod === this.constants.IOS_PAYMENT_METHOD) { + previousSubscriptionType = EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_IOS; + } else if (memberPlan.customerId === this.constants.UNLIMITED_CUSTOMER_ID) { + previousSubscriptionType = EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_LIFETIME_FREE; + } else if (memberPlan.customerId === this.constants.GROUP_PLAN_CUSTOMER_ID) { + previousSubscriptionType = EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_GROUP_PLAN; + } else { + // this triggers a generic message in the email template in case we forget + // to update this code for new special cases + previousSubscriptionType = EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_UNKNOWN; + } + txnEmail(member, 'group-member-join', [ + {name: 'LEADER', content: leader.profile.name}, + {name: 'GROUP_NAME', content: group.name}, + {name: 'PREVIOUS_SUBSCRIPTION_TYPE', content: previousSubscriptionType}, + ]); + return; + } + + if (member.hasNotCancelled()) { + await member.cancelSubscription({cancellationReason: JOINED_GROUP_PLAN}); + previousSubscriptionType = EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NORMAL; + } + + let today = new Date(); + plan = member.purchased.plan.toObject(); + let extraMonths = Number(plan.extraMonths); + if (plan.dateTerminated) extraMonths += _dateDiff(today, plan.dateTerminated); + + _(plan).merge({ // override with these values + planId: 'group_plan_auto', + customerId: 'group-plan', + dateUpdated: today, + paymentMethod: 'groupPlan', + extraMonths, + dateTerminated: null, + lastBillingDate: null, + owner: member._id, + }).defaults({ // allow non-override if a plan was previously used + gemsBought: 0, + dateCreated: today, + mysteryItems: [], + }).value(); + } + + // save unused hourglass and mystery items + plan.consecutive.trinkets = memberPlan.consecutive.trinkets; + plan.mysteryItems = memberPlan.mysteryItems; + + member.purchased.plan = plan; + member.items.mounts['Jackalope-RoyalPurple'] = true; + + data.user = member; + await this.createSubscription(data); + + txnEmail(data.user, 'group-member-join', [ + {name: 'LEADER', content: leader.profile.name}, + {name: 'GROUP_NAME', content: group.name}, + {name: 'PREVIOUS_SUBSCRIPTION_TYPE', content: previousSubscriptionType}, + ]); +} + +/** + * Cancels subscriptions of members of a group + * + * @param group The Group Model that is cancelling a group plan + * + * @return undefined + */ +async function cancelGroupUsersSubscription (group) { + let members; + if (group.type === 'guild') { + members = await User.find({guilds: group._id}).select('_id guilds purchased').exec(); + } else { + members = await User.find({'party._id': group._id}).select('_id guilds purchased').exec(); + } + + let promises = members.map((member) => { + return this.cancelGroupSubscriptionForUser(member, group); + }); + + await Promise.all(promises); +} + +async function cancelGroupSubscriptionForUser (user, group, userWasRemoved = false) { + if (user.purchased.plan.customerId !== this.constants.GROUP_PLAN_CUSTOMER_ID) return; + + let userGroups = user.guilds.toObject(); + userGroups.push('party'); + + let index = userGroups.indexOf(group._id); + userGroups.splice(index, 1); + + let groupPlansQuery = { + type: {$in: ['guild', 'party']}, + // privacy: 'private', + _id: {$in: userGroups}, + 'purchased.plan.dateTerminated': null, + }; + + let groupFields = `${basicGroupFields} purchased`; + let userGroupPlans = await Group.find(groupPlansQuery).select(groupFields).exec(); + + if (userGroupPlans.length === 0) { + let leader = await User.findById(group.leader).exec(); + const email = userWasRemoved ? 'group-member-removed' : 'group-member-cancel'; + + txnEmail(user, email, [ + {name: 'LEADER', content: leader.profile.name}, + {name: 'GROUP_NAME', content: group.name}, + ]); + await this.cancelSubscription({user}); + } +} + +module.exports = { + addSubscriptionToGroupUsers, + addSubToGroupUser, + cancelGroupUsersSubscription, + cancelGroupSubscriptionForUser, +}; diff --git a/website/server/libs/payments/payments.js b/website/server/libs/payments/payments.js index ecc790c468..da3e189d70 100644 --- a/website/server/libs/payments/payments.js +++ b/website/server/libs/payments/payments.js @@ -1,26 +1,16 @@ -import _ from 'lodash'; -import nconf from 'nconf'; -import analytics from '../analyticsService'; import { - getUserInfo, - sendTxn as txnEmail, -} from '../email'; -import moment from 'moment'; -import { sendNotification as sendPushNotification } from '../pushNotifications'; -import shared from '../../../common'; + addSubscriptionToGroupUsers, + addSubToGroupUser, + cancelGroupUsersSubscription, + cancelGroupSubscriptionForUser, +} from './groupPayments'; import { - model as Group, - basicFields as basicGroupFields, -} from '../../models/group'; -import { model as User } from '../../models/user'; + createSubscription, + cancelSubscription, +} from './subscriptions'; import { - NotAuthorized, - NotFound, -} from '../errors'; -import slack from '../slack'; - -const TECH_ASSISTANCE_EMAIL = nconf.get('EMAILS:TECH_ASSISTANCE_EMAIL'); -const JOINED_GROUP_PLAN = 'joined group plan'; + buyGems, +} from './gems'; let api = {}; @@ -32,586 +22,18 @@ api.constants = { IOS_PAYMENT_METHOD: 'Apple', }; -function revealMysteryItems (user) { - const pushedItems = []; +api.addSubscriptionToGroupUsers = addSubscriptionToGroupUsers; - _.each(shared.content.gear.flat, function findMysteryItems (item) { - if ( - item.klass === 'mystery' && - moment().isAfter(shared.content.mystery[item.mystery].start) && - moment().isBefore(shared.content.mystery[item.mystery].end) && - !user.items.gear.owned[item.key] && - user.purchased.plan.mysteryItems.indexOf(item.key) === -1 - ) { - user.purchased.plan.mysteryItems.push(item.key); - pushedItems.push(item.key); - } - }); +api.addSubToGroupUser = addSubToGroupUser; - user.addNotification('NEW_MYSTERY_ITEMS', { items: pushedItems }); -} +api.cancelGroupUsersSubscription = cancelGroupUsersSubscription; -function _dateDiff (earlyDate, lateDate) { - if (!earlyDate || !lateDate || moment(lateDate).isBefore(earlyDate)) return 0; +api.cancelGroupSubscriptionForUser = cancelGroupSubscriptionForUser; - return moment(lateDate).diff(earlyDate, 'months', true); -} +api.createSubscription = createSubscription; -/** - * Add a subscription to members of a group - * - * @param group The Group Model that is subscribed to a group plan - * - * @return undefined - */ -api.addSubscriptionToGroupUsers = async function addSubscriptionToGroupUsers (group) { - let members; - if (group.type === 'guild') { - members = await User.find({guilds: group._id}).select('_id purchased items auth profile.name notifications').exec(); - } else { - members = await User.find({'party._id': group._id}).select('_id purchased items auth profile.name notifications').exec(); - } +api.cancelSubscription = cancelSubscription; - let promises = members.map((member) => { - return this.addSubToGroupUser(member, group); - }); - - await Promise.all(promises); -}; - -/** - * Add a subscription to a new member of a group - * - * @param member The new member of the group - * - * @return undefined - */ -api.addSubToGroupUser = async function addSubToGroupUser (member, group) { - // These EMAIL_TEMPLATE constants are used to pass strings into templates that are - // stored externally and so their values must not be changed. - const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_GOOGLE = 'Google_subscription'; - const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_IOS = 'iOS_subscription'; - const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_GROUP_PLAN = 'group_plan_free_subscription'; - const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_LIFETIME_FREE = 'lifetime_free_subscription'; - const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NORMAL = 'normal_subscription'; - const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_UNKNOWN = 'unknown_type_of_subscription'; - const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NONE = 'no_subscription'; - - // When changing customerIdsToIgnore or paymentMethodsToIgnore, the code blocks below for - // the `group-member-join` email template will probably need to be changed. - let customerIdsToIgnore = [this.constants.GROUP_PLAN_CUSTOMER_ID, this.constants.UNLIMITED_CUSTOMER_ID]; - let paymentMethodsToIgnore = [this.constants.GOOGLE_PAYMENT_METHOD, this.constants.IOS_PAYMENT_METHOD]; - let previousSubscriptionType = EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NONE; - let leader = await User.findById(group.leader).exec(); - - let data = { - user: {}, - sub: { - key: 'group_plan_auto', - }, - customerId: 'group-plan', - paymentMethod: 'Group Plan', - headers: {}, - }; - - let plan = { - planId: 'group_plan_auto', - customerId: 'group-plan', - dateUpdated: new Date(), - gemsBought: 0, - paymentMethod: 'groupPlan', - extraMonths: 0, - dateTerminated: null, - lastBillingDate: null, - dateCreated: new Date(), - mysteryItems: [], - consecutive: { - trinkets: 0, - offset: 0, - gemCapExtra: 0, - }, - }; - - let memberPlan = member.purchased.plan; - if (member.isSubscribed()) { - let customerHasCancelledGroupPlan = memberPlan.customerId === this.constants.GROUP_PLAN_CUSTOMER_ID && !member.hasNotCancelled(); - let ignorePaymentPlan = paymentMethodsToIgnore.indexOf(memberPlan.paymentMethod) !== -1; - let ignoreCustomerId = customerIdsToIgnore.indexOf(memberPlan.customerId) !== -1; - - if (ignorePaymentPlan) { - txnEmail({email: TECH_ASSISTANCE_EMAIL}, 'admin-user-subscription-details', [ - {name: 'PROFILE_NAME', content: member.profile.name}, - {name: 'UUID', content: member._id}, - {name: 'EMAIL', content: getUserInfo(member, ['email']).email}, - {name: 'PAYMENT_METHOD', content: memberPlan.paymentMethod}, - {name: 'PURCHASED_PLAN', content: JSON.stringify(memberPlan)}, - {name: 'ACTION_NEEDED', content: 'User has joined group plan and has been told to cancel their subscription then email us. Ensure they do that then give them free sub.'}, - // TODO User won't get email instructions if they've opted out of all emails. See if we can make this email an exception and if not, report here whether they've opted out. - ]); - } - - if ((ignorePaymentPlan || ignoreCustomerId) && !customerHasCancelledGroupPlan) { - // member has been added to group plan but their subscription will not be changed - // automatically so they need a special message in the email - if (memberPlan.paymentMethod === this.constants.GOOGLE_PAYMENT_METHOD) { - previousSubscriptionType = EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_GOOGLE; - } else if (memberPlan.paymentMethod === this.constants.IOS_PAYMENT_METHOD) { - previousSubscriptionType = EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_IOS; - } else if (memberPlan.customerId === this.constants.UNLIMITED_CUSTOMER_ID) { - previousSubscriptionType = EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_LIFETIME_FREE; - } else if (memberPlan.customerId === this.constants.GROUP_PLAN_CUSTOMER_ID) { - previousSubscriptionType = EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_GROUP_PLAN; - } else { - // this triggers a generic message in the email template in case we forget - // to update this code for new special cases - previousSubscriptionType = EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_UNKNOWN; - } - txnEmail(member, 'group-member-join', [ - {name: 'LEADER', content: leader.profile.name}, - {name: 'GROUP_NAME', content: group.name}, - {name: 'PREVIOUS_SUBSCRIPTION_TYPE', content: previousSubscriptionType}, - ]); - return; - } - - if (member.hasNotCancelled()) { - await member.cancelSubscription({cancellationReason: JOINED_GROUP_PLAN}); - previousSubscriptionType = EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NORMAL; - } - - let today = new Date(); - plan = member.purchased.plan.toObject(); - let extraMonths = Number(plan.extraMonths); - if (plan.dateTerminated) extraMonths += _dateDiff(today, plan.dateTerminated); - - _(plan).merge({ // override with these values - planId: 'group_plan_auto', - customerId: 'group-plan', - dateUpdated: today, - paymentMethod: 'groupPlan', - extraMonths, - dateTerminated: null, - lastBillingDate: null, - owner: member._id, - }).defaults({ // allow non-override if a plan was previously used - gemsBought: 0, - dateCreated: today, - mysteryItems: [], - }).value(); - } - - // save unused hourglass and mystery items - plan.consecutive.trinkets = memberPlan.consecutive.trinkets; - plan.mysteryItems = memberPlan.mysteryItems; - - member.purchased.plan = plan; - member.items.mounts['Jackalope-RoyalPurple'] = true; - - data.user = member; - await this.createSubscription(data); - - txnEmail(data.user, 'group-member-join', [ - {name: 'LEADER', content: leader.profile.name}, - {name: 'GROUP_NAME', content: group.name}, - {name: 'PREVIOUS_SUBSCRIPTION_TYPE', content: previousSubscriptionType}, - ]); -}; - - -/** - * Cancels subscriptions of members of a group - * - * @param group The Group Model that is cancelling a group plan - * - * @return undefined - */ -api.cancelGroupUsersSubscription = async function cancelGroupUsersSubscription (group) { - let members; - if (group.type === 'guild') { - members = await User.find({guilds: group._id}).select('_id guilds purchased').exec(); - } else { - members = await User.find({'party._id': group._id}).select('_id guilds purchased').exec(); - } - - let promises = members.map((member) => { - return this.cancelGroupSubscriptionForUser(member, group); - }); - - await Promise.all(promises); -}; - -api.cancelGroupSubscriptionForUser = async function cancelGroupSubscriptionForUser (user, group, userWasRemoved = false) { - if (user.purchased.plan.customerId !== this.constants.GROUP_PLAN_CUSTOMER_ID) return; - - let userGroups = user.guilds.toObject(); - userGroups.push('party'); - - let index = userGroups.indexOf(group._id); - userGroups.splice(index, 1); - - let groupPlansQuery = { - type: {$in: ['guild', 'party']}, - // privacy: 'private', - _id: {$in: userGroups}, - 'purchased.plan.dateTerminated': null, - }; - - let groupFields = `${basicGroupFields} purchased`; - let userGroupPlans = await Group.find(groupPlansQuery).select(groupFields).exec(); - - if (userGroupPlans.length === 0) { - let leader = await User.findById(group.leader).exec(); - const email = userWasRemoved ? 'group-member-removed' : 'group-member-cancel'; - - txnEmail(user, email, [ - {name: 'LEADER', content: leader.profile.name}, - {name: 'GROUP_NAME', content: group.name}, - ]); - await this.cancelSubscription({user}); - } -}; - -api.createSubscription = async function createSubscription (data) { - let recipient = data.gift ? data.gift.member : data.user; - let block = shared.content.subscriptionBlocks[data.gift ? data.gift.subscription.key : data.sub.key]; - let months = Number(block.months); - let today = new Date(); - let plan; - let group; - let groupId; - let itemPurchased = 'Subscription'; - let purchaseType = 'subscribe'; - let emailType = 'subscription-begins'; - - // If we are buying a group subscription - if (data.groupId) { - let groupFields = basicGroupFields.concat(' purchased'); - group = await Group.getGroup({user: data.user, groupId: data.groupId, populateLeader: false, groupFields}); - - if (!group) { - throw new NotFound(shared.i18n.t('groupNotFound')); - } - - if (!group.leader === data.user._id) { - throw new NotAuthorized(shared.i18n.t('onlyGroupLeaderCanManageSubscription')); - } - - recipient = group; - itemPurchased = 'Group-Subscription'; - purchaseType = 'group-subscribe'; - emailType = 'group-subscription-begins'; - groupId = group._id; - recipient.purchased.plan.quantity = data.sub.quantity; - - await this.addSubscriptionToGroupUsers(group); - } - - plan = recipient.purchased.plan; - - if (data.gift) { - if (plan.customerId && !plan.dateTerminated) { // User has active plan - plan.extraMonths += months; - } else { - if (!recipient.isSubscribed() || !plan.dateUpdated) plan.dateUpdated = today; - if (moment(plan.dateTerminated).isAfter()) { - plan.dateTerminated = moment(plan.dateTerminated).add({months}).toDate(); - } else { - plan.dateTerminated = moment().add({months}).toDate(); - plan.dateCreated = today; - } - } - - if (!plan.customerId) plan.customerId = 'Gift'; // don't override existing customer, but all sub need a customerId - } else { - if (!plan.dateTerminated) plan.dateTerminated = today; - - Object.assign(plan, { // override plan with new values - planId: block.key, - customerId: data.customerId, - dateUpdated: today, - paymentMethod: data.paymentMethod, - extraMonths: Number(plan.extraMonths) + _dateDiff(today, plan.dateTerminated), - dateTerminated: null, - // Specify a lastBillingDate just for Amazon Payments - // Resetted every time the subscription restarts - lastBillingDate: data.paymentMethod === 'Amazon Payments' ? today : undefined, - nextPaymentProcessing: data.nextPaymentProcessing, - nextBillingDate: data.nextBillingDate, - additionalData: data.additionalData, - owner: data.user._id, - }); - - // allow non-override if a plan was previously used - if (!plan.gemsBought) plan.gemsBought = 0; - if (!plan.dateCreated) plan.dateCreated = today; - if (!plan.mysteryItems) plan.mysteryItems = []; - - if (data.subscriptionId) { - plan.subscriptionId = data.subscriptionId; - } - } - - // Block sub perks - let perks = Math.floor(months / 3); - if (perks) { - plan.consecutive.offset += months; - plan.consecutive.gemCapExtra += perks * 5; - if (plan.consecutive.gemCapExtra > 25) plan.consecutive.gemCapExtra = 25; - plan.consecutive.trinkets += perks; - } - - if (recipient !== group) { - recipient.items.pets['Jackalope-RoyalPurple'] = 5; - revealMysteryItems(recipient); - } - - // @TODO: Create a factory pattern for use cases - if (!data.gift && data.customerId !== this.constants.GROUP_PLAN_CUSTOMER_ID) { - txnEmail(data.user, emailType); - } - - analytics.trackPurchase({ - uuid: data.user._id, - groupId, - itemPurchased, - sku: `${data.paymentMethod.toLowerCase()}-subscription`, - purchaseType, - paymentMethod: data.paymentMethod, - quantity: 1, - gift: Boolean(data.gift), - purchaseValue: block.price, - headers: data.headers, - }); - - if (!group) data.user.purchased.txnCount++; - - if (data.gift) { - let byUserName = getUserInfo(data.user, ['name']).name; - - // generate the message in both languages, so both users can understand it - let languages = [data.user.preferences.language, data.gift.member.preferences.language]; - let senderMsg = shared.i18n.t('giftedSubscriptionFull', { - username: data.gift.member.profile.name, - sender: byUserName, - monthCount: shared.content.subscriptionBlocks[data.gift.subscription.key].months, - }, languages[0]); - senderMsg = `\`${senderMsg}\``; - - let receiverMsg = shared.i18n.t('giftedSubscriptionFull', { - username: data.gift.member.profile.name, - sender: byUserName, - monthCount: shared.content.subscriptionBlocks[data.gift.subscription.key].months, - }, languages[1]); - receiverMsg = `\`${receiverMsg}\``; - - if (data.gift.message) { - receiverMsg += ` ${data.gift.message}`; - senderMsg += ` ${data.gift.message}`; - } - - data.user.sendMessage(data.gift.member, { receiverMsg, senderMsg }); - - if (data.gift.member.preferences.emailNotifications.giftedSubscription !== false) { - txnEmail(data.gift.member, 'gifted-subscription', [ - {name: 'GIFTER', content: byUserName}, - {name: 'X_MONTHS_SUBSCRIPTION', content: months}, - ]); - } - - if (data.gift.member._id !== data.user._id) { // Only send push notifications if sending to a user other than yourself - if (data.gift.member.preferences.pushNotifications.giftedSubscription !== false) { - sendPushNotification(data.gift.member, - { - title: shared.i18n.t('giftedSubscription', languages[1]), - message: shared.i18n.t('giftedSubscriptionInfo', {months, name: byUserName}, languages[1]), - identifier: 'giftedSubscription', - payload: {replyTo: data.user._id}, - } - ); - } - } - } - - if (group) { - await group.save(); - } else { - await data.user.save(); - } - - if (data.gift) await data.gift.member.save(); - - slack.sendSubscriptionNotification({ - buyer: { - id: data.user._id, - name: data.user.profile.name, - email: getUserInfo(data.user, ['email']).email, - }, - recipient: data.gift ? { - id: data.gift.member._id, - name: data.gift.member.profile.name, - email: getUserInfo(data.gift.member, ['email']).email, - } : {}, - paymentMethod: data.paymentMethod, - months: group ? 1 : months, - groupId, - }); -}; - -// Cancels a subscription or group plan, setting termination to happen later -api.cancelSubscription = async function cancelSubscription (data) { - let plan; - let group; - let cancelType = 'unsubscribe'; - let groupId; - let emailType; - let emailMergeData = []; - let sendEmail = true; - - if (data.groupId) { - // cancelling a group plan - let groupFields = basicGroupFields.concat(' purchased'); - group = await Group.getGroup({user: data.user, groupId: data.groupId, populateLeader: false, groupFields}); - - if (!group) { - throw new NotFound(shared.i18n.t('groupNotFound')); - } - - let allowedManagers = [group.leader, group.purchased.plan.owner]; - - if (allowedManagers.indexOf(data.user._id) === -1) { - throw new NotAuthorized(shared.i18n.t('onlyGroupLeaderCanManageSubscription')); - } - plan = group.purchased.plan; - emailType = 'group-cancel-subscription'; - emailMergeData.push({name: 'GROUP_NAME', content: group.name}); - - await this.cancelGroupUsersSubscription(group); - } else { - // cancelling a user subscription - plan = data.user.purchased.plan; - emailType = 'cancel-subscription'; - // When cancelling because the user joined a group plan, no cancel-subscription email is sent - // because the group-member-join email says the subscription is cancelled. - if (data.cancellationReason && data.cancellationReason === JOINED_GROUP_PLAN) sendEmail = false; - } - - let now = moment(); - let defaultRemainingDays = 30; - - if (plan.customerId === this.constants.GROUP_PLAN_CUSTOMER_ID) { - defaultRemainingDays = 2; - sendEmail = false; // because group-member-cancel email has already been sent - } - - let remaining = data.nextBill ? moment(data.nextBill).diff(new Date(), 'days', true) : defaultRemainingDays; - if (plan.extraMonths < 0) plan.extraMonths = 0; - let extraDays = Math.ceil(30.5 * plan.extraMonths); - let nowStr = `${now.format('MM')}/${now.format('DD')}/${now.format('YYYY')}`; - let nowStrFormat = 'MM/DD/YYYY'; - - plan.dateTerminated = - moment(nowStr, nowStrFormat) - .add({days: remaining}) - .add({days: extraDays}) - .toDate(); - - plan.extraMonths = 0; // clear extra time. If they subscribe again, it'll be recalculated from p.dateTerminated - - if (group) { - await group.save(); - } else { - await data.user.save(); - } - - if (sendEmail) txnEmail(data.user, emailType, emailMergeData); - - if (group) { - cancelType = 'group-unsubscribe'; - groupId = group._id; - } - - analytics.track(cancelType, { - uuid: data.user._id, - groupId, - gaCategory: 'commerce', - gaLabel: data.paymentMethod, - paymentMethod: data.paymentMethod, - headers: data.headers, - }); -}; - -api.buyGems = async function buyGems (data) { - let amt = data.amount || 5; - amt = data.gift ? data.gift.gems.amount / 4 : amt; - - (data.gift ? data.gift.member : data.user).balance += amt; - data.user.purchased.txnCount++; - - if (!data.gift) txnEmail(data.user, 'donation'); - - analytics.trackPurchase({ - uuid: data.user._id, - itemPurchased: 'Gems', - sku: `${data.paymentMethod.toLowerCase()}-checkout`, - purchaseType: 'checkout', - paymentMethod: data.paymentMethod, - quantity: 1, - gift: Boolean(data.gift), - purchaseValue: amt, - headers: data.headers, - }); - - if (data.gift) { - let byUsername = getUserInfo(data.user, ['name']).name; - let gemAmount = data.gift.gems.amount || 20; - - // generate the message in both languages, so both users can understand it - let languages = [data.user.preferences.language, data.gift.member.preferences.language]; - let senderMsg = shared.i18n.t('giftedGemsFull', { - username: data.gift.member.profile.name, - sender: byUsername, - gemAmount, - }, languages[0]); - senderMsg = `\`${senderMsg}\``; - - let receiverMsg = shared.i18n.t('giftedGemsFull', { - username: data.gift.member.profile.name, - sender: byUsername, - gemAmount, - }, languages[1]); - receiverMsg = `\`${receiverMsg}\``; - - if (data.gift.message) { - receiverMsg += ` ${data.gift.message}`; - senderMsg += ` ${data.gift.message}`; - } - - data.user.sendMessage(data.gift.member, { receiverMsg, senderMsg }); - - if (data.gift.member.preferences.emailNotifications.giftedGems !== false) { - txnEmail(data.gift.member, 'gifted-gems', [ - {name: 'GIFTER', content: byUsername}, - {name: 'X_GEMS_GIFTED', content: gemAmount}, - ]); - } - - if (data.gift.member._id !== data.user._id) { // Only send push notifications if sending to a user other than yourself - if (data.gift.member.preferences.pushNotifications.giftedGems !== false) { - sendPushNotification( - data.gift.member, - { - title: shared.i18n.t('giftedGems', languages[1]), - message: shared.i18n.t('giftedGemsInfo', {amount: gemAmount, name: byUsername}, languages[1]), - identifier: 'giftedGems', - } - ); - } - } - - await data.gift.member.save(); - } - - await data.user.save(); -}; +api.buyGems = buyGems; module.exports = api; diff --git a/website/server/libs/payments/subscriptions.js b/website/server/libs/payments/subscriptions.js new file mode 100644 index 0000000000..43f7b18577 --- /dev/null +++ b/website/server/libs/payments/subscriptions.js @@ -0,0 +1,322 @@ +import _ from 'lodash'; +import moment from 'moment'; + +import analytics from '../analyticsService'; +import slack from '../slack'; +import { + getUserInfo, + sendTxn as txnEmail, +} from '../email'; +import { + model as Group, + basicFields as basicGroupFields, +} from '../../models/group'; +import { + NotAuthorized, + NotFound, +} from '../errors'; +import shared from '../../../common'; +import { sendNotification as sendPushNotification } from '../pushNotifications'; + +// @TODO: Abstract to shared/constant +const JOINED_GROUP_PLAN = 'joined group plan'; + +function revealMysteryItems (user) { + const pushedItems = []; + + _.each(shared.content.gear.flat, function findMysteryItems (item) { + if ( + item.klass === 'mystery' && + moment().isAfter(shared.content.mystery[item.mystery].start) && + moment().isBefore(shared.content.mystery[item.mystery].end) && + !user.items.gear.owned[item.key] && + user.purchased.plan.mysteryItems.indexOf(item.key) === -1 + ) { + user.purchased.plan.mysteryItems.push(item.key); + pushedItems.push(item.key); + } + }); + + user.addNotification('NEW_MYSTERY_ITEMS', { items: pushedItems }); +} + +// @TODO: Abstract to payment helper +function _dateDiff (earlyDate, lateDate) { + if (!earlyDate || !lateDate || moment(lateDate).isBefore(earlyDate)) return 0; + + return moment(lateDate).diff(earlyDate, 'months', true); +} + +async function createSubscription (data) { + let recipient = data.gift ? data.gift.member : data.user; + let block = shared.content.subscriptionBlocks[data.gift ? data.gift.subscription.key : data.sub.key]; + let months = Number(block.months); + let today = new Date(); + let plan; + let group; + let groupId; + let itemPurchased = 'Subscription'; + let purchaseType = 'subscribe'; + let emailType = 'subscription-begins'; + + // If we are buying a group subscription + if (data.groupId) { + let groupFields = basicGroupFields.concat(' purchased'); + group = await Group.getGroup({user: data.user, groupId: data.groupId, populateLeader: false, groupFields}); + + if (!group) { + throw new NotFound(shared.i18n.t('groupNotFound')); + } + + if (!group.leader === data.user._id) { + throw new NotAuthorized(shared.i18n.t('onlyGroupLeaderCanManageSubscription')); + } + + recipient = group; + itemPurchased = 'Group-Subscription'; + purchaseType = 'group-subscribe'; + emailType = 'group-subscription-begins'; + groupId = group._id; + recipient.purchased.plan.quantity = data.sub.quantity; + + await this.addSubscriptionToGroupUsers(group); + } + + plan = recipient.purchased.plan; + + if (data.gift) { + if (plan.customerId && !plan.dateTerminated) { // User has active plan + plan.extraMonths += months; + } else { + if (!recipient.isSubscribed() || !plan.dateUpdated) plan.dateUpdated = today; + if (moment(plan.dateTerminated).isAfter()) { + plan.dateTerminated = moment(plan.dateTerminated).add({months}).toDate(); + } else { + plan.dateTerminated = moment().add({months}).toDate(); + plan.dateCreated = today; + } + } + + if (!plan.customerId) plan.customerId = 'Gift'; // don't override existing customer, but all sub need a customerId + } else { + if (!plan.dateTerminated) plan.dateTerminated = today; + + Object.assign(plan, { // override plan with new values + planId: block.key, + customerId: data.customerId, + dateUpdated: today, + paymentMethod: data.paymentMethod, + extraMonths: Number(plan.extraMonths) + _dateDiff(today, plan.dateTerminated), + dateTerminated: null, + // Specify a lastBillingDate just for Amazon Payments + // Resetted every time the subscription restarts + lastBillingDate: data.paymentMethod === 'Amazon Payments' ? today : undefined, + nextPaymentProcessing: data.nextPaymentProcessing, + nextBillingDate: data.nextBillingDate, + additionalData: data.additionalData, + owner: data.user._id, + }); + + // allow non-override if a plan was previously used + if (!plan.gemsBought) plan.gemsBought = 0; + if (!plan.dateCreated) plan.dateCreated = today; + if (!plan.mysteryItems) plan.mysteryItems = []; + + if (data.subscriptionId) { + plan.subscriptionId = data.subscriptionId; + } + } + + // Block sub perks + let perks = Math.floor(months / 3); + if (perks) { + plan.consecutive.offset += months; + plan.consecutive.gemCapExtra += perks * 5; + if (plan.consecutive.gemCapExtra > 25) plan.consecutive.gemCapExtra = 25; + plan.consecutive.trinkets += perks; + } + + if (recipient !== group) { + recipient.items.pets['Jackalope-RoyalPurple'] = 5; + revealMysteryItems(recipient); + } + + // @TODO: Create a factory pattern for use cases + if (!data.gift && data.customerId !== this.constants.GROUP_PLAN_CUSTOMER_ID) { + txnEmail(data.user, emailType); + } + + analytics.trackPurchase({ + uuid: data.user._id, + groupId, + itemPurchased, + sku: `${data.paymentMethod.toLowerCase()}-subscription`, + purchaseType, + paymentMethod: data.paymentMethod, + quantity: 1, + gift: Boolean(data.gift), + purchaseValue: block.price, + headers: data.headers, + }); + + if (!group) data.user.purchased.txnCount++; + + if (data.gift) { + let byUserName = getUserInfo(data.user, ['name']).name; + + // generate the message in both languages, so both users can understand it + let languages = [data.user.preferences.language, data.gift.member.preferences.language]; + let senderMsg = shared.i18n.t('giftedSubscriptionFull', { + username: data.gift.member.profile.name, + sender: byUserName, + monthCount: shared.content.subscriptionBlocks[data.gift.subscription.key].months, + }, languages[0]); + senderMsg = `\`${senderMsg}\``; + + let receiverMsg = shared.i18n.t('giftedSubscriptionFull', { + username: data.gift.member.profile.name, + sender: byUserName, + monthCount: shared.content.subscriptionBlocks[data.gift.subscription.key].months, + }, languages[1]); + receiverMsg = `\`${receiverMsg}\``; + + if (data.gift.message) { + receiverMsg += ` ${data.gift.message}`; + senderMsg += ` ${data.gift.message}`; + } + + data.user.sendMessage(data.gift.member, { receiverMsg, senderMsg }); + + if (data.gift.member.preferences.emailNotifications.giftedSubscription !== false) { + txnEmail(data.gift.member, 'gifted-subscription', [ + {name: 'GIFTER', content: byUserName}, + {name: 'X_MONTHS_SUBSCRIPTION', content: months}, + ]); + } + + if (data.gift.member._id !== data.user._id) { // Only send push notifications if sending to a user other than yourself + if (data.gift.member.preferences.pushNotifications.giftedSubscription !== false) { + sendPushNotification(data.gift.member, + { + title: shared.i18n.t('giftedSubscription', languages[1]), + message: shared.i18n.t('giftedSubscriptionInfo', {months, name: byUserName}, languages[1]), + identifier: 'giftedSubscription', + payload: {replyTo: data.user._id}, + } + ); + } + } + } + + if (group) { + await group.save(); + } else { + await data.user.save(); + } + + if (data.gift) await data.gift.member.save(); + + slack.sendSubscriptionNotification({ + buyer: { + id: data.user._id, + name: data.user.profile.name, + email: getUserInfo(data.user, ['email']).email, + }, + recipient: data.gift ? { + id: data.gift.member._id, + name: data.gift.member.profile.name, + email: getUserInfo(data.gift.member, ['email']).email, + } : {}, + paymentMethod: data.paymentMethod, + months: group ? 1 : months, + groupId, + }); +} + +// Cancels a subscription or group plan, setting termination to happen later +async function cancelSubscription (data) { + let plan; + let group; + let cancelType = 'unsubscribe'; + let groupId; + let emailType; + let emailMergeData = []; + let sendEmail = true; + + if (data.groupId) { + // cancelling a group plan + let groupFields = basicGroupFields.concat(' purchased'); + group = await Group.getGroup({user: data.user, groupId: data.groupId, populateLeader: false, groupFields}); + + if (!group) { + throw new NotFound(shared.i18n.t('groupNotFound')); + } + + let allowedManagers = [group.leader, group.purchased.plan.owner]; + + if (allowedManagers.indexOf(data.user._id) === -1) { + throw new NotAuthorized(shared.i18n.t('onlyGroupLeaderCanManageSubscription')); + } + plan = group.purchased.plan; + emailType = 'group-cancel-subscription'; + emailMergeData.push({name: 'GROUP_NAME', content: group.name}); + + await this.cancelGroupUsersSubscription(group); + } else { + // cancelling a user subscription + plan = data.user.purchased.plan; + emailType = 'cancel-subscription'; + // When cancelling because the user joined a group plan, no cancel-subscription email is sent + // because the group-member-join email says the subscription is cancelled. + if (data.cancellationReason && data.cancellationReason === JOINED_GROUP_PLAN) sendEmail = false; + } + + let now = moment(); + let defaultRemainingDays = 30; + + if (plan.customerId === this.constants.GROUP_PLAN_CUSTOMER_ID) { + defaultRemainingDays = 2; + sendEmail = false; // because group-member-cancel email has already been sent + } + + let remaining = data.nextBill ? moment(data.nextBill).diff(new Date(), 'days', true) : defaultRemainingDays; + if (plan.extraMonths < 0) plan.extraMonths = 0; + let extraDays = Math.ceil(30.5 * plan.extraMonths); + let nowStr = `${now.format('MM')}/${now.format('DD')}/${now.format('YYYY')}`; + let nowStrFormat = 'MM/DD/YYYY'; + + plan.dateTerminated = + moment(nowStr, nowStrFormat) + .add({days: remaining}) + .add({days: extraDays}) + .toDate(); + + plan.extraMonths = 0; // clear extra time. If they subscribe again, it'll be recalculated from p.dateTerminated + + if (group) { + await group.save(); + } else { + await data.user.save(); + } + + if (sendEmail) txnEmail(data.user, emailType, emailMergeData); + + if (group) { + cancelType = 'group-unsubscribe'; + groupId = group._id; + } + + analytics.track(cancelType, { + uuid: data.user._id, + groupId, + gaCategory: 'commerce', + gaLabel: data.paymentMethod, + paymentMethod: data.paymentMethod, + headers: data.headers, + }); +} + +module.exports = { + createSubscription, + cancelSubscription, +}; diff --git a/website/server/middlewares/redirects.js b/website/server/middlewares/redirects.js index 9bc40cb439..0de427c2e9 100644 --- a/website/server/middlewares/redirects.js +++ b/website/server/middlewares/redirects.js @@ -1,11 +1,11 @@ import nconf from 'nconf'; +import url from 'url'; const IS_PROD = nconf.get('IS_PROD'); const IGNORE_REDIRECT = nconf.get('IGNORE_REDIRECT') === 'true'; const BASE_URL = nconf.get('BASE_URL'); -let baseUrlSplit = BASE_URL.split('//'); -const BASE_URL_HOST = baseUrlSplit[1]; +const BASE_URL_HOST = url.parse(BASE_URL).hostname; function isHTTP (req) { return ( // eslint-disable-line no-extra-parens diff --git a/website/server/models/group.js b/website/server/models/group.js index ffc72778ce..5987d0bd95 100644 --- a/website/server/models/group.js +++ b/website/server/models/group.js @@ -437,7 +437,11 @@ schema.statics.toJSONCleanChat = async function groupToJSONCleanChat (group, use // Convert to timestamps because Android expects it toJSON.chat.forEach(chat => { - chat.timestamp = chat.timestamp ? chat.timestamp.getTime() : new Date().getTime(); + // old chats are saved with a numeric timestamp + // new chats use `Date` which then has to be converted to the numeric timestamp + if (chat.timestamp && chat.timestamp.getTime) { + chat.timestamp = chat.timestamp.getTime(); + } }); return toJSON; diff --git a/website/server/models/user/hooks.js b/website/server/models/user/hooks.js index d2ce661b06..f4b2b6341d 100644 --- a/website/server/models/user/hooks.js +++ b/website/server/models/user/hooks.js @@ -9,7 +9,6 @@ import { import { userActivityWebhook, } from '../../libs/webhook'; - import schema from './schema'; schema.plugin(baseModel, { @@ -18,6 +17,11 @@ schema.plugin(baseModel, { private: ['auth.local.hashed_password', 'auth.local.passwordHashMethod', 'auth.local.salt', '_cronSignature', '_ABtests'], toJSONTransform: function userToJSON (plainObj, originalDoc) { plainObj._tmp = originalDoc._tmp; // be sure to send down drop notifs + + if (plainObj._tmp && plainObj._tmp.leveledUp) { + delete plainObj._tmp.leveledUp; + } + delete plainObj.filters; if (originalDoc.notifications) { @@ -247,25 +251,16 @@ schema.pre('save', true, function preSaveUser (next, done) { // Filter notifications, remove unvalid and not necessary, handle the ones that have special requirements if ( // Make sure all the data is loaded this.isDirectSelected('notifications') && - this.isDirectSelected('webhooks') && this.isDirectSelected('stats') && this.isDirectSelected('flags') && this.isDirectSelected('preferences') ) { - const lvlUpNotifications = []; const unallocatedPointsNotifications = []; this.notifications = this.notifications.filter(notification => { // Remove corrupt notifications if (!notification || !notification.type) return false; - // Remove level up notifications, as they're only used to send webhooks - // Sometimes there can be more than 1 notification - if (notification && notification.type === 'LEVELED_UP') { - lvlUpNotifications.push(notification); - return false; - } - // Remove all unsallocated stats points if (notification && notification.type === 'UNALLOCATED_STATS_POINTS') { unallocatedPointsNotifications.push(notification); @@ -275,25 +270,6 @@ schema.pre('save', true, function preSaveUser (next, done) { return true; }); - - // Send lvl up notifications - if (lvlUpNotifications.length > 0) { - const firstLvlNotification = lvlUpNotifications[0]; - const lastLvlNotification = lvlUpNotifications[lvlUpNotifications.length - 1]; - - const initialLvl = firstLvlNotification.data.initialLvl; - const finalLvl = lastLvlNotification.data.newLvl; - - // Delayed so we don't block the user saving - setTimeout(() => { - userActivityWebhook.send(this, { - type: 'leveledUp', - initialLvl, - finalLvl, - }); - }, 50); - } - // Handle unallocated stats points notifications (keep only one and up to date) const pointsToAllocate = this.stats.points; const classNotEnabled = !this.flags.classSelected || this.preferences.disableClasses; @@ -349,3 +325,23 @@ schema.pre('save', true, function preSaveUser (next, done) { schema.pre('update', function preUpdateUser () { this.update({}, {$inc: {_v: 1}}); }); + +schema.post('save', function postSaveUser () { + // Send a webhook notification when the user has leveled up + if (this._tmp && this._tmp.leveledUp && this._tmp.leveledUp.length > 0) { + const lvlUpNotifications = this._tmp.leveledUp; + const firstLvlNotification = lvlUpNotifications[0]; + const lastLvlNotification = lvlUpNotifications[lvlUpNotifications.length - 1]; + + const initialLvl = firstLvlNotification.initialLvl; + const finalLvl = lastLvlNotification.newLvl; + + userActivityWebhook.send(this, { + type: 'leveledUp', + initialLvl, + finalLvl, + }); + + this._tmp.leveledUp = []; + } +}); diff --git a/website/server/models/user/schema.js b/website/server/models/user/schema.js index 98e4f7331d..d1ac96b7f2 100644 --- a/website/server/models/user/schema.js +++ b/website/server/models/user/schema.js @@ -597,6 +597,7 @@ let schema = new Schema({ type: {type: String}, }], }, { + skipVersioning: { notifications: true }, strict: true, minimize: false, // So empty objects are returned });